Dune 2.9.0

Download the Dune 2.9.0 module sources

Dune 2.9 - Release Notes

Note: there might be issues in 2.9.0 with Python bindings when using Python 3.11 or above. This is fixed in the development version and will be fixed in an updated release 2.9.1.

Module dune-common:

  • Added feature test for lambdas in unevaluated contexts DUNE_HAVE_CXX_UNEVALUATED_CONTEXT_LAMBDA. When defined, the C++ language allows to declare lambdas in unevaluated contexts, e.g., F = decltype([](){}).


In order to build the DUNE core modules you need at least the following software:

  • C++ compiler supporting c++-17 language standard, e.g., LLVM Clang >= 5, GCC g++ >= 7
  • CMake >= 3.13
  • Optional: pkg-config to find other optional dependencies
  • Optional: Python >= 3.7 for Python bindings


  • Multiplication of two matrices using a*b is now also implemented if a or b is a FieldMatrix or if both are DiagonalMatrices.

  • The utility function transpose(m) will now return m.transposed() if available. Otherwise it returns a wrapper storing a copy (this was a reference before) of m. References to matrices can still be captured using transpose(std::ref(m)) or transposedView(m).

  • The transposed of a FieldMatrix, DiagonalMatrix, and DynamicMatrix is now available using the transposed() member function.

  • Add helper function resolveRef() to transparently use std::reference_wrapper.

  • Add pragma omp simd annotations in the LoopSIMD class to improve compiler optimizations

  • deprecate Factorial in common/math.hh (use factorial function)

  • Add python -m dune [info|configure|list|remove|dunetype|fix-dunepy] command to manage just-in-time generated python modules in dune-py

  • The storage type ReservedVector is extended to follow more closely the std::vector and std::array interfaces.

Build System

  • Improve the the function dune_add_library by separating the target types normal, interface, and object. Additional properties can be passed to the cmake function like LINK_LIBRARIES, OUTPUT_NAME, and EXPORT_NAME

  • Remove the variable DUNE_DEFAULT_LIBS

  • Deprecate cmake file DuneCMakeCompat.cmake that just contained the removed function dune_list_filter

  • Remove deprecated cmake file DuneMPI.cmake

  • Overhaul of the handling of Dune python packages: python bindings are now enabled by default. Packages are automatically installed either in an internal virtual environment or in an active environment during the module build process. See https://gitlab.dune-project.org/core/dune-common/-/merge_requests/960 which also contains a detailed set of instructions on how to update existing python bindings.

  • Deprecated dune_python_install_package. Use either dune_python_configure_bindings (for Python bindings) dune_python_configure_package (for pure Python package). See https://gitlab.dune-project.org/core/dune-common/-/merge_requests/1148 for more details. Note that this MR also includes https://gitlab.dune-project.org/core/dune-common/-/merge_requests/1103: the Python bindings are not installed editable during the configure stage instead of the build stage.

  • dune-py is now build using a simple ‘Makefile’ per module instead of relying on cmake for each module. The old cmake builder can still be used by exporting the environment variable DUNE_PY_USE_CMAKEBUILDER=1.

  • Remove deprecated cmake function overload target_link_libraries

  • Deprecate cmake function remove_processed_modules

  • The CI system now checks for common spelling mistakes using the codespell tool.

Deprecations and removals

  • Helper fallback implementations for Std::to_false_type, Std::to_true_type, Std::is_invocable, and Std::is_invocable_r have been removed. Instead, use Dune::AlwaysFalse, Dune::AlwaysTrue, std::is_invocable, and std::is_invocable_r.

  • The deprecated headers gcd.hh and lcm.hh are removed. Use std::gcd and std::lcm instead.

  • Both deprecated macros DUNE_DEPRECATED and DUNE_DEPRECATED_MSG(text) are removed. Use C++14 attribute [[deprecated]]. However, be aware that it is no drop-in replacement, as it must be sometimes placed at different position in the code.

  • The macros DUNE_UNUSED is removed Use C++17’s attribute [[maybe_unused]] instead, but be aware that it is no drop-in replacement, as it must be sometimes placed at a different position in the code.

  • In callFixedSize, support handles with fixedsize() (lower case s) is removed. Implement fixedSize() (camelCase) instead.

  • CollectiveCommunication and getCollectiveCommunication are deprecated and will be removed after Dune 2.9. Use Communication respectively getCommunication instead.

  • The header power.hh is deprecated. Use Dune::power from math.hh instead.

  • The deprecated compatibility header optional.hh is removed. Include <optional> instead.

  • The compatibility header make_array.hh is deprecated and will be removed after Dune 2.8. Use deduction guide of std::array or std::to_array.

Module dune-geometry:

  • The Geometry interface was extended by methods jacobian(local) and jacobianInverse(local) and corresponding typedefs Jacobian and JacobianInverse. This is implemented by all geometry implementations provided by dune-geometry. But external implementations need to be adjusted to pass the interface check provided by checkgeometry.hh.

  • The Geometry::integrationElement now needs to return the type Volume instead of ctype. Note that this may be different from ctype if the geometry supports typed dimensions. In such case, ctype is a length, and not appropriate for a volume quantity.

Module dune-grid:

  • The Geometry interface was extended by methods jacobian(local) and jacobianInverse(local) and corresponding typedefs Jacobian and JacobianInverse. All grid implementations need to provide the new interface. For transition, the methods and typedefs are default-implemented in the Dune::Geometry interface class which is used for all grid geometries.

  • The Geometry::integrationElement now needs to return the type Volume instead of ctype. Note that this may be different from ctype if the grid supports typed dimensions. In such a case, ctype is a length, and not appropriate for a volume quantity.

  • The FindAlberta.cmake module only searches for world dimension libraries up to dim 3. This can be increased by setting the CMake variable ALBERTA_MAX_WORLD_DIM

  • A method GridView::isConforming() was added indicating whether a given grid view is representing a conforming grid. For some grid implementations this could vary from the compile time static GridView::conforming depending on run time parameters.

  • The Python bindings now support tensorproduct coordinates of YaspGrid

Deprecations and removals

  • Support for PSurface has been removed.

  • Support for AmiraMesh has been removed.

  • Following the deprecation of CollectiveCommunication in dune-common, grids define the type Communication. The type CollectiveCommunication is deprecated and will be removed after Dune 2.9.

  • The CMake function add_dune_ug_flags is deprecated. It should not be used since all flags are already set automatically. Also the package flags for the UG grid are not registered any more.

  • The dune-uggrid module does not set the preprocessor flag HAVE_UG anymore. Use HAVE_DUNE_UGGRID instead.

  • The YLoadBalance interface is deprecated, as well the implementations. Users should switch to Yasp::Partitioning.

Module dune-istl:

  • Add const qualifier to LinearOperator and ScalarProduct in IterativeSolver. In particular, the constructors of iterative solvers have changed.

  • Solvers are more robust if used with multiple right-hand sides and one lane starts with the exact solution.

  • Added a function to write nested matrices as SVG objects: writeSVGMatrix(...)

  • MultiTypeBlockVector uses now std::common_type of the entries for the field_type. The old double default is replaced by Std::nonesuch of an empty MultiTypeBlockVector.

  • All vector implementations require a FieldTraits class specialization to export field_type and real_type in order to work with blocked ISTL vector types.

  • MINRES: The algorithm computes the preconditioned defect during the iterations. However, the initial defect was computed as the defect of the original/non-preconditioned system. This is now changed so that the initial defect is also computed as the preconditioned defect (this is also in line with GMRes). In some numerical tests with a Stokes system this lead to earlier termination when using the same termination criterion.

  • The Cholmod class now provides access to the cholmod_factor class that is used by CHOLMOD itself to store the Cholesky factor. This can be used to use the more advanced features of CHOLMOD.

  • You can now multiply objects of type ScaledIdentityMatrix by scalars using operator*.

  • You can now use std::tuple_element to get the types of MultiTypeBlockVector entries and MultiTypeBlockMatrix rows.

  • The SPQR solver can now work with non-square matrices (a bug which caused a segfault when previously attempting to do it was found and resolved).

Deprecations and removals

  • The deprecated ILU functions bilu_backsolve, bilu0_decomposition, bilu_backsolve, firstmatrixelement, and bilu_decomposition are removed. Use their camel case replacements.

  • Remove deprecated ImplicitModeOverflowExhausted, use ImplicitModeCompressionBufferExhausted instead.

Module dune-localfunctions:

  • The implementation of the Raviart-Thomas element now also includes 0th order shape functions on prisms and pyramids.

Deprecations and removals

  • Deprecated many of the Lagrange headers, use lagrange(cube|prism|pyramid|simplex).hh instead.
Creative Commons License   |  Legal Statements / Impressum  |  generated with Hugo v0.80.0 (Dec 6, 23:25, 2022)