3#ifndef DUNE_AMGHIERARCHY_HH
4#define DUNE_AMGHIERARCHY_HH
15#include <dune/common/stdstreams.hh>
16#include <dune/common/unused.hh>
17#include <dune/common/timer.hh>
18#include <dune/common/tuples.hh>
19#include <dune/common/bigunsignedint.hh>
21#include <dune/common/parallel/indexset.hh>
65 template<
typename T,
typename A=std::allocator<T> >
74 template<
typename T1,
typename T2>
157 template<
class C,
class T1>
159 :
public BidirectionalIteratorFacade<LevelIterator<C,T1>,T1,T1&>
162 typename std::remove_const<T1>::type >;
164 const typename std::remove_const<T1>::type >;
178 typename std::remove_const<T1>::type>&
other)
179 : element_(
other.element_)
184 const typename std::remove_const<T1>::type>&
other)
185 : element_(
other.element_)
192 typename std::remove_const<T1>::type>&
other)
const
194 return element_ ==
other.element_;
201 const typename std::remove_const<T1>::type>&
other)
const
203 return element_ ==
other.element_;
209 return *(element_->element_);
215 element_ = element_->coarser_;
221 element_ = element_->finer_;
230 return element_->redistributed_;
239 assert(element_->redistributed_);
240 return *element_->redistributed_;
244 element_->redistributed_ =
t;
249 element_->redistributed_ =
nullptr;
302 Element* nonAllocated_;
315 template<
class M,
class PI,
class A=std::allocator<M> >
323 typedef typename MatrixOperator::matrix_type
Matrix;
371 template<
typename O,
typename T>
388 template<
class V,
class TA>
396 template<
class S,
class TA>
404 std::size_t
levels()
const;
481 typename MatrixOperator::field_type prolongDamp_;
486 template<
class Matrix,
bool pr
int>
493 static void stats(
const Matrix& matrix)
499 template<
class Matrix>
500 struct MatrixStats<
Matrix,true>
509 min=std::numeric_limits<size_type>::max();
516 min=std::min(min, row.size());
517 max=std::max(max, row.size());
528 static void stats(
const Matrix& matrix)
530 calc c=
for_each(matrix.begin(), matrix.end(), calc());
531 dinfo<<
"Matrix row: min="<<c.min<<
" max="<<c.max
532 <<
" average="<<
static_cast<double>(c.sum)/matrix.N()
572 template<
typename M,
typename C1>
590 template<
typename M,
typename C,
typename C1>
596#ifdef AMG_REPART_ON_COMM_GRAPH
614 if(
origComm.communicator().rank()==0)
615 std::cout<<
"Original matrix"<<std::endl;
625 std::cout<<
"Repartitioning took "<<
time.elapsed()<<
" seconds."<<std::endl;
636 if(
origComm.communicator().rank()==0)
637 std::cout<<
"Original matrix"<<std::endl;
639 if(
newComm->communicator().size()>0)
645 std::cout<<
"Redistributing matrix took "<<
time.elapsed()<<
" seconds."<<std::endl;
659 template<
class M,
class IS,
class A>
665 static_assert((
static_cast<int>(MatrixOperator::category) ==
667 ||
static_cast<int>(MatrixOperator::category) ==
669 ||
static_cast<int>(MatrixOperator::category) ==
671 "MatrixOperator must be of category sequential or overlapping or nonoverlapping");
672 if (
static_cast<int>(MatrixOperator::category) !=
static_cast<int>(pinfo.getSolverCategory()))
673 DUNE_THROW(
ISTLError,
"MatrixOperator and ParallelInformation must belong to the same category!");
677 template<
class M,
class IS,
class A>
678 template<
typename O,
typename T>
681 prolongDamp_ =
criterion.getProlongationDampingFactor();
682 typedef O OverlapFlags;
710 assert(matrices_.levels()==redistributes_.size());
714 <<
" unknowns per proc (procs="<<
infoLevel->communicator().size()<<
")"<<std::endl;
748 <<
" unknowns per proc (procs="<<
redistComm->communicator().size()<<
")"<<std::endl;
760 matrix = &(
mlevel.getRedistributed());
762 info->buildGlobalLookup(matrix->getmat().N());
772 typedef typename GraphCreator::GraphTuple GraphTuple;
776 std::vector<bool>
excluded(matrix->getmat().N(),
false);
799 int procs=
info->communicator().rank();
806 end = (
rank+1)*(n+1);
835 if(
criterion.debugLevel()>1 &&
info->communicator().rank()==0)
836 std::cout<<
"aggregating finished."<<std::endl;
846 std::cout <<
"Building "<<
dgnoAggregates<<
" aggregates took "<<
watch.elapsed()<<
" seconds."<<std::endl;
857 std::cerr<<
"Could not build any aggregates. Probably no connected nodes."<<std::endl;
861 aggregatesMaps_.pop_back();
867 delete &(
mlevel.getRedistributed().getmat());
868 mlevel.deleteRedistributed();
871 redistributes_.back().resetSetup();
880 parallelInformation_.addCoarser(
commargs);
895 GraphCreator::free(
graphs);
899 std::cout<<
"Coarsening of index sets took "<<
watch.elapsed()<<
" seconds."<<std::endl;
904 infoLevel->buildGlobalLookup(aggregates);
912 std::cout<<
"Communicating global aggregate numbers took "<<
watch.elapsed()<<
" seconds."<<std::endl;
916 std::vector<bool>& visited=
excluded;
918 typedef std::vector<bool>::iterator Iterator;
920 Iterator end = visited.end();
921 for(Iterator
iter= visited.begin();
iter != end; ++
iter)
933 dverb<<
"Building of sparsity pattern took "<<
watch.elapsed()<<std::endl;
935 info->freeGlobalLookup();
942 std::cout<<
"Calculation entries of Galerkin product took "<<
watch.elapsed()<<
" seconds."<<std::endl;
949 matrices_.addCoarser(
args);
967 <<
" unknowns per proc (procs="<<
infoLevel->communicator().size()<<
")"<<std::endl;
972 if(
criterion.accumulate() && !redistributes_.back().isSetup() &&
974#if HAVE_MPI && !HAVE_PARMETIS
977 std::cerr<<
"Successive accumulation of data on coarse levels only works with ParMETIS installed."
978 <<
" Fell back to accumulation to one domain on coarsest level"<<std::endl;
995 <<
" unknowns per proc (procs="<<
redistComm->communicator().size()<<
")"<<std::endl;
1002 int levels = matrices_.levels();
1003 maxlevels_ = parallelInformation_.finest()->communicator().max(levels);
1004 assert(matrices_.levels()==redistributes_.size());
1010 template<
class M,
class IS,
class A>
1017 template<
class M,
class IS,
class A>
1021 return parallelInformation_;
1024 template<
class M,
class IS,
class A>
1027 int levels=aggregatesMaps().size();
1028 int maxlevels=parallelInformation_.finest()->communicator().max(levels);
1029 std::size_t size=(*(aggregatesMaps().begin()))->noVertices();
1031 std::vector<std::size_t>
tmp;
1049 if(levels==maxlevels) {
1050 const AggregatesMap& map = *(*(++aggregatesMaps().rbegin()));
1055 m=std::max(*
iter,m);
1059 srand((
unsigned)std::clock());
1060 std::set<size_t>
used;
1064 std::pair<std::set<std::size_t>::iterator,
bool>
ibpair
1077 for(
typename AggregatesMapList::const_reverse_iterator aggregates=++aggregatesMaps().
rbegin();
1078 aggregates != aggregatesMaps().rend(); ++aggregates,--levels) {
1080 fine->resize((*aggregates)->noVertices());
1083 ::prolongateVector(*(*aggregates), *
coarse, *
fine,
static_cast<std::size_t
>(1), *pinfo);
1092 template<
class M,
class IS,
class A>
1096 return aggregatesMaps_;
1098 template<
class M,
class IS,
class A>
1102 return redistributes_;
1105 template<
class M,
class IS,
class A>
1114 for(Iterator level=matrices_.coarsest(), finest=matrices_.finest(); level != finest; --level, --
info, ++
amap) {
1117 delete &level->getmat();
1118 if(level.isRedistributed())
1119 delete &(level.getRedistributed().getmat());
1124 template<
class M,
class IS,
class A>
1125 template<
class V,
class TA>
1130 typedef typename RedistributeInfoList::const_iterator
RIter;
1131 RIter redist = redistributes_.begin();
1133 Iterator matrix = matrices_.finest(), coarsest = matrices_.coarsest();
1135 if(redist->isSetup())
1136 hierarchy.addRedistributedOnCoarsest(matrix.getRedistributed().getmat().N());
1137 Dune::dvverb<<
"Level "<<level<<
" has "<<matrices_.finest()->getmat().N()<<
" unknowns!"<<std::endl;
1139 while(matrix != coarsest) {
1140 ++matrix; ++level; ++redist;
1141 Dune::dvverb<<
"Level "<<level<<
" has "<<matrix->getmat().N()<<
" unknowns!"<<std::endl;
1143 hierarchy.addCoarser(matrix->getmat().N());
1144 if(redist->isSetup())
1145 hierarchy.addRedistributedOnCoarsest(matrix.getRedistributed().getmat().N());
1151 template<
class M,
class IS,
class A>
1152 template<
class S,
class TA>
1166 for(
MatrixIterator matrix = matrices_.finest(), coarsest = matrices_.coarsest();
1167 matrix != coarsest; ++matrix, ++pinfo, ++aggregates, ++level) {
1168 cargs.setMatrix(matrix->getmat(), **aggregates);
1169 cargs.setComm(*pinfo);
1172 if(maxlevels()>levels()) {
1174 cargs.setMatrix(matrices_.coarsest()->getmat(), **aggregates);
1175 cargs.setComm(*pinfo);
1181 template<
class M,
class IS,
class A>
1192 typename RedistributeInfoList::iterator
riIter = redistributes_.begin();
1193 Iterator level = matrices_.finest(), coarsest=matrices_.coarsest();
1194 if(level.isRedistributed()) {
1195 info->buildGlobalLookup(level->getmat().N());
1197 const_cast<Matrix&
>(level.getRedistributed().getmat()),
1199 info->freeGlobalLookup();
1202 for(; level!=coarsest; ++
amap) {
1203 const Matrix&
fine = (level.isRedistributed() ? level.getRedistributed() : *level).getmat();
1208 if(level.isRedistributed()) {
1209 info->buildGlobalLookup(level->getmat().N());
1211 const_cast<Matrix&
>(level.getRedistributed().getmat()), *
info,
1213 info->freeGlobalLookup();
1218 template<
class M,
class IS,
class A>
1221 return matrices_.levels();
1224 template<
class M,
class IS,
class A>
1230 template<
class M,
class IS,
class A>
1233 return levels()==maxlevels() &&
1234 (!matrices_.coarsest().isRedistributed() ||matrices_.coarsest()->getmat().N()>0);
1237 template<
class M,
class IS,
class A>
1243 template<
class T,
class A>
1245 : finest_(0), coarsest_(0), nonAllocated_(0), allocator_(), levels_(0)
1248 template<
class T,
class A>
1252 finest_ = allocator_.allocate(1,0);
1253 finest_->element_ = &first;
1254 finest_->redistributed_ =
nullptr;
1255 nonAllocated_ = finest_;
1256 coarsest_ = finest_;
1257 coarsest_->coarser_ = coarsest_->finer_ =
nullptr;
1261 template<
class T,
class A>
1265 finest_ = allocator_.allocate(1,0);
1266 finest_->element_ = first;
1267 finest_->redistributed_ =
nullptr;
1268 nonAllocated_ =
nullptr;
1269 coarsest_ = finest_;
1270 coarsest_->coarser_ = coarsest_->finer_ =
nullptr;
1273 template<
class T,
class A>
1278 coarsest_ = coarsest_->finer_;
1279 if(
current != nonAllocated_) {
1284 allocator_.deallocate(
current, 1);
1290 template<
class T,
class A>
1292 : nonAllocated_(), allocator_(
other.allocator_),
1293 levels_(
other.levels_)
1297 finest_=coarsest_=nonAllocated_=
nullptr;
1300 finest_=allocator_.allocate(1,0);
1301 Element* finer_ =
nullptr;
1302 Element* current_ = finest_;
1308 current_->element_=
t;
1309 current_->finer_=finer_;
1311 current_->redistributed_ =
new T(*
otherCurrent_->redistributed_);
1313 current_->redistributed_=
nullptr;
1317 current_->coarser_=allocator_.allocate(1,0);
1318 current_=current_->coarser_;
1320 current_->coarser_=
nullptr;
1326 template<
class T,
class A>
1332 template<
class T,
class A>
1338 template<
class T,
class A>
1343 coarsest_ = allocator_.allocate(1,0);
1345 finest_ = coarsest_;
1346 coarsest_->finer_ =
nullptr;
1348 coarsest_->coarser_ = allocator_.allocate(1,0);
1349 coarsest_->coarser_->finer_ = coarsest_;
1350 coarsest_ = coarsest_->coarser_;
1353 coarsest_->redistributed_ =
nullptr;
1354 coarsest_->coarser_=
nullptr;
1359 template<
class T,
class A>
1364 finest_ = allocator_.allocate(1,0);
1366 coarsest_ = finest_;
1367 coarsest_->coarser_ = coarsest_->finer_ =
nullptr;
1369 finest_->finer_ = allocator_.allocate(1,0);
1370 finest_->finer_->coarser_ = finest_;
1371 finest_ = finest_->finer_;
1372 finest_->finer =
nullptr;
1378 template<
class T,
class A>
1384 template<
class T,
class A>
1390 template<
class T,
class A>
1396 template<
class T,
class A>
Provides classes for the Coloring process of AMG.
Helper classes for the construction of classes without empty constructor.
Provides classes for initializing the link attributes of a matrix graph.
Provides a class for building the galerkin product based on a aggregation scheme.
Provdes class for identifying aggregates globally.
Provides classes for building the matrix graph.
Provides a class for building the index set and remote indices on the coarse level.
Classes for the generic construction and application of the smoothers.
Prolongation and restriction for amg.
This file implements a vector space as a tensor product of a given vector space. The number of compon...
Functionality for redistributing a sparse matrix.
Some handy generic functions for ISTL matrices.
int countNonZeros(const M &matrix)
Get the number of nonzero fields in the matrix.
Definition matrixutils.hh:153
const AggregatesMapList & aggregatesMaps() const
Get the hierarchy of the mappings of the nodes onto aggregates.
Definition hierarchy.hh:1094
bool isBuilt() const
Whether the hierarchy was built.
Definition hierarchy.hh:1238
Hierarchy(const Hierarchy &other)
Copy constructor.
Definition hierarchy.hh:1291
bool hasCoarsest() const
Definition hierarchy.hh:1231
void addRedistributedOnCoarsest(Arguments &args)
Definition hierarchy.hh:1333
std::size_t levels() const
Get the number of levels in the hierarchy.
Definition hierarchy.hh:1327
std::size_t levels() const
Get the number of levels in the hierarchy.
Definition hierarchy.hh:1219
ConstIterator coarsest() const
Get an iterator positioned at the coarsest level.
Definition hierarchy.hh:1397
void addCoarser(Arguments &args)
Add an element on a coarser level.
Definition hierarchy.hh:1339
const RedistributeInfoList & redistributeInformation() const
Get the hierarchy of the information about redistributions,.
Definition hierarchy.hh:1100
void coarsenVector(Hierarchy< BlockVector< V, TA > > &hierarchy) const
Coarsen the vector hierarchy according to the matrix hierarchy.
Definition hierarchy.hh:1126
const ParallelInformationHierarchy & parallelInformation() const
Get the hierarchy of the parallel data distribution information.
Definition hierarchy.hh:1019
void addFiner(Arguments &args)
Add an element on a finer level.
Definition hierarchy.hh:1360
const_iterator begin() const
Definition aggregates.hh:712
const ParallelMatrixHierarchy & matrices() const
Get the matrix hierarchy.
Definition hierarchy.hh:1012
std::size_t maxlevels() const
Get the max number of levels in the hierarchy of processors.
Definition hierarchy.hh:1225
const_iterator end() const
Definition aggregates.hh:717
static const V ISOLATED
Identifier of isolated vertices.
Definition aggregates.hh:554
void recalculateGalerkin(const F ©Flags)
Recalculate the galerkin products.
Definition hierarchy.hh:1183
const void * Arguments
A type holding all the arguments needed to call the constructor.
Definition construction.hh:44
Iterator coarsest()
Get an iterator positioned at the coarsest level.
Definition hierarchy.hh:1385
Hierarchy(MemberType &first)
Construct a new hierarchy.
Definition hierarchy.hh:1249
ConstIterator finest() const
Get an iterator positioned at the finest level.
Definition hierarchy.hh:1391
Hierarchy(MemberType *first)
Construct a new hierarchy.
Definition hierarchy.hh:1262
Hierarchy()
Construct a new empty hierarchy.
Definition hierarchy.hh:1244
const AggregateDescriptor * const_iterator
Definition aggregates.hh:710
~Hierarchy()
Destructor.
Definition hierarchy.hh:1274
AccumulationMode
Identifiers for the different accumulation modes.
Definition parameters.hh:230
static T * construct(Arguments &args)
Construct an object with the specified arguments.
Definition construction.hh:52
Iterator finest()
Get an iterator positioned at the finest level.
Definition hierarchy.hh:1379
void build(const T &criterion)
Build the matrix hierarchy using aggregation.
Definition hierarchy.hh:679
MatrixHierarchy(const MatrixOperator &fineMatrix, const ParallelInformation &pinfo=ParallelInformation())
Constructor.
Definition hierarchy.hh:660
bool repartitionAndDistributeMatrix(const M &origMatrix, M &newMatrix, SequentialInformation &origSequentialInformationomm, SequentialInformation *&newComm, RedistributeInformation< SequentialInformation > &ri, int nparts, C1 &criterion)
Definition hierarchy.hh:573
static void deconstruct(T *t)
Destroys an object.
Definition construction.hh:61
void coarsenSmoother(Hierarchy< S, TA > &smoothers, const typename SmootherTraits< S >::Arguments &args) const
Coarsen the smoother hierarchy according to the matrix hierarchy.
Definition hierarchy.hh:1153
void buildDependency(G &graph, const typename C::Matrix &matrix, C criterion, bool finestLevel)
Build the dependency of the matrix graph.
void getCoarsestAggregatesOnFinest(std::vector< std::size_t > &data) const
Get the mapping of fine level unknowns to coarse level aggregates.
Definition hierarchy.hh:1025
~MatrixHierarchy()
Definition hierarchy.hh:1106
@ MAX_PROCESSES
Hard limit for the number of processes allowed.
Definition hierarchy.hh:55
@ atOnceAccu
Accumulate data to on process at once.
Definition parameters.hh:242
@ successiveAccu
Successively accumulate to fewer processes.
Definition parameters.hh:246
Definition basearray.hh:19
bool graphRepartition(const G &graph, Dune::OwnerOverlapCopyCommunication< T1, T2 > &oocomm, idxtype nparts, Dune::OwnerOverlapCopyCommunication< T1, T2 > *&outcomm, RedistributeInterface &redistInf, bool verbose=false)
execute a graph repartition for a giving graph and indexset.
Definition repartition.hh:1255
void printGlobalSparseMatrix(const M &mat, C &ooc, std::ostream &os)
Definition matrixutils.hh:175
PropertyMapTypeSelector< Amg::VertexVisitedTag, Amg::PropertiesGraph< G, Amg::VertexProperties, EP, VM, EM > >::Type get(const Amg::VertexVisitedTag &tag, Amg::PropertiesGraph< G, Amg::VertexProperties, EP, VM, EM > &graph)
Definition dependency.hh:292
void redistributeMatrixEntries(M &origMatrix, M &newMatrix, C &origComm, C &newComm, RedistributeInformation< C > &ri)
Definition matrixredistribute.hh:771
bool commGraphRepartition(const M &mat, Dune::OwnerOverlapCopyCommunication< T1, T2 > &oocomm, idxtype nparts, Dune::OwnerOverlapCopyCommunication< T1, T2 > *&outcomm, RedistributeInterface &redistInf, bool verbose=false)
Definition repartition.hh:846
void redistributeMatrix(M &origMatrix, M &newMatrix, C &origComm, C &newComm, RedistributeInformation< C > &ri)
Redistribute a matrix according to given domain decompositions.
Definition matrixredistribute.hh:834
Statistics about compression achieved in implicit mode.
Definition bcrsmatrix.hh:81
Definition bvector.hh:660
derive error class from the base class in common
Definition istlexception.hh:16
A generic dynamic dense matrix.
Definition matrix.hh:555
A::size_type size_type
Type for indices and sizes.
Definition matrix.hh:571
Traits class for generically constructing non default constructable types.
Definition construction.hh:38
Class providing information about the mapping of the vertices onto aggregates.
Definition aggregates.hh:543
Class representing the properties of an ede in the matrix graph.
Definition dependency.hh:38
Class representing a node in the matrix graph.
Definition dependency.hh:125
Definition galerkin.hh:98
Definition globalaggregates.hh:130
The (undirected) graph of a matrix.
Definition graph.hh:49
Attaches properties to the edges and vertices of a graph.
Definition graph.hh:976
Graph::VertexDescriptor VertexDescriptor
The vertex descriptor.
Definition graph.hh:986
A hierarchy of coantainers (e.g. matrices or vectors)
Definition hierarchy.hh:67
T MemberType
The type of the container we store.
Definition hierarchy.hh:72
LevelIterator< Hierarchy< T, A >, T > Iterator
Type of the mutable iterator.
Definition hierarchy.hh:257
LevelIterator< const Hierarchy< T, A >, const T > ConstIterator
Type of the const iterator.
Definition hierarchy.hh:260
A::template rebind< Element >::other Allocator
The allocator to use for the list elements.
Definition hierarchy.hh:110
ConstructionTraits< T >::Arguments Arguments
Definition hierarchy.hh:112
Iterator over the levels in the hierarchy.
Definition hierarchy.hh:160
LevelIterator(const LevelIterator< typename std::remove_const< C >::type, typename std::remove_const< T1 >::type > &other)
Copy constructor.
Definition hierarchy.hh:177
void addRedistributed(T1 *t)
Definition hierarchy.hh:242
T1 & dereference() const
Dereference the iterator.
Definition hierarchy.hh:207
bool equals(const LevelIterator< typename std::remove_const< C >::type, typename std::remove_const< T1 >::type > &other) const
Equality check.
Definition hierarchy.hh:191
bool isRedistributed() const
Check whether there was a redistribution at the current level.
Definition hierarchy.hh:228
bool equals(const LevelIterator< const typename std::remove_const< C >::type, const typename std::remove_const< T1 >::type > &other) const
Equality check.
Definition hierarchy.hh:200
void increment()
Move to the next coarser level.
Definition hierarchy.hh:213
LevelIterator(const LevelIterator< const typename std::remove_const< C >::type, const typename std::remove_const< T1 >::type > &other)
Copy constructor.
Definition hierarchy.hh:183
void deleteRedistributed()
Definition hierarchy.hh:247
void decrement()
Move to the next fine level.
Definition hierarchy.hh:219
T1 & getRedistributed() const
Get the redistributed container.
Definition hierarchy.hh:237
LevelIterator(Element *element)
Definition hierarchy.hh:172
The hierarchies build by the coarsening process.
Definition hierarchy.hh:317
Dune::Amg::Hierarchy< ParallelInformation, Allocator > ParallelInformationHierarchy
The type of the parallel informarion hierarchy.
Definition hierarchy.hh:338
std::list< AggregatesMap *, AAllocator > AggregatesMapList
The type of the aggregates maps list.
Definition hierarchy.hh:344
PI ParallelInformation
The type of the index set.
Definition hierarchy.hh:326
Dune::Amg::Hierarchy< MatrixOperator, Allocator > ParallelMatrixHierarchy
The type of the parallel matrix hierarchy.
Definition hierarchy.hh:335
A Allocator
The allocator to use.
Definition hierarchy.hh:329
RedistributeInformation< ParallelInformation > RedistributeInfoType
The type of the redistribute information.
Definition hierarchy.hh:347
MatrixOperator::field_type getProlongationDampingFactor() const
Definition hierarchy.hh:446
std::list< RedistributeInfoType, RILAllocator > RedistributeInfoList
The type of the list of redistribute information.
Definition hierarchy.hh:353
Dune::Amg::AggregatesMap< typename MatrixGraph< Matrix >::VertexDescriptor > AggregatesMap
The type of the aggregates map we use.
Definition hierarchy.hh:332
Allocator::template rebind< AggregatesMap * >::other AAllocator
Allocator for pointers.
Definition hierarchy.hh:341
MatrixOperator::matrix_type Matrix
The type of the matrix.
Definition hierarchy.hh:323
Allocator::template rebind< RedistributeInfoType >::other RILAllocator
Allocator for RedistributeInfoType.
Definition hierarchy.hh:350
M MatrixOperator
The type of the matrix operator.
Definition hierarchy.hh:320
void operator()(const matrix_row &row)
Definition hierarchy.hh:514
Matrix::row_type matrix_row
Definition hierarchy.hh:505
size_type min
Definition hierarchy.hh:521
calc()
Definition hierarchy.hh:507
size_type max
Definition hierarchy.hh:522
size_type sum
Definition hierarchy.hh:523
Matrix::size_type size_type
Definition hierarchy.hh:504
The criterion describing the stop criteria for the coarsening process.
Definition hierarchy.hh:543
CoarsenCriterion(const Dune::Amg::Parameters &parms)
Definition hierarchy.hh:566
T AggregationCriterion
The criterion for tagging connections as strong and nodes as isolated. This might be e....
Definition hierarchy.hh:549
CoarsenCriterion(int maxLevel=100, int coarsenTarget=1000, double minCoarsenRate=1.2, double prolongDamp=1.6, AccumulationMode accumulate=successiveAccu)
Constructor.
Definition hierarchy.hh:561
Definition indicescoarsener.hh:35
All parameters for AMG.
Definition parameters.hh:391
Tag idnetifying the visited property of a vertex.
Definition properties.hh:27
@ sequential
Category for sequential solvers.
Definition solvercategory.hh:21
@ nonoverlapping
Category for non-overlapping solvers.
Definition solvercategory.hh:23
@ overlapping
Category for overlapping solvers.
Definition solvercategory.hh:25