The deal.II news page
Author: the deal.II authors <authors@dealii.org>
Keywords: deal.II

## Changes between Versions 3.0 and 3.1

This is a quite extensive list of changes made after the release of deal.II version 3.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.

### General

1. New: All identifiers that the C++ standard (see this page for the public draft -- the standard itself is not available online for copyright reasons) mandates to be in namespace `std::` are correctly prefixed by the namespace name. While previous gcc compilers accepted these names also without the prefix, gcc 3.0 will require them, as do some commercial compilers.
   (WB 2001/01/16)

2. New: In multithreading mode, the compile flags now also have `_REENTRANT` defined. If this flag is defined, then the standard Unix headers also declare reentrant versions (with suffix `_r`) of many functions.
   (WB 2000/09/20)

3. New: Major and minor version numbers of the deal.II library are now passed to the compiler as preprocessor variables `DEAL_2_MAJOR` and `DEAL_2_MINOR`. Their present values are 3 and 1, respectively. Variables of the same name are also available in Makefiles.
   (WB 2000/09/18)

4. New: the `step-9` example program is now ready, showing several advanced programming techniques in deal.II.
   (WB 2000/07/18)

5. Changed: deal.II now uses the `kdoc2` program to generate the API documentation. This makes up for much nices documentation and also works better than the previous `kdoc1`. A copy of `kdoc2` is provided within the deal.II source tree.
   (WB 2000/06/28)

6. Changed: when compiling files, the output generated by the `make` program now indicates also whether we are compiling for multithread mode, besides the information whether the file is compiled for debug or optimized mode.
   (Ralf Hartmann 2000/06/26)

7. Fixed: the `common/scripts/make_dependencies.pl` script that sets up the dependencies for the make files had a problem when the path to the library included special characters such as `+'. This is now fixed.
   (WB 2000/06/15)

8. New: the `configure` script now checks whether the `getrusage` function is properly declared (this function is used in the timer class). The problem is that on SunOS 4.x, this function exists, but is not declared in the right file (although it is listed in the man pages). We then have to declare it ourselves.
   (WB 2000/06/14)

9. New: the `configure` script now enforces the compiler flags `-ansi -pedantic` when compiling in debug mode. This should force us to write more standard compliant code. (Since the ACE library is not standards conforming, the `-ansi` flag is not used when multithreading is requested.)
   (WB 2000/06/14)

10. Improved: the `configure` script is now used to select the compiler options. Previously, selection of compiler options was done both in `configure` as well as in the global options Makefile `common/Make.global_options`.
    (WB 2000/06/02)

11. Improved: Dependence on the files `forward_declarations.h` has been widely removed to improve compilation time
    (GK 2000/05/24)

12. Fix: `configure` now uses `config.guess` to determine the operating system and hardware platform.
    (GK 2000/04/05)

13. Changed: License is now deal.II Public License, restricting commercial use more explicitely.
    (WB/RH/GK)

### base

1. Improved: exceptions `ExcIO` and `ExcOutOfMemory` are defined globally now.
   (GK 2000/12/07)

2. Improved: `ParameterHandler` now has a function `log_parameters` which allows output of all parameters to a log file.
   (GK 2000/12/07)

3. New: almost all classes that store data now have a function `memory_consumption` that returns an estimate of the amount of memory (in bytes) used up by this class. Supporting functions to compute the size of STL vectors and other objects can be found the `MemoryConsumption` namespace.
   (WB 2000/11/27)

4. New: Class `FunctionDerivative` computes finite difference approximations of a directional derivative of a `Function`.
   (GK 2000/11/13)

5. New: The `DataOutBase` and `DataOutBase::Patch` classes have been changed so as to allow output of objects that have an other dimension than the surrounding space, for example writing faces instead of cells (this might be useful to write only external faces in 3d computations).
   (WB 2000/09/07)

6. New: There is a new `distance` function in the `Point` class that calculates the distance between two points.
   (Ralf Hartmann 2000/09/06)

7. New: `Timer` now uses the system function `getrusage (RUSAGE_CHILDREN, .)` that is need in multithreading. But still the `Timer` class does not yet work in multithreading, as getrusage with flag RUSAGE_CHILDREN gives always 0 (at least on Solaris7).
   (Ralf Hartmann 2000/08/25)

8. New: There are now a set of functions `outer_product` that for the outer product of tensors.
   (WB 2000/07/23)

9. New: The classes `Patterns::Integer` and `Patterns::Double` now allow that a range may be specified in which the parameter shall be. Furthermore, instead of a class, `Patterns` is now a namespace, so it can be reopened in case you want to write another pattern class and want to put it into the same namespace.
   (WB 2000/07/21)

10. New: classes `QMilne` and `QWeddle` for closed Newton-Cotes-formulæ of orders 7 and 9, respectively.
    (GK 2000/07/07)

11. New: There is now a function `invert (Tensor<2,dim>)` that returns the inverse of a tensor of rank 2.
    (WB 2000/04/14)

12. New multithreading scheme is implemented.
    (WB 2000/04/13)

13. Improved: `Subscriptor` prints the real class name if a subscribed object is deleted.
    (GK 2000/04/12)

### lac

1. Fixed: `SparseILU` had two bugs which are now fixed.
   (Oliver Rheinbach, 2001/02/02)

2. Improved: block classes have a variable number of blocks now, not a template parameter.
   (GK 2000/12/07)

3. New: `BlockDiagonalMatrix` is a template that generates a matrix with multiple copies of the same block on the diagonal.
   (GK 2000/12/07)

4. Improved: Krylov-space solvers do not use the function residual anymore. This allows easier implementation of new matrix classes. `SolverGMRES` now also counts the first iteration step. Finally, all solvers inherit a `Subscriptor`.
   (GK 2000/12/07)

5. New: There are now functions `SparsityPattern::symmetrize` and `SparseMatrix::symmetrize` that generate a symmetric matrix from a non-symmetric one.
   (WB 2000/12/02)

6. New: almost all classes that store data now have a function `memory_consumption` that returns an estimate of the amount of memory (in bytes) used up by this class.
   (WB 2000/11/27)

7. New: `SparseMatrix::n_actually_nonzero_elements` returns the number of entries that are actually nonzero.
   (Ralf Hartmann 2000/11/22)

8. Fixed: unlike announced in the docs, the `FullMatrix::norm2` function did not return the Frobenius norm of a matrix, but its square. This is fixed now.
   (GK 2000/08/28)

9. Improved: `PreconditionBlockSOR``::Tvmult(...)` is implemented.
   (GK 2000/07/07)

10. Improved: The breakdown criterion of `SolverBicgstab` can be changed by the use of `SolverBicgstab::AdditionalData`.
    (GK 2000/07/07)

11. New: `SolverRichardson` has a transposed solver `Tsolve(...)`. It uses the functions `Tvmult(...)` of the provided matrix and preconditioner.
    (GK 2000/07/07)

12. Improved: `FullMatrix``::invert(...)` now inverts matrices of all sizes. If there is no hardcoded inversion, `gauss_jordan()` is used implicitly.
    (GK 2000/06/30)

13. New: For recognizing a diverging solver before the maximum number of steps is reached, `SolverControl` returns `failure` also if the residual increases over the start residual by a specific factor. This factor is given to the `SolverControl` object by the `set_failure_criterion` function. After calling the latter function, checking of this additional failure criterion may again be disabled by calling `clear_failure_criterion`.
    (Ralf Hartmann 2000/06/26)

14. Improved: The interface of preconditioner classes has changed. Preconditioners are now considered linear operators like matrices: they have members `vmult` and `Tvmult` instead of the old `operator()`. This will allow the implementation of further non-symmetric solvers.
    (GK 2000/06/20)

15. New: there is now a function `SparseMatrix::el` that does mostly the same as `SparseMatrix::operator()`, but returns a zero if elements of the matrix are accessed that are not in the sparsity pattern. Thus, the new function allows to actually traverse rows or columns of the matrix without taking care of the sparsity pattern, while `SparseMatrix::operator()` should be used to write algorithms more efficiently.
    (WB 2000/06/02)

16. Fix: `SparsityPattern::print_gnuplot` wrote rows and columns exchanged. Since most matrices have symmetric sparsity patterns, this has gone unnoticed by now.
    (WB 2000/05/30)

17. Fix: the `FullMatrix::Tvmult` function suffered from the same problems as the `FullMatrix::Tmmult` function. This is now fixed as well.
    (WB 2000/05/26)

18. New: Class `PreconditionBlockJacobi`.
    (GK 2000/05/24)

19. New: `SolverControl` has an interface to `ParameterHandler`, defining and reading parameters from a file automatically.
    (GK 2000/05/24)

20. New: `BlockIndices`: Class that manages the conversion of global indices into a block vector/matrix/... to the indices local to each of the blocks.
    (WB 2000/05/08)

21. New: `BlockSparsityPattern` and `BlockSparseMatrix`: Classes that represent matrices that are composed of sparse matrices.
    (WB 2000/05/08)

22. Fix: the `FullMatrix::mmult` and `FullMatrix::Tmmult` code don't resize their output argument any more, as this is not common style in the library. Furthermore, `FullMatrix::Tmmult` was utterly broken.
    (WB 2000/05/08)

23. Change: the `matrix_norm` functions of sparse and full matrices are renamed to `matrix_norm_square`, since they in fact return the square of the norm. This should avoid confusion in some cases.
    (WB 2000/05/05)

24. Fix: the ``copy-like'' constructor of `SparsityPattern` that copies another object and adds some off-diagonals had a bug that caused an exception in some cases. This is now fixed.
    (WB 2000/05/04)

25. New: `SwappableVector`: Class that allows to swap out the data of a vector to disk and reload it later on. It also has a function to preload the data before its use in a separate thread if the library is configured for multi-threading.
    (WB 2000/05/03)

26. New: there are now functions `Vector::swap` and `BlockVector::swap`, as well as global functions `swap(u,v)` that exchange the data of two vectors without needing a temporary vector and without copying around data. Their run-time is therefore independent of the length of the vectors.
    (WB 2000/05/02)

27. Fix: `SolverCG` counts steps properly.
    (GK 2000/04/25)

28. Change: the solver classes in LAC lost their first template argument. Their names are now `SolverXX<VECTOR>`, where `XX` denotes the name of the solver (e.g. CG, GMRES, etc). Furthermore, the inheritance from `Solver` was made private to reflect the logical structure.
    (GK 2000/04/25)

29. New: `EigenInverse` implements inverse iteration by Wieland.
    (GK 2000/04/20)

30. New: `EigenPower` implements power method by von Mises
    (GK 2000/04/19)

31. New: `PreconditionBlockSOR::set_omega` allows to change the relaxation parameter.
    (GK 2000/04/12)

32. New: `SolverXX`: There is a virtual function `print_vectors` called in every step. It is void in the solver itself but can be used to print intermediate iteration vectors.
    (GK 2000/04/05)

### deal.II

1. Extend: `DoFTools::extract_boundary_dofs` now allows to also specify which boundary conditions shall be considered.
   (WB 2000/12/04)

2. New: some arguments of the functions `DoFHandler::n_boundary_dofs`, `DoFTools::extract_boundary_dofs`, and `DoFTools::map_dof_to_boundary_indices` are changed from `list` to `set`, since that resembles more closely the purpose of the parameter, and makes computations slightly faster.
   (WB 2000/12/04)

3. New: almost all classes that store data now have a function `memory_consumption` that returns an estimate of the amount of memory (in bytes) used up by this class.
   (WB 2000/11/27)

4. New: The `ConstraintMatrix::add_entries` function add several constraints at once.
   (WB 2000/10/26)

5. New: The `DoFRenumbering::random` function renumbers degrees of freedom in a random way.
   (WB 2000/10/22)

6. New: The `TriaAccessor` now has a function `point_inside` that checks whether a certain point is inside a given cell.
   (Thomas Richter 2000/10/12)

7. New: The `FiniteElement` has got two new functions `transform_unit_to_real_cell` and `transform_real_to_unit_cell` . They allow to transform points from reference (unit) cell to real cell and visa versa. `transform_real_to_unit_cell` involves a Newton iteration and works for all dimensions and all mappings used to transform from unit to real cell.
   (Ralf Hartmann 2000/10/12)

8. Extended: The `Triangulation` class can handle boundary information in 3d as well (i.e. lines and quads in 3d with special material IDs).
   (Michael Stadler 2000/10/11)

9. Extended: The `GridIn` class can now read 3D UCD data, including boundary information (i.e. lines and quads in 3d with special material IDs).
   (Michael Stadler 2000/10/11)

10. New: The `GridRefinement::refine_and_coarsen_optimize` function implements an alternative way to flag cells for refinement and coarsening.
    (Thomas Richter 2000/10/10)

11. Extended: The `GridIn::delete_unused_vertices` function now eliminates vertices from the input that are not referenced by any of the cells in the input file. This makes is simpler to delete some cells from the input file by hand, without the need to update the vertex lists, which can be tiring as several cells usually use each vertex. All functions in the `GridIn` reading grids in several input files call this function before passing the data to the triangulation object.
    (WB 2000/09/26)

12. New: The `GridIn` class can now read the basics of grids in DB Mesh format.
    (WB 2000/09/26)

13. Extended: The `KellyErrorEstimator` class is now able to estimate errors for several solution vectors at the same time, provided they live on the same `DoFHandler` object.
    (WB 2000/09/11)

14. New: The `DataOut_Faces` class allows to output faces instead of cells. This might be handy for 3d computations if one is only interested in surface plots, or cuts through the domain.
    (WB 2000/09/07)

15. Removed: The `DataOut_Old` class has finally gone for good. It was already deprecated in version 3.0, and has been superceded for a long time by the framwork of classes around `DataOutBase` and `DataOut`.
    (WB 2000/09/07)

16. New: There is now a function `DoFHandler::n_boundary_dofs` that takes the list of selected boundary indicators as a `list` of values, rather than the usual `map` of pairs of boundary indicators and function object pointers.
    (WB 2000/08/25)

17. Changed: The `map_dof_to_boundary_index` functions have been moved from the `DoFHandler` to the `DoFTools` class, in order to further remove code from the big classes which is necessarily needed there.
    (WB 2000/08/25)

18. New: there is now a class `DataOutRotation` that can be used to output data which has been computed exploiting rotational symmetry, on the original domain. Thus, the output is of one dimension higher than the computation was, where the computed solution is rotated around the axis of symmetry.
    (WB 2000/08/14)

19. New: class `HalfHyperShellBoundary` and `GridGenerator::half_hyper_shell` generate a half shell, useful for computations with a shell domain and rotational symmetry.
    (WB 2000/08/08)

20. Changed: The functions `Triangulation::refine`, `Triangulation::coarsen`, `Triangulation::refine_and_coarsen_fixed_fraction`, and `Triangulation::refine_and_coarsen_fixed_number` have been moved from the triangulation class to a separate class `GridRefinement` as they are not intricately bound to the triangulation but rather form a distinct class of functions that flag cells for refinement or coarsening based on error indicators.
    (WB 2000/07/28)

21. New: `DataOut::clear_input_data_references` clears all reference to input data vectors and to the `DoFHandler`. This function may be useful after the patches have been built, to release memory as early as possible, in this case before the output is actually written.
    (WB 2000/07/26)

22. New: `class DerivativeApproximation` approximates the norm of the gradient or second derivative of a finite element field on each cell from finite difference approximations.
    (WB 2000/04/14 and 2000/07/23)

23. Fix: Add a missing assertions in `FEValuesBase::get_function_*`. If an `ExcAccessToUninitializedField` is now thrown then probably an `update_values` or `update_gradients` is missing in the `UpdateFlags` of a used `FEValues`. Adding this assertion uncovered several other errors which are now also fixed; these errors were dormant, since the values of finite elements are always computed for the presently available Lagrange elements, but would have been activated once there are other classes of elements.
    (Ralf Hartmann 2000/07/20)

24. New: Class `DoFRenumbering` now has functions for cell-wise downstream renumbering for discontinuous elements. The parameters of the function `sort_selected_dofs_back` have been switched to match the interfaces of all other functions in this class.
    (GK 2000 Jour de Bastille)

25. New: Function `VectorTools``::compute_mean_value` integrates the mean value of one component of a finite element function.
    (GK 2000/07/12)

26. New: The new function `get_face` of `FEFaceValues` and `FESubfaceValues` returns an iterator of the present face. This is the face, for that the `FE(Sub)FaceValues` object was reinited the last time.
    (Ralf Hartmann 2000/06/26)

27. New: classes `FEDG_Px` implement complete polynomial spaces of degree x on quadrilaterals. Since they have less degrees of freedom than `FEDG_Qx`, there is no continuous version for these elements. Implementation for P4 and 3D is still incomplete.
    (GK 2000/06/20)

28. Fix: slight bug in `DataOut::build_patches` in multithreaded mode fixed.
    (Ralf Hartmann, 2000/05/29)

29. New: class `FETools` performs interpolations and extrapolations of discrete functions from one `FiniteElement` to another `FiniteElement`. It also provides the local interpolation matrices that interpolate on each cell. Furthermore it provides the interpolation difference matrix id-Ih that is needed for evaluating (id-Ih)z for e.g. the dual solution z.

    Removed: The obsolete `MatrixCreator::create_interpolation_matrix` function is now removed.

    (Ralf Hartmann 2000/05/26)

30. New: `DoFTools::make_flux_sparsity_pattern` can be optimized by providing two coefficient matrices.
    (GK 2000/05/25)

31. Improved: `VectorTools::integrate_difference` allows for vector-valued weight functions. L1 and Linfinity norms are calculated correctly.
    (GK 2000/05/25)

32. Changed: `FE_DGx::restriction` is not an interpolation any more but a local projection which is more reasonable for DG elements.
    (Ralf Hartmann 2000/05/22)

33. Changed: enum `MeshSmoothing` is moved into the `Triangulation` class.
    (Ralf Hartmann 2000/05/18)

34. New: `Triangulation::patch_level_1` is a new mesh smoothing. A mesh of patch level 1 consists of patches, i.e. they consists of cells that are all refined at least once.

    Changed: As follows from the existence of this new smoothing, `maximum_smoothing` will include this smoothing.

    (Ralf Hartmann 2000/05/18)

35. Changed: the `MatrixTools::apply_boundary_values` now uses a much faster algorithm when working on matrices with symmetric sparsity patterns. On the other hand, it does no more eliminate whole rows when a matrix has a non-symmetric sparsity pattern, or if the user (through a new flag) tells the function that this is not necessary, for example if the matrix itself is non-symmetric.

    For symmetric sparsity patterns, the algorithm now eliminates each boundary value in O(m*log(m)) steps instead of O(N*log(m)), where N=number of rows of the matrix, and m=number of entries per row. Note that m is roughly constant, irrespective of N, so the old algorithm became slower with finer grids, while the new one is O(1) for each boundary degree of freedom.

    (John Burnell, WB 2000/05/17)

36. New: many functions are now templatized on the data type of the vector they take or return. They thus now support `Vector<float>`, but also `BlockVector<...>`. An incomplete and growing list of functions that were treated in this way is:

    - `DoFAccessor::get_dof_values`,
    - `DoFAccessor::set_dof_values`,
    - `DoFAccessor::get_interpolated_dof_values`,
    - `DoFAccessor::set_dof_values_by_interpolation`,
    - `FEValues::get_function_values`,
    - `FEValues::get_function_grads`,
    - `FEValues::get_function_2nd_derivatives`,
    - `MatrixTools::apply_boundary_values`,
    - Several functions in `ConstraintMatrix`.
    (WB 2000/05/16 and later)

37. Changed: The computation of the Jacobian matrices in the `FEValues` class is now done more efficiently. The speedup is in the range of a factor of 40 for 3D.
    (John Burnell, WB 2000/05/16)

38. Change: `DoFTools::make_hanging_node_constraints ()` does not use the user flags any more, and can thus run in parallel more than once.
    (WB 2000/05/15)

39. Extended: `DoFTools::make_sparsity_pattern ()` now accepts a template parameter as sparsity pattern. This allows to use this function for the usual `SparsityPattern`, or for `BlockSparsityPattern` arguments.
    (WB 2000/05/15)

40. New: `DoFTools::extract_hanging_node_dofs ()` identifies nodes that will be constrained by hanging node constraints.
    (WB 2000/05/12)

41. New: `DoFRenumbering::sort_selected_dofs_back ()` sorts selected degrees of freedom to the end of the index range.
    (WB 2000/05/12)

42. Change: the return value of `DoFHandler::max_couplings_between_dofs ()` is bounded by `DoFHandler::n_dofs()`.
    (Ralf Hartmann 2000/05/11)

43. New: `FEValuesBase::get_cell ()` returns present cell.
    (Ralf Hartmann 2000/05/11)

44. Fix: `FESystem::reinit()` generated an exception if `update_support_points` was set.
    (WB 2000/05/10)

45. New: `IntergridMap::get_{source,destination}_grid` functions return the grids for which the map was created.
    (WB 2000/04/19)

46. Fix: in three space dimensions, the triangulation class over-estimated the necessary amount of memory needed upon refinement and allocated too much.
    (WB 2000/04/19)

47. New: `DoFTools::extract_boundary_dofs` finds all degrees of freedom which are at the boundary and belong to specified components.
    (WB 2000/04/17)

48. New: `DoFTools::compute_intergrid_constraints` allows to use different discretization grids for different variables.
    (WB 2000/04/15)

49. New: `DataOut::clear_data_vectors` allows to re-use an object without deleting the `DoFHandler`.
    (GK 2000/04/05)

50. New: `class DoFPrintSolverStep` prints intermediate vectors of a solver as finite element functions using `DataOut`.
    (GK 2000/04/05)

Last update $Date: 2012-05-29 15:16:36 -0400 (Tue, 29 May 2012) $