Reference documentation for deal.II version GIT relicensing-464-g14f7274e4d 2024-04-22 15:40: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\}}\)
Loading...
Searching...
No Matches
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.

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: GridTools::orthogonal_equality() now returns a std::optional<unsigned char> instead of a std::optional<std::bitset<3>>. As a consequence, PeriodicFacePair now also stores an unsigned char instead of a std::bitset<3> to represent the relative orientation of the first face to the second face.
    (David Wells, 2024/05/25)

  2. Removed: The Tensor<0,dim> template had functions begin_raw() and end_raw(), which had been deprecated for a couple of releases already. They have been removed now.
    Furthermore, the corresponding functions for the general Tensor<rank,dim> template have been deprecated. They can still be used for the time being, but only for the specific case rank==1. This is because the underlying assumption of these functions is that tensors store their elements in memory in a contiguous fashion, but that is only true for the case rank==1. Similarly, the make_array_view() function that takes tensors as input has been marked as deprecated, and can only be used for rank-1 tensors from now on.
    (Wolfgang Bangerth, 2024/03/26)

  3. Changed: SolverGMRES::AdditionalData now controls the size of the Arnoldi basis through the new member variable SolverGMRES::AdditionalData::max_basis_size, rather than the number of temporary vectors (which is the basis size plus 2). As a result, the default value of the basis size is now 30, compared to 28 used before. The old variable SolverGMRES::AdditionalData::max_n_tmp_vectors is still available, but whenever SolverGMRES::AdditionalData::max_basis_size is set to a non-zero value (including the value set by the default constructor), the latter takes precedence. Furthermore, the default algorithm has been changed from the modified Gram-Schmidt algorithm to the classical Gram-Schmidt algorithm. The latter uses unconditional reorthogonalization delayed by one step, following the algorithm described in [29].
    (Martin Kronbichler, 2024/03/12)

  4. Changed:ParameterHandler::parse_input_from_json() reads now a json-file without mangled parameter names.
    (Magdalena Schreter, Peter Munch, 2024/01/26)

  5. Removed: The rarely used long double variants std_cxx17::legendrel and std_cxx17::cyl_bessel_jl have been removed due to a compatibility issue with boost-1.83. If you happen to use these functions in your project you can change to using std::legendrel and std::cyl_bessel_jl directly, which are provided by the C++ standard template library.
    (Matthias Maier, 2024/01/08)

  6. Removed: The function FEPointEvaluation::real_point() has been renamed to FEPointEvaluation::quadrature_point(). The old function has been deprecated.
    (Peter Munch, 2024/01/01)

  7. Changed: We have always considered PETSc- and Trilinos-based vectors that have ghost elements as immutable, i.e., it is possible to read elements (including the ghost elements) but not to write into them. On the other hand, the compress() function available in all vector types is meant to communicate values written into non-locally-owned vector elements to their proper owners, for example during assembly of a right hand side vector. This compress() operation clearly only makes sense if a vector does not have ghost elements, because only then is it possible to write into the vector at all, but this restriction was not enforced – the compress() function simply did not do anything at all in these cases. This has now changed: Because it does not make sense to call compress() on vectors that have ghost elements, it is now forbidden to call it and this case will be caught by an assertion.
    (Wolfgang Bangerth, 2023/12/27)

  8. Changed: FiniteElement::adjust_quad_dof_index_for_face_orientation(), FiniteElement::face_to_cell_index(), and FiniteElement::adjust_line_dof_index_for_line_orientation() now use the standardized combined_orientation orientation encoding as input arguments rather than one or three booleans.
    (David Wells, 2023/12/21)

  9. Changed: Meshes in 2D now use the face_orientation boolean (instead of the face_flip boolean) to represent their orientation.
    (David Wells, 2023/12/20)

  10. Removed: The file include/deal.II/multigrid/mg_constrained_dofs.h used to include deal.II/dofs/dof_tools.h and deal.II/multigrid/mg_tools.h. This is not the case any more.
    (Peter Munch, 2023/10/31)

  11. Removed: The functions evaluate() and integrate() of CUDAWrappers::FEEvaluation that take Bools have been deprecated and replaced by versions that take EvaluationFlags.
    (Peter Munch, 2023/10/27)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  36. Changed: When calling Triangulation::get_manifold(manifold_id) for a non-existing manifold_id, the function returned a flat manifold. This behaviour has been changed and an assert is thrown in this case. Furthermore, the functions Triangulation::reset_manifold() and Triangulation::reset_all_manifolds() do not actually remove the manifolds but make them flat.
    (Peter Munch, 2022/12/09)

General

  1. Updated: The version of BOOST bundled with deal.II has been updated from 1.70 to 1.84.
    (Wolfgang Bangerth, 2024/04/04)

  2. New: There is now a function-like macro DEAL_II_NOT_IMPLEMENTED(); that can be used to indicate places where something is not implemented. If a code runs into a place where it appears, the program is aborted (or, as documented, an exception is thrown). In contrast to the old way of indicating such a thing (namely, writing Assert(false, ExcNotImplemented());, the error is raised even in release mode.
    Similarly, there is now also DEAL_II_ASSERT_UNREACHABLE() that is used in places that control flow really should not reach, but where it is best to abort a program if it does.
    (Wolfgang Bangerth, 2024/01/24)

  3. New: Support for hanging nodes in FE_NedelecSZ.
    (Sebastian Kinnewig, 2023/11/28)

  4. New: Introduce FERemoteEvaluation. This new class provides similar interfaces as FEEvaluation, FEFaceEvaluation, and FEPointEvaluation. It can be used to access values and/or gradients in quadrature points at remote triangulations. In particular the class is designed such that it can also be used for Nitsche-type mortaring or L2-Projection with CGAL in the future.
    (Johannes Heinz, Peter Munch, 2023/11/27)

  5. New: The new tutorial step-89 presents the use of FERemoteEvaluation during matrix-free operator evaluation for non-matching and Chimera methods. The acoustic conservation equations are solved using Nitsche-type mortaring and point-to-point interpolation to demonstrate that a simple point-to-point interpolation approach is sometimes not sufficient.
    (Johannes Heinz, Maximilian Bergbauer, Marco Feder, Peter Munch, 2023/11/27)

  6. New: LinearAlgebra::TpetraWrappers::SparseMatrix class that implements a wrapper for Tpetra::CrsMatrix.
    (Sebastian Kinnewig, 2023/11/22)

  7. New: FE_SimplexP and FE_SimplexDGP now support cubic elements.
    (David Wells and Peter Munch, 2023/10/11)

  8. New: The new tutorial step-87 presents the advanced point evaluation functionalities of deal.II, specifically useful for evaluating finite element solutions at arbitrary points on distributed meshes.
    (Magdalena Schreter-Fleischhacker, Peter Munch, 2023/09/05)

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

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

  11. 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. New: deal.II is now compatible with SUNDIALS v7.0.0.
    (Marc Fehling, 2024/04/17)

  2. Fixed: When accessing elements of Trilinos vectors that do not exist on the current MPI process (for example because a function expects a vector with ghost elements but got a completely distributed vector instead), deal.II tries to produce a reasonable error message pointing out the cause. But when using 64-bit indices, the logic that creates the error message was faulty, resulting in errors that were very hard to debug and not helpful at all. This is now fixed.
    (Wolfgang Bangerth, 2024/04/17)

  3. New: Added get_shape_value_component(), get_shape_grad_component() and get_shape_grad_grad_component() to FE_NedelecSZ.
    (Sebastian Kinnewig, 2024/04/16)

  4. New: Added get_prolongation_matrix() to FE_NedelecSZ.
    (Sebastian Kinnewig, 2024/04/16)

  5. New: Add GridGenerator::cylinder, GridGenerator::subdivided_cylinder, and GridGenerator::truncated_cone to the python wrappers
    (Bruno Turcksin, 2024/04/11)

  6. New: The new function DoFTools::extract_level_constant_modes() allows to extract constant modes on multigrid levels.
    (Peter Munch, 2024/04/07)

  7. Improved: VectorTools::interpolate is now faster for the case of a DoFHandler based on an FESystem with a single base element that has classical support points (like FE_Q or FE_DGQ).
    (Martin Kronbichler, 2024/04/03)

  8. Improved: Several functions in MappingCartesian have been carefully rewritten for better performance, e.g., by avoiding divisions and making use of recurring operations.
    (Martin Kronbichler, 2024/04/01)

  9. New: Add GridGenerator::plate_with_a_hole, GridGenerator::channel_with_cylinder, and GridGenerator::hyper_ball_balanced to the python wrappers
    (Bruno Turcksin, 2024/03/27)

  10. Fixed: Utilities::unpack() could result in a segmentation fault for objects that have alignment greater than the default. This is now fixed.
    (Wolfgang Bangerth, 2024/03/24)

  11. Changed: The class FEEvaluationAccess, which was previously used to control access to values, gradients and Hessians at quadrature points in specialized form for scalar, vector-valued and general n-component system, has been merged into the class FEEvaluationBase, using conditional types deduced from std::conditional. This should not change any application code, but reduced the amount of code by 1,500 lines, thus making the library simpler to maintain.
    (Martin Kronbichler, Magdalena Schreter-Fleischhacker, 2024/03/22)

  12. Improved: The isotropic refinement function TriangulationImplementation::Implementation::execute_refinement_isotropic() now supports 2 additional ways to split a tetrahedron into its children. Cutting the parent between the 2 edge midpoints, which are the shortest distance apart, leads to more regular refined cells and optimal convergence under mesh refinement.
    (Dominik Still, Niklas Fehn, Martin Kronbichler, 2024/03/20)

  13. New: SolverGMRES and SolverFGMRES can now use an additional orthogonalization strategy, controlled by LinearAlgebra::OrthogonalizationStrategy::delayed_classical_gram_schmidt. This implements the classical Gram-Schmidt method with delayed reorthogonalization, a low-synchronization algorithm (performing one global reduction per GMRES iteration for deal.II's own vectors) that has excellent stability properties.
    (Martin Kronbichler, 2024/03/19)

  14. Improved: The implementations of SolverGMRES and SolverFGMRES have been overhauled and made more similar. In particular, SolverFGMRES now uses the same internal algorithm to solve the minimization problem in the Arnoldi basis, employing Givens rotations in analogy to the setting used by SolverGMRES. Since the Arnoldi process is sensitive to roundoff errors, this change might slightly affect iteration counts (often giving slightly better results).
    (Martin Kronbichler, 2024/03/12)

  15. Fixed: The memory of particles which are deleted during refinement was not correctly freed in the memory pool. This could lead to a minor memory leak and error messages about an inconsistent state during destruction of the property pool. This is fixed now.
    (Rene Gassmoeller, 2024/03/07)

  16. Improved: The parse functions of ParameterHandler used to add subsections if subsections/parameters have not been defined. This led to an output of ParameterHandler::print_parameters() that also contained these subsections. This is not the case anymore.
    (Peter Munch, Magdalena Schreter-Fleischhacker, 2024/02/12)

  17. Fixed: The function hp::Refinement::limit_p_level_difference() now correctly sets future FE indices in case of p-coarsening.
    (Marc Fehling, 2024/02/29)

  18. Fixed: The colorize option for the cylinder shell could yield inadequate boundary ID for some aspect ratios that were very different from the default one.
    (Bruno Blais, 2024/02/27)

  19. Fixed: In a special case where a particle lies on a vertex, the ParticleHandler detected it as lost. We introduce a tolerance for GeometryInfo<dim>::is_inside_cell() inside the ParticleHandler to fix this issue.
    (Magdalena Schreter-Fleischhacker, Julian Brotz, 2024/02/22)

  20. New: There is now functions VectorTools::interpolate_to_coarser_mesh() and VectorTools::interpolate_to_finer_mesh() that, different from VectorTools::interpolate_to_different_mesh() also work for parallel triangulations.
    (Wolfgang Bangerth, 2024/02/20)

  21. Fixed: Fix make_flux_sparsity_pattern for a FECollection containing FENothing elements.
    (Magdalena Schreter-Fleischhacker, Andreas Ritthaler, 2024/02/19)

  22. Fixed: Added some instantiations to "sparse_matrix.inst.in" such that copying real sparse matrices into complex sparse matrices and performing matrix vector operations of a complex sparse matrix with a real vector into a complex vector are possible now.
    (Malik Scheifinger, 2024/02/16)

  23. New: Add potentially more efficient vector operation to SUNDIALS wrappers. These operations are used automatically for deal.II's distributed vectors.
    (Sebastian Proell, 2024/02/15)

  24. Fixed: The function GridTools::compute_active_cell_halo_layer() now also supports perodic meshes.
    (Peter Munch, 2024/02/12)

  25. New: Add capacity to colorize boundary in GridGenerator::cylinder_shell
    (Bruno Blais, 2023/02/12)

  26. New: If the relaxation parameter is set to 0, PreconditionRelaxation now determines it based on estimated eigenvalues, similarly as PreconditionChebyshev does.
    (Peter Munch, Laura Prieto Saavedra, 2024/03/09)

  27. Deprecated: Matrix Free classes previously in the CUDAWrappers namespace have been moved to the Portable namespace.
    (Bruno Turcksin, 2024/02/09)

  28. Fixed: Fix initialization of FEFaceEvaluation for hp in 3D.
    (Maximilian Bergbauer, Peter Munch, Andreas Ritthaler, Magdalena Schreter-Fleischhacker, 2024/02/09)

  29. Fixed: The function DoFCellAccessor::distribute_local_to_global(local_matrix, local_vector, global_matrix, global_vector) mistook the argument type when calling OutputMatrix::add(row, n_cols, col_indices, values), which causes compile errors. This is now fixed.
    (Yimin Jin, 2024/01/23)

  30. Changed: FE_DGQ::get_interpolation_matrix() now also takes as a source element FENothing.
    (Magdalena Schreter, Peter Munch, 2024/01/18)

  31. Changed: parallel::distributed::Triangulation::prepare_coarsening_and_refinement() is now a collective call that exchanges coarsen/refinement flags on ghost cells. This makes adaptive refinement independent of the number of MPI ranks involved.
    (Timo Heister, Quang Hoang, Vladimir Yushutin, 2024/01/15)

  32. Fixed: In parallel computations, it was not possible to take the end iterator of a Trilinos sparsity pattern for the last locally-owned row. This is now fixed.
    (Simon Wiesheier, Peter Munch, 2024/01/07)

  33. New: Add utility functions that setup FERemoteEvaluationCommunicator for point-to-point interpolation and Nitsche-type mortaring.
    (Johannes Heinz, 2023/12/31)

  34. Improved: convert_to_distributed_compute_point_locations_internal() takes a pointer to a vector of quadratures as an additional argument. In case this pointer is not a null pointer, the vector is populated by the mapped quadratures that are internally used during the conversion.
    (Johannes Heinz, 2023/12/29)

  35. Fixed: Exceptions of type RecoverableUserCallbackError, raised in callbacks solve_with_jacobian and solve_with_jacobian_and_track_n_linear_iterations of the TrilinosWrappers::NOXSolver class, are now treated as "recoverable", if the NOX parameter "Newton/Rescue Bad Newton Solve" is set to true, which is, in fact, its default value. Exceptions of all other types and also all exceptions raised in other callbacks are still treated as "irrecoverable".
    (Vladimir Ivannikov, 2023/12/26)

  36. New: There is now a function Utilities::MPI::partial_and_total_sum().
    (Wolfgang Bangerth, 2023/12/19)

  37. Fixed: When creating triangulations in dim=1 and spacedim=3, the Triangulation class would sometimes crash because of a code path that should not have been taken. This is now fixed.
    (Vinayak Vijay, Wolfgang Bangerth, 2023/11/28)

  38. New: Add AdditionalData struct for configuring the RemotePointEvaluation class. The latter is passed into a new constructor. Deprecated: The old constructor of RemotePointEvaluation class taking the parameters value-by-value is marked as deprecated.
    (Magdalena Schreter-Fleischhacker, Peter Munch, 2023/12/06)

  39. New: The FEValuesBase class now lazily computes the FEValuesViews objects it returns when you do something like fe_values[velocities], whenever they are needed first, rather than always creating these objects.
    (Wolfgang Bangerth, 2023/11/28)

  40. Fixed: Meshes created with GridGenerator::torus() would previously run into an assertion in p4est when using parallel::distributed::Triangulation. This is now fixed.
    (Martin Kronbichler, Mathias Anselmann, Peter Munch, 2023/11/22)

  41. New: Introduce a new function, Utilities::Trilinos::teuchos_comm_to_mpi_comm(), to convert a Teuchos::RCP<Teuchos::Comm<int>> communicator into an MPI_Comm communicator.
    (Sebastian Kinnewig, 2023/11/20)

  42. New: Introduce a new function, Utilities::Trilinos::internal::make_rcp(), to create Teuchos::RCP objects, avoiding the usage of 'operator new'.
    (Sebastian Kinnewig, 2023/11/15)

  43. Fixed: MatrixFree::get_cell_active_fe_index did not return the correct value when used with categorization of cells. This affects also MFTools::compute_diagonal(). This is now fixed.
    (David Schneider, 2023/11/13)

  44. Fixed: In step-41, the mass matrix B is missing in the expressions of the residuals of the nonlinear system. See the equation under the line "This suggest a semismooth Newton step of the form" in the tutorial. This is fixed.
    (Tao Jin, 2023/11/12)

  45. Improved: Point now supports constexpr construction and evaluation, just like Tensor.
    (Chengjiang Yin, 2023/11/09)

  46. Fixed: A mistake in marking a private member function of the SphericalManifold class made it impossible to derive from this class in any meaningful way. This is now fixed.
    (Wolfgang Bangerth, 2023/11/09)

  47. Fixed: It was not possible to compare non-const iterators into block sparse matrices because a friend declaration referred to the wrong class. This is now fixed.
    (Wolfgang Bangerth, Simon Wiesheier, 2023/10/31)

  48. New: There is a new overload of Threads::new_task() that takes lambda functions taking arguments, followed by the arguments the lambda function is to be called with on a new task.
    (Wolfgang Bangerth, 2023/10/30)

  49. New: The new function RefinementCase::all_refinement_cases() returns an array of all possible refinement options of a cell.
    (Wolfgang Bangerth, 2023/10/26)

  50. New: A new wrapper class Lazy<T> provides an efficient, thread-safe mechanism for lazy initialization of objects.
    (Matthias Maier, 2023/10/25)

  51. Fixed: The periodic faces information was not being copied when using the Triangulation::copy_triangulation() function. This is now fixed.
    (Laura Prieto Saavedra, Peter Munch, 2023/10/19)

  52. Fixed: There was an inconsistency between the way DoFTools::make_periodicity_constraints() and MGConstrainedDoFs set up the constraints for periodic constraints. This is fixed now.
    (Peter Munch, Laura Prieto Saavedra, 2023/10/19)

  53. New: LinearAlgebra::TpetraWrappers::VectorReference for easier access to LinearAlgebra::TpetraWrappers::Vector. Moreover, several new member functions are introduced to LinearAlgebra::TpetraWrappers::Vector to be used as the "VectorType" template argument in AffineConstraints.
    (Sebastian Kinnewig, 2023/10/18)

  54. New: New constructor for IndexSet that takes a Teuchos::RCP<Tpetra::Map> as input. And the function IndexSet::make_tpetra_map_rcp() returning a Teuchos::RCP<Tpetra::Map>.
    (Sebastian Kinnewig, 2023/10/17)

  55. New: The print_formatted() functions of the following matrix classes now offer the option to specify a string that separates row entries:
    SparseMatrixEZ, SparseMatrix, LAPACKFullMatrix, FullMatrix, ChunkSparseMatrix, BlockSparseMatrix, CUDAWrappers::SparseMatrix
    (Marc Fehling, 2023/10/15)

  56. New: The ArrayView class now has a constructor that allows creation of an ArrayView object from a boost::container::small_vector.
    (Wolfgang Bangerth, 2023/10/24)

  57. Fixed: The querying of line orientations in the case of tetrahedra has been fixed.
    (Peter Munch, David Wells, 2023/10/10)

  58. New: The ArrayView class now has a constructor that allows creation of an ArrayView object from a std::initializer_list.
    (Wolfgang Bangerth, 2023/10/10)

  59. New: The function AffineConstraints::get_view() can be used to obtain the constraints that correspond to a specific subset of degrees of freedom.
    (Wolfgang Bangerth, 2023/10/05)

  60. Added: An option to sum into the solution values vector was added to FEPointEvaluation integrate() and test_and_sum().
    (Maximilian Bergbauer, 2023/10/04)

  61. Added: An output operator was added to DerivativeForm.
    (Maximilian Bergbauer, 2023/10/04)

  62. Improved: MGTransferMF can now permute DoFs during MGTransferMF::copy_to_mg(), MGTransferMF::copy_to_mg(), and MGTransferMF::interpolate_to_mg() if the outer solver and the multigrid preconditioner have been set up with different DoFHandler objects.
    (Peter Munch, Laura Prieto Saavedra, 2023/10/03)

  63. New: The new function AffineConstraints::add_constraint() adds an entire constraint all at once, rather than splitting the task across AffineConstraint::add_line(), multiple calls to AffineConstraint::add_entry(), and AffineConstraint::set_inhomogeneity(). The new function AffineConstraints::constrain_dof_to_zero() is a short-cut that adds a constraint that requires a specific degree of freedom to be zero.
    (Wolfgang Bangerth, 2023/10/05)

  64. New: The function IndexSet::get_view() now has an overload that computes the view with regard to an arbitrary mask.
    (Wolfgang Bangerth, 2023/10/02)

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

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

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

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

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

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

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

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

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

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

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

  76. New: Add two tensor functions for the split of a 2nd-order symmetric tensor into a positive part and a negative part based on the signs of the eigenvalues obtained from the spectrum decomposition. The function positive_negative_split() performs the positive-negative split of the 2nd-order symmetric tensor given as the input. The function positive_negative_projectors() not only performs the split, but also provides the derivatives (two fourth-order tensors) of the positive/negative part of the tensor with respect to the input tensor.
    (Tao Jin, 2023/08/22)

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

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

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

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

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

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

  83. New: The new class FEValuesViews::RenumberedView allows one to filter an existing FEValuesViews object via two renumbering vectors, one acting on the degrees of freedom, and the other acting on the quadrature points.
    (Luca Heltai, 2023/08/02)

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

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

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

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

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

  89. New: Created a new class FECouplingValues, that helps with assembling of coupled finite element methods across different dimensions or different grids.
    (Luca Heltai, 2023/07/21)

  90. New: Added InitFinalize class. This class is similar to MPI_InitFinalize but it allows users to decide which libraries should be initialized/finalized by the class.
    (Bruno Turcksin, 2023/07/13)

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

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

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

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

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

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

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

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

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

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

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