This is the list of changes made after the release of deal.II version 5.1. 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 way boundary constraints were handled in the
step-17 tutorial program was conceptually flawed. We tried to
eliminate boundary nodes locally on the cell level, and hanging
node constraints subsequently when transferring into the global
matrix. However, this doesn't work in general: the elimination
of hanging node constraints could re-populate rows and columns
that had already been vacated during boundary node
elimination. At the end of a long thought process, we came to
the conclusion that it is impossible to revert the traditional
order of operations: first eliminate all hanging node
constraints, then eliminate all boundary nodes. This leads to a
situation where the MatrixTools::local_apply_boundary_values
function is not very useful any more, except for the special
case where there are no hanging nodes. The step-17 example
program has therefore been changed to use the MatrixTools::apply_boundary_values
function again, though hanging node elimination still happens
during transfer into the global matrix.
(WB 2005/05/05)
Changed: The class MGCoarseGridLACIteration
lost two template
arguments. Since the matrix and preconditioner are now stored
in form of PointerMatrix
objects,
handling of the class is much simpler, in particular when
exchanging preconditioners.
(GK 2005/05/03)
Changed: The template argument of BlockMatrixArray
was changed to
number, equal to the same argument of the used BlockVector
. Furthermore, its constructor
requires an additional argument of type VectorMemory<Vector<number> >
providing space for auxiliary vectors. Since the entries are
now of type PointerMatrixBase
, even
matrices with blocks of different types can be constructed.
(GK 2005/03/21)
Changed: The GeometryInfo
::vertices_adjacent_to_line
function has
been renamed to GeometryInfo
::line_to_cell_vertices
to be named
analogous to the face_to_cell_vertices
, face_to_cell_lines
and child_to_cell_coordinates
functions.
(RH 2005/03/14)
Changed: the file multigrid/mg_dof_tools.h was renamed
to multigrid/mg_tools.h in order to match the name of
the class contained.
(GK 2005/03/09)
Changed: DoFTools
::make_flux_sparsity_pattern
, MGTools
::make_flux_sparsity_pattern
and similar
functions in these classes do not receive arguments of type
FullMatrix<double>
anymore. Instead, they get a Table<2,DoFTools::Coupling>
, which
contains more meaningful enums.
(GK 2005/03/09)
Changed: Multigrid
::Multigrid
receives an argument
determining the type of multigrid cycle instead of the minimum
and maximum levels. The latter were rarely used anyway and can
be modified by set_minlevel()
and
set_maxlevel()
(GK 2005/03/09)
New:
The step-19 tutorial demonstrates handling of parameters from a
parameter file, as well as some simple techniques for merging output
from parallel computations.
(WB 2005/09/09)
Fixed: The linking of PETSc libraries into the static
libpetsc.g.a and libpetsc.a libraries
(located in deal.II/lib) has now been fixed.
(RH 2005/08/26)
New:
The step-18 example program shows how to solve a quasi-static elasticity
problem with moving meshes, and this all in parallel.
(WB 2005/08/11)
Changed: The files
deal.II/include/grid/geometry_info.h and
deal.II/source/grid/geometry_info.cc have been moved
to base/include/base and base/source,
respectively. A redirection header file has been left in the
old location for compatibility.
(GK, 2005/07/19)
Changed: Cygwin has problems linking against deal.II DLLs if you
link against more than one dimension dependent library. The linker
might issue error messages about multiple defined symbols. This is now
detected, and the linker is forced to ignore these errors. However, if
you accidentally defined symbols twice you might have a hard time
debugging now... In this case remove the -Xlinker
--allow-multiple-definition
flag from Make.global_options.
(Ralf B. Schulz, 2005/07/13)
Changed: Under Cygwin, linking against LAPACK and UMFPACK did
not work. This is now fixed in the Makefiles. Changes only
affect Cygwin.
(Ralf B. Schulz, 2005/07/02)
New: The latest version of UMFPACK, version 4.4, has been imported.
(WB, 2005/06/30)
Fixed: The documentation pages did not contain information
about the Threads::spawn
functions. This is now fixed.
(WB, 2005/05/12)
Fixed: The step-17 example program had a stupid mistake in that it
initializes the pcout
variable with an uninitialized value
of mpi_communicator
. While this seems to have worked for
some older MPI implementations, this is no longer the case on some
other systems. It is now fixed.
(WB, 2005/04/18)
New: If there are references to other example programs in any of the
step-XX programs, then they will now show up as crosslinks in the HTML
version for simpler navigation of the tutorial.
(WB, 2005/04/04)
New: The configuration script can now enable special optimizations for
x86-like processors if called with the --with-cpu=...
option.
This can decrease computation time by up to 30% on certain systems.
The configuration flag has already existed for PowerPC64 processors, but
was not documented. Documentation has been added.
(Ralf B. Schulz, 2005/03/10)
Fixed: When compiling shared libraries on CygWin systems, warnings
concerning the -fPIC
option were issued by the compiler.
This is now fixed.
Also, configure now issues a message at the end that you should include
the DLL-path in your .bash_profile
file on these systems.
(Ralf B. Schulz, 2005/03/10)
Fixed: On certain systems running CygWin, a call to socket functions
like gethostname()
could cause deal.II to hang. The reason
seems to be that the call disables long double computations which
revert to just double precision. This then leads to an endless loop in
computing weights for quadrature points because the convergence
criterion cannot be reached with simple double precision. This is now
fixed by disabling the call to gethostname()
on these
systems. A new preprocessor variable, DEAL_II_BROKEN_SOCKETS
has been added to base/config.h
which is defined on
affected systems.
(Ralf B. Schulz, WB, 2005/03/02)
Fixed: The step-16 example program wasn't listed in the
navigation bar of the tutorial section, although it was in the
table of contents. This is fixed now.
(WB, 2005/02/09)
New: Class PathSearch
allows to find
a file in a sequence of directories and by appending suffixes. The class
generates the complete file name including directory prefix and suffix
such that it can be used for subsequently opening the file.
(GK, 2005/09/14)
Extended: The ParameterHandler
class now does a much better
job generating output in the print_parameters()
function if
parameters have documentation strings attached to them. See the step-19
example program output for this.
(WB, 2005/09/12)
New: There is now a namespace Utilities
that contains
functions that are not particularly specific to finite element codes,
but are needed in various contexts of application programs anyway.
(WB, 2005/08/11)
Changed: ParameterHandler::get_bool()
only accepted
"true" or "false" as boolean values, now it also considers "yes"
and "no" as "true" and "false", respectively.
(Ralf B. Schulz, 2005/07/19)
Removed: The write_multigrid
flag in DataOutBase::DXFlags
has been removed, since it wasn't used anywhere.
(WB, 2005/07/14)
New: A function
deal_II_exceptions::disable_abort_on_exception
now allows
to disable program abortion when an assertion fails. This is used
in regression tests.
(Ralf B. Schulz, 2005/07/13)
Improved: The QProjector
now has
functions project_to_face
and project_to_subface
returning a Quadrature
object
(GK, 2005/07/12)
Changed: The ParameterHandler::print_parameters
function now puts two newlines between regular entries and
subsection listings for better readability.
(WB, 2005/07/05)
Changed: The ParameterHandler::print_parameters
function now omits printing subsections if they and the contained
sub-subsections contain no entries.
(WB, 2005/07/05)
Changed: Some of the dimension independent functions in the DataOutInterface
class have been moved into the
DataOutBase
class that does not depend on any
dimension template parameters. Since the latter is a base class of the
former, there should be no problems for application programs.
(WB, 2005/07/01)
Fixed: Several of the functions in class ConstantFunction
did not check whether the
component handed to them was valid. In essence, even a scalar
function could be evaluated for component 42, and the function
ignored how many components it was declared to have. This is
now fixed.
(WB, 2005/06/30)
Changed: The functions in class ExceptionBase
have been renamed to conform
to our coding conventions that function names be all lower-case
with words separated by underscores. This is technically an
incompatible change, since these functions were publicly
visible, but were usually hidden behind macros and not used
anywhere explicitly in the library; we hope that this also
holds for external code.
(WB, 2005/06/30)
New: The GNU C library supports access to the call stack. For
systems using this library, the ExceptionBase
class now uses these
functions to outputs the callstack when the exception is
created.
(Ralf B. Schulz, 2005/06/30)
Improved: The class Quadrature
has a new
constructor generating the dim-dimensional tensor product of a
one-dimensonal formula directly.
(GK, 2005/06/10)
New: The class Polynomials::RaviartThomas
implements
Raviart-Thomas polynomials of arbitrary order in 2d and 3d.
(GK, 2005/05/30)
New: The Polynomials::Lagrange
class
allows generation of Lagrange interpolation polynomials for
arbitrary point sets. In order to get better interpolation for
higher order polynomials, QGaussLobatto
has been added to produce
interpolation point sets clustering at the boundary of a cell
(weights are not computed yet).
(GK, 2005/05/30)
New: The QAnisotropic
class allows
generation of quadrature rules of different order in each
space dimension.
(GK, 2005/05/24)
New: The Tensor
classes now
have member functions that compute the Frobenius norm and its
square. There are also global operator*
functions
that compute the contraction over a pair of indices of tensors.
(WB, 2005/04/06)
New: The DataOutBase
class now
allows to write data in a new intermediate format that
basically dumps the raw information available in patches.
(WB, 2005/04/05)
New: The DataOutReader
class allows
to read data back in from a file into which it has been written
using intermediate format. From there, it can then be converted
into any of the supported graphics formats.
(WB, 2005/04/05)
New: There is now a operator >> (std::istream &in,
Point<dim> &p)
, a function that had apparently been
missing for a long time already.
(WB, 2005/04/05)
New: The new function double_contract
contracts two tensors of
rank 4 and 2 into a tensor of rank 2, by contracting over two
indices at the same time.
(WB, 2005/03/29)
New: The new function TableIndicesBase::sort
allows to sort the indices
in ascending order. This is useful for cases where the order of indices
is irrelevant (for example in symmetric tables).
(WB, 2005/03/29)
New: There is a new class SymmetricTensor
that provides storage and operations for symmetric tensors.
(WB, 2005/03/28)
New: Class Subscriptor
receives a
text argument allowing to identify the violating pointer more
easily. The additional feature is being incorporated into SmartPointer
constructors throughout the
library.
(GK, 2005/03/16)
New: Class FunctionParser
. Wrapper
class for the fparser library (see
http://warp.povusers.org/FunctionParser/).
(Luca Heltai, 2005/03/07).
Fixed: The class MultipleParameterLoop::UserClass
had only
virtual abstract functions but no virtual destructor. This caused
warnings with some compilers, and is generally bad practice
anyway. This is now fixed. The same holds with respect to the class
DataOutInterface
.
(WB, 2005/02/20)
New: The new function PetscWrappers::VectorBase::set
allows to set
several vector elements at once.
(WB, 2005/08/10)
New: There are now functions PetscWrappers::MatrixBase::clear_row
and clear_rows
that allow to set the elements of a row
of a matrix to zero, without having to traverse the individual
elements.
(WB, 2005/08/10)
Fixed: SparsityPattern
::block_write
neither wrote the number of
columns of the pattern, nor the flag for optimizing the
diagonal, and SparsityPattern
::block_read
did not attempt to read this
data. Both is fixed now.
(GK, 2005/06/24)
Improved: SparseDirectUMFPACK
now
has the complete interface of a preconditioner
class. Therefore, it can be used in iterative solvers and in
multigrid smoothers.
(GK, 2005/05/10)
Fixed: The PETSc matrix iterators had trouble when some rows of a
matrix were empty. This has now been mostly fixed.
(WB, 2005/05/02)
Fixed: The PETScWrappers::MPI::SparseMatrix
class had functions that allow to take a pre-existing sparsity pattern
as the basis for entry allocation. These functions had an option to
allow pre-setting these entries in the underlying data structures, but
this option was disabled by default because of unresolved questions
about its effectiveness. This has now been fixed: The code now properly
initializes these elements, and makes the resulting matrix much faster
to use.
(WB, 2005/04/04)
New: The ProductSparseMatrix
implements the product of two rectangular sparse matrices with
the same value_type
(GK, 2005/03/11)
New: The PreconditionRichardson
implements a Richardson preconditioner.
(GK, 2005/03/10)
Fixed: The BlockSparseMatrix
class had no local typedef value_type
like all other classes, which
made it a little awkward to use in some places. This has now
been fixed.
(WB, 2005/03/03)
Fixed: The PETScWrappers
::MatrixBase
class documented that adding
or setting a value that hasn't been in the sparsity pattern
before will lead to an exception being thrown. This is of
course wrong: PETSc allocates matrix entries dynamically, as
needed. The documentation is now fixed.
(WB, 2005/03/03)
New: The SparseMatrix
iterators
had no operator >
, only an operator <
. The missing operator is
now implemented. The same holds for the FullMatrix
class.
(WB, 2005/03/01)
Fixed: The SparseMatrix
iterators could not be compared using operator <
: the compiler complained
that a private member was accessed. This is now fixed.
(WB, 2005/03/01)
Removed: The class FiniteElementBase
has been removed and all its
functions are now in FiniteElement
.
(GK, 2005/08/25)
New: class DoFTools
now has two
functions compute_row_length_vector
, one
for equations and one for systems. These give a much finer estimate
for the size of the sparsity pattern required than DoFHandler
::max_couplings_between_dofs
. This is
particularly true for systems with few couplings.
(GK, 2005/08/24)
Remove: Due to the reimplementation of the 3d reordering
algorithm in GridReordering
two
years ago, the CellData::rotate
function got obsolete. CellData::rotate
is now removed.
(RH, 2005/08/09)
Fixed: It was possible to compare iterators into different
DoFHandler
objects for equality and
inequality as long as the underlying triangulation object was
the same. This doesn't make much sense, however, and even
sometimes declared to iterators equal if only they had the same
triangulation, refinement level, and index. Comparing iterators
into different containers is now completely disallowed.
(WB, 2005/08/08)
New: The DataOutStack::add_data_vector
function now also allows to give only a single name even if the data is
vector-valued. It then makes up names for the individual components by
adding numbers to the name, just like the DataOut
class already does for a long time.
(WB, 2005/07/29)
New: The DataOutStack
class can now also be
used to stack two-dimensional time or parameter dependent data into a 3d
output.
(WB, 2005/07/25)
New: Function FETools
::compute_face_embedding_matrices
allows for
automatic computation of embedding matrices on faces under the sole
assumption that the coarse grid space is embedded into the fine
grid space. In particular, no interpolation points are
required.
Using this function, constraint matrices can be computed in
a general way.
(GK, 2005/07/14)
Improved: All GridIn
::read_*
functions now call GridReordering
::invert_all_cells_of_negative_grid
. This
way, also misoriented grids are represented in the right
orientation within deal.II.
(RH 2005/07/06)
Improved: Triangulation<3>
::create_triangulation
now checks that all
cells have positive volume. If not, an exception is thrown. In
that case use the GridReordering
::invert_all_cells_of_negative_grid
function, see below, to fix this.
(RH 2005/07/06)
New: There is now a GridReordering
::invert_all_cells_of_negative_grid
function implemented in 3d which checks if some/all cells have
negative volumes. If all cell have negative volume then the
whole grid is reoriented. An assertion is thrown if only a
subset of cells have negative volumes, as then the grid might
be broken.
(RH 2005/07/06)
New: There is now a new GridTools
::cell_measure
function. However, it is
mostly for internal use. Use cell->measure()
instead.
(RH 2005/07/06)
Improved: cell->measure()
used to give the
absolute value of the cell measure. It now gives the measure
with the correct sign. This is useful to find wrongly oriented
cells in 3d with negative volumes.
(RH 2005/07/05)
Improved: The class FiniteElementData
now stores information
on the Sobolev space a finite element space conforms with.
(GK 2005/06/29)
New: Added function FiniteElementBase::component_to_system_index
which was referred to in the documentation, but was missing.
(Ralf B. Schulz, 2005/06/30)
Improved: The function DoFTools
::count_dofs_per_component
and its
counterpart in MGTools
got an
additional argument. This argument allows to count the degrees
of freedom of nonprimitive vector valued elements only once,
instead of in every component. Although this argument defaults
to the previous behavior, it had to be put into the argument
list ahead of target_component in order to make use of
default arguments more efficiently. The old order of arguments
can still be used through a wrapper function.
(GK 2005/06/22)
Improved: The GeometryInfo
::child_cell_on_face
, face_to_cell_vertices
and face_to_cell_lines
now have an additional
face_orientation
argument, which has no effect in
2d and which defaults to true
(standard
orientation) in 3d. Now these functions return the right values
also for the case of non-standard oriented faces in 3d. This
avoids several awful pieces of code including questioning
face_orientation and using child_switch_tables.
(RH, 2005/06/16)
Changed: The method FETools
::lexicographic_to_hierarchic_numbering
now
takes a FiniteElementData
instead of
a FE_Q
object. Now this function can
also be called by the FE_Q
constructor which avoids code duplication.
(RH, 2005/06/13)
New: The method create_mass_matrix
in class MatrixCreator
can now handle
vector valued finite elements. A similar change was applied
to create_right_hand_side
and
create_boundary_right_hand_side
in VectorTools
. These two changes
now make the project
function work also
for Raviart-Thomas elements and other vector valued FEs. This
is very useful, if some initial conditions have to be specified.
(Oliver Kayser-Herold, 2005/06/03)
New: The DataOut
class
now supports Eulerian Mappings. If a solution is computed
on a deformed mesh, the output file generated by the DataOut
now shows the solution also on the deformed mesh. This
is an option and requires the mapping to be specified as
additional parameter to build_patches
.
(Oliver Kayser-Herold, 2005/05/31)
New: The MappingQ1Eulerian
class can
now cope with different vector types for the Euler vector.
This is useful if it should be used with the PETSc wrapper
classes. The desired vector type can be specified as template
parameter.
(Oliver Kayser-Herold, 2005/05/31)
New: The FE_RaviartThomasNodal
implements Raviart-Thomas elements using function values in
Gauss quadrature points on edges and in the interior for its
node values. The implementation is restricted to Cartesian mesh
cells right now, but works in 2D and 3D.
(GK, 2005/05/30)
Improved: The Mapping::transform_*
functions accept VectorSlice
instead
of Vector
, thus allowing more flexibility.
(GK, 2005/05/24)
New: The MatrixTools::apply_boundary_values
function now also works for PETSc sequential and parallel matrices.
(WB, 2005/05/05)
Improved: The function GridIn
::read
now searches for files using the
mechanism provided by the class PathSearch
. Furthermore, a library of input
meshes has been started in lib/meshes
.
(GK, 2005/05/03)
Fixed: The DataOut
class did not work
properly if the DataOut::first_cell
and
DataOut::next_cell
functions were
overloaded and cell data was to be output; in that case, data from the
wrong cells was written out. This is now fixed. In contrast to this,
nodal data was never affected.
(WB, 2005/04/20)
Improved: By employing the new GeometryInfo
::line_to_cell_vertices
, GeometryInfo
::face_to_cell_vertices
and GeometryInfo
::face_to_cell_lines
functions the Triangulation
::create_triangulation
functions are now
implemented independent of given conventions for the numbering
of vertices, lines and faces.
(RH, 2005/03/11)
New: The new GeometryInfo
::line_to_cell_vertices
function maps line
vertex numbers to cell vertex numbers.
(RH, 2005/03/11)
New: The new GeometryInfo
::face_to_cell_lines
function maps face
line numbers to cell line numbers.
(RH, 2005/03/11)
New: The new GeometryInfo
::face_to_cell_vertices
function maps face
vertex numbers to cell vertex numbers.
(RH, 2005/03/11)
Fixed: There was a bug in the KellyErrorEstimator
class that resulted in
assertions being thrown when run with multithreading
enabled. This is now fixed.
(WB, 2005/03/10)
Changed: The Triangulation<2>
::execute_refinement
function has been
re-implemented to accommodate future developments. This change
results in different ordering and indexing of lines and
vertices. This leads to a change in the ordering of vertices in
output files generated by GridOut
for refined grids.
(RH, 2005/03/09)
Fixed: The class MGDoFHandler
had trouble
when it encountered a triangulation that had unused vertices, something
that happens when one coarsens an existing triangulation. In
that case, it would throw unjustified exceptions. This is now
fixed.
(WB, 2005/03/01)
Fixed: The class Triangulation::RefinementListener
had only
virtual abstract functions but no virtual destructor. This caused
warnings with some compilers, and is generally bad practice
anyway. This is now fixed.
(WB, 2005/02/22)
New: Function FETools
::compute_embedding_matrices
allows for
automatic computation of embedding matrices under the sole
assumption that the coarse grid space is embedded into the fine
grid space. In particular, no interpolation points are required.
(GK, 2005/02/08)
Fixed: Several wrong assertions in the Raviart-Thomas finite element
class have been fixed, that were triggered when integrating face terms.
(Oliver Kayser-Herold, 2005/01/24;
WB, 2005/01/31)