deal.II version GIT relicensing-7069-g10dda06ddc 2026-11-13 05:10: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: SparseDirectMUMPS::get_icntl() now returns a pointer to types::mumps_index instead of int, matching the integer type of the MUMPS installation. Code that explicitly stores the returned pointer as int * must use types::mumps_index * or auto * to also support 64-bit MUMPS integers.
    (Luca Heltai, 2026/10/18)

  2. Removed: Support for OpenCASCADE versions lower than 7.0.0.
    (Gordan Segon, 2026/10/10)

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

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

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

  6. 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

  1. Improved: The SUNDIALS::IDA wrapper now exposes additional IDA integration, initial-condition, linear-solver, and adaptivity controls. It also supports typed inequality constraints, provides the N_Vector operations required by IDA, and adds raw IDA memory access together with a custom setup callback.
    (Luca Heltai, 2026/10/07)

Specific improvements

  1. Fixed: FE_SimplexP, FE_SimplexDGP, and FE_SimplexP_Bubbles now implement FiniteElement::has_support_on_face(). Previously, the default implementation returned true for all shape functions and faces.
    (Matthias Maier, 2026/11/06)

  2. Fixed: GridTools::compute_active_cell_halo_layer() added cells at periodic boundaries to the halo layer that are not connected to the given subdomain. This could result in a deadlock with parallel::shared::Triangulation.
    (Matthias Maier, 2026/11/05)

  3. Fixed: parallel::shared::Triangulation::add_periodicity() now reclassifies all artificial cells so that the ghost layer contains the neighbors across periodic faces. Previously, this only happened after the next refinement.
    (Matthias Maier, 2026/11/05)

  4. Fixed: MGTwoLevelTransfer::reinit() with geometric coarsening computed wrong prolongation, restriction, and interpolation operators for finite elements with more than one component and without tensor-product structure.
    (Richard Schussnig, 2026/11/02)

  5. Fixed: Trilinos linear operator payloads use the correct intermediate vector maps for sums and products, including supplied inverse actions and their transposes. Inverse actions map from an operator's range to its domain and can be supplied for rectangular operators.
    (Luca Heltai, 2026/11/01)

  6. Improved: MappingQ, MappingFE, MappingManifold, MappingP1, and MappingFEField use Physics::Transformations for covariant gradient transformations when the mesh and space dimensions agree. The existing transformations are retained for meshes of positive codimension.
    (Luca Heltai, 2026/11/01)

  7. Fixed: ParsedConvergenceTable::error_from_exact() and ParsedConvergenceTable::difference() now select a quadrature matching the finite element's reference cell, allowing error computation on simplex meshes.
    (Luca Heltai, 2026/10/28)

  8. Improved: With device-aware MPI, Utilities::MPI::Partitioner now packs the data for all import targets in export_to_ghosted_array_start(), and applies the data from all import targets in import_from_ghosted_array_finish(), with a single kernel and a single fence instead of one kernel and one fence per target. The imported data is applied in the same order as before, so the results do not change. This reduces the latency of LinearAlgebra::distributed::Vector::update_ghost_values() and compress() for vectors in MemorySpace::Default.
    (Shubham Goswami, 2026/10/26)

  9. New: DataOutInterface::write_vtu_in_parallel() and DataOutInterface::write_vtu_with_pvtu_record() now take an additional parameter of type DataOutBase::ParallelWriteMode. If set to DataOutBase::ParallelWriteMode::send_to_rank_0, all participating ranks send their data in sequence to rank 0, which then writes the file. This avoids severe performance problems on network file systems that do not properly support MPI IO.
    (Matthias Maier, 2026/10/24)

  10. Fixed: SolverIDR now initializes its random subspace vectors with Kokkos kernels when using vectors in MemorySpace::Default. This also supports block vectors.
    (Timo Heister, 2026/10/23)

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

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

  13. Fixed: PETScWrappers::SparseDirectMUMPS::solve(A, x, b) now always factorizes the supplied matrix. Use initialize(A) followed by solve(x, b) to reuse a factorization for multiple right-hand sides.
    (Luca Heltai, 2026/10/20)

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

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

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

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

  18. New: GridIn::read_abaqus() and GridIn::read_ucd() have been generalized to support meshes with all types of cells that are not dimension-reduced.
    (Jonas Plank, 2026/10/12)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  41. Fixed: The Abaqus file format reader in GridIn::read_abaqus() got itself into all sorts of troubles when reading files that had DOS/Windows line endings, producing error messages that did not at all help in diagnosing the underlying cause. This has now been fixed: The reader can deal with such files without errors now.
    (Wolfgang Bangerth, Dongchen Li, 2026/07/04)

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

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

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

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

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