Dune 2.4.1
Download the Dune 2.4.1 module sources
- dune-common [ tarball: dune-common-2.4.1.tar.gz , signature: dune-common-2.4.1.tar.gz.asc ]
- dune-geometry [ tarball: dune-geometry-2.4.1.tar.gz , signature: dune-geometry-2.4.1.tar.gz.asc ]
- dune-grid [ tarball: dune-grid-2.4.1.tar.gz , signature: dune-grid-2.4.1.tar.gz.asc ]
- dune-grid-howto [ tarball: dune-grid-howto-2.4.1.tar.gz , signature: dune-grid-howto-2.4.1.tar.gz.asc ]
- dune-istl [ tarball: dune-istl-2.4.1.tar.gz , signature: dune-istl-2.4.1.tar.gz.asc ]
- dune-localfunctions [ tarball: dune-localfunctions-2.4.1.tar.gz , signature: dune-localfunctions-2.4.1.tar.gz.asc ]
DUNE 2.4.1 - Release Notes
DUNE 2.4.1 is mostly a bug fix release, but as DUNE 3.0.0 is still pretty far out, this release also contains a number of smaller new features and improvements. The following list of backported features and bug fixes is not exhaustive, for a complete list see the backport-tracking bugs for dune-common, dune-geometry, dune-grid, dune-istl and dune-localfunctions.
Release History
2.4.1
- Fix Doxygen generation during
make install
when using CMake without aDoxylocal
file. - Fix for using Scotch on Debian when using custom index type and static libraries.
- Support for basis functions that are only bi-orthogonal on the faces for dualmortarbasis in dune-localfunctions.
- Some small fixes to tarball generation.
2.4.1-rc2
- Fix broken version signatures and tarball names in RC1.
2.4.1-rc1
- Initial release.
Dependencies
In order to build this version of DUNE you need at least the following software:
- CMake (>=2.8.6), preferably (>=2.8.12)
- pkg-config
- a standard compliant C++ compiler, tested are g++ (>=4.4) and Clang (>=3.4); recent versions of ICC (>= 15) should work, older versions like 14.0.3 needs patching of system headers and is discouraged
Build System
- The CMake build system will now enable C++14 by default if your compiler supports it. You can change this by passing
-DCXX_MAX_STANDARD=11
to CMake. Allowed values for this variable are currently 11, 14, 17. If you bypass the automatic C++ support detection with-DDISABLE_CXX_VERSION_CHECK
, you need to tell the build system about the maximum supported C++ standard of your compiler by adding-DCXX_MAX_SUPPORTED_STANDARD=version
to your CMake configuration, whereversion
should be one of 11, 14, 17. - The CMake build system has a new function
dune_require_cxx_standard(MODULE "name" VERSION version)
that you can call in your own module if it needs a newer C++ standard than C++11. Valid values for the versionversion
are 11, 14, 17. - UMFPack detection now uses a backported version of the new SuiteSparse test from the current master branch, which should work much more reliably for newer versions of SuiteSparse and UMFPACK.
- The CMake build system now supports third-party grids for the Grid Type magic mechanism.
- A larger number of
dunecontrol
subcommands now skip the version check, leading to faster run times and less spurious error messages. - The autotools build system should no longer fail when it cannot find a Fortran compiler.
dune-common
- The
DebugAllocator
now works on OS X. - Reduced the number of warnings when using recent version versions of OpenMPI.
dune-geometry
GlobalGeometryTypeIndex
now exports the per-dimension index offset via the static member functionoffset(std::size_t dim)
. This method isconstexpr
and can thus be used in compile-time context.
dune-grid
PartitionSet
is now comparable.- New
printGrid()
function for visualizing topology and index structure of 2D grids. - The
GmshWriter
can now write out physical entities. - The
VTKWriter
now supportsdune-functions
style local functions. - The
VTKSequenceWriter
can now be constructed from aVTKWriter
instead of aGridView
, which is useful fordune-functions
and makes theSubsamplingVTKSequenceWriter
obsolete. IntersectionIterator
now complies to the forward iterator interface, which makes it more consistent withEntityIterator
.
Bug Fixes
- Replaced
EntityPointer
withEntity
in a number of places. - Fixed a number of problems with very small parallel
YaspGrid
instances. - Tests for the deprecated ALUGrid 1.52 bindings compile again.
- Added missing
insertionIndex()
for UG leaf intersections. ParMetisGridPartitioner
now works with ParMETIS 3.x.- Numerous smaller fixes.
dune-istl
- Make ParMetis
idx_t
handling a little more robust. - Do not require BLAS when building with CMake.
- The multi type containers now have
operator[]
implementations forstd::integral_constant
. DynamicMatrix
now supports MatLab output.- Numerous smaller fixes for using the solvers with complex-valued problems.
dune-localfunctions
- Some documentation improvements.
dune-grid-howto
DUNE 2.4 - Release Notes
- The minimal required compiler are GCC 4.4 (GCC 4.7 on OSX, see this bug) and Clang 3.4. We try to stay compatible to ICC 15, and newer. Older versions of Clang might work, ICC 14.0.3 needs patches to systems headers.
buildsystem
- The default buildsystem has been switched from Autotools to CMake. For Dune 2.4 you can use Autotools by adding
--no-cmake
to dunecontrol. (see our CMake documentation, this bug). - If MPI is found, the build is parallel. It is no longer necessary to explicitly enable its support. It can still be disabled by passing
-DCMAKE_DISABLE_FIND_PACKAGE_MPI=TRUE
for CMake and--disable-parallel
for Autotools. - Some convenience macros for automatically copying or symlinking files from the source tree to the build tree are provided in
dune-common/cmake/modules/DuneSymlinkOrCopy.cmake
- With CMake headercheck is disabled by default as it creates a host of files in the build directory. You can re-enable it by adding
-DENABLE_HEADERCHECK=1
to the CMake flags.
Deprecated and removed features
- The use of Autotools is deprecated and will be removed after Dune 2.4. Use CMake instead.
- The macros
HAVE_DUNE_HASH
,HAVE_INTEGRAL_CONSTANT
,HAVE_RVALUE_REFERENCES
,HAVE_STD_HASH
,HAVE_TYPE_TRAITS
,HAVE_VARIADIC_CONSTRUCTOR_SFINAE
and,HAVE_VARIADIC_TEMPLATES
, defined inconfig.hh
, are deprecated and will be removed after Dune 2.4. This applies to variousHAVE_TR1_*
, too. The variables are always true for the minimal required compiler versions.
dune-common
- dune-common now provides a (simple) implementation of
bash-completion
for thedunecontrol
command. FieldMatrix
andFieldVector
now offer construction from initializer lists.CollectiveCommunication
is now default-constructible.- Objects of type
DiagonalMatrix
can now be constructed frominitializer_list
s.
Deprecated and removed features
- The class
SelectType
(fromtypetraits.hh
), deprecated in Dune 2.3, has been removed. Useconditional
instead. - The deprecated file
misc.hh
has been removed. Most math-related stuff has moved tomath.hh
. The two methodshasPrefix
andhasSuffix
are now in the new headerstringutility.hh
. The methodsSQR
andgenFilename
disappear with no replacement. - Support for very old MPI implementations, specifically implementations without support for the MPI-2.1 standard, has been removed. It was deprecated in Dune 2.3. This should affect very few users because all common MPI packages have been compatible with that standard since 2009.
- Support for compilers that lack
std::thread
. Thread support is needed to implement a thread-safe quadrature rule cache, see this bug. All compilers officially supported by dune havestd::thread
. Note however that support on OS X for GCC < 4.7 was dropped because of the lacking support forstd::thread
.
dune-geometry
- The quadrature rule cache
QuadratureRules
is now thread safe, see this bug. - There are new types
Codim<cd>
andDim<d>
that can be used to encapsulate a (co)dimension. They inherit fromstd::integral_constant<int>
and are useful when an interface should accept both a dimension and a codimension.
Deprecated and removed features
- The 1d quadrature rules
Gauss
,Jacobian_1_0
, andJacobian_2_0
have been removed. Please use the rulesGaussLegendre
,GaussJacobi_1_0
, andGaussJacobi_2_0
. - The class
QuadraturePoint
does not export the variabled
and the typeCoordType
anymore. Please usedimension
andField
instead. - The methods
global
,mapping
,volumeOuterNormal
, andinitializeTopology
have been removed from theReferenceElement
class. - The methods
ReferenceElement::global
have been removed; useReferenceElement::geometry<codim>(i).global
instead. The non-interface methodReferenceElement::mapping
, which is superseded by thegeometry
method, has been deprecated, too. - The classes
GenericReferenceElement*
were renamed asReferenceElement*
in Dune 2.3. The old, deprecated names have been removed. - The class
MockGeometry
, deprecated in Dune 2.3, has been removed. In most cases, replacing it byMultiLinearGeometry
and adapting the includes will do. - The header
genericgeometry/geometry.hh
and its containing classesGeometry
,GenericGeometry
, andLocalGeometry
, which were all deprecated in Dune 2.3, have been removed.
dune-grid
- The minimum required version of
UG
is nowUG-3.11.0
. Note that you need a bugfix provided byUG-3.11.1
if you want to buildUG
on your own with Clang. UGGrid
now allows to do load balancing with the element partitioning being provided by third-party software. There is no restriction on what software to use here. All you need to do is to set up astd::vector
which for each element contains the rank where this element is supposed to be sent to. Everything else happens automatically.- The results of
Geometry::jacobianTransposed
andGeometry::jacobianInverseTransposed
are now returned by value rather than by reference. The result types are guaranteed to be copyable and assignable. In the unlikely event that you store references or pointers to these returned values, this change might break your code without a word of warning. - The class
Entity<0>
has a new methodsubEntities(uint codim)
, which returns the number of subentities of the given codimension. It has the same functionality as the methodcount
, but thecodim
argument of the new method is normal parameter, rather than a template parameter. Also, we believe that the new name is more telling. Thecount
method is deprecated. IdentityGrid
has been moved from dune-grid-dev-howto to dune-grid.- Support for the external Grid
Alberta
older then the current release 3 has been abandoned without deprecation. - The mapper classes
SingleCodimSingleGeometryMapper
andMultipleCodimMultipleGeometryMapper
now use the number type used by the grid index set to return indices. Previously,int
was hard-wired. - It is now possible to use C++11 range-based for loops to iterate over entities and intersections. See the new section Iterating over grid entities and intersections in the Doxygen documentation for further details. This feature is not available on all supported compilers, it requires GCC 4.6 or greater (or another compiler that supports range-based for loops).
- All iterators over entities are now forward iterators in the sense of the standard library. In particular, they can now be default-constructed and postfix-incremented, which wasn’t possible previously. The usual caveat concerning postfix increments applies: postfix incrementing may be noticeably slower than prefix incrementing.
- The various
Mapper
classes indune/grid/common
now have methodsindex
andsubIndex
, which do the same thing as themap
methods. With this renaming theMapper
interface is more consistent with the conceptually similarIndexSet
interface. The oldmap
methods are still there, but they are marked as deprecated and will be removed after the 2.4 release. - There is a new method
types
on index sets that returns an iterator range visiting all geometry types of a given codimension contained in the domain of the index set. Its type is implementation defined and exported as typedefTypes
. - A new helper class
ParMetisGridPartitioner
allows to use ParMetis to compute partitionings for arbitrary Dune grids. Currently,UGGrid
can handle such partitionings. - Entities can now be compared with each other.
TensorGridFactory
, a factory class for tensor product grids can be found indune/grid/utility/tensorgridfactory.hh
. It is implemented through theGridFactory
for all unstructured grids and has a specialization forYaspGrid
. The factory class provides a multitude methods to fill coordinate ranges. Check the doxygen documentation for details.
Copyable entities and intersections
Entity
s and Intersection
s can now be copied and default-constructed. This will allow us to remove the EntityPointer
, which has been deprecated in DUNE 2.4. User-visible changes include:
- Most obviously: Instead of storing an
EntityPointer
or anIntersectionIterator
, it is now possible to directly store a copy of anEntity
or anIntersection
. - Iterators are now allowed to return temporary Entity or Intersection objects instead of references. Code that captures the result in a const reference will still work in both cases, because the life time of the temporary is bound to this reference. Important interface change: Code that forwards such references may fail due to dangling references. In order to avoid this you can forward with the correct return type using
decltype(*it)
. I.e. you have to changeconst Entity& foo(const Iterator& it) { return *it;}
toauto foo(const Iterator& it) -> decltype(*it) { return *it;}
. - Important: Keep in mind that
Entity
andIntersection
objects are expensive. Don’t try to store lots of them! If you need to keep around a list of entities, useEntitySeed
instead. - All interface methods that used to return an
EntityPointer
now return anEntity
instead. This change applies to the following methods:Entity::father()
for entities of codimension 0.Entity::subEntity<codim>()
for entities of codimension 0.Intersection::inside()
Intersection::outside()
Grid::entityPointer(const EntitySeed&)
. This method has been deprecated, please use the new methodGrid::entity(const EntitySeed&)
instead, which returns anEntity
Entity
andEntityPointer
have a certain amount of interoperability code to ease the transition. In particular, you can dereference an entity with*entity
and call member methods withentity->foo()
so that your code works with both grids that have been ported to the new interfaces as well as unported grids. All of the compatibility methods do however raise deprecation warnings.- All grid implementations in
dune-grid
have been ported to the new interface, except for the deprecated bindings for ALUGrid 1.52. If you use ALUGrid, you should switch to the newdune-alugrid
module. - While ported and unported grids are mostly interoperable, there is one important exception: You cannot use meta grids that use the new interface (like
GeometryGrid
with host grids that still use the old interface.
YaspGrid
The YaspGrid grid manager has received an important overhaul. Changes include:
- YaspGrid now has a second template parameter, which specifies how coordinates are stored. This parameter defaults to
EquidistantCoordinates<ctype, dim>
which mimics the old behavior. - As a new feature, YaspGrid now has the capabilities of a tensor-product grid. This can be enabled via the second template parameter
TensorProductCoordinates<ctype, dim>
. Constructor calls for a tensor-product grid useDune::array<std::vector<ctype>, dim>
as a data structure for the coordinates of the grid. - Changing the coordinate type of YaspGrid can now be done by switching the template parameter of the coordinate container.
YaspGrid
is (again) working for arbitrary dimension.YaspGrid
implements entities of arbitrary codimension and can communication on these entities. With this addition,YaspGrid
fulfills all requirements of a DUNE grid (as decided upon in Aachen 2013).- You can obtain an equidistant
YaspGrid
with non-trivial origin by usingEquidistantOffsetCoordinates<ctype, dim>
as the second template parameter. This feature can also be used throughStructuredGridFactory
- There are only three constructors for a
Yaspgrid
: One for equidistant grids, one for equidistant grids with non-trivial origin and one for tensorproduct grids. All other constructors are either deprecated or can still be used due to proper default values on the new constructors. YaspGrid
now makes consequent use ofCollectiveCommunication
. As these classes have just been made default-constructible, the communicator parameter can usually be omitted on the constructor call.- A
BackupRestoreFacility
for YaspGrid is implemented in the header<dune/grid/yaspgrid/backuprestore.hh>
. Equidistant grids write a single file for all processes, tensorproduct grids write one file per processor, that only contains the coordinate range relevant to that processor. The output format is a self-defined ascii format which is readable by the human eye. - All partitioning code is now located in
dune/grid/yaspgrid/partitioning.hh
. Note that if you previously implemented your own partitioner, you need to update its signature to usestd::array<int, dim>
instead ofDune::FieldVector<int, dim>
.YaspFixedSizePartitioner
is a new implementation of a partitioner with a predefined number of processors per direction. YaspGrid
now provides a native implementation ofPersistentContainer
.
Deprecated and removed features
- The
SGrid
grid manager has been marked as deprecated, and will be removed after the 2.4 release.YaspGrid
now supports all features ofSGrid
, so there is no reason left to have two structured grid managers in dune-grid. To suppress the SGrid deprecation warning define the macroDUNE_AVOID_SGRID_DEPRE_WARNING_BECAUSE_I_KNOW_WHAT_IM_DOING
. - The class
Geometry
does not export the typeJacobian
anymore. Please use the typeJacobianInverseTransposed
instead. - The class
Entity
does not export the typectype
anymore. Please use the typeEntity::Geometry::ctype
instead. - The class
Entity
does not export the numberdimensionworld
anymore. Please useEntity::Geometry::dimensionworld
instead. - The methods
EntityIterator::level
andEntityPointer::level
have been deprecated. To obtain the level of an entity pointed to by an iterator or EntityPointer, please dereference the iterator/pointer and call the methodlevel
on the entity directly. - The class
EntityPointer
does not exportcodim
anymore. Please use the typecodimension
instead (see this bug). - The method
Entity<0>::count<codim>
is deprecated. Please useEntity<0>::subEntities(uint codim)
instead. - The values
Geometry::dimension
andGeometry::dimensionworld
are deprecated, and will be removed after the release ofdune-grid-2.4
. - The constructors of
YaspGrid
, that take a communicator as its first argument are deprecated. Please use the new constructors instead. The old ones will be removed after the release ofdune-grid-2.4
. - The capability class
Dune::Capabilities<GridType>::isParallel
is deprecated because its meaning was never well-defined. It will be removed after the 2.4 release. To suppress the deprecation warning define the macroDUNE_AVOID_CAPABILITIES_IS_PARALLEL_DEPRECATION_WARNING
. - The
map
methods on mappers are deprecated and will be removed after the 2.4 release. They are replaced by theindex
andsubIndex
method (see above). - The method
geomTypes
on index sets is deprecated and will be removed after the 2.4 release. It is replaced by the newtypes
method (see above). - The methods
lbegin
,lend
,leafbegin
, andleafend
on grids are deprecated and will be removed after the 2.4 release. Use instead the methodsbegin
andend
from the grid’s level and leaf grid view. - The
EntityPointer
is deprecated and will be removed after the 2.4 release. Instead, it is now possible to store and copy entities directly. All interface methods that used to return anEntityPointer
now return anEntity
instead. In order to ease the transition, entities can be used like anEntityPointer
, but doing so will also raise deprecation warnings. - In line with the
EntityPointer
removal, the methodentityPointer(const EntitySeed&)
on grids has been deprecated. Please use the new methodentity(const EntitySeed&)
instead, which returns anEntity
. - Comparisons between different types of entity iterators (level vs. leaf) and
EntityPointer
have been deprecated. Those kinds of comparisons should be replaced by comparisons between the entities pointed at by the iterators, soleaf_it == level_it
becomes*leaf_it == *level_it
. Iterators of a single type can of course still be compared with each other. - Support for Grape has been deprecated and will be removed after the 2.4 release. Use the Dune module dune-grape instead.
Changes for maintainers of grid implementations
- All grid implementations not using the
DefaultGridView
must rename their implementations fromleafView
/levelView
toleafGridView
/levelGridView
. - Grid must be ported to the new copyable entities and intersections. See this How-To for some pointers.
- Grids are now allowed to return temporary objects from their entity and intersection iterators. This is mostly interesting for meta grid developers, as it allows for a much more straightforward implementation.
dune-istl
Deprecated and removed features
- The transition header
<dune/istl/diagonalmatrix.hh>
has been removed. The original header was moved to dune-common in Dune 2.2, use this instead.
dune-localfunctions
- All LocalFiniteElement classes now have a method
size
, which returns the number of shape functions of the finite element. This method is for convenience: previously, thelocalBasis
had to be fetched to get the same information. - The
MonomLocalFiniteElement
class has been renamed toMonomialLocalFiniteElement
. Correspondingly, its headermonom.hh
has been renamed tomonomial.hh
. The old class and header are still there for backward-compatibility. - New Raviart-Thomas elements were added but only for interpolation as the Jabobians are missing. The new elements are Raviart-Thomas 3 and 4 for 2d quadrilaterals. Thanks to Jizhou Li.
- You can now get second derivatives of the shape functions of the
Pk2DLocalFiniteElement
. Thanks to Elisa Friebel.
Deprecated and removed features
- The class
Q2LocalFiniteElement
, deprecated in Dune 2.3 has been removed. Please use the more generalQkLocalFiniteElement
instead. - The class
RannacherTurek2DLocalFiniteElement<D, R>
, deprecated in Dune 2.3, has been removed. Please useRannacherTurekLocalFiniteElement<D, R, 2>
instead. - Most of the Raviart-Thomas and Brezzi-Douglas-Marini elements not following the new naming scheme have been removed.
dune-grid-howto
dune-grid-dev-howto
- The whole module was deprecated with DUNE 2.3 and has been abandoned.
IdentityGrid
has been moved to dune-grid.
Known Bugs
- The pseudo inverse used in the generic geometries might fail for nearly singular matrices. This is not really a problem unless the grid is nearly degenerate.
- The parallel
UGGrid
may return wrong ids on very complex adaptively refined and load-balanced grids. The reason is that the Dune grid interface mandates that two entities on different levels have the same id if they are copies. Therefore the UGGrid id/subId methods look through the ancestry of a given entity to see if there are copies. However, UG does so-called vertical load-balancing, which means that the ancestry may be distributed across different processors. Since the current code does not take that into account, wrong ids will be returned in the presence of vertical load-balancing. This is a potentially severe issue, because users do not get error messages, only ids that are tacitly wrong. - Building shared libraries with CMake might break if you are using external static libraries compiled without support for position independent code (g++ -fpic).
- Dune-grid fails to build with GCC 4.4 when configured with UGGrid. This is due to an overload resolution failure in GCC 4.4 that is no longer present in newer compilers. (See this bug.)
- You can only build dune with GCC 4.9 without the
-pedantic
flag because it will otherwise reject some compatibility code needed to support GCC 4.4. (See this bug.) - Dune-istl does not work with METIS 5, see this bug.
- Dune does not build on debian-ish systems if all the following conditions are satisfied: The system uses GCC 4.9 or newer as default compiler, you are building with GCC 4.8 or below, and you are using MPICH. The reason is this bug which makes mpi propose flags from the newer default compiler also for older compilers where they are not supported.
A list of all bugs can be found online in our bug-tracker http://www.dune-project.org/flyspray/.