Reference documentation for deal.II version Git 28ce845196 2019-06-26 10:31:03 +0200
Changes since the last release

This is the list of changes made since the last release of deal.II. All entries are signed with the names of the authors.


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. Removed: The deprecated headers deal.II/grid/tria_boundary.h and deal.II/grid/tria_boundary_lib.h have been removed.
    (Martin Kronbichler, 2019/06/13)

  2. Fixed: During coarsening, we need to decide which finite element is assigned to parent cells. The decision criterion was not consistent, but is now unified: The least dominant element of their children will be picked, according to hp::FECollection::find_dominated_fe_extended(). This affects the implementations of SolutionTransfer, parallel::distributed::SolutionTransfer, parallel::CellWeights, and hp::DoFHandler. (Marc Fehling, 2019/06/06)

  3. Changed: The functions DoFHandler::n_locally_owned_dofs_per_processor(), DoFHandler::locally_owned_dofs_per_processor() and DoFHandler::locally_owned_mg_dofs_per_processor() previously returned a reference to an internally stored array of index sets on all processors. As this cannot scale to large processor counts, these functions have been marked deprecated and only populate the internal vectors on the first demand. This means that the first call must be a collective call on all MPI ranks to ensure that the underlying MPI_Allgather function completes. Use the new functions DoFHandler::compute_n_locally_owned_dofs_per_processor(), DoFHandler::compute_locally_owned_dofs_per_processor() and DoFHandler::compute_locally_owned_mg_dofs_per_processor() instead or, even better for scalability, avoid them in favor of some local communication.
    (Martin Kronbichler, 2019/06/03)


  1. New: The step-65 tutorial program presents TransfiniteInterpolationManifold, a manifold class that can propagate curved boundary information into the interior of a computational domain, and MappingQCache for fast operations for expensive manifolds.
    (Martin Kronbichler, 2019/06/06)

Specific improvements

  1. Improved: The function project_boundary_values_curl_conforming_l2() can now be used with std::complex<double> numbers.
    (Daniel Garcia-Sanchez, 2019/06/22)

  2. Changed: boost::random has been replace by std. In particular, we use std::mt19937 instead of boost::random::mt19937 now.

  3. Unified DoFTools::extract_dofs() for DoFHandler and hp::DoFHandler.
    (Daniel Arndt, Mathias Anselmann, 2019/06/07)

  4. New: The class MappingQCache implements a cache for the points generated by MappingQGeneric and derived classes to speed up consumers of the mapping for expensive manifolds.
    (Martin Kronbichler, 2019/06/06)

  5. Improved: A number of places in deal.II previously called MPI_Allgather followed by some local sums to compute prefix sums. Now the more appropriate MPI_Exscan is used instead, which improves scalability of setup routines on more than 10k processors.
    (Martin Kronbichler, Peter Munch, 2019/06/03)

  6. Fixed: FullMatrix can now be packed into std::vector and unpacked from it using std::copy and the begin() and end() iterators.
    (Reza Rastak, 2019/05/24)

  7. Fixed: TrilinosWrappers::SparsityPattern can deal with empty column maps.
    (Daniel Arndt, Mathias Anselmann, 2019/05/22)

  8. Improved: The function GridGenerator::torus() run in 3D (volume mesh) would previously only use a single cell to represent the poloidal shape, which leads to singular mappings similar to how a circle degenerates when meshed with a single cell. The poloidal shape is now represented with 5 cells just like the circle. Furthermore, the function GridGenerator::torus() has gained an optional argument to control the number of cell layers in the toroidal direction. The default manifold set to the torus has also been improved: Now, the TorusManifold is applied on the surface, a CylindricalManifold to the middle cells in toroidal coordinates, and a TransfiniteInterpolationManifold on the cells between the surface and the inner ring. This leads to an excellent mesh quality for all supported scenarios.
    (Niklas Fehn, Martin Kronbichler, 2019/05/16)

  9. New: The InterpolatedUniformGridData::gradient() function was not previously implemented. It is now.
    (Bob Myhill, Anne Glerum, Wolfgang Bangerth, 2018/09/27)