Reference documentation for deal.II version GIT f6a5d312c9 2023-10-04 08:50:02+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. Changed: The class FEEvaluation now uses a different internal data layout for the gradients, exposed via FEEvaluation::begin_gradients(). Now, the entries of the partial derivatives in the space directions are placed adjacent in memory. The entries of different components are still separated by the entries on all points. This change has been made to simplify the access in the FEEvaluation::get_gradient() and FEEvaluation::submit_gradient() functions, which is especially useful for the case with many FE components. For the regular use of FEEvaluation apart from the plain pointers mentioned above, there is no change in behavior.
    (Martin Kronbichler, 2023/09/11)

  2. Changed: For Triangulations created with MGTransferGlobalCoarseningTools::create_geometric_coarsening_sequence(), the MeshSmoothing flag Triangulation::eliminate_unrefined_islands will be removed. It caused unintentional refinement during coarsening which led to problems in GlobalCoarseningFineDoFHandlerView. See also #15541.
    (Marc Fehling, 2023/08/22)

  3. Changed: MGTransferMatrixFree::interpolate_to_mg() returns now non-ghosted vectors.
    (Peter Munch, 2023/07/25)

  4. Removed: Support for PETSc without MPI has been removed.
    (Daniel Arndt, 2023/07/24)

  5. Removed: The methods copy_to_mg, copy_from_mg, and interpolate_to_mg used of MGTransferGlobalCoarsening and MGTransferMatrixFree used to have spacedim as template argument. Since it is not used and the underlying functionality did not work, it has been removed.
    (Peter Munch, 2023/07/21)

  6. Removed: The deprecated header files

    • deal.II/base/std_cxx14/algorithm.h
    • deal.II/base/std_cxx14/memory.h
    • deal.II/base/std_cxx14/utility.h have been removed.
      (Daniel Arndt, 2023/07/13)

  7. Changed: The CMake configuration does no longer export git revision strings and dates in deal.IIConfig.cmake. This avoids unnecessary reconfigurations of client projects (such as the testsuite). Instead the git revision strings and dates are now recorded in deal.IIConfigGit.cmake whose path is recorded in @f${DEAL_II_GIT_CONFIG}. This is similar to how we store the git revision in the header deal.II/base/revision.h instead of deal.II/base/config.h to avoid unnecessary recompilations of the library and user programs. User project who need the information in CMake must do an include(@f${DEAL_II_GIT_CONFIG}).
    (Matthias Maier, 2023/07/03)

  8. Removed: The LinearAlgebra::Vector class has been removed without deprecation. Users should use the standard Vector class instead.
    (David Wells, 2023/07/03)

  9. Removed: The deprecated functions Triangulation::create_triangulation_compatibility(), GridTools::cell_measure(), MappingQCache::initialize(), TriaAccessor::number_of_children(), the deprecated class LinearAlgebra::CommunicationPatternBase and the PETScWrappers::PreconditionerBase alias have been removed.
    (Daniel Arndt, 2023/07/03)

  10. Removed: The deprecated functions GridReordering::reorder_cells() and GridReordering::invert_all_cells_of_negative_grid() have been removed.
    (Daniel Arndt, 2023/07/03)

  11. Changed: The overloads of KellyErrorEstimator::estimate() which compute multiple vector error estimates at once now require that vectors be passed in ArrayView objects of pointers to ReadVector instead of std::vector objects of pointers to VectorType objects.
    (David Wells, 2023/07/02)

  12. Removed: The deprecated MatrixFree::FEEvaluation and MatrixFreeFaceEvaluation member function taking bools instead of EvaluationFlags have been removed.
    (Daniel Arndt, 2023/07/02)

  13. Removed: The deprecated member variables SUNDIALS::KINSOL::solve_jacobian_system, and SUNDIALS::IDA::solve_jacobian_system have been removed.
    (Daniel Arndt, 2023/07/02)

  14. Removed: The deprecated overloads for DoFTools::extract_boundary_dofs returning void have been removed.
    (Daniel Arndt, 2023/07/02)

  15. Changed: Most of the member functions of FEValues now have different template parameters. As a result, some function calls which relied on implicit conversions to ArrayView now require explicit conversions instead.
    (David Wells, 2023/07/01)

  16. Updated: deal.II requires a compiler supporting C++17.
    (Daniel Arndt, 2023/07/01)

  17. Removed: The deprecated classes Threads::Thread, and Threads::ThreadGroup and the function Threads::new_thread() has been removed.
    (Daniel Arndt, 2023/07/01)

  18. Removed: The deprecated classes FEValuesViews::Scalar::OutputType, FEValuesViews::Vector::OutputType, FEValuesViews::SymmetricTensor::OutputType, have been removed.
    (Daniel Arndt, 2023/06/30)

  19. Removed: Deprecated functions in the FEInterfaceValues nampespace have been removed.
    (Daniel Arndt, 2023/06/29)

  20. Removed: Deprecated constructors for ConsensusAlgorithms::Interface, ConsensusAlgorithms::Process, ConsensusAlgorithms::NBX, ConsensusAlgorithms::PEX, ConsensusAlgorithms::Serial, ConsensusAlgorithms::Selector have been removed as well as ConsensusAlgorithms::AnonymousProcess.
    (Daniel Arndt, 2023/06/29)

  21. Removed: The deprecated GridTools::CellDataTransferBuffer class has been removed.
    (Daniel Arndt, 2023/06/29)

  22. Rotated: The changes files have been rotated.
    (Matthias Maier, 2023/06/27)

  23. Removed: The deprecated signal Triangulation::Signals::cell_weight has been removed along with the deprecated class LegacySignal. Use Triangulation::Signals::weight instead.
    (Marc Fehling, 2023/06/27)

  24. Removed: The deprecated Functions::LevelSet namespace has been removed
    (Daniel Arndt, 2023/06/30)

  25. MatrixFree::reinit() would always set up the data structures for inner faces, also in case only MatrixFree::AdditionalData::mapping_updates_flags_boundary_faces was set. As this can lead to considerably higher memory consumption, the inner faces are now only set up when requested, increasing efficiency. When inner faces are desired, make sure to set MatrixFree::AdditionalData::mapping_updates_flags_inner_faces.
    (Martin Kronbichler, 2023/06/19)


  1. Removed: Some, but not all, of the vector classes were derived from a base class VectorSpaceVector. This class had been intended to provide an abstract interface (via virtual functions) to vector-vector operations such as dot products or norms. But it turns out that that is not practical in many cases: Functions still need to either have access to individual elements of the vector, or they need to be able to do matrix-vector products. As a consequence, it is rarely useful to only have a reference to the base class VectorSpaceVector: One actually needs a reference to the derived class. Because of this lack of use, we have removed the VectorSpaceVector base class from the library.
    (Wolfgang Bangerth, 2023/07/06)

  2. New: All vector classes in deal.II now inherit from ReadVector, which provides some common read operations.
    (David Wells, 2023/07/01)

  3. Rotated: The changes files have been rotated.
    (Matthias Maier, 2023/06/27)

  4. New: Added classes for conforming Hermite interpolation polynomials, allowing for higher levels of regularity between elements to be directly enforced.
    (Ivy Weber, 2023/06/21)

Specific improvements

  1. Improved: SparsityTools::reorder_Cuthill_McKee now runs considerably faster, especially for the case with many couplings between matrix rows.
    (Martin Kronbichler, 2023/09/20)

  2. New: Add alternative interfaces to RemotePointEvaluation::evaluate_and_proecss and RemotePointEvaluation::process_and_evaluate.
    (Magdalena Schreter, Peter Munch, 2023/09/17)

  3. New: Added helper class RemotePointEvaluation::CellData to store and access data of cell-specific points.
    (Magdalena Schreter, Peter Munch, 2023/09/17)

  4. Changed: The interface to QGaussRadauChebyshev<dim> now matches that of the new quadrature QGaussRadau<dim>.
    (Jan Philipp Thiele, 2023/09/16)

  5. New: Added QGaussRadau quadrature up to and including 8 quadrature points.
    (Jan Philipp Thiele, 2023/09/15)

  6. Added: A new function shink_to_fit() was added to AlignedVector in analogy to std::vector.
    (Maximilian Bergbauer, 2023/09/14)

  7. Fixed: FEValues requesting only mapping information but initialized with elements derived from FE_PolyTensor would previously run into an assertion on unstructured 2d meshes. This is now fixed.
    (Martin Kronbichler, 2023/09/07)

  8. Changed: IndexSet objects could only be compared for equality or inequality against other IndexSet objects that had the same size. This did not allow for comparison against default-constructed objects, for example to test whether an object had been initialized. The restriction is therefore relaxed: IndexSet objects can be compared for equality and inequality against objects of the same size, or or size zero.
    (Wolfgang Bangerth, 2023/09/07)

  9. Fixed: MGTwoLevelTransferBase now preserves the ghost state of the source vector in all call scenarios.
    (Richard Schussnig, Martin Kronbichler, Peter Munch, 2023/09/04)

  10. Improved: VectorizedArray now also supports ARM Neon intrinsics.
    (Maximilian Bergbauer, Peter Munch, 2023/08/24)

  11. New: The function IndexSet::is_subset_of() does as its name suggests.
    (Wolfgang Bangerth, 2023/08/24)

  12. Changed: You can now set MeshSmoothing flags in non-empty triangulations with Triangulation::set_mesh_smoothing().
    (Marc Fehling, 2023/08/22)

  13. New: The Rayleigh–Kothe vortex has been extracted from step-68 and is now availabe as the new class Functions::RayleighKotheVortex.
    (Bruno Blais, Peter Munch, 2023/08/20)

  14. Improved: The classes MGSmootherRelaxation and mg::SmootherRelaxation can now also handle matrices of types MGLevelObject<std::unique_ptr<...>> or MGLevelObject<std::shared_ptr<...>> in their initialize() functions by the use of Utilities::get_underlying_value(), rather than MGLevelObject of the actual matrix type only.
    (Martin Kronbichler, 2023/08/16)

  15. Improved: deal.II now has a flag DEAL_II_USE_VECTORIZATION_GATHER to control the use of gather/scatter instructions on the x86 architecture. On a wide range of Intel hardware with microcode mitigation for the Intel Gather Data Speculation (GDS, aka Downfall) side channel vulnerability, in particular, server processors of the Broadwell, Skylake, Cascade Lake, and Ice Lake families released between 2015 and 2021, these instructions can be much slower than scalar loads. While the default behavior of deal.II is to aggressively enable these instructions in the intrinsics-class VectorizedArray, the new variable can be used to disable their use if deemed to give better performance.
    (Martin Kronbichler, Matthias Maier, 2023/08/14)

  16. New: Added a function extract_children_of_level() that returns the bounding boxes associated to the children of a given level of an Rtree and stores them in a vector.
    (Marco Feder, 2023/08/10)

  17. New: MGTwoLevelTransferNonNested now also supports FE_SimplexP.
    (Peter Munch, Marco Feder, 2023/08/02)

  18. New: The new function Triangulation::as_dof_handler_level_iterator() allows to create level iterators based on other cell iterators.
    (Peter Munch, 2023/08/01)

  19. Improved: GridTools::find_active_cell_around_point() and GridTools::find_all_active_cells_around_point() now also work for simplices.
    (Peter Munch, David Wells, 2023/07/25)

  20. New: The function Triangulation::contains_cell() allows to check if Tringulation::create_cell_iterator() can be called for a specific cell id.
    (Peter Munch, 2023/08/01)

  21. Improvement: Added gradient() implementation to VectorFunctionFromTensorFunction in function.h file.
    (Abbas Ballout, 2023/07/30)

  22. New: Similar to the DataOut::add_data_vector() case, DataOut::add_mg_data_vector() now also copies the vector and performs the ghost-vector update internally.
    (Peter Munch, 2023/07/25)

  23. Fixed: FETools::get_fe_by_name() now works also for simplex finite elements.
    (Luca Heltai, 2023/07/08)

  24. Improvement: step-68 now uses the FEPointEvaluation to calculate the particle velocity from the velocity solution instead of manually interpolating at the particle location.
    (Bruno Blais, 2023/07/0)

  25. Deprecated: The CellStatus enumeration has been deprecated in the Triangulation<dim, spacedim> class and moved to the global deal.II namespace. As a consequence, all references to Triangulation<dim, spacedim>, parallel::distributed::Triangulation<dim, spacedim>::CellStatus, and similar should be updated to use CellStatus directly. Also, the enumeration values have been renamed: CELL_PERSIST -> cell_will_persist, CELL_REFINE -> cell_will_be_refined, CELL_COARSEN -> children_will_be_coarsened, CELL_INVALID -> cell_invalid).
    (Pasquale Claudio Africa, 2023/07/03)

  26. Fixed: The SolutionTransfer class writes into output vectors, but does not call compress() on them. This is of no consequence for deal.II vectors for which this class is mostly used (in contrast to the parallel::distributed::SolutionTransfer class), but leads to awkward downstream failures with, for example, PETSc vectors. This is now fixed.
    (Wolfgang Bangerth, 2023/07/01)

  27. Changed: The constructor of the PETScWrappers::PreconditionSSOR::AdditionalData class is now explicit, thereby disallowing the implicit conversion of a number (the relaxation factor) to an object of this type.
    (Wolfgang Bangerth, 2023/07/01)

  28. Improved: The deal_ii_pickup_tests() macro now prints a status line at the end summarizing how many tests have been configured for the given test category. Similarly, the top level target setup_tests concatenates these status lines and prints a summary after invocation.
    (Matthias Maier, 2023/06/30)

  29. Fixed: IndexSet::add_index() would not recognize single indices already added, leading to an unnecessary quadratic complexity in case the same entry is added many times. This is now fixed.
    (Martin Kronbichler, 2023/06/30)

  30. Fixed: It was previously possible to access the return value of a Threads::Task object if the underlying task had ended with an exception. But that return value was not initialized. This is now checked: You can no longer call Threads::Task::return_value() after an exception.
    (Wolfgang Bangerth, 2023/06/30)

  31. Fixed: MGTwoLevelTransfer used within the global coarsening multigrid framework did not work when deal.II was compiled without MPI or when MPI_Init was not called. This is now fixed.
    (Martin Kronbichler, 2023/06/28)

  32. Rotated: The changes files have been rotated.
    (Matthias Maier, 2023/06/27)

  33. Fixed: The function IndexSet::add_indices() was not efficient when adding sets of indices that are sorted but contain duplicates. This is now fixed.
    (Wolfgang Bangerth, 2023/06/20)

  34. New: Added a function DoFTools::map_boundary_to_bulk_dof_iterators() that generates a mapping of codimension-1 active DoFHandler cell iterators to codimension-0 cells and face indices, to couple DoFHandler objects of different co-dimensions, initialized on grids generated with GridTools::extract_boundary_mesh()
    (Luca Heltai, 2023/04/12)