Dune 2.8.0
Download the Dune 2.8.0 module sources
- dune-common [ tarball: dune-common-2.8.0.tar.gz , signature: dune-common-2.8.0.tar.gz.asc ]
- dune-functions [ tarball: dune-functions-2.8.0.tar.gz , signature: dune-functions-2.8.0.tar.gz.asc ]
- dune-geometry [ tarball: dune-geometry-2.8.0.tar.gz , signature: dune-geometry-2.8.0.tar.gz.asc ]
- dune-grid [ tarball: dune-grid-2.8.0.tar.gz , signature: dune-grid-2.8.0.tar.gz.asc ]
- dune-istl [ tarball: dune-istl-2.8.0.tar.gz , signature: dune-istl-2.8.0.tar.gz.asc ]
- dune-localfunctions [ tarball: dune-localfunctions-2.8.0.tar.gz , signature: dune-localfunctions-2.8.0.tar.gz.asc ]
- dune-typetree [ tarball: dune-typetree-2.8.0.tar.gz , signature: dune-typetree-2.8.0.tar.gz.asc ]
- dune-uggrid [ tarball: dune-uggrid-2.8.0.tar.gz , signature: dune-uggrid-2.8.0.tar.gz.asc ]
Dune 2.8 - Release Notes
Module dune-common
-
Python bindings have been moved from
dune-pythonto the respective core modules.dune-pythonis now obsolete. To activate Python bindings the CMake flagDUNE_ENABLE_PYTHONBINDINGSneeds to be turned on (default is off). Furthermore, flags for either shared library or position independent code need to be used. -
Remove the cmake check for
HAVE_MPROTECTand also do not define this variable in theconfig.hfile. It is defined only inside the headerdebugallocator.hh. -
Added
Dune::IsCallable(indune/common/typetraits.hh) which is an improved version of the deprecatedDune::Std::is_callableand allows for checking if a type is a function object type, i.e. has a ()-operator than can be invoked with the given argument types and returns a specified return type. -
Remove c++ feature tests in cmake for existing c++-17 standards. Add default defines for
DUNE_HAVE_CXX_BOOL_CONSTANT,DUNE_HAVE_CXX_EXPERIMENTAL_BOOL_CONSTANT,DUNE_HAVE_HEADER_EXPERIMENTAL_TYPE_TRAITS,DUNE_HAVE_CXX_APPLY,DUNE_HAVE_CXX_EXPERIMENTAL_APPLY,HAVE_IS_INDEXABLE_SUPPORTinconfig.hfor one more release. -
Previous versions of dune-common imported
std::shared_ptrandstd::make_sharedinto theDunenamespace. dune-common-2.8 stops doing that. -
The file
function.hhis deprecated. It contained the two base classesFunctionandVirtualFunction. In downstream codes, these should be replaced by C++ function objects,std::functionetc. -
Python bindings have been moved from the
dune-pythonmodule which is now obsolete. To activate Python bindings the CMake flagDUNE_ENABLE_PYTHONBINDINGSneeds to be turned on (default is off). Furthermore, flags for either shared library or position independent code needs to be used. -
Support for distributing DUNE modules as python packages has been added. Package meta data is parsed in
packagemetadata.pyfrom the dune.module file. A script/bin/dunepackaging.pywas added to generate package files (setup.py,pyproject.toml) that can also be used to upload packages to the Python Package Index. For a brief description of what is required to add this support to existing dune modules see https://gitlab.dune-project.org/core/dune-common/-/merge_requests/900 Note that this can also be used to generate a package for dune modules that don’t provide Python bindings. -
Eigenvectors of symmetric 2x2
FieldMatrixes are now computed correctly even when they have zero eigenvalues. -
Eigenvectors and values are now also supported for matrices and vectors with
field_typebeing float. -
The
ParameterTreeParser::readINITreecan now directly construct and return a parameter tree by using the new overload without parameter tree argument. -
MPIHelper::instancecan now be called without parameters if it was already initialized. -
MPITraitsnow support complex. -
There is now a matrix wrapper
transpose(M)that represents the transpose of a matrix.
build-system
-
Set minimal required CMake version in cmake to >= 3.13.
-
Set minimal required MPI version to >= 3.0.
-
Add backport of
FindPkgConfig.cmakefrom cmake 3.19.4 since there was a bug in an older find module leading to problems finding tbb in debian:10. -
Update the FindTBB cmake module to search for the
TBBConfig.cmakeor thetbb.pcfile containing the configuration. Add theAddTBBFlags.cmakefile containing the macroadd_dune_tbb_flagsthat must be called to use TBB. -
The name mangling for Fortran libraries like BLAS and LAPACK is now done without a Fortran compiler. So a Fortran compiler is no longer a built requirement.
-
dune_list_filteris deprecated and will be removed after Dune 2.8. Uselist(FILTER ...)introduced by CMake 3.6 instead. -
Remove the CMake options
DUNE_BUILD_BOTH_LIBSandDUNE_USE_ONLY_STATIC_LIBS. Use the default CMake way instead by settingBUILD_SHARED_LIBSaccordingly. Building both static and shared libraries is no longer supported. -
Remove the CMake function deprecated
inkscape_generate_png_from_svg. -
Remove the old and deprecated use of UseLATEX.cmake.
dune_add_latex_documentis a redirection toadd_latex_documentwhich internally useslatexmk. -
Many of the CMake find modules habe been rewritten to use CMake’s imported targets. These targets are also used in the DUNE CMake package configuration files, where they might appear in e.g. the dune-module_LIBRARIES. If you do not use the DUNE CMake build system the linker might complain about e.g. METIS::METIS not being found. In that case your either need to use the CMake modules shipped with DUNE or create these targets manually.
Deprecations and removals
-
Remove deprecated type-traits
has_nan,is_indexable, andis_range, use the CamelCase versions instead. -
Deprecate fallback implementations
Dune::Std::apply,Dune::Std::bool_constant, andDune::Std::make_arrayin favor of std c++ implementations. -
Deprecate type traits
Dune::Std::to_false_type,Dune::Std::to_true_type.Dune::AlwaysFalseandDune::AlwaysTrue(from headerdune/common/typetraits.hh) now inherit fromstd::true_typeandstd::false_typeand are therefore exact replacements for these two type traits. -
Deprecate fallback implementation
Dune::Std::conjunction,Dune::Std::disjunction, andDune::Std::negation. Use std c++17 implementations. -
Deprecate fallback implementations
Dune::Std::is_callableandDune::Std::is_invocable. Use C++17 std implementationstd::is_invocableinstead. Be aware thatDune::Std::is_callableandstd::is_invocableare slightly different concepts, sincestd::is_invocablealso covers invocation of pointers to member functions and pointers to data members. To additionally constrain for that case, there is nowDune::IsCallable(indune/common/typetraits.hh) -
ToUniquePtris deprecated and will be removed after Dune 2.8. Usestd::unique_ptrorstd::shared_ptrinstead. -
Remove deprecated header
dune/common/std/memory.hh; use<memory>instead. -
Deprecate header
dune/common/std/utility.hh; use<utility>instead. -
Deprecate header
dune/common/std/variant.hh; use<variant>instead. -
Remove incomplete CPack support that was never used to make an official build or tarball.
-
Both macros
DUNE_DEPRECATEDandDUNE_DEPRECATED_MSG(text)are deprecated and will be removed after Dune 2.8. Use C++14 attribute[[deprecated]]but be aware that it is no drop-in replacement, as it must be sometimes placed at different position in the code. -
The macros
DUNE_UNUSEDis deprecated and will be removed after Dune 2.8. 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 different position in the code. The use ofDUNE_UNUSED_PARAMETERis discouraged. -
Dune::void_thas been deprecated and will be removed. Please usestd::void_t -
Dune::lcdandDune::gcdare deprecated and will be removed. Please usestd::lcdandstd::gcd. -
VariableSizeCommunicator::fixedsizehas been renamed to FixedSize in line with the communicator changes of dune-grid. The old method will be removed in 2.9.
Module dune-geometry
-
Python bindings have been moved from the
dune-pythonmodule which is now obsolete. To activate Python bindings the CMake flagDUNE_ENABLE_PYTHONBINDINGSneeds to be turned on (default is off). Furthermore, flags for either shared library or position independent code needs to be used. -
The class
AxisAlignedCubeGeometryhas always had a constructor taking two argumentsFieldVector<ctype,coorddim> lowerandFieldVector<ctype,coorddim> upper. This constructor was always to be used in the casedim==coorddimonly, but this was never enforced. Starting with version 2.8, compilation fails with an error message if this constructor is used withdim!=coorddim. -
Two new sets of quadrature rules are provided: the left and right Gauss-Radau quadrature rules. These are optimal rules that include only one endpoint of the integration interval (either left or right) and integrate polynomials of order 2n - 2 exactly.
-
GeometryType has four new methods:
isPrismatic(),isPrismatic(int step)andisConical(),isConical(int step). The versions with an argument return true if the corresponding construction was used in step 0 <=step<=dim-1. The other two assume a default argument ofdim-1(the latest construction step). -
GeometryTypes has two new methods:
prismaticExtension(GeometryType gt)andconicalExtension(GeometryType gt). They return an extended GeometryType based ongtvia the corresponding construction. For example:GeometryType gt = GeometryTypes::line; auto square = GeometryTypes::prismaticExtension(gt); auto triangle = GeometryTypes::conicalExtension(gt);
Deprecations and removals
-
Remove code needed to use reference elements by reference.
-
Remove
GeometryType’s deprecated member functionsGeometryType::make...(). -
Remove deprecated constructor
GeometryType(unsigned dim). -
Remove deprecated
CompositeQuadratureRule(QuadratureRule, int). UseCompositeQuadratureRule(QuadratureRule, Dune::refinement{Intervals|Levels}(int))instead. -
Removed all structs from
Impldealing with the recursive topology construction:TopologyFactory,TopologySingletonFactory,Point,Prism,Pyramid,IsSimplex,IsCube,SimplexTopology,CubeTopology,PyramidTopology,PrismTopology,IfTopology. Deprecated the free functionImpl::isTopology. Use the geometries provided byGeometryTypeandGeometryTypesinstead. To simplify the transition you can include the header “dune/geometry/deprecated_topology.hh”.
Module dune-grid
-
Specialization of
StructuredGridFactoryforAlbertaGridis added to address the special numbering requirements of that grid. -
Return type of
GridFactory::createGrid()changed tostd::unique_ptr. While still the replacement typeToUniquePtrfrom dune-common works, it is marked deprecated and the std implementation should be used directly now. -
UGGridremoves support for_2and_3macros. -
SingleCodimSingleGeomTypeMapperandMultipleCodimMultipleGeomTypeMappernow have anupdate(gridView)method to update the storedGridViewand recalculate the indices after mesh adaptation. -
The
update()member function of mappers is deprecated. Use the new member functionupdate(gridView)with a grid view argument when updating the mapper after the grid or grid view changes. The interface change reflects that grid view has value semantics. -
The “convenience” classes
LeafSingleCodimSingleGeomTypeMapper,LevelSingleCodimSingleGeomTypeMapper,LeafMultipleCodimMultipleGeomTypeMapper,LevelMultipleCodimMultipleGeomTypeMapperhave been deprecated since they don’t comply with the new mapper interface. Just useSingleCodimSingleGeomTypeMapperandMultipleCodimMultipleGeomTypeMapper. -
IdSetnow exports griddimensionandCodim<cd>::Entity. -
UGGridindex sets can now compute the indices of vertices of edges. -
UGGrid: Fixed a bug in the numbering of prism edges. -
Various bugs have been fixed in the
UGGridsubdomain communication implementation. -
YaspGridnow supports class template argument deduction (https://en.cppreference.com/w/cpp/language/class_template_argument_deduction) if you have a C++17-CTAD-compatible compiler (gcc >= 8, clang 5) -
Python bindings have been moved from the
dune-pythonmodule which is now obsolete. To activate Python bindings the CMake flagDUNE_ENABLE_PYTHONBINDINGSneeds to be turned on (default is off). Furthermore, flags for either shared library or position independent code needs to be used. -
Properly implement the
canCommunicatecapability forUGGridandIdentityGrid. -
The return type of the
IndexSet::sizemethods isn’tIndexTypeanymore. In general the return type should be an unsigned integral type. The actual type is implementation specific. All implementations indune-gridnow returnstd::size_t, following our approach to make all size information be unsigned. -
The grid capability
hasEntityIteratornow defaults to whatever the capabilityhasEntityspecifies. Most grid manager implementers now only need to implement/specializehasEntity. -
Add a new range generator
subEntitiesthat allows to iterate over the sub-entities of a specified codimension for a given element (codim-0 entity)for (const auto& vertex : subEntities(element, Codim<dim>)) std::cout << vertex.geometry().corner(0) << "\n";The returned range is sized, i.e.
subEntities(element, Codim<dim>).size()returns the number of vertices in the element and is equivalent toreferenceElement(element).size(dim).
Deprecations and removals
-
Remove
Intersection’s deprecated enumsdimensionandcodimension. Instead use grid’s dimension and 1. -
Remove deprecated
Grid::getRealImplementation. Use theimpl()member function of the facade classes directly instead. -
Remove GeometryGrid’s deprecated constructors accepting raw pointers.
-
Remove deprecated
AlbertaGrid::getRealIntersection. Use theimpl()member function of the intersection class directly instead. -
Remove deprecated
AlbertaGrid::readGridXdrandAlbertaGrid::writeGridXdr. Instead useAlbertaGrid::readGridandAlbertaGrid::writeGrid. -
Remove deprecated header
dune/common/universalmapper.hh. -
Support for PSurface is deprecated and will be removed after Dune 2.8.
-
Support for AmiraMesh is deprecated and will be removed after Dune 2.8.
Module dune-istl
-
Extended the MatrixMarket IO functions for reading and writing vectors with SIMD field_type as tall-skinny matrices.
-
Added public access of the
cholmod_commonobject in classCholmod. -
Python bindings have been moved from the
dune-pythonmodule which is now obsolete. Note that fordune-istlbindings are still very much work in progress. To activate Python bindings the CMake flagDUNE_ENABLE_PYTHONBINDINGSneeds to be turned on (default is off). Furthermore, flags for either shared library or position independent code needs to be used. -
Added new utility functions templates
maxBlockLevel,minBlockLevel,blockLevelindnue/istl/blocklevel.hhto automatically determine the block level of possibly nested ISTL vectors & matrices at compile time. The block level cannot be always uniquely determined forMultiTypeBlockMatrix/MultiTypeBlockVectorsince the nesting level of different block types might differ. Hence,maxBlockLevel,minBlockLevelalways works but if they yield different resultsblockLevelwill not compile. This condition can be checked with the function templatehasUniqueBlockLevel. -
The internal setup code of the various SuiteSparse solvers (like
UMFPack) has been cleaned up. The effects should be invisible to all regular users. However, if you have happened to use theColCompMatrixandColCompMatrixInitializerclasses in the past you need to port your code to useImpl::BCCSMatrixandImpl::BCCSMatrixInitializerinstead. Their interfaces have changed a little bit; please look at the class documentation for details. The old headercolcompmatrix.hhis still there, but backward compatibility is only partial. -
More implementation code of the ILU preconditioners (in
ilu.hh) has moved into theILUnamespace. With the move, some methods have changed their names from std-style to CamelCase. The old methods are still there, but they are deprecated now. The classMatrixBlockErrorhas moved from the fileilu.hhto the fileistlexception.hh, because it is of wider interest. -
Added the routines
flatVectorForEachandflatMatrixForEachthat traverse a (blocked) vector or matrix container. At each entry a functor is called taking the entry and the (flat) index offset. -
Cholmodsolver can now be used with each blocked matrix/vector type compatible withflatVectorForEachandflatMatrixForEach.
Deprecations and removals
-
Drop deprecated bindings of direct solver Pardiso.
-
Remove deprecated preconditioner implementations
SeqILU0andSeqILUn. UseSeqILUinstead, which implements incomplete LU decomposition of any order. -
Remove deprecated methods ‘BlockVector::resize’ and ‘BlockVector::reserve’ with two arguments.
-
Drop support SuperLU 4.
-
Rename the exception
ImplicitModeOverflowExhaustedtoImplicitModeCompressionBufferExhausted, to better reflect its meaning. The old exception is still there, but it triggers a deprecation warning. -
Remove deprecated
SequentialInformation::getSolverCategory(), usecategory()instead.
Known issues
- SuiteSparse’s threading tends to conflict with the threading from OpenBLAS. The author of SuiteSparse reports cases of an 100 fold slowdown for cholmod. See also dune-istl #91.
Module dune-localfunctions:
-
Passing functions that support
f.evaluate(x,y)tointerpolate()is deprecated. Instead the functions should now provideoperator(). Passing functions providing the old interface is still supported in 2.8.LocalFiniteElementFunctionBaseis deprecated. You can rely on duck-typing when passing functions with the new interface.- The virtual interface for interpolating functions in
LocalFiniteElementVirtualInterfacenow usesstd::functioninstead of the deprecatedVirtualFunctionfor the passed function. - The virtual interface wrapper
LocalFiniteElementVirtualImpnow requires that the wrappedLocalFiniteElementimplementation supports the newoperator()based interpolation interface.
-
Add an implementation of the Nédélec element of the first kind, as introduced in “Nédélec, Mixed finite elements in R^3, 1980, DOI: http://dx.doi.org/10.1007/BF01396415". Only the first-order case for triangles, tetrahedra, squares and cubes is implemented.
-
Fix a bug in a shape function of the second-order Lagrange element on the three-dimensional pyramid.
-
Add an implementation of the Raviart-Thomas element for tetrehedra with order 0.
-
Remove deprecated
GenericLocalFiniteElement::topologyId(), usetype().id()instead. -
Imported the Python bindings from the 2.7 branch of dune-python.
-
Replaced the combination of function arguments
topologyIdanddimwith a singleGeometryTypeargument. Tagged the old versions of:numLagrangePoints,equidistantLagrangePoints,RTL2InterpolationBuilder::topologyId(),VirtualMonomialBasis(topologyId),VirtualMonomialBasis::topologyId()as deprecated. -
Add a construction algorithm for high order Nédélec elements on triangles and tetrahedra.
Module dune-functions
-
PreBasisimplementations are now required to provide a methodPreBasis::indices(node,iterator)that replaces binding aNodeIndexSettonodeand then callingNodeIndexSet::indices(iterator). As a consequencePreBasis::IndexSetandPreBasis::makeIndexSetare no longer needed. -
The
RaviartThomasBasisandBrezziDouglasMariniBasisnow return Piola-transformed shape functions. This is implemented by changing the return value oftree().finiteElement(): It is not an object of typeRaviartThomasLocalFiniteElementorBrezziDouglasMariniLocalFiniteElementanymore. Rather, it is an object of a new typeGlobalValuedLocalFiniteElement, which wraps otherLocalFiniteElementimplementations and applies a range-space transformation. Domain-space transformations still have to be done by the calling code. TheGlobalValuedLocalFiniteElementstill implements theLocalFiniteElementinterface ofdune-localfunctions. -
The
RaviartThomasBasisclass now supports tetrahedral grids fororder=0, quadrilateral grids fororder=2, and hexahedral grids fororder=1. -
The
RannacherTurekBasisclass now supports Crouzeix-Raviart elements. Grids containing simplices, cubes or both in 2d and 3d are supported now. -
The
dune-functionsmodule now contains an implementation of a Nedelec basis (for problems posed in H(curl)). While the interface caters to different basis orders, grid dimensions and element types, only the first-order basis called “of the first kind” is implemented, and only for grids containing simplices, cubes or both in 2d and 3d. -
The
dune-functionsmodule now contains an implementation of a Hierarchical Lagrange basis for second order on simplex grids -
There is now an experimental implementation of a periodic basis in form of a class
PeriodicBasis. It is a meta basis, i.e., a basis that is parametrized with another basis (the host basis). In aPeriodicBasis, global degrees of freedom of the host basis can be grouped into equivalence classes, which are then treated as single global degrees of freedom. This allows, in particular, to implement periodic boundary conditions for discretizations without intersection integrals.The
PeriodicBasisclass can only be constructed by using theperiodicmethod from the namespaceDune::Functions::BasisFactory::Experimental. It can change at any moment without much advance notice. Use it at your own risk, and give us feedback! -
Imported the Python bindings from the 2.7 branch of dune-python and fixed remaining issues. Added a CI test that builds various global bases in 2d and 3d and verifies the correct number of dofs.
-
interpolateis now capable of interpolating vector-valued finite element functions correctly. The method of using scalar basis functions combined with vector-valued coefficients to mock a power basis is still supported.
Module dune-typetree
-
Add support for tree transformations for
DynamicPowerNode. -
A power node with runtime degree,
DynamicPowerNode, is added. -
Allow tree traversal for nodes with runtime degree that are not necessarily power nodes.
-
The
forEachNode()traversal function with multiple callbacks is deprecated. Use the more generalapplyToTree()instead. -
Removed the type aliases for the storage type
StorageandConstStoragein the node implementations. -
The memberfunction
childStorage()in the nodes now consistently take an index or anindex_constantas argument.
Module dune-uggrid
-
Added support for All_All communication on facets.
-
Removes support for
_2and_3macros. -
Remove support for XDR.
|
Legal Statements / Impressum |
Hosted by TU Dresden & Uni Heidelberg |
generated with Hugo v0.111.3
(Jan 21, 23:31, 2026)