deal.II version GIT relicensing-6958-gde104d719b 2026-10-22 16:10: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\}}\)
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. Removed: Support for OpenCASCADE versions lower than 7.0.0.
    (Gordan Segon, 2026/10/10)

  2. Deprecated: The constructor and the respective reinit functions that allowed to use a PETScWrappers::MPI::SparseMatrix using std::vectors that are indexed by rank to determine the local size of the matrix are deprecated. Please use the reinit() functions that take in an IndexSet instead.
    (Jonas Plank, 2026/10/07)

  3. Changed: LinearAlgebra::TpetraWrappers::Vector::max() returned the infinity norm of the vector rather than the maximal value of its elements, so for a vector whose largest-magnitude entry is negative it returned a positive number. It now returns the maximal element, as documented and as TrilinosWrappers::MPI::Vector::max() has always done. Code relying on the previous behaviour should call linfty_norm() instead.
    (Ernesto Ismail, 2026/08/26)

  4. Removed: Deprecations from the 9.6 and 9.8 release have been removed. See https://github.com/dealii/dealii/pull/20082 and https://github.com/dealii/dealii/pull/20090 for details.
    (Daniel Arndt, 2026/08/21)

  5. Changed: The cell index exposed to user code in the portable (Kokkos) matrix-free framework is now a global index. Impacts include: Portable::FEEvaluation::get_current_cell_index(), the cell_index passed to Portable::MatrixFree::Data, the cell argument handed to functors by Portable::MatrixFree::evaluate_coefficients(), and the cell argument of Portable::MatrixFree::Data::local_q_point_id() and get_quadrature_point() (and their host equivalents). User code that previously combined get_current_cell_index() with a color offset, or that indexed per-color arrays by cell_index, should now use the global index directly.
    (Ryan Moulday, 2026/07/11)

General

Specific improvements

  1. Fixed: deal.II now strips link-time optimization flags (-flto* and -ffat-lto-objects) from the compile and link flags reported by the MPI compiler wrappers. Previously, for example, MPICH on Ubuntu 24.04 silently enabled LTO for deal.II and user projects. Use DEAL_II_USE_LTO to enable link-time optimization.
    (Matthias Maier, 2026/10/21)

  2. Fixed: deal.II now only links against the VTK modules it uses (and their VTK dependencies) instead of every module of the VTK installation. This fixes link errors in user projects caused by the VTK Python wrapping libraries when linking without –as-needed.
    (Matthias Maier, 2026/10/20)

  3. Improved: ArpackSolver::solve() has an overload that omits the unused system matrix argument. The existing overload remains available for compatibility and is deprecated.
    (Luca Heltai, 2026/10/19)

  4. Fixed: SUNDIALS vector minimum operations now handle MPI ranks with no locally owned entries. This avoids invalid vector accesses during IDA consistent initialization on meshes with empty partitions.
    (Luca Heltai, 2026/10/19)

  5. Fixed: FE_Nedelec interpolation in three dimensions now uses the support points of each face and correctly subtracts boundary contributions and orders interior coefficients. In particular, higher-order tensor-product polynomials from the finite element space are now reproduced by interpolation.
    (Luca Heltai, 2026/10/18)

  6. New: DataComponentInterpretation::component_is_ignored allows DataOut and related classes to omit selected components of a data vector. Each call to add_data_vector() can select a different subset of components, even when the vectors share a DoFHandler, for example to output two velocities and a pressure from three different vectors in the same mixed finite element space.
    (Luca Heltai, 2026/10/15)

  7. New: The Triangulation::match_refinement_across_periodic_boundaries smoothing flag keeps periodic neighbors on the same refinement level by matching refinement and coarsening decisions across periodic faces. This also works with parallel::distributed::Triangulation and is required to use local smoothing GMG on periodic domains.
    (Timo Heister, 2026/10/12)

  8. Improved: The step-100 tutorial program now assigns the LAPACKSupport::symmetric property to the local Gram matrix and to the condensed interior matrix, which are both symmetric positive definite. As a consequence, LAPACKFullMatrix::invert() uses a Cholesky factorization instead of an LU factorization to invert them.
    (Bruno Blais, 2026/10/10)

  9. Fixed: When running MatrixFree::cell_loop() with BlockVector types and more than 20 components, the setting to zero out vectors would yield wrong results. This is now fixed.
    (Jason Landini, Timo Heister, Martin Kronbichler, 2026/10/09)

  10. Fixed: SparsityTools::reorder_Cuthill_McKee() and therefore DoFRenumbering::Cuthill_McKee() had an accidental quadratic complexity in the number of connected components of the graph. This led to a severe slowdown for block-diagonal sparsity patterns, for example for discontinuous elements without flux couplings. This has been fixed.
    (Matthias Maier, 2026/10/02)

  11. Fixed: parallel::TriangulationBase::communicate_locally_moved_vertices() could leave stale vertex positions on ghost cells that do not neighbor any cell of the owner of the moved vertex.
    (Matthias Maier, 2026/10/02)

  12. New: DoFTools::make_periodicity_constraints_on_level() constructs periodic constraints for multigrid level degrees of freedom, including transformations of vector-valued components. An optional argument of MGConstrainedDoFs::initialize() can skip the default identity periodicity constraints so that such constraints can be supplied through MGConstrainedDoFs::add_user_constraints(). Existing initialization calls retain their behavior.
    (Francesco Radica, 2026/09/11)

  13. New: Struct Portable::internal::batched::EvaluatorTensorProduct supporting batched processing of points has been added. The new struct allows for simpler definition than current Porable::internal::EvaluatorTensorProduct via apply_matrix_vector_product() function, and the new struct is meant to replace the current one in coming months. Additionally, fused evaluation of the gradients in the collocation space actoss all direction has been added allowing for faster execution on GPUs.
    (Ivan Prusak, Enes Soydan, Ivan Pribec, Martin Kronbichler, 2026/09/09)

  14. Fixed: Particles::ParticleHandler::sort_particles_into_subdomains_and_cells() also searched artificial cells when looking for the new cell of a particle. A particle found in such a cell was then scheduled to be sent to numbers::artificial_subdomain_id, which triggered an assertion in debug mode and silently deleted the particle in release mode without emitting the particle_lost signal. Artificial cells are now skipped, so that these particles are correctly reported as lost. This behavior is checked by the new test particles/particle_handler_sort_03.
    (Bruno Blais, 2026/08/31)

  15. Added: LinearAlgebra::TpetraWrappers::Vector now provides the lp_norm() function, bringing it in line with the other distributed vector implementations.
    (Álvaro Borrás, 2026/08/31)

  16. Fixed: The recursion in Utilities::fixed_power now explicitly specifies the template parameter for the value type. Previously, template argument deduction failed during compilation for data types enabling automatic differentiation.
    (Marc Fehling, 2026/08/26)

  17. Fixed: LinearAlgebra::TpetraWrappers::Vector::min() guarded complex number types with a run-time assertion, but its body still had to compile for every instantiated type and used operator< as well as std::numeric_limits::max(), neither of which is defined for complex numbers. The body is now guarded with if constexpr, so that deal.II can be compiled against a Trilinos providing complex Tpetra instantiations.
    (Ernesto Ismail, 2026/08/26)

  18. Fixed: MatrixScaling assumed that the scalar type of a distributed matrix or vector is double. As a consequence deal.II failed to compile against a PETSc configured with complex scalars, because PetscScalar is then std::complex<double>. The arrays passed to the matrix and vector set() functions now use the scalar type of the matrix and vector respectively.
    (Ernesto Ismail, 2026/08/25)

  19. Fixed: When importing a Tpetra vector with VectorOperation::min, ReadWriteVector assigned the value from the Kokkos view without converting it to the vector's number type, unlike the surrounding insert, add and max branches. This made deal.II fail to compile whenever the Kokkos scalar type differed from the ReadWriteVector number type.
    (Ernesto Ismail, 2026/08/25)

  20. Fixed: The explicit instantiations of LinearAlgebra::TpetraWrappers::PreconditionFROSch::initialize() for the float scalar type declared a non-const DoFHandler argument and therefore did not match the declaration, and one instantiation in the complex-double block was malformed. As a consequence deal.II failed to compile against a Trilinos configured with Tpetra_INST_FLOAT=ON and ShyLU_DDFROSch.
    (Ernesto Ismail, 2026/08/25)

  21. Fixed: Portable::FEEvaluation 1D integration kernels were causing build time illegal access error. This has been fixed and associate 1D test added.
    (Ivan Prusak, 2026/08/21)

  22. New: The function PreconditionChebyshev::set_degree() allows to change the number of iterations, i.e., the underlying degree of the Chebyshev polynomial, after the preconditioner has been initialized.
    (Martin Kronbichler, 2026/08/18)

  23. New: There are two new functions, PreconditionChebyshev::vmult_with_last_residual_norm() and PreconditionChebyshev::step_with_last_residual_norm() that, as a byproduct of the last iteration step in the respective PreconditionChebyshev::vmult() and PreconditionChebyshev::step(), also compute the norm of the residual appearing in that step. While this quantity is not the final residual after completion of the respective operation, the new option nonetheless gives the order-of-magnitude of the error remaining after the Chebyshev iteration without requiring an additional matrix-vector product.
    (Martin Kronbichler, 2026/08/18)

  24. Fixed: A test that provides both an unannotated comparison file (foo.output) and one carrying an .mpirun=N. annotation (foo.mpirun=N.output) shares a single executable target between all of its variants. Only the annotated variants required the setup fixture that builds this shared target, so the unannotated variant could be scheduled concurrently with it by ctest -j. Both then invoked a build of the same target, and the two concurrent builds could clobber the same object file, letting the test fail with a linker error. All variants of such a test now require the setup fixture. This regularly crashed the CI in Lethe.
    (Bruno Blais, 2026/08/12)

  25. Fixed: The Triangulation class had code that checks that a mesh after mesh refinement does not have cells that are distorted (e.g., inside-out). Such distorted cells typically happen when the new point in the middle of a boundary edge is placed too far inside its adjacent cell, for example because the boundary has a lot of curvature. This check, however, was lost in a refactoring step many years ago and was no longer run. This is now fixed.
    (Wolfgang Bangerth, 2026/08/12)

  26. Deprecated: The macro DEAL_II_FALLTHROUGH is deprecated. Use the C++17 attribute [[fallthrough]] directly instead.
    (Matthias Maier, 2026/08/04)

  27. Changed: The minimum CMake version required to configure and build deal.II has been raised to 3.16. In addition, a number of obsolete configure checks and workarounds for compiler, linker, and tool versions that can no longer build deal.II have been removed from the build system.
    (Matthias Maier, 2026/08/04)

  28. Improved: Several ReferenceCell member functions (ReferenceCell::face_to_cell_vertices(), ReferenceCell::standard_to_real_face_vertex(), ReferenceCell::face_to_cell_line_orientation(), and ReferenceCell::standard_to_real_face_line()) were optimized and can, with a constexpr ReferenceCell, now be inlined. These optimizations make uniform refinement of a tetrahedral Triangulation about 16% less expensive (as measured by callgrind).
    (David Wells, 2026/08/01)

  29. New: Add new preconditioner class, PSCToolkitWrappers::PreconditionAMG, which adds a wrapper for the AMG preconditioner(s) provided by AMG4PSBLAS.
    (Marco Feder, 2026/06/26)

  30. New: FE_RaviartThomasNodal is now templated on both dim and spacedim and can be used on codimension-one meshes (dim=2, spacedim=3). In this case the element represents a spacedim-valued vector field that is everywhere tangential to the surface, transformed from the reference cell with the surface Piola transform. The element has n_components == spacedim. Note that on non-smooth (non-C¹) manifolds the resulting field is non-conforming, as the normal direction is discontinuous across cell edges; hanging-node and hp constraints as well as mesh refinement with hanging nodes are not yet supported for the codimension-one case.
    (Jakob Tore Kammeyer Nielsen, 2026/06/24)

  31. New: FE_PolyTensor now supports the codimension-one case (dim < spacedim). The internal computation of mapped shape gradients and Hessians, which is stored using DerivativeForm objects, is guarded so that the reference-cell polynomial gradients and Hessians are copied row by row when dim != spacedim instead of relying on a DerivativeForm/Tensor assignment that is only valid for dim == spacedim. An explicit instantiation for dim=2, spacedim=3 is provided. This is a prerequisite for tensor-valued elements such as Raviart-Thomas elements on embedded surfaces.
    (Jakob Tore Kammeyer Nielsen, 2026/06/24)

  32. Fixed: FEValuesViews::Vector now correctly returns all spacedim components of the value, gradient, divergence, Hessian, third derivative and symmetric gradient for non-primitive vector elements on codimension-one meshes (dim < spacedim). The non-primitive branch previously only looped over the first dim components and dropped the remaining ones.
    (Jakob Tore Kammeyer Nielsen, 2026/06/24)

  33. Added: There is now an additional overload of Particles::Utilities::interpolate_field_on_particles() which uses the FEPointEvaluation class to interpolate fields on particles efficiently. It is selected by providing the number of components as a compile-time template argument, and it takes an arbitrary mapping (defaulting to the reference cell's default linear mapping), whereas the existing overload deduces the number of components at run time and evaluates the shape functions directly at the reference location of each particle.
    (Bruno Blais, 2026/04/14)