Dune 2.9.1
Download the Dune 2.9.1 module sources
- dune-common [ tarball: dune-common-2.9.1.tar.gz , signature: dune-common-2.9.1.tar.gz.asc ]
- dune-geometry [ tarball: dune-geometry-2.9.1.tar.gz , signature: dune-geometry-2.9.1.tar.gz.asc ]
- dune-grid [ tarball: dune-grid-2.9.1.tar.gz , signature: dune-grid-2.9.1.tar.gz.asc ]
- dune-istl [ tarball: dune-istl-2.9.1.tar.gz , signature: dune-istl-2.9.1.tar.gz.asc ]
- dune-localfunctions [ tarball: dune-localfunctions-2.9.1.tar.gz , signature: dune-localfunctions-2.9.1.tar.gz.asc ]
DUNE 2.9.1 - Release Notes
DUNE 2.9.1 is a bugfix release, but also includes some minor adjustments. See below for a list of changes.
- Fixed compatibility with more recent compilers.
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([](){})
.
Dependencies
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
Changelog
-
Multiplication of two matrices using
a*b
is now also implemented ifa
orb
is aFieldMatrix
or if both areDiagonalMatrices
. -
The utility function
transpose(m)
will now returnm.transposed()
if available. Otherwise it returns a wrapper storing a copy (this was a reference before) ofm
. References to matrices can still be captured usingtranspose(std::ref(m))
ortransposedView(m)
. -
The transposed of a
FieldMatrix
,DiagonalMatrix
, andDynamicMatrix
is now available using thetransposed()
member function. -
Add helper function
resolveRef()
to transparently usestd::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 thestd::vector
andstd::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 likeLINK_LIBRARIES
,OUTPUT_NAME
, andEXPORT_NAME
-
Remove the variable
DUNE_DEFAULT_LIBS
-
Deprecate cmake file
DuneCMakeCompat.cmake
that just contained the removed functiondune_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 eitherdune_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
, andStd::is_invocable_r
have been removed. Instead, useDune::AlwaysFalse
,Dune::AlwaysTrue
,std::is_invocable
, andstd::is_invocable_r
. -
The deprecated headers
gcd.hh
andlcm.hh
are removed. Usestd::gcd
andstd::lcm
instead. -
Both deprecated macros
DUNE_DEPRECATED
andDUNE_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 withfixedsize()
(lower case s) is removed. ImplementfixedSize()
(camelCase) instead. -
CollectiveCommunication
andgetCollectiveCommunication
are deprecated and will be removed after Dune 2.9. UseCommunication
respectivelygetCommunication
instead. -
The header
power.hh
is deprecated. UseDune::power
frommath.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 ofstd::array
orstd::to_array
.
Module dune-geometry:
-
The
Geometry
interface was extended by methodsjacobian(local)
andjacobianInverse(local)
and corresponding typedefsJacobian
andJacobianInverse
. This is implemented by all geometry implementations provided by dune-geometry. But external implementations need to be adjusted to pass the interface check provided bycheckgeometry.hh
. -
The
Geometry::integrationElement
now needs to return the typeVolume
instead ofctype
. Note that this may be different fromctype
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 methodsjacobian(local)
andjacobianInverse(local)
and corresponding typedefsJacobian
andJacobianInverse
. All grid implementations need to provide the new interface. For transition, the methods and typedefs are default-implemented in theDune::Geometry
interface class which is used for all grid geometries. -
The
Geometry::integrationElement
now needs to return the typeVolume
instead ofctype
. Note that this may be different fromctype
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 variableALBERTA_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 staticGridView::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 typeCommunication
. The typeCollectiveCommunication
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 flagHAVE_UG
anymore. UseHAVE_DUNE_UGGRID
instead. -
The
YLoadBalance
interface is deprecated, as well the implementations. Users should switch toYasp::Partitioning
.
Module dune-istl:
-
Add
const
qualifier toLinearOperator
andScalarProduct
inIterativeSolver
. 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 nowstd::common_type
of the entries for thefield_type
. The olddouble
default is replaced byStd::nonesuch
of an emptyMultiTypeBlockVector
. -
All vector implementations require a
FieldTraits
class specialization to exportfield_type
andreal_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 thecholmod_factor
class that is used byCHOLMOD
itself to store the Cholesky factor. This can be used to use the more advanced features ofCHOLMOD
. -
You can now multiply objects of type
ScaledIdentityMatrix
by scalars usingoperator*
. -
You can now use
std::tuple_element
to get the types ofMultiTypeBlockVector
entries andMultiTypeBlockMatrix
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
, andbilu_decomposition
are removed. Use their camel case replacements. -
Remove deprecated
ImplicitModeOverflowExhausted
, useImplicitModeCompressionBufferExhausted
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.