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-python
to the respective core modules.dune-python
is now obsolete. To activate Python bindings the CMake flagDUNE_ENABLE_PYTHONBINDINGS
needs 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_MPROTECT
and also do not define this variable in theconfig.h
file. 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_callable
and 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_SUPPORT
inconfig.h
for one more release. -
Previous versions of dune-common imported
std::shared_ptr
andstd::make_shared
into theDune
namespace. dune-common-2.8 stops doing that. -
The file
function.hh
is deprecated. It contained the two base classesFunction
andVirtualFunction
. In downstream codes, these should be replaced by C++ function objects,std::function
etc. -
Python bindings have been moved from the
dune-python
module which is now obsolete. To activate Python bindings the CMake flagDUNE_ENABLE_PYTHONBINDINGS
needs 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.py
from the dune.module file. A script/bin/dunepackaging.py
was 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
FieldMatrix
es are now computed correctly even when they have zero eigenvalues. -
Eigenvectors and values are now also supported for matrices and vectors with
field_type
being float. -
The
ParameterTreeParser::readINITree
can now directly construct and return a parameter tree by using the new overload without parameter tree argument. -
MPIHelper::instance
can now be called without parameters if it was already initialized. -
MPITraits
now 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.cmake
from 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.cmake
or thetbb.pc
file containing the configuration. Add theAddTBBFlags.cmake
file containing the macroadd_dune_tbb_flags
that 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_filter
is deprecated and will be removed after Dune 2.8. Uselist(FILTER ...)
introduced by CMake 3.6 instead. -
Remove the CMake options
DUNE_BUILD_BOTH_LIBS
andDUNE_USE_ONLY_STATIC_LIBS
. Use the default CMake way instead by settingBUILD_SHARED_LIBS
accordingly. 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_document
is a redirection toadd_latex_document
which 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_array
in favor of std c++ implementations. -
Deprecate type traits
Dune::Std::to_false_type
,Dune::Std::to_true_type
.Dune::AlwaysFalse
andDune::AlwaysTrue
(from headerdune/common/typetraits.hh
) now inherit fromstd::true_type
andstd::false_type
and 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_callable
andDune::Std::is_invocable
. Use C++17 std implementationstd::is_invocable
instead. Be aware thatDune::Std::is_callable
andstd::is_invocable
are slightly different concepts, sincestd::is_invocable
also 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
) -
ToUniquePtr
is deprecated and will be removed after Dune 2.8. Usestd::unique_ptr
orstd::shared_ptr
instead. -
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_DEPRECATED
andDUNE_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_UNUSED
is 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_PARAMETER
is discouraged. -
Dune::void_t
has been deprecated and will be removed. Please usestd::void_t
-
Dune::lcd
andDune::gcd
are deprecated and will be removed. Please usestd::lcd
andstd::gcd
. -
VariableSizeCommunicator::fixedsize
has 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-python
module which is now obsolete. To activate Python bindings the CMake flagDUNE_ENABLE_PYTHONBINDINGS
needs to be turned on (default is off). Furthermore, flags for either shared library or position independent code needs to be used. -
The class
AxisAlignedCubeGeometry
has always had a constructor taking two argumentsFieldVector<ctype,coorddim> lower
andFieldVector<ctype,coorddim> upper
. This constructor was always to be used in the casedim==coorddim
only, 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 ongt
via 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
Impl
dealing 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 byGeometryType
andGeometryTypes
instead. To simplify the transition you can include the header “dune/geometry/deprecated_topology.hh”.
Module dune-grid
-
Specialization of
StructuredGridFactory
forAlbertaGrid
is added to address the special numbering requirements of that grid. -
Return type of
GridFactory::createGrid()
changed tostd::unique_ptr
. While still the replacement typeToUniquePtr
from dune-common works, it is marked deprecated and the std implementation should be used directly now. -
UGGrid
removes support for_2
and_3
macros. -
SingleCodimSingleGeomTypeMapper
andMultipleCodimMultipleGeomTypeMapper
now have anupdate(gridView)
method to update the storedGridView
and 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
,LevelMultipleCodimMultipleGeomTypeMapper
have been deprecated since they don’t comply with the new mapper interface. Just useSingleCodimSingleGeomTypeMapper
andMultipleCodimMultipleGeomTypeMapper
. -
IdSet
now exports griddimension
andCodim<cd>::Entity
. -
UGGrid
index 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
UGGrid
subdomain communication implementation. -
YaspGrid
now 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-python
module which is now obsolete. To activate Python bindings the CMake flagDUNE_ENABLE_PYTHONBINDINGS
needs to be turned on (default is off). Furthermore, flags for either shared library or position independent code needs to be used. -
Properly implement the
canCommunicate
capability forUGGrid
andIdentityGrid
. -
The return type of the
IndexSet::size
methods isn’tIndexType
anymore. In general the return type should be an unsigned integral type. The actual type is implementation specific. All implementations indune-grid
now returnstd::size_t
, following our approach to make all size information be unsigned. -
The grid capability
hasEntityIterator
now defaults to whatever the capabilityhasEntity
specifies. Most grid manager implementers now only need to implement/specializehasEntity
. -
Add a new range generator
subEntities
that 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 enumsdimension
andcodimension
. 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::readGridXdr
andAlbertaGrid::writeGridXdr
. Instead useAlbertaGrid::readGrid
andAlbertaGrid::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_common
object in classCholmod
. -
Python bindings have been moved from the
dune-python
module which is now obsolete. Note that fordune-istl
bindings are still very much work in progress. To activate Python bindings the CMake flagDUNE_ENABLE_PYTHONBINDINGS
needs 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
,blockLevel
indnue/istl/blocklevel.hh
to automatically determine the block level of possibly nested ISTL vectors & matrices at compile time. The block level cannot be always uniquely determined forMultiTypeBlockMatrix
/MultiTypeBlockVector
since the nesting level of different block types might differ. Hence,maxBlockLevel
,minBlockLevel
always works but if they yield different resultsblockLevel
will 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 theColCompMatrix
andColCompMatrixInitializer
classes in the past you need to port your code to useImpl::BCCSMatrix
andImpl::BCCSMatrixInitializer
instead. Their interfaces have changed a little bit; please look at the class documentation for details. The old headercolcompmatrix.hh
is still there, but backward compatibility is only partial. -
More implementation code of the ILU preconditioners (in
ilu.hh
) has moved into theILU
namespace. 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 classMatrixBlockError
has moved from the fileilu.hh
to the fileistlexception.hh
, because it is of wider interest. -
Added the routines
flatVectorForEach
andflatMatrixForEach
that traverse a (blocked) vector or matrix container. At each entry a functor is called taking the entry and the (flat) index offset. -
Cholmod
solver can now be used with each blocked matrix/vector type compatible withflatVectorForEach
andflatMatrixForEach
.
Deprecations and removals
-
Drop deprecated bindings of direct solver Pardiso.
-
Remove deprecated preconditioner implementations
SeqILU0
andSeqILUn
. UseSeqILU
instead, 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
ImplicitModeOverflowExhausted
toImplicitModeCompressionBufferExhausted
, 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.LocalFiniteElementFunctionBase
is deprecated. You can rely on duck-typing when passing functions with the new interface.- The virtual interface for interpolating functions in
LocalFiniteElementVirtualInterface
now usesstd::function
instead of the deprecatedVirtualFunction
for the passed function. - The virtual interface wrapper
LocalFiniteElementVirtualImp
now requires that the wrappedLocalFiniteElement
implementation 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
topologyId
anddim
with a singleGeometryType
argument. 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
-
PreBasis
implementations are now required to provide a methodPreBasis::indices(node,iterator)
that replaces binding aNodeIndexSet
tonode
and then callingNodeIndexSet::indices(iterator)
. As a consequencePreBasis::IndexSet
andPreBasis::makeIndexSet
are no longer needed. -
The
RaviartThomasBasis
andBrezziDouglasMariniBasis
now return Piola-transformed shape functions. This is implemented by changing the return value oftree().finiteElement()
: It is not an object of typeRaviartThomasLocalFiniteElement
orBrezziDouglasMariniLocalFiniteElement
anymore. Rather, it is an object of a new typeGlobalValuedLocalFiniteElement
, which wraps otherLocalFiniteElement
implementations and applies a range-space transformation. Domain-space transformations still have to be done by the calling code. TheGlobalValuedLocalFiniteElement
still implements theLocalFiniteElement
interface ofdune-localfunctions
. -
The
RaviartThomasBasis
class now supports tetrahedral grids fororder=0
, quadrilateral grids fororder=2
, and hexahedral grids fororder=1
. -
The
RannacherTurekBasis
class now supports Crouzeix-Raviart elements. Grids containing simplices, cubes or both in 2d and 3d are supported now. -
The
dune-functions
module 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-functions
module 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
PeriodicBasis
class can only be constructed by using theperiodic
method 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.
-
interpolate
is 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
Storage
andConstStorage
in the node implementations. -
The memberfunction
childStorage()
in the nodes now consistently take an index or anindex_constant
as argument.
Module dune-uggrid
-
Added support for All_All communication on facets.
-
Removes support for
_2
and_3
macros. -
Remove support for XDR.