Reference documentation for deal.II version GIT 982a52a150 2023-04-01 20:45:01+00:00
\(\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. Updated: deal.II no longer exports the -fPIC/-fpic compiler flags for compiling relocatable, position independent code. This should have minimal impact on user projects because CMake is handling the -fPIC/-fpic automatically. But for some less common scenarios in user projects (e.g., object targets) it might be necessary to set the POSITION_INDEPENDENT_CODE target property in CMake.
    (Matthias Maier, 2023/03/29)

  2. Changed: The default behavior of the hdf5 output is changed from "not compressed" to "compressed" (default compression_level: best_speed).
    (Christoph Schmidt, 2023/03/24)

  3. Updated: deal.II now requires CMake version 3.13.4 or later.
    (Matthias Maier, 2023/01/26)

  4. Fixed: The function ParamerHandler::add_parameter() used to call the internal action. Within that step, the action converts the default value to a string and back afterwards. This can lead to round-off errors so that the default values might change in the case of floating-point numbers. The action is not called any more during ParamerHandler::add_parameter(), fixing the problem.
    (Peter Munch, Magdalena Schreter, 2022/12/11)

  5. Removed: A number of obscure CMake configuration options have been removed: DEAL_II_PREFER_STATIC_LINKAGE, DEAL_II_STATIC_EXECUTABLE, DEAL_II_SETUP_DEFAULT_COMPILER_FLAGS.
    (Matthias Maier, 2022/12/02)

  6. Removed: The build system no longer generates pkg-config files.
    (Matthias Maier, 2022/11/30)

  7. Removed: The deal.IIFeatureConfig.cmake configuration file has been removed. This file used to contain a record of all FEATURE_[suffix] variables for a given external library. Said information is now exported via interface targets in CMake.
    (Matthias Maier, 2022/11/30)

  8. Changed: We introduced a stronger datatype for FE indices:

    This affects interfaces to a lot of functions. Most of them are backwards compatible via implicit conversion. Functions that do not fall in that category are listed below and might need your attention. Some of them have been deprecated, some are replaced because we imagine them only being used internally.

    Further, the serialization of parallel::distributed::Triangulation objects is also affected by this change as we write FE indices to disk. Thus, the version in the serialization metafile has been bumped to 5.
    (Marc Fehling, 10/27/2022)

  9. Removed: The base class of SparsityPattern, SparsityPatternBase, has been removed.
    (David Wells, 2022/09/22)

  10. Updated: The version of the vtu output has been increased to 2.2 if high-order output is requested. This is necessary to fix visualization issues in Paraview.
    (Peter Munch, Magdalena Schreter, 2022/09/18)

  11. Changed: The function DoFHandler::get_active_fe_indices() now returns the result vector. The previous version that writes into the argument as well as DoFTools::get_active_fe_indices() have been deprecated.
    (Marc Fehling, 08/20/2022)

  12. Moved: The functions in Utilities::Trilinos have been moved to a separate header, base/trilinos_utilities.h.
    (David Wells, 08/16/2022)

  13. Changed: The oldest supported version of PETSc has been increased from 3.3.0 to 3.7.0.
    (David Wells, 2022/07/27)

  14. Removed: The deprecated QTrapez, ParticleHandler::locally_relevant_ids(), and Arkode::reinit_vector have been removed.
    (Daniel Arndt, 2022/06/29)

  15. Removed: The deprecated member function CellId::to_cell() has been removed.
    (Daniel Arndt, 2022/06/28)

  16. Removed: The deprecated header file lac/parallel_block_vector.h has been removed.
    (Daniel Arndt, 2022/06/27)

  17. Removed: The deprecated classes ConstantFunction and ZeroFunction have been removed.
    (Daniel Arndt, 2022/06/24)

  18. Removed: The deprecated member functions DoFHandler::initialize() and DoFHandler::set_fe() have been removed.
    (Daniel Arndt, 2022/06/24)

  19. Removed: The deprecated member functions of QProjector not using a ReferenceCell object have been removed.
    (Daniel Arndt, 2022/06/24)

  20. Removed: The deprecated functions MatrixFree::n_macro_cells(), MatrixFree::get_hp_cell_iterator(), MatrixFree::n_components_filled(), MatrixFree::get_dof_handler(), and MatrixFree::reinit() with default Mapping argument have been removed.
    (Daniel Arndt, 2022/06/22)

  21. Removed: The deprecated constructors for SparseVanka and SparseBlockVanka have been removed.
    (Daniel Arndt, 2022/06/22)

  22. Removed: The deprecated LinearAlgebra::CUDAWrappers::atomicAdd_wrapper has been removed.
    (Daniel Arndt, 2022/06/22)

  23. Rotated: The list of incompatible changes has been rotated.
    (Matthias Maier, 2022/06/16)

  24. Removed: The previously deprecated class hp::DoFHandler has been removed, and with it all functions and classes that required the template parameter DoFHandlerType.
    From now on, use the standard DoFHandler. All hp-functionality has been integrated to this one.
    (Marc Fehling, Peter Munch, 2022/05/24)

  25. Changed: All GridIn functions now remove unused vertices and will attempt to fix pyramids and wedges with negative volumes.
    (David Wells, 2022/05/25)

  26. Removed: Deprecated constructors for PETScWrappers::MPI::SparseMatrix, a deprecated overload for PETScWrappers::MatrixBase::add and a deprecated constructor for PETScWrappers::MPI::Vector have been removed.
    (Daniel Arndt, 2020/04/21)


  1. New: Kokkos is now a required dependency.
    (Daniel Arndt, 2022/10/26)

  2. New: Add a wrapper to the non-linear solver NOX from the Trilinos library.
    (Peter Munch, Vladimir Ivannikov, 2022/10/02)

Specific improvements

  1. New: Added an ArrayView::empty() function.
    (Maximilian Bergbauer, 2023/03/21)

  2. New: Added functionality to the matrix-free CellwiseInverseMassMatrix operator for coupling (dyadic) coefficients. fill_inverse_JxW_values and CellwiseInverseMassMatrixImplFlexible have been extended. Internal interfaces for the coefficients now use ArrayView instead of AlignedVector.
    (Bugrahan Temur, 2023/03/15)

  3. Fixed: There was no instance of GridTools::collect_periodic_faces() with MeshType = parallel::shared::Triangulation<1,1>. But the function works with the template parameter as well. Thus, it should be instantiated.
    (Nils Schween, 2023/03/14)

  4. New: LAPACKFullMatrix now provides two new functions, LAPACKFullMatrix::get_right_eigenvectors() and LAPACKFullMatrix::get_left_eigenvectors(), to return eigenvectors after calls to LAPACKFullMatrix::compute_eigenvalues().
    (Martin Kronbichler, 2023/03/09)

  5. New: Provide overloads for make_array_view for AlignedVector.
    (Sebastian Proell, 2023/03/06)

  6. Fixed: It was previously possible to assign scalar values to Tensor and VectorizedArray objects that were temporaries – say in expressions such as

    VectorizedArray<...> my_function();
    my_function() = 1.234;

    This does not make any sense: What my_function() returns is a temporary object, and assigning a value to it has no consequences because the temporary object dies at the end of the line. Whatever the programmer intended to do here was almost certainly a mistake. As a consequence, this is now prohibited and the compiler will produce an error when trying to do this.
    (Wolfgang Bangerth, 2023/03/05)

  7. Fixed: SolverCG used with matrices and preconditioners that support interleaving of the vector updates with the matrix-vector product (e.g. with certain matrix-free operators) sometimes performed the final update to the result vector x with a wrong coefficient. This could affect the returned solution for coarse tolerances far away from convergence. This is now fixed.
    (Martin Kronbichler, 2023/02/26)

  8. Fixed: When used with the linear-polynomial MappingQCache(1), FEValues::reinit() could previously trigger CellSimilarity in case the underlying mesh was affine, but the deformed state described via MappingQCache was not. This is now fixed.
    (Martin Kronbichler, 2023/02/22)

  9. New: Implement VectorTools::add_constant that adds a constant to a given component of a finite element solution.
    (Timo Heister, 2023/02/17)

  10. New: The function ReferenceCell::face_vertex_location() allows translating between the vertices of faces of cells and the coordinate system of the cell itself.
    (Wolfgang Bangerth, 2023/02/09)

  11. Fixed: Fix GridTools::find_all_active_cells_around_point() to return the correct cells if the requested point is located on a cell edge adjacent to neighbor cells at different refinement levels.
    (Peter Munch, Magdalena Schreter, 2023/02/07)

  12. Fixed: The DerivativeForm class had a constructor that took an array of elements via the type Tensor<order, spacedim, Tensor<1, dim,Number>>. This should have been Tensor<1, spacedim, Tensor<order, dim, Number>>, and it is now fixed.
    (Robin Goermer, Wolfgang Bangerth, 2023/02/01)

  13. New: The function IndexSet::get_index_vector() returns a vector with all indices that are part of an index set.
    (Wolfgang Bangerth, 2023/01/26)

  14. Improved: Mapping can now return vertices on a face of a cell.
    (Johannes Heinz, 2023/01/25)

  15. Fixed: When outputting hexahedral meshes in AVS Explorer's UCD file format, cells were written with an inverted vertex order. While they were shown correctly, these cells had negative volume. This has now been fixed.
    (Nils Margenberg, 2023/01/22)

  16. Improved: Introduce a function that only checks if Bounding Boxes are overlapping. Fixed: If a 1D BBox is completely contained in another one, it was not recognized as mergable neighbor.
    (Johannes Heinz, 2022/07/07)

  17. New: The function ReferenceCell::contains_points() is now implemented for all reference cell kinds (it had been missing for wedges and pyramids before).
    (Wolfgang Bangerth, 2023/01/11)

  18. New: There are now overloads of the make_array_view() function for objects of type std::array.
    (Wolfgang Bangerth, 2023/01/09)

  19. Deprecated: The functions ReferenceCell::compute_orientation() and ReferenceCell::permute_according_orientation() have been deprecated. Use ReferenceCell::get_orientation_index() and ReferenceCell::reorient_based_on_orientation_index() instead.
    (Wolfgang Bangerth, 2023/01/09)

  20. New: Writing graphical output in VTU format now uses a workflow that uses multiple threads where possible, substantially increasing the speed with which functions such as DataOut::write_vtu() work.
    (Wolfgang Bangerth, 2022/12/30)

  21. Improved: The FEInterfaceValues values public interface has been extended further to support hp-FEM. Functions have been added to report if the class has been initialized with hp support, and to get the underlying hp::MappingCollection, hp::FECollection and hp::QCollection. The various FEInterfaceValues::reinit() methods now accept indices to indicate which quadrature rule, mapping (and, in some cases, finite elements) should be used to compute values across the interface.
    (Jean-Paul Pelteret, 2022/12/28)

  22. New: ScratchData now has support for hp finite elements on interfaces.
    (Jean-Paul Pelteret, 2022/12/23)

  23. New: Allow the construction of a deal.II PETSc matrices from a PETSc Mat.
    (Stefano Zampini, 2022/12/21)

  24. New: Expose PETScWrappers::MPI::BlockVector as a PETSc VecNest vector, and make sure the mpi communicator is always queried from the internal vec object.
    (Stefano Zampini, 2022/12/21)

  25. New: PETScWrappers:BlockSparseMatrix now is also a PETSc MATNEST type.
    (Stefano Zampini, 2022/12/20)

  26. Fixed: Small fixes to commnicator handling in PETSc classes. Move from GetArray to GetArrayRead (threadsafe version).
    (Stefano Zampini, 2022/12/20)

  27. Improved: FEInterfaceValues objects can now also be constructed using hp-collections.
    (Marco Feder, 2022/12/20)

  28. Fixed: Add default MPI getter for PETSc Mat objects, that queries the underlying PETSc type.
    (Stefano Zampini, 2022/12/13)

  29. Fixed: PETSc has no concept of ownership, but only shared ownership. Vec and Mat objects are reference counted, and automatically cleaned when no longer used. We do not need to keep track of ownership manually.
    (Stefano Zampini, 2022/12/13)

  30. Improved: The function GridTools::rotate() can now also handle Triangulation objects with dim=1 and spacedim=2.
    (Peter Munch, 2022/12/08)

  31. New: SolverGMRES now also supports classical Gram-Schmidt orthonormalization alongside to the existing modified Gram-Schmidt algorithm. This allows to reduce the cost of vector operations in terms of communication latency and memory transfer significantly.
    (Peter Munch, Martin Kronbichler, 2022/12/08)

  32. Fixed: The residual assembly in step-77 contained a bug that prevented the correct residual from being computed. This is now fixed.
    (Stefano Zampini, 2022/12/06)

  33. Improved: The history of linear residuals norms inside classes SolverControl and ReductionControl is now cleared at the first step of the solution.
    (Vladimir Ivannikov, 2022/12/05)

  34. Improved: The quick_tests mechanism has been redesigned. Quick tests are now part of the regular deal.II testsuite. This means they can be configured via the setup_tests_quick_tests target, and run via invoking ctest from the build directory. The test target will now ensure that the library is fully compiled and quick tests are configured prior to running all quick tests.
    (Matthias Maier, 2022/11/29, 2022/12/10)

  35. New: There is now a new function Threads::TaskGroup::return_values() that waits for all tasks in a task group and returns a vector of their returned objects.
    (Wolfgang Bangerth, 2022/11/29)

  36. Changed: All SparsityPattern classes now inherit from a new class SparsityPatternBase which provides an API for efficiently adding new entries. As a consequence of this change, the majority of templates over the sparsity pattern type have been removed.
    (David Wells, 2022/11/25)

  37. New: Add utility function Utilities::MPI::scatter.
    (Magdalena Schreter, Peter Munch, 2022/11/24)

  38. Improved: The deal.II CMake project configuration and the deal_II_invoke_autopilot() CMake macro that is used in user projects now always export the compile_commands.json file used for various tooling (such as completion backends like clangd).
    (Matthias Maier, 2022/11/24)

  39. Improved: Added capability in the particle handler to generate ghost particles in ghost cells close to periodic boundary conditions.
    (Bruno Blais, Audrey Collard-Daigneault, 2022-11-18)

  40. Changed: The constructors of the various solver classes in the PETScWrappers namespace used to take an MPI_Comm argument. This has now been changed: There is a new set of constructors that no longer take this argument, and the old constructors have been deprecated. In practice, the solvers now use the same MPI communicator as the matrix give to the solve() function.
    (Wolfgang Bangerth, 2022/11/16)

  41. New: PreconditionChebyshev now also supports James Lottes s fourth-kind Chebyshev.
    (Martin Kronbichler, Peter Munch, 2022/11/12)

  42. Workaround: The testsuite CMake macros now generate a top-level target compile_test_executables in user projects that can be used to force the compilation of all test executables. This works around an issue with the ninja build system that concurrent invocation of tests (via ctest -jN) that build executables will fail when calling back into cmake. As a workaround it is now possible to first build all executables first via ninja compile_test_executables and then run tests in parallel with ctest -jN.
    (Matthias Maier, 2022/11/11)

  43. Improved: FEImmersedSurfaceValues can now be constructed using a MappingFEField.
    (Marco Feder, 2022/10/31)

  44. New: A new overload for MatrixFree::loop allows to specify a pre- and post-operation, similar to MatrixFree::cell_loop.
    (Sebastian Proell, 2022/10/11)

  45. New: We now instruct doxygen to build the documentation with multiple threads, substantially reducing the amount of time it takes to complete this step.
    (Wolfgang Bangerth, 2022/10/04)

  46. New: The GridTools::MarchingCubeAlgorithm supports now also 1D.
    (Magdalena Schreter, Peter Munch, 2022/09/23)

  47. Fixed: On very coarse meshes, with very particular manifolds, e.g., polar manifolds, cylindrical manifolds, Manifold<3, 3>::normal_vector may return a zero vector. This is fixed now.
    (Timo Heister, Luca Heltai, Jiaqi Zhang, 2022/09/20)

  48. New: The new function CGALWrappers::compute_intersection_of_cells computes the intersection between two (affine) cells starting from the location of the vertices. The intersection is described by a vector of arrays, where each array identifies a simplex of the sub-tassellation of the intersection.
    (Marco Feder, Johannes Heinz, 2022/09/20)

  49. Fixed: The function GridTools::internal::distributed_compute_point_locations() now projects reference points outside of a cell (but within a tolerance) onto the unit cell. This enables the use of FE_Q_iso_Q1 in Utilities::MPI::RemotePointEvaluation.
    (Peter Munch, Magdalena Schreter, 2022/09/12)

  50. Improved: The functions VectorTools::point_values()/point_gradients() and the class Utilities::MPI::RemotePointEvaluation now allow to specify the first component to be selected. The feature is used in the class DataOutResample to output multi-component solutions.
    (Peter Munch, Magdalena Schreter, 2022/09/12)

  51. Improved: The vector operations in SolverIDR::solve() have been revised for performance. The new implementation should show a speedup in case the matrix-vector product and preconditioner are not much more expensive than the vector operations. Furthermore, the usage of temporary vectors has been reduced by two.
    (Martin Kronbichler, 2022/09/12)

  52. New: Functions DoFHandler::get_future_fe_indices() and DoFHandler::set_future_fe_indices() that store and recover future FE indices on a DoFHandler. They can also be used to transfer future FE indices between different DoFHandler objects.
    (Marc Fehling, 2022/08/20)

  53. New: The CellAccessor::as_dof_handler_iterator() function can be used to convert from a Triangulation active cell iterator to a DoFHandler active cell iterator, or from an active cell iterator of one DoFHandler to that of another DoFHandler.
    (Jean-Paul Pelteret, 2022/07/15)

  54. Improved: Refinement and coarsening flags are now communicated in parallel::shared::Triangulation.
    (Peter Munch, 2022/07/12)

  55. New: The new class MatrixFreeTools::ElementActivationAndDeactivationMatrixFree is a wrapper around MatrixFree designed to deal with DoFHandler objects involving cells without degrees of freedom, i.e., cells using FENothing as element type. The class helps to implement the "element birth and death technique".
    (Peter Munch, Sebastian Proell, 2022/07/09)

  56. New: Implement DataOut::write_deal_II_intermediate_in_parallel() that writes a combined file from all MPI ranks using MPI I/O of the internal patches and a corresponding DataOutReader::read_whole_parallel_file() to read them back in.
    (Timo Heister, 2022/07/07)

  57. Improved: The function GridGenerator::merge_triangulations() can now copy boundary ids to remaining boundary faces.
    (Johannes Heinz, 2022/07/07)

  58. New: There are now functions Utilities::MPI::isend() and Utilities::MPI::irecv() that can send and receive arbitrary objects to and from other processes, and that handle all of the setting up and tearing down of MPI objects and temporary buffers.
    (Wolfgang Bangerth, 2022/07/07)

  59. Improved: The function VectorTools::point_values() can now handle cell-data vectors.
    (Peter Munch, 2022/07/06)

  60. Added the missing explicit instantiations of DoFTools::distribute_cell_to_dof_vector for problems with non-zero codim (dim != spacedim)
    (Ahmad Shahba, 2022/07/06)

  61. Fixed: MappingCartesian used to throw exceptions in debug mode when checking if small cells in a large domain size are actually aligned to coordinate axes. This is fixed now.
    (Rene Gassmoeller, 2022/07/04)

  62. Fixed: The function find_active_cell_around_point() now skips cells without any marked vertices.
    (Johannes Heinz, 2022/06/28)

  63. New: The PetscWrappers::PreconditionBDDC preconditioner has been implemented. It requires a special matrix type (IS), which is initialized with the new function PetscWrappers::reinit.
    (Nicolas Barnafi, 2022/05/10)