The deal.II news page
Keywords: deal.II
Date: $Date: 2013-10-31 10:29:06 -0400 (Thu, 31 Oct 2013) $

## Changes after Version 5.1

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).

### Incompatibilities

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.

1. 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)

2. 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)

3. 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)

4. 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)

5. 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)

6. 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)

7. 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)

### General

1. 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)

2. 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)

3. 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)

4. 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)

5. 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)

6. 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)

7. New: The latest version of UMFPACK, version 4.4, has been imported.
   (WB, 2005/06/30)

8. Fixed: The documentation pages did not contain information about the `Threads::spawn` functions. This is now fixed.
   (WB, 2005/05/12)

9. 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)

10. 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)

11. 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)

12. 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)

13. 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)

14. 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)

### base

1. 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)

2. 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)

3. 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)

4. 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)

5. Removed: The `write_multigrid` flag in `DataOutBase::DXFlags` has been removed, since it wasn't used anywhere.
   (WB, 2005/07/14)

6. 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)

7. Improved: The `QProjector` now has functions `project_to_face` and `project_to_subface` returning a `Quadrature` object
   (GK, 2005/07/12)

8. Changed: The `ParameterHandler::print_parameters` function now puts two newlines between regular entries and subsection listings for better readability.
   (WB, 2005/07/05)

9. Changed: The `ParameterHandler::print_parameters` function now omits printing subsections if they and the contained sub-subsections contain no entries.
   (WB, 2005/07/05)

10. 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)

11. 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)

12. 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)

13. 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)

14. Improved: The class `Quadrature` has a new constructor generating the `dim`-dimensional tensor product of a one-dimensonal formula directly.
    (GK, 2005/06/10)

15. New: The class `Polynomials::RaviartThomas` implements Raviart-Thomas polynomials of arbitrary order in 2d and 3d.
    (GK, 2005/05/30)

16. 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)

17. New: The `QAnisotropic` class allows generation of quadrature rules of different order in each space dimension.
    (GK, 2005/05/24)

18. 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)

19. 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)

20. 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)

21. 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)

22. 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)

23. 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)

24. New: There is a new class `SymmetricTensor` that provides storage and operations for symmetric tensors.
    (WB, 2005/03/28)

25. 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)

26. New: Class `FunctionParser`. Wrapper class for the fparser library (see http://warp.povusers.org/FunctionParser/).
    (Luca Heltai, 2005/03/07).

27. 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)

### lac

1. New: The new function `PetscWrappers::VectorBase::set` allows to set several vector elements at once.
   (WB, 2005/08/10)

2. 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)

3. 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)

4. 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)

5. 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)

6. 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)

7. New: The `ProductSparseMatrix` implements the product of two rectangular sparse matrices with the same `value_type`
   (GK, 2005/03/11)

8. New: The `PreconditionRichardson` implements a Richardson preconditioner.
   (GK, 2005/03/10)

9. 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)

10. 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)

11. 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)

12. 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)

### deal.II

1. Removed: The class `FiniteElementBase` has been removed and all its functions are now in `FiniteElement`.
   (GK, 2005/08/25)

2. 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)

3. 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)

4. 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)

5. 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)

6. 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)

7. 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)

8. 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)

9. 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)

10. 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)

11. 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)

12. 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)

13. Improved: The class `FiniteElementData` now stores information on the Sobolev space a finite element space conforms with.
    (GK 2005/06/29)

14. New: Added function `FiniteElementBase::component_to_system_index` which was referred to in the documentation, but was missing.
    (Ralf B. Schulz, 2005/06/30)

15. 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)

16. 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)

17. 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)

18. 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)

19. 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)

20. 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)

21. 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)

22. Improved: The `Mapping::transform_*` functions accept `VectorSlice` instead of `Vector`, thus allowing more flexibility.
    (GK, 2005/05/24)

23. New: The `MatrixTools::apply_boundary_values` function now also works for PETSc sequential and parallel matrices.
    (WB, 2005/05/05)

24. 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)

25. 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)

26. 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)

27. New: The new `GeometryInfo`::`line_to_cell_vertices` function maps line vertex numbers to cell vertex numbers.
    (RH, 2005/03/11)

28. New: The new `GeometryInfo`::`face_to_cell_lines` function maps face line numbers to cell line numbers.
    (RH, 2005/03/11)

29. New: The new `GeometryInfo`::`face_to_cell_vertices` function maps face vertex numbers to cell vertex numbers.
    (RH, 2005/03/11)

30. 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)

31. 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)

32. 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)

33. 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)

34. 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)

35. 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)

Last update $Date: 2013-10-31 10:29:06 -0400 (Thu, 31 Oct 2013) $