This is the list of changes made after the release of deal.II version 5.0. It is subdivided into changes made to the three sub-libraries base, lac, and deal.II, as well as changes to the general infrastructure, documentation, etc.
All entries are signed with the names of the author. Regular contributor's names are abbreviated by WB (Wolfgang Bangerth), GK (Guido Kanschat), RH (Ralf Hartmann).
Following are a few modifications to the library that unfortunately are incompatible with previous versions of the library, but which we deem necessary for the future maintainability of the library. Unfortunately, some of these changes will require modifications to application programs. We apologize for the inconvenience this causes.
Changed: The call MGTransferBlock
::build_matrices
and to the same function in
derived classes receaves a DoFHandler
as
an additional argument. It is needed to prebuild the transfer
between vectors and multigrid vectors, since the loop over all cells
is to slow.
(GK 2004/08/27)
Changed: Previously, parallel PETSc matrices only took the sizes of the
matrix and the number of rows to be stored locally as arguments. They
chose the partitioning of columns to be the same as that for the
rows. However, this does not work for non-quadratic parallel matrices,
and leads to very hard to find errors. Therefore, all constructors and
reinit functions of the parallel sparse matrix classes now take an
additional argument indicating the partitioning of columns of the matrix.
(WB 2004/06/02)
New: Support of shared libraries under Cygwin / Windows systems. Shared
libraries are used as default. To use, make sure the library path is included
in your PATH
environment variable.
(Ralf B. Schulz, 2004/12/20)
Fixed: Examples do not use obsolete classes
QGaussN
anymore.
(GK 2004/12/18)
Fixed: Configuration scripts were changed to allow any file suffix for
shared and static libraries to allow in the future the creation of dlls
under cygwin.
(Ralf B. Schulz, 2004/12/17)
New: Configuration now detects the Intel Fortran compiler and can set
compilation flags accordingly.
(WB 2004/11/04)
Extended: deal.II 5.0.0 didn't work with the PETSc release 2.2.1 (which
came out after we released version 5.0.0). This should now be fixed:
deal.II can be linked against both PETSc 2.2.0 and 2.2.1.
(WB 2004/10/07)
Improved: The documentation generated by Doxygen now states the header
file defining a class. Furthermore, all deal.II
exceptions are listed as classes and will soon be found in the module
Exceptions.
(GK 2004/09/16)
New: configuration option --with-umfpack for using the
UMFPack version and enabling the class SparseDirectUMFPACK
, both included by
Wolfgang.
Deal.II comes with its own copy of the UMFPACK
library, courtesy of its author. In order to use, follow the steps
listed here. Note that UMFPACK
comes with its own license; to use UMFPACK, please read the ReadMe file and make sure that you
agree with its license.
(GK 2004/08/25)
Fixed: None of the formulas in the step-8 tutorial program web
page were visible. This is now fixed.
(WB 2004/06/29)
New: The MultithreadInfo
class now also detects multiple
processors on Mac OS X.
(Helmut Müller 2004/11/29)
New: The
TableHandler::write_tex
now accepts the additional boolean
argument with_header
which is set to
true by default and tells the function whether to add the latex
header and footer (i.e. the \documentclass{...},
\begin{document} and \end{document} stuff) to the table.
In addition to this, there are two new members in the above class:
TableHandler::tex_set_table_caption
and
TableHandler::tex_set_table_label
to
add a caption and a label to the tex generated table.
(Luca Heltai 2004/10/29)
Fixed: DataOutBase<2,3>::write_tecplot
sometimes did not write the variable name z
when
only outputting faces of cells. This is now fixed.
(RH 2004/10/29)
New: a class template VectorSlice
allows access to consecutive portions of a vector.
(GK 2004/09/16)
New: The classes TableIndices<N>
and Table<N,T>
are now implemented also
for N=7
. The Table<N,T>
class represents an
N
-dimensional array and might replace the
N-times-nested-use of the std::vector
class.
(RH 2004/08/13)
New: Class TableIndices
now has
operators that check for equality and inequality of objects.
(WB 2004/07/28)
New: A class PointerComparison
for comparing
pointers that may or may not be of the same type.
(WB 2004/06/22)
Removed: The ParameterHandler
class contained a remnant from
back in 1997 when it was modeled after a similar class in DiffPack: it
had a status
flag that one could obtain via the ok
function. It was never really used for
anything, and has thus finally been removed. The ok
is consequently gone as well.
(WB 2004/06/06)
New: An object of the new ConditionalOStream
class allows to print
to an output stream depending on a condition, which is active
or not. This is particular useful for parallel computations
when only one process should print to standard output, while in all
other processes we simply want output suppressed.
(RH 2004/05/26)
Fixed: PETSc had changed some of its interfaces in version 2.2.1, which
prevented deal.II from working with it (it couldn't be compiled at
all). We have added checks that make sure that it can now again be
compiled with PETSc versions 2.1.6, 2.2.0, and 2.2.1.
(WB 2004/10/07)
New: A class PreconditionLU
which
provides a wrapper to the complete LU decomposition
preconditioner of PETSc. Furthermore a class
SolverPreOnly
was implemented. It
is a wrapper for the PETSc solver type KSPPREONLY, which
only applies the preconditioner. In conjunction with
PreconditionLU
this provides a
simple direct solver, which could be used for small to medium
sized problems on a single processor machine.
(Oliver Kayser-Herold 2004/07/27)
Improved: VectorTools::point_difference
used to use an algorithm to find the cell the given point is in that
was linear in the total number of active cells. It has been rewritten
to use
GridTools::find_active_cell_around_point
which is only logarithmic in its complexity.
(WB 2004/07/07)
Fixed: Block matrix iterators could get into all kind of interesting
(and invalid) states when some of the blocks had empty rows. In this
common case, we would frequently skip elements when looping over the
elements of a block matrix. These cases should now be fixed.
(WB 2004/07/07)
Removed: Block matrix iterators used to have a function
it->index()
that returned something like
the position within a row. However, this was fragile, and has been
removed. If you want an ordering of elements within a row, use the
operator <
to compare iterators.
(WB 2004/07/07)
Improved: The PETScWrappers::SolverGMRES::AdditionalData
class now takes an additional flag indicating the use of left
or right preconditioning.
(RH 2004/06/24)
Improved: The SparseDirectMA27
class can now
handle float as well as double input matrices and vectors.
(WB 2004/06/23)
Fixed: The SparseMatrix::vmult
-type functions
vmult
, Tvmult
, vmult_add
, and
Tvmult_add
take two different template arguments for input
and output vectors, but were only instantiated in case the arguments
were the same, and could also not be compiled if they weren't. Both
problems are now fixed.
(WB 2004/06/22)
Improved: The CompressedSparsityPattern
class used one of the C++ standard containers to store the column
indices of nonzero entries in a sparse matrix. This proved to be
inefficient since it requires the allocation of 20 bytes each time an
element was added, which for large matrices can be millions of
times. The new storage format uses a more compact data structure, and a
cache that requires memory allocation only every 8 additions, on
average. This should significantly reduce the total amount of memory
required as well as memory fragmentation. It also cuts run-time for
element addition by more than half.
(WB 2004/06/21)
Fixed: CompressedSparsityPattern::max_entries_per_row()
ignored the first row and thus sometimes returned a value that was too
low. This is now fixed.
(WB 2004/06/21)
Fixed: BlockSparseMatrix::clear()
did not
do what it was supposed to do: it emptied the individual blocks and
removed them, but it still kept the number of blocks
unchanged. Subsequent accesses to these blocks, or to their information
yielded segmentation faults.
(WB 2004/06/02)
New: Block matrices and vectors have been factored into abstract base
classes and concrete implementation classes. While the previous classes
still exist in all their functionality, this allowed us to now also
have block matrices and vectors for PETSc sequential and parallel
objects.
(WB 2004/06/02)
New: Vector and block vector classes had a commented out template
constructor constructing such a vector from a vector object with a
different template argument, for example constructing a Vector<double>
from a Vector<float>
. This constructor has been
commented out a long time ago due to a compiler bug in which the
explicit
keyword on template constructors was ignored, a
fact that is dangerous since it may lead the compiler to generate
temporaries without our ado. This bug is now detected during
configuration time of the library, and these constructors are available
whenever the compiler does not contain this bug.
(WB 2004/06/02)
New: In analogy to the PETSc vector classes, the PETSc matrix classes
now also have member functions local_range
,
in_local_range
, and local_size
.
(WB 2004/06/02)
New: Parallel PETSc matrix and vector classes now have member functions
get_mpi_communicator
that returns the MPI
communicator object these objects operate on.
(WB 2004/06/02)
Changed: The PETSc linear solver classes now take a constant, rather
than a nonconstant reference to the MPI communicator to be used. This
prevents some unnecessary compiler problems in conjunction with the new
get_mpi_communicator
function.
(WB 2004/06/02)
New: Parallel and sequential PETSc sparse matrix classes can now be
initialized (via either constructor or reinit functions) with a
compressed sparsity pattern object, allowing for more efficient
preallocation of nonzero entries.
(WB 2004/06/02)
Improved: GeometryInfo
has two new
fields unit_normal_direction
and
unit_normal_orientation
,
indicating the direction of the unit normal vector for each
face of the reference cell.
(GK 2004/12/18)
Fixed: In rare cases of 3d meshes with a certain topology,
we triggered an assertion in TriaAccessor
::neighbor_child_on_subface
. It turns out
that the code actually computes the correct answer, but the
assertion had a condition that doesn't always have to be
satisfied. This bogus assertion is now fixed.
(WB 2004/11/12)
Fixed: The GridGenerator
::cylinder
function in 3d assigned the
wrong boundary value to the top and bottom part of the cylinder
if the half length of the cylinder was not equal to 1. This is
now fixed.
(Ralf Schulz 2004/10/27)
Improved: Now the FE_Q
class supports hanging node
constraints for elements of arbitrary polynomial degree also in
3D.
(Oliver Kayser-Herold 2004/10/21)
Fixed: The StraightBoundary<3>
::get_new_point_on_quad
did not work on general grids. This is now fixed.
(RH 2004/10/15)
Improved: The CylinderBoundary
represented the hull of a circular tubes along the x-axis. It
is now extended to allow for circular tubes also along the y-
and z-axis.
(RH 2004/10/15)
Fixed: The ConstraintMatrix
class had some
algorithms that were linear in the number of constraints. Since these
functions had to be called for each constraint, this resulted in a
quadratic behavior. To make things worse, these algorithms traversed
large memory blocks leading to a vast number of cache misses which made
them really slow. This is now fixed: the algorithm is O(1) and should
only access single elements in memory, and one 3d testcase is now a
full 5 per cent faster on about 10 minutes runtime.
(WB 2004/10/04)
New: The GridOut
::write_gnuplot
function now supports
curved boundaries also for dim==3
.
(RH 2004/09/20)
Fixed: The documentation of the Triangulation
class mentioned that no
places in the library use or touch the user pointers. That is
wrong, the SolutionTransfer
class
actually does. This is now properly documented.
(WB 2004/09/15)
Fixed: The DerivativeApproximation::approximate_second_derivative
function produced wrong results ("not a number", or an exception instead of
"zero") if the field it was given was constant. This is now fixed.
(WB 2004/08/05)
New: The MatrixTools::apply_boundary_values
that works on block matrices and vectors is now templatized over the
number type, i.e. it also works for float matrices and vectors.
(WB 2004/06/22)
New: The new FEValuesBase::get_cell
function returns the current cell, i.e. the latest cell the
FEValues
object was reinited with.
(RH 2004/06/22)
Changed: The MatrixTools::local_apply_boundary_values
function
used to set the diagonal entries of boundary nodes to one. This is a
really bad choice, and the algorithm we use now is much better. There
are still a few problems when using this function for matrices that
will be solved as a Schur complement; there is nothing we can do in
that function in these cases, since we are lacking fundamental pieces
of information, but the cases where this applies and the strategies to
work with this problem anyway are now well documented in the
documentation of the MatrixTools
class.
(WB 2004/06/07)
Fixed: The GridGenerator::cylinder_shell
function generated cells were all inside-out, i.e. had negative
Jacobians. In usual finite element computations this simply leads to
all components of the linear system being negated, so it is not
harmful. It is fixed now anyway.
(WB 2004/06/07)