-
Simon Praetorius authoredSimon Praetorius authored
Master (will become release 2.11)
Release 2.10
-
Improve testing support on Laplacian matrices with an optional diagonal regularization parameter.
-
Base the implementation of
VariableBlockVector
onstd::vector
as the storage type. Note that this prevents from usingbool
as block type that was possible before. -
A method
BCRSMatrix::setIndicesNoSort()
was added. Similar toBCRSMatrix::setIndices()
this allows to insert all indices of a row at once, but - incontrast to the latter - does not sort them. This allows to speed up insertion if indices are already sorted. -
UMFPACK
is extended to arbitrary blocked matrix structures. This includesMultiTypeBlockMatrix
. The external interface is unchanged. However, internally theBCCSMatrixInitializer
is replaced by direct calls offlatMatrixForEach
similar toCholmod
. This requires a compatible vector field of "ignored" degrees of freedom. The methodsetSubMatrix
with a top-level index set is preserved for compatibility. -
The internal storage in
MatrixIndexSet
was changed fromstd::set
to a sortedstd::vector
(with astd::set
fallback for very dense rows) to improve performance. The stored index type was changed fromstd::size_t
touint32_t
to reduce memory consumption and improve performance. Hence,MatrixIndexSet
can no longer be used for very large matrices with more than 2^32 columns. -
Added flag 'useFixedOrder' to the coarsen method of AMGs ParallelIndicesCoarsener. If set to true, during the creation of the coarser matrix (by accumulation and restriction to fewer processes) the coarse matrix rows are ordered in a fixed manner, making parallel runs reproducible; the runtime is possibly not ideal though. If set to false (which is the default), the row order depends on the order of messages received from the processes responsible for the respective parts of the finer grid. Then the indices on the coarser grid may differ from run to run.
-
Define
field_type
andreal_type
inMultiTypeBlock[Matrix|Vector]
only if a common type of these types exist over all blocks in the container. Otherwise it is defined asStd::nonesuch
.
Deprecations and removals
-
The deprecated CMake variables
SUPERLU_INCLUDE_DIRS
,SUPERLU_LIBRARIES
,SUPERLU_DUNE_COMPILE_FLAGS
, andSUPERLU_DUNE_LIBRARIES
are removed, they are replaced by the targetSuperLU::SuperLU
. -
Multiple containers no longer provide the deprecated member function
blocklevel
. Use the free functionblockLevel()
. -
Removed deprecated function
initSolverFactories()
, useinitSolverFactories<O>
instead. -
Removed deprecated
MultyTypeBlockMatrix::size()
, useN()
instead. -
Removed deprecated
MultyTypeBlockVector::count()
, useN()
instead. -
Deprecated
writeSVGMatrix
withstd::stream
as the second argument. Use the method withstd::stream
as the first argument.
Release 2.9
-
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
. -
The
Cholmod
class now has an additional template parameterIndex
, which specifies the type used byCHOLMOD
for integers. The typesint
(the default) andSuiteSparse_long
(which is usuallylong int
) are supported. UseSuiteSparse_long
if your problems are too big forint
. -
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.
Release 2.8
-
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.
Release 2.7
-
New
SolverFactory
for generating sequential direct or iterative solvers and preconditioners from aParameterTree
configuration. -
BDMatrix
objects now have the methodsolve
, which implements that canonical way to solve block-diagonal linear systems. -
The class
VariableBlockVector::CreateIterator
is a true STL output iterator now. This means that you can use STL algorithms likestd::fill
orstd::copy
to set the block sizes. -
MultiTypeBlockVector<Args...>
now inherits the constructors from its parent type (std::tuple<Args...>
). This means you can now also constructMultiTypeBlockVector
s from values or references of BlockVectors. -
All matrix and vector classes can now be instantiated with number types directly (A number type is any type for which
Dune::IsNumber<T>::value
is true). For example, you can now useBlockVector<double>
instead of the more cumbersomeBlockVector<FieldVector<double,1> >
. Similarly, you can useBCRSMatrix<double>
instead ofBCRSMatrix<FieldMatrix<double,1,1>>
. The old forms still work, andFieldVector
andFieldMatrix
types with a single entry can still be cast to theirfield_type
. Therefore, the change is completely backward-compatible. -
Added a right-preconditioned flexible restarted GMRes solver
-
The UMFPack binding use the long int functions to compute larger systems. With the *dl* versions instead of the *di* versions UMFPACK will not have a memory limit of just 2 GiB.
-
Support for SuiteSparse's CHOLMOD providing a sparse Cholesky factorization.
-
The interface methods
dot()
andnorm()
of ScalarProduct are nowconst
. You will have to adjust the method signatures in your own scalar product implementations. -
MultiTypeBlockVector
now implements the interface methodN()
, which returns the number of vector entries. -
MultiTypeBlockVector
now implements the interface methoddim()
, which returns the number of scalar vector entries. -
MultiTypeBlockVector::count()
is nowconst
-
SeqILU
can now be used with SIMD data types.
Deprecations and removals
-
Deprecated support for SuperLU 4.x. It will be removed after Dune 2.7.
-
Deprecated the preconditioner implementations
SeqILU0
andSeqILUn
. UseSeqILU
instead, which implements incomplete LU decomposition of any order. -
The method
setSolverCategory
ofOwnerOverlapCopyCommunication
is deprecated and will be removed after Dune 2.7. The solver category can only be set in the constructor. -
The method
getSolverCategory
ofOwnerOverlapCopyCommunication
is deprecated and will be removed after Dune 2.7. Usecategory()
instead. -
The method
MultiTypeBlockVector::count()
has been deprecated, because its name is inconsistent with the name mandated by thedune-istl
vector interface. -
The method
MultiTypeBlockMatrix::size()
has been deprecated, because its name is inconsistent with the name mandated by thedune-istl
vector interface.
Release 2.6
-
BDMatrix
objects can now be constructed and assigned fromstd::initializer_list
. -
BDMatrix
andBTDMatrix
now implement thesetSize
method, which allows to resize existing matrix objects. -
The solver infrastructure was updated to support SIMD data types (see current changes in
dune-common
). This allows to solve multiple systems simultaneously using vectorization.