Reference documentation for deal.II version Git 3f1f337db3 2021-10-23 13:19:02 -0600
\(\newcommand{\dealvcentcolon}{\mathrel{\mathop{:}}}\) \(\newcommand{\dealcoloneq}{\dealvcentcolon\mathrel{\mkern-1.2mu}=}\) \(\newcommand{\jump}[1]{\left[\!\left[ #1 \right]\!\right]}\) \(\newcommand{\average}[1]{\left\{\!\left\{ #1 \right\}\!\right\}}\)
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. Renamed: The namespace Functions::LevelSet has been renamed to Functions::SignedDistance.
    (Peter Munch, 2021/10/19)

  2. Changed: For parallel::distributed::Triangulation, vertices will no longer be communicated automatically to p4est in debug mode. Please set the corresponding flag parallel::distributed::Triangulation::Settings::communicate_vertices_to_p4est while constructing your triangulation object.
    (Marc Fehling, 2021/10/13)

  3. Changed: The 3D implementation of GridTools::rotate() with an integer for a Cartesian coordinate direction has been superseded by the version that accepts unit vectors as rotation axes. Further, Physics::Transformations::Rotations::rotation_matrix_3d() now requires a Tensor<1,3> object instead of a Point<3> as an axis.
    (Marc Fehling, 2021/10/11)

  4. Updated: deal.II now requires ginkgo version 1.4.0 or newer (Fabian Castelli, 2021/09/01)

  5. Deprecated: The Tensor and SymmetricTensor classes had functions begin_raw() and end_raw() that suggested that the elements of these objects are stored in arrays and consequently could be accessed consecutively through iterators. While they are indeed stored contiguously in memory, they are not part of an array and, as a consequence, C++ does not actually allow this kind of access. The functions have therefore been deprecated and will be removed in due time.
    As a consequence, the make_array_view() functions that allow turning a Tensor or SymmetricTensor into an ArrayView object have now also been deprecated.
    (Wolfgang Bangerth, 2021/08/19)

  6. Deprecated: Many of the member functions of the FEInterfaceValues class, as well as the FEInterfaceViews::Scalar and FEInterfaceViews::Vector classes, that are used to compute jumps and averages of shape function-related quantities have been renamed in such a way that they are more expressive about what they compute.
    (Jean-Paul Pelteret, 2021/07/31)

  7. Changed: MatrixFreeOperators::MassOperator now computes its true diagonal (and not a lumped mass matrix) as its diagonal.
    (David Wells, 2021/07/29)

  8. Deprecated: The autopartition parameter has been removed from parallel::DistributedTriangulationBase::load() and all inheriting classes.
    (Marc Fehling, 2021/07/24)

  9. Changed: Custom repartitioning via Triangulation::Signals::cell_weight is no longer part of parallel::distributed::Triangulation::load(). If desired, call parallel::distributed::Triangulation::repartition() manually after load().
    (Marc Fehling, 2021/07/23)

  10. Updated: FE_RaviartThomasNodal now uses a different polynomial space to allow for a simpler use for faces in non-standard orientation. The new polynomials are anisotropic tensor products of Lagrange polynomials on the points of a Gauss–Lobatto quadrature formula. This change leads to different entries in the matrices and constraints, for example, but as the resulting polynomial space spans the same polynomials, no change in accuracy should be expected.
    (Martin Kronbichler, Katharina Kormann, Konrad Simon, 2021/06/12)

  11. Removed: The PETSc Eisenstat preconditioner wrapper, which has never worked correctly in parallel, has been removed.
    (David Wells, 2021/06/11)

  12. Removed: The deprecated exception ParameterHandler::ExcInvalidEntryForPatternXML and the deprecated overload of SparsityTools::gather_sparsity_pattern() have been removed.
    (Daniel Arndt, 2021/06/07)

  13. Removed: The deprecated member function TriangulationBase::compute_vertices_with_ghost_neighbors() has been removed.
    (Daniel Arndt, 2021/06/07)

  14. Removed: The deprecated constructors for FESeries::Fourier and FESeries::Legendre have been removed.
    (Daniel Arndt, 2021/06/07)

  15. Removed: The deprecated specializations of VectorTools::integrate_difference() and VectorTools::project_boundary_values_curl_conforming() have been removed.
    (Daniel Arndt, 2021/06/04)

  16. Removed: The deprecated overloads of FETools::lexicographic_to_hierarchic_numbering() and FETools::hierarchic_to_lexicographic_numbering() have been removed.
    (Daniel Arndt, 2021/06/03)

  17. Removed: The deprecated member variable VectorizedArray::n_array_elements has been removed.
    (Daniel Arndt, 2021/06/03)

  18. Removed: The deprecated member function CellAccessor::active() has been removed.
    (Daniel Arndt, 2021/06/03)

  19. Removed: The deprecated member functions DataOut::first_cell() and DataOut::next_cell() have been removed.
    (Daniel Arndt, 2021/06/02)

  20. Changed: Trilinos support in deal.II requires both deal.II and Trilinos to be configured with MPI support.
    (Daniel Arndt, 2021/06/02)

  21. Removed: The deprecated build_matrices() member functions in various multigrid transfer classes have been removed.
    (Daniel Arndt, 2021/06/01)

  22. Removed: The deprecated versions of DoFTools::count_dofs_per_component() and DoFTools::count_dofs_per_block() have been removed.
    (Daniel Arndt, 2021/06/01)

  23. Removed: The deprecated overloads for DoFTools::extract_hanging_node_dofs(), and DoFTools::extract_dofs() have been removed.
    (Daniel Arndt, 2021/05/28)

  24. Removed: Deprecated parallel::CellWeights member functions have been removed.
    (Daniel Arndt, 2021/05/27)

  25. Removed: The overloads in CUDAWrappers::FEEvaluation that take a local dof index or a quadrature point as arguement have been removed. Use the ones that don't use these arguments in their interface instead.
    (Daniel Arndt, 2021/05/26)

  26. Removed: The deprecated parallel::Triangulation class has been removed. Use parallel::TriangulationBase instead.
    (Daniel Arndt, 2021/05/26)

  27. Removed: The deprecated member field MatrixFree::AdditionalData::level_mg_handler.
    (Peter Munch, 2021/05/25)

  28. Removed: The deprecated parallel::distributed::CellDataTransfer::CoarseningStrategies struct has been removed. Use AdaptationStrategies::Coarsening instead.
    (Daniel Arndt, 2021/05/25)

  29. Removed: The deprecated member functions DoFHandler::locally_owned_dofs_per_processor(), DoFHandler::n_locally_owned_dofs_per_processor(), and DoFHandler::n_locally_owned_mg_dofs_per_processor() have been removed.
    (Daniel Arndt, 2021/05/24)

  30. Deprecated: The template arguments of the following classes have been changed to avoid the legacy argument DoFHandlerType:

    Please change your code accordingly.
    If for some reason, you need a code that is compatible with deal.II 9.3 and the subsequent release, a Legacy namespace has been introduced with aliases of these classes with their original interface. You can make the following substitutions to your code for each of the affected classes:

    • X → Legacy::X

    To perform this substitution automatically, you may use a search and replace script like the following made for the bash shell:

    classes=(SolutionTransfer parallel::distributed::SolutionTransfer Functions::FEFieldFunction DataOut DataOut_DoFData DataOutFaces DataOutRotation)
    for c in ${classes[@]}; do
    find /path/to/your/code -type f -exec sed -i -E "/(\w${c}|${c}[^<]|Particles::${c}|distributed::${c}|^\s*(\/\/|\*))/! s/${c}/Legacy::${c}/g" {} \;

    (Marc Fehling, 2020/11/21)


  1. New: The step-49 tutorial now has an extended section about generating meshes from Gmsh with a more interesting example.
    (Timo Heister, Sean Ingimarson, 2021/10/08)

  2. New: Added an interface to p4est_search.h (>=v2.2) to find the MPI rank of cells owning remote points without communication. This works in the special (but not uncommon) case that no nontrivial manifold is attached to the triangulation, i.e., the triangulation has only FlatManifold attached to it.
    (Konrad Simon, 2021/09/24)

  3. New: The tutorial program step-82 (local discontinuous Galerkin method for the bi-Laplacian problem) has been added.
    (Diane Guignard, 2021/09/17)

  4. Added: Evaluation and integration of hessians both on cells and on faces is now available in the matrix-free framework.
    (Maximilian Bergbauer, Martin Kronbichler, Peter Munch, 2021/09/06)

  5. New: VTU files have traditionally been used for visualization purposes, but more recently they have also been used for more general postprocessing tasks since they can easily be imported into Python, for example. By setting the DataOutBase::VtkFlags::physical_units variable and attaching such a flags object to a DataOut, Particles::DataOut, or MatrixOut object, one can now specify the physical units associated with variables that are written into VTU files, so that they can be parsed by scripts that do further postprocessing.
    (Wolfgang Bangerth, 2021/07/09)

  6. Improved: DataOut_DoFData and the derived classes create internally a copy of vectors attached via add_data_vector() and are now responsible for updating ghost values so that users do not need to call update_ghost_values() and potentially zero_out_ghost_values().
    (Peter Munch, Magdalena Schreter, 2021/05/27)

  7. New: The new postprocessing class DataOutResample is similar to DataOut but allows to interpolate the result onto a second triangulation.
    (Peter Munch, Martin Kronbichler, Magdalena Schreter, 2021/06/08)

  8. Improved: The internal particle handler storage structure has been reworked to allow for significantly faster particle sorting and iteration as well as for future improvements and extensions.
    (Rene Gassmoeller, Bruno Blais, Martin Kronbichler, Peter Munch, 2021/06/06)

Specific improvements

  1. Fixed: GridIn::read_unv() can now ignore any sections before 2411. In other words, the unv file can start with any number sections (before 2411) as long as they have a proper format (must begin and end with a "-1").
    (Vachan Potluri, 2021/10/22)

  2. New: There is now a function ReferenceCell::vertex() that returns the coordinates of a vertex of a reference cell.
    (Wolfgang Bangerth, 2020/10/13)

  3. Fixed: The DataOutFaces class can now also be used with simplex meshes. It previously aborted with exceptions.
    (Wolfgang Bangerth, 2020/10/13)

  4. Improved: PreconditionChebyshev can now run the vector updates on a part of the vector for better data locality. The prerequisite is an associated MatrixType class to provide a vmult class with two std::function objects to specify the operation before and after the matrix-vector product.
    (Martin Kronbichler, 2021/10/12)

  5. Fixed: The KellyErrorEstimator for 1D can now handle the hp case.
    (Fabian Castelli, 2021/10/12)

  6. Changed: The 3D implementation of GridTools::rotate() now accepts unit vectors as rotation axes.
    (Marc Fehling, 2021/10/11)

  7. New: VectorizedArray can now be constructed from an initializer list.
    (Peter Munch, 2021/10/08)

  8. Fixed: The FEPointEvaluation class always evaluated a solution starting at the component 0 of the selected vector-valued base element, even if a different component was selected by the caller. This has been fixed to correctly start evaluating at the selected component.
    (Rene Gassmoeller, 2021/10/01)

  9. Fixed: The payload for Trilinos-based linear operators is now able to use its own type as an examplar operator. This means that one can now use linear operators based on Trilinos matrices as exampler operators when initializing a LinearOperator for a Trilinos preconditioner.
    (Wenyu Lei, Jean-Paul Pelteret, 2021/09/12)

  10. Fixed: ParticleHandler::insert_particles() runs into a deadlock in parallel when a processor is not inserting any particles. This is now fixed.
    (Sebastian Fuchs, 2021/08/31)

  11. Fixed: There was a bug in the default constructor of TimeStepping::EmbeddedExplicitRungeKutta(). Some parameters were left uninitialized which triggered a segmentation fault when calling evolve_one_time_step().
    (Praveen Chandrashekar, Bruno Turcksin, 2021/08/30)

  12. Changed: For 1d cells, the following code did not compile:

    for (const auto &face : cell->face_iterators())
    if (face->at_boundary())

    That was because, unlike in the 2d and 3d case, the class that describes the faces of 1d cells had a set_boundary_id() function that was not marked as const. This has now been fixed by adding the const specification for this function, along with the one on the set_all_boundary_ids() function.
    (Wolfgang Bangerth, Tyler Anderson, 2021/08/21)

  13. New: The hp::FECollection::hp_vertex_dof_identities() function (and related functions for lines and quads) allows for the computation of multiway computations of DoF indentities in the hp-context.
    (Wolfgang Bangerth, 2021/08/20)

  14. New: There is now an overload for Particles::ParticleAccessor::set_properties() that a Tensor as argument. It is used in step-19.
    (Wolfgang Bangerth, 2021/08/19)

  15. Fixed: Exceptions thrown via AssertThrow did not have a stacktrace attached to them, unlike exceptions thrown with Assert. This is now fixed.
    (Wolfgang Bangerth, Paras Kumar, 2021/08/20)

  16. Fixed: It was not possible to default-construct objects of type DoFHandler::face_iterator for dim==1. As a consequence, one could also not call cell->face_iterators() for the cells of 1d DoFHandler objects. This is now fixed.
    (Wolfgang Bangerth, Tyler Anderson, 2021/08/19)

  17. New: MeshWorker::ScratchData is now able to evaluate the jumps in, and averages of, finite element functions and their derivatives across an interface.
    (Jean-Paul Pelteret, 2021/08/14)

  18. New: FEInterfaceViews now has functions get_*_function_values() and get_*_function_values_from_local_dof_values() to evaluate solution values across cell faces, such as the jump in (or average of) values, gradients, and Hessians. With these functions, FEInterfaceValues can now be used with automatic differentiation.
    (Jiaqi Zhang, 2021/08/11)

  19. New: The functions FEFaceValuesBase::face_number(), FEInterfaceValues::get_cell() and FEInterfaceValues::face_number() have been implemented to provide introspection as to which entities these objects have been initialized for.
    (Jean-Paul Pelteret, 2021/08/06)

  20. New: The function FEInterfaceValues::dof_indices() has been added to make writing range-based for loops over all local interface degrees of freedom much simpler.
    (Jean-Paul Pelteret, 2021/08/05)

  21. New: Diagnostic functions AffineConstraints::n_identities() and AffineConstraints::n_inhomogeneities() to analyse your constraints.
    (Marc Fehling, 2021/08/04)

  22. Fixed: Use tolerances consistently in RemotePointEvaluation, VectorTools::point_values(), and GridTools::distributed_compute_point_locations().
    (Peter Munch, Magdalena Schreter, 2021/07/31)

  23. New: QWitherdenVincentSimplex now implements even-order rules in addition to the standard Gauss-like odd-order rules.
    (David Wells, 2021/07/29)

  24. Fixed: AlignedVector objects for which AlignedVector::replicate_across_communicator() had previously been called, could not be move-constructed or move-assigned: The resulting object was usable, but destruction of the target object led to memory errors that aborted the program. This is now fixed. As a side effect of the patch, memory consumption of AlignedVector objects has also been shrunk for the most common case where AlignedVector::replicate_across_communicator() has not actually been called.
    (Wolfgang Bangerth, 2021/07/28)

  25. New: The new function TableBase::clear() allows to empty a Table object.
    (Jiaqi Zhang, 2021/07/21)

  26. Fixed: MappingFEField now works with simplex faces correctly.
    (David Wells, 2021/07/19)

  27. New: Added a class QIteratedSimplex for building composite simplex quadrature rules.
    (David Wells, 2021/07/15)

  28. New: ParticleAccessor::get_local_index() is a new function returning particle indices local to each MPI process, which is useful for direct access into arrays with temporary results associated to particles.
    (Martin Kronbichler, 2021/07/06)

  29. Fixed: step-34 had a minor memory leak whereby the function get_singular_quadrature() allocated some memory the first time it was called, and then never released it. This is now fixed. Separately, this function was not thread-safe, and now it is.
    (Wolfgang Bangerth, 2021/07/03)

  30. New: When calling cell->vertex_dof_index(...) on a DoFHandler that uses the hp capability, then one needed to provide the last argument indicating what the active fe index is. But for cells, there can only be one active fe index, so leaving the last argument at its default value is now interpreted as using the active fe index of the cell. The argument still needs to be provided if the vertex_dof_index() function is called on faces, edges, or vertices.
    (Wolfgang Bangerth, 2021/07/02)

  31. New: The new function Triangulation::n_global_coarse_cells() allows to query the global number of coarse cells. This function is particularly useful for parallel::fullydistributed::Triangulation, since in this case the coarse cells might differ on each process.
    (Peter Munch, 2021/06/26)

  32. New: The new unified function MGTwoLevelTransfer::reinit() selects automatically if MGTwoLevelTransfer::reinit_geometric_transfer() or MGTwoLevelTransfer::reinit_polynomial_transfer() is needed.
    (Peter Munch, 2021/06/23)

  33. New: The new function CellAccessor::is_ghost_on_level() allows to check if a cell is a ghost cell on a multigrid level.
    (Peter Munch, 2021/06/23)

  34. Improved: i) Standardized the format of the references in the file doc/doxygen/references.bib using in particular the convention "M. Mo" or "R.B. Kellogg" for names and the full name for journals. ii) Fixed the display of some titles (e.g., upper case for proper noun). iii) Added an URL entry for the references with a DOI.
    (Diane Guignard, 2021/06/22)

  35. Fixed: The Gauss-like rules implemented by QGaussSimplex now integrate 2 * n_points_1D - 1 degree polynomials exactly.
    (David Wells, 2021/06/22)

  36. Fixed: The step-21 program called a function that was disabled on Microsoft Windows to work around a bug in the Microsoft Visual Studio compiler. This is now fixed and the program should run successfully again on Windows.
    (Wolfgang Bangerth, 2021/06/08)

  37. Fixed: MappingQCache::get_vertices() would previously always return the actual vertices, ignoring a possible displacement that is possible with this class. This is now fixed.
    (Martin Kronbichler, 2021/06/07)

  38. Improved: An assert has been added in the constructor of FEPointEvaluation to prevent accessing non-existing components.
    (Judith Pauen, 2021/06/05)

  39. New: The new function Utilities::MPI::reduce() allows to reduce arbitrary types with a user-specified binary operation.
    (Peter Munch, 2021/05/27)

  40. New: Fixed a bug in clear user data for standard Triangulation.
    (Nicola Giuliani, 2021/05/25)

  41. Addes conformity tests for several vector elements in 2D/3D as well as minor fixes for 2d Nedelec and Raviart-Thomas to make them work on non-standard meshes.
    (Konrad Simon, 2021/05/08)