3#ifndef DUNE_PDELAB_BACKEND_ISTL_NOVLPISTLSOLVERBACKEND_HH
4#define DUNE_PDELAB_BACKEND_ISTL_NOVLPISTLSOLVERBACKEND_HH
8#include <dune/common/deprecated.hh>
9#include <dune/common/parallel/mpihelper.hh>
11#include <dune/grid/common/gridenums.hh>
13#include <dune/istl/io.hh>
14#include <dune/istl/operators.hh>
15#include <dune/istl/owneroverlapcopy.hh>
16#include <dune/istl/paamg/amg.hh>
17#include <dune/istl/paamg/pinfo.hh>
18#include <dune/istl/preconditioners.hh>
19#include <dune/istl/scalarproducts.hh>
20#include <dune/istl/solvercategory.hh>
21#include <dune/istl/solvers.hh>
22#include <dune/istl/superlu.hh>
52 template<
typename GFS,
typename M,
typename X,
typename Y>
54 :
public Dune::AssembledLinearOperator<M,X,Y>
87 virtual void apply (
const X& x, Y& y)
const override
91 native(_A_).mv(native(x),native(y));
95 if (gfs.gridView().comm().size()>1)
96 gfs.gridView().communicate(adddh,Dune::InteriorBorder_InteriorBorder_Interface,Dune::ForwardCommunication);
109 native(_A_).usmv(alpha,native(x),native(y));
113 if (gfs.gridView().comm().size()>1)
114 gfs.gridView().communicate(adddh,Dune::InteriorBorder_InteriorBorder_Interface,Dune::ForwardCommunication);
119 return SolverCategory::nonoverlapping;
123 virtual const M&
getmat ()
const override
134 template<
class GFS,
class X>
144 return SolverCategory::nonoverlapping;
150 : gfs(gfs_), helper(helper_)
163 return gfs.gridView().comm().sum(sum);
169 virtual double norm (
const X& x)
const override
171 return sqrt(
static_cast<double>(this->
dot(x,x)));
179 if (gfs.gridView().comm().size()>1)
180 gfs.gridView().communicate(adddh,Dune::InteriorBorder_InteriorBorder_Interface,Dune::ForwardCommunication);
189 template<
class GFS,
class X,
class Y>
203 return SolverCategory::nonoverlapping;
208 : gfs(gfs_), helper(helper_)
215 virtual void pre (X& x, Y& b)
const override {}
220 virtual void apply (X& v,
const Y& d)
const override
228 virtual void post (X& x)
override {}
249 template<
typename A,
typename X,
typename Y>
251 :
public Dune::Preconditioner<X,Y>
276 return SolverCategory::nonoverlapping;
291 template<
typename GFS>
293 : _inverse_diagonal(m)
297 gfs.gridView().communicate(addDH,
298 InteriorBorder_InteriorBorder_Interface,
299 ForwardCommunication);
302 _inverse_diagonal.
invert();
307 virtual void pre (X& x, Y& b)
override {}
315 virtual void apply (X& v,
const Y& d)
override
317 _inverse_diagonal.
mv(d,v);
321 virtual void post (X& x)
override {}
341 unsigned maxiter_=5000,
343 : gfs(gfs_), phelper(gfs,verbose_), maxiter(maxiter_), verbose(verbose_)
351 typename V::ElementType
norm (
const V& v)
const
355 PSP psp(gfs,phelper);
356 psp.make_consistent(x);
367 template<
class M,
class V,
class W>
368 void apply(M& A, V& z, W& r,
typename Dune::template FieldTraits<typename V::ElementType >::real_type reduction)
373 PSP psp(gfs,phelper);
375 PRICH prich(gfs,phelper);
377 if (gfs.gridView().comm().rank()==0) verb=verbose;
378 Dune::CGSolver<V> solver(pop,psp,prich,reduction,maxiter,verb);
379 Dune::InverseOperatorResult stat;
380 solver.apply(z,r,stat);
422 unsigned maxiter_ = 5000,
424 gfs(gfs_), phelper(gfs,verbose_), maxiter(maxiter_), verbose(verbose_)
434 typename V::ElementType
norm (
const V& v)
const
438 PSP psp(gfs,phelper);
439 psp.make_consistent(x);
456 template<
class M,
class V,
class W>
457 void apply(M& A, V& z, W& r,
typename Dune::template FieldTraits<typename V::ElementType >::real_type reduction)
462 PSP psp(gfs,phelper);
468 if (gfs.gridView().comm().rank()==0) verb=verbose;
469 CGSolver<V> solver(pop,psp,ppre,reduction,maxiter,verb);
470 InverseOperatorResult stat;
471 solver.apply(z,r,stat);
498 : gfs(gfs_), phelper(gfs,verbose_), maxiter(maxiter_), verbose(verbose_)
506 typename V::ElementType
norm (
const V& v)
const
510 PSP psp(gfs,phelper);
511 psp.make_consistent(x);
522 template<
class M,
class V,
class W>
523 void apply(M& A, V& z, W& r,
typename Dune::template FieldTraits<typename V::ElementType >::real_type reduction)
528 PSP psp(gfs,phelper);
530 PRICH prich(gfs,phelper);
532 if (gfs.gridView().comm().rank()==0) verb=verbose;
533 Dune::BiCGSTABSolver<V> solver(pop,psp,prich,reduction,maxiter,verb);
534 Dune::InverseOperatorResult stat;
535 solver.apply(z,r,stat);
572 : gfs(gfs_), phelper(gfs,verbose_), maxiter(maxiter_), verbose(verbose_)
580 typename V::ElementType
norm (
const V& v)
const
584 PSP psp(gfs,phelper);
585 psp.make_consistent(x);
596 template<
class M,
class V,
class W>
597 void apply(M& A, V& z, W& r,
typename Dune::template FieldTraits<typename V::ElementType >::real_type reduction)
602 PSP psp(gfs,phelper);
608 if (gfs.gridView().comm().rank()==0) verb=verbose;
609 Dune::BiCGSTABSolver<V> solver(pop,psp,ppre,reduction,maxiter,verb);
610 Dune::InverseOperatorResult stat;
611 solver.apply(z,r,stat);
634 template<
typename GFS>
650 : gfs(gfs_), phelper(gfs)
658 typename V::ElementType
norm (
const V& v)
const
662 PSP psp(gfs,phelper);
663 psp.make_consistent(x);
674 template<
class M,
class V,
class W>
675 void apply(M& A, V& z, W& r,
typename Dune::template FieldTraits<typename W::ElementType >::real_type reduction)
677 Dune::SeqJac<M,V,W> jac(A,1,1.0);
681 if (gfs.gridView().comm().size()>1)
684 gfs.gridView().communicate(adddh,Dune::InteriorBorder_InteriorBorder_Interface,Dune::ForwardCommunication);
710 template<
class,
class,
class,
int>
class Preconditioner,
711 template<
class>
class Solver>
714 typedef typename GO::Traits::TrialGridFunctionSpace GFS;
726 : _grid_operator(grid_operator)
727 , gfs(grid_operator.trialGridFunctionSpace())
728 , phelper(gfs,verbose_)
738 template<
class Vector>
739 typename Vector::ElementType
norm (
const Vector& v)
const
743 PSP psp(gfs,phelper);
744 psp.make_consistent(x);
755 template<
class M,
class V,
class W>
756 void apply(M& A, V& z, W& r,
typename V::ElementType reduction)
763 _grid_operator.make_consistent(A);
765 Comm oocc(gfs.gridView().comm(),Dune::SolverCategory::nonoverlapping);
767 typedef Preconditioner<MatrixType,VectorType,VectorType,1> Smoother;
768 Smoother smoother(mat, steps, 1.0);
769 typedef Dune::NonoverlappingSchwarzScalarProduct<VectorType,Comm> PSP;
771 typedef Dune::NonoverlappingSchwarzOperator<MatrixType,VectorType,VectorType,Comm> Operator;
772 Operator oop(mat,oocc);
773 typedef Dune::NonoverlappingBlockPreconditioner<Comm, Smoother> ParSmoother;
774 ParSmoother parsmoother(smoother, oocc);
776 typedef Preconditioner<MatrixType,VectorType,VectorType,1> ParSmoother;
777 ParSmoother parsmoother(mat, steps, 1.0);
778 typedef Dune::SeqScalarProduct<VectorType> PSP;
780 typedef Dune::MatrixAdapter<MatrixType,VectorType,VectorType> Operator;
784 if (gfs.gridView().comm().rank()==0) verb=verbose;
785 Solver<VectorType> solver(oop,psp,parsmoother,reduction,maxiter,verb);
786 Dune::InverseOperatorResult stat;
788 if (gfs.gridView().comm().size()>1){
790 gfs.gridView().communicate(adddh,
791 Dune::InteriorBorder_InteriorBorder_Interface,
792 Dune::ForwardCommunication);
795 solver.apply(z,r,stat);
810 const GO& _grid_operator;
848 int steps_=5,
int verbose_=1)
873 int steps_=5,
int verbose_=1)
880 template<
class GO,
int s,
template<
class,
class,
class,
int>
class Preconditioner,
881 template<
class>
class Solver>
884 typedef typename GO::Traits::TrialGridFunctionSpace GFS;
886 typedef typename GO::Traits::Jacobian M;
888 typedef typename GO::Traits::Domain V;
892 typedef Preconditioner<MatrixType,VectorType,VectorType,1> Smoother;
893 typedef Dune::NonoverlappingBlockPreconditioner<Comm,Smoother> ParSmoother;
894 typedef Dune::NonoverlappingSchwarzOperator<MatrixType,VectorType,VectorType,Comm> Operator;
896 typedef Preconditioner<MatrixType,VectorType,VectorType,1> ParSmoother;
897 typedef Dune::MatrixAdapter<MatrixType,VectorType,VectorType> Operator;
899 typedef typename Dune::Amg::SmootherTraits<ParSmoother>::Arguments SmootherArgs;
900 typedef Dune::Amg::AMG<Operator,VectorType,ParSmoother,Comm> AMG;
905 int verbose_=1,
bool reuse_=
false,
906 bool usesuperlu_=
true)
907 : _grid_operator(grid_operator)
908 , gfs(grid_operator.trialGridFunctionSpace())
909 , phelper(gfs,verbose_)
911 , params(15,2000,1.2,1.6,
Dune::Amg::atOnceAccu)
915 , usesuperlu(usesuperlu_)
917 params.setDefaultValuesIsotropic(GFS::Traits::GridViewType::Traits::Grid::dimension);
918 params.setDebugLevel(verbose_);
920 if (phelper.
rank() == 0 && usesuperlu ==
true)
922 std::cout <<
"WARNING: You are using AMG without SuperLU!"
923 <<
" Please consider installing SuperLU,"
924 <<
" or set the usesuperlu flag to false"
925 <<
" to suppress this warning." << std::endl;
968 typename V::ElementType
norm (
const V& v)
const
972 PSP psp(gfs,phelper);
973 psp.make_consistent(x);
977 void apply(M& A, V& z, V& r,
typename Dune::template FieldTraits<typename V::ElementType >::real_type reduction)
981 typedef Dune::Amg::CoarsenCriterion<Dune::Amg::SymmetricCriterion<MatrixType,
982 Dune::Amg::FirstDiagonal> > Criterion;
984 Comm oocc(gfs.gridView().comm(),Dune::SolverCategory::nonoverlapping);
985 _grid_operator.make_consistent(A);
987 Dune::NonoverlappingSchwarzScalarProduct<VectorType,Comm> sp(oocc);
988 Operator oop(mat, oocc);
990 Comm oocc(gfs.gridView().comm());
992 Dune::SeqScalarProduct<VectorType> sp;
994 SmootherArgs smootherArgs;
995 smootherArgs.iterations = 1;
996 smootherArgs.relaxationFactor = 1;
998 Criterion criterion(params);
1003 if (gfs.gridView().comm().rank()==0) verb=verbose;
1005 if (reuse==
false || firstapply==
true){
1006 amg.reset(
new AMG(oop, criterion, smootherArgs, oocc));
1008 stats.
tsetup = watch.elapsed();
1009 stats.
levels = amg->maxlevels();
1013 Dune::InverseOperatorResult stat;
1015 if (gfs.gridView().comm().size()>1) {
1017 gfs.gridView().communicate(adddh,
1018 Dune::InteriorBorder_InteriorBorder_Interface,
1019 Dune::ForwardCommunication);
1022 Solver<VectorType> solver(oop,sp,*amg,reduction,maxiter,verb);
1024 stats.
tsolve= watch.elapsed();
1042 const GO& _grid_operator;
1051 std::shared_ptr<AMG> amg;
1072 template<
class GO,
int s=96>
1079 int verbose_=1,
bool reuse_=
false,
1080 bool usesuperlu_=
true)
1099 template<
class GO,
int s=96>
1106 int verbose_=1,
bool reuse_=
false,
1107 bool usesuperlu_=
true)
1126 template<
class GO,
int s=96>
1133 int verbose_=1,
bool reuse_=
false,
1134 bool usesuperlu_=
true)
const std::string s
Definition: function.hh:843
void assertParallelUG(T comm)
Definition: parallelhelper.hh:445
For backward compatibility – Do not use this!
Definition: adaptivity.hh:28
std::enable_if< std::is_base_of< impl::WrapperBase, T >::value, Native< T > & >::type native(T &t)
Definition: backend/interface.hh:192
typename native_type< T >::type Native
Alias of the native container type associated with T or T itself if it is not a backend wrapper.
Definition: backend/interface.hh:176
Definition: blockmatrixdiagonal.hh:215
Definition: blockmatrixdiagonal.hh:220
void invert()
Definition: blockmatrixdiagonal.hh:233
void mv(const X &x, Y &y) const
Definition: blockmatrixdiagonal.hh:239
Operator for the non-overlapping parallel case.
Definition: novlpistlsolverbackend.hh:55
NonoverlappingOperator(const GFS &gfs_, const M &A)
Construct a non-overlapping operator.
Definition: novlpistlsolverbackend.hh:77
virtual const M & getmat() const override
extract the matrix
Definition: novlpistlsolverbackend.hh:123
virtual void apply(const X &x, Y &y) const override
apply operator
Definition: novlpistlsolverbackend.hh:87
Backend::Native< X > domain_type
export type of vectors the matrix is applied to
Definition: novlpistlsolverbackend.hh:60
X::field_type field_type
export type of the entries for x
Definition: novlpistlsolverbackend.hh:64
virtual void applyscaleadd(field_type alpha, const X &x, Y &y) const override
apply operator to x, scale and add:
Definition: novlpistlsolverbackend.hh:105
Backend::Native< Y > range_type
export type of result vectors
Definition: novlpistlsolverbackend.hh:62
SolverCategory::Category category() const override
Definition: novlpistlsolverbackend.hh:117
Backend::Native< M > matrix_type
export type of matrix
Definition: novlpistlsolverbackend.hh:58
Definition: novlpistlsolverbackend.hh:136
X::ElementType field_type
Definition: novlpistlsolverbackend.hh:140
SolverCategory::Category category() const override
Definition: novlpistlsolverbackend.hh:142
X domain_type
export types
Definition: novlpistlsolverbackend.hh:139
NonoverlappingScalarProduct(const GFS &gfs_, const ISTL::ParallelHelper< GFS > &helper_)
Constructor needs to know the grid function space.
Definition: novlpistlsolverbackend.hh:149
virtual double norm(const X &x) const override
Norm of a right-hand side vector. The vector must be consistent on the interior+border partition.
Definition: novlpistlsolverbackend.hh:169
void make_consistent(X &x) const
make additive vector consistent
Definition: novlpistlsolverbackend.hh:176
virtual field_type dot(const X &x, const X &y) const override
Dot product of two vectors. It is assumed that the vectors are consistent on the interior+border part...
Definition: novlpistlsolverbackend.hh:157
Definition: novlpistlsolverbackend.hh:191
X::ElementType field_type
The field type of the preconditioner.
Definition: novlpistlsolverbackend.hh:198
NonoverlappingRichardson(const GFS &gfs_, const ISTL::ParallelHelper< GFS > &helper_)
Constructor.
Definition: novlpistlsolverbackend.hh:207
virtual void apply(X &v, const Y &d) const override
Apply the precondioner.
Definition: novlpistlsolverbackend.hh:220
X domain_type
The domain type of the preconditioner.
Definition: novlpistlsolverbackend.hh:194
Y range_type
The range type of the preconditioner.
Definition: novlpistlsolverbackend.hh:196
virtual void post(X &x) override
Clean up.
Definition: novlpistlsolverbackend.hh:228
virtual void pre(X &x, Y &b) const override
Prepare the preconditioner.
Definition: novlpistlsolverbackend.hh:215
SolverCategory::Category category() const override
Definition: novlpistlsolverbackend.hh:201
parallel non-overlapping Jacobi preconditioner
Definition: novlpistlsolverbackend.hh:252
virtual void pre(X &x, Y &b) override
Prepare the preconditioner.
Definition: novlpistlsolverbackend.hh:307
virtual void post(X &x) override
Clean up.
Definition: novlpistlsolverbackend.hh:321
virtual void apply(X &v, const Y &d) override
Apply the precondioner.
Definition: novlpistlsolverbackend.hh:315
SolverCategory::Category category() const override
Definition: novlpistlsolverbackend.hh:274
X::ElementType field_type
The field type of the preconditioner.
Definition: novlpistlsolverbackend.hh:272
X domain_type
The domain type of the operator.
Definition: novlpistlsolverbackend.hh:264
NonoverlappingJacobi(const GFS &gfs, const A &m)
Constructor.
Definition: novlpistlsolverbackend.hh:292
Y range_type
The range type of the operator.
Definition: novlpistlsolverbackend.hh:270
Nonoverlapping parallel CG solver without preconditioner.
Definition: novlpistlsolverbackend.hh:330
void apply(M &A, V &z, W &r, typename Dune::template FieldTraits< typename V::ElementType >::real_type reduction)
solve the given linear system
Definition: novlpistlsolverbackend.hh:368
ISTLBackend_NOVLP_CG_NOPREC(const GFS &gfs_, unsigned maxiter_=5000, int verbose_=1)
make a linear solver object
Definition: novlpistlsolverbackend.hh:340
const Dune::PDELab::LinearSolverResult< double > & result() const
Return access to result data.
Definition: novlpistlsolverbackend.hh:389
V::ElementType norm(const V &v) const
compute global norm of a vector
Definition: novlpistlsolverbackend.hh:351
Nonoverlapping parallel CG solver with Jacobi preconditioner.
Definition: novlpistlsolverbackend.hh:405
const LinearSolverResult< double > & result() const
Return access to result data.
Definition: novlpistlsolverbackend.hh:480
V::ElementType norm(const V &v) const
compute global norm of a vector
Definition: novlpistlsolverbackend.hh:434
ISTLBackend_NOVLP_CG_Jacobi(const GFS &gfs_, unsigned maxiter_=5000, int verbose_=1)
make a linear solver object
Definition: novlpistlsolverbackend.hh:421
void apply(M &A, V &z, W &r, typename Dune::template FieldTraits< typename V::ElementType >::real_type reduction)
solve the given linear system
Definition: novlpistlsolverbackend.hh:457
Nonoverlapping parallel BiCGStab solver without preconditioner.
Definition: novlpistlsolverbackend.hh:487
const Dune::PDELab::LinearSolverResult< double > & result() const
Return access to result data.
Definition: novlpistlsolverbackend.hh:544
ISTLBackend_NOVLP_BCGS_NOPREC(const GFS &gfs_, unsigned maxiter_=5000, int verbose_=1)
make a linear solver object
Definition: novlpistlsolverbackend.hh:497
void apply(M &A, V &z, W &r, typename Dune::template FieldTraits< typename V::ElementType >::real_type reduction)
solve the given linear system
Definition: novlpistlsolverbackend.hh:523
V::ElementType norm(const V &v) const
compute global norm of a vector
Definition: novlpistlsolverbackend.hh:506
Nonoverlapping parallel BiCGStab solver with Jacobi preconditioner.
Definition: novlpistlsolverbackend.hh:561
const Dune::PDELab::LinearSolverResult< double > & result() const
Return access to result data.
Definition: novlpistlsolverbackend.hh:620
ISTLBackend_NOVLP_BCGS_Jacobi(const GFS &gfs_, unsigned maxiter_=5000, int verbose_=1)
make a linear solver object
Definition: novlpistlsolverbackend.hh:571
V::ElementType norm(const V &v) const
compute global norm of a vector
Definition: novlpistlsolverbackend.hh:580
void apply(M &A, V &z, W &r, typename Dune::template FieldTraits< typename V::ElementType >::real_type reduction)
solve the given linear system
Definition: novlpistlsolverbackend.hh:597
Solver to be used for explicit time-steppers with (block-)diagonal mass matrix.
Definition: novlpistlsolverbackend.hh:636
V::ElementType norm(const V &v) const
compute global norm of a vector
Definition: novlpistlsolverbackend.hh:658
const Dune::PDELab::LinearSolverResult< double > & result() const
Return access to result data.
Definition: novlpistlsolverbackend.hh:694
ISTLBackend_NOVLP_ExplicitDiagonal(const GFS &gfs_)
make a linear solver object
Definition: novlpistlsolverbackend.hh:649
void apply(M &A, V &z, W &r, typename Dune::template FieldTraits< typename W::ElementType >::real_type reduction)
solve the given linear system
Definition: novlpistlsolverbackend.hh:675
Utility base class for preconditioned novlp backends.
Definition: novlpistlsolverbackend.hh:713
ISTLBackend_NOVLP_BASE_PREC(const GO &grid_operator, unsigned maxiter_=5000, unsigned steps_=5, int verbose_=1)
Constructor.
Definition: novlpistlsolverbackend.hh:725
const Dune::PDELab::LinearSolverResult< double > & result() const
Return access to result data.
Definition: novlpistlsolverbackend.hh:804
Vector::ElementType norm(const Vector &v) const
Compute global norm of a vector.
Definition: novlpistlsolverbackend.hh:739
void apply(M &A, V &z, W &r, typename V::ElementType reduction)
Solve the given linear system.
Definition: novlpistlsolverbackend.hh:756
Nonoverlapping parallel BiCGSTAB solver preconditioned by block SSOR.
Definition: novlpistlsolverbackend.hh:837
ISTLBackend_NOVLP_BCGS_SSORk(const GO &grid_operator, unsigned maxiter_=5000, int steps_=5, int verbose_=1)
make a linear solver object
Definition: novlpistlsolverbackend.hh:847
Nonoverlapping parallel CG solver preconditioned by block SSOR.
Definition: novlpistlsolverbackend.hh:862
ISTLBackend_NOVLP_CG_SSORk(const GO &grid_operator, unsigned maxiter_=5000, int steps_=5, int verbose_=1)
make a linear solver object
Definition: novlpistlsolverbackend.hh:872
Definition: novlpistlsolverbackend.hh:883
void apply(M &A, V &z, V &r, typename Dune::template FieldTraits< typename V::ElementType >::real_type reduction)
Definition: novlpistlsolverbackend.hh:977
const Parameters & parameters() const
Get the parameters describing the behaviuour of AMG.
Definition: novlpistlsolverbackend.hh:946
const ISTLAMGStatistics & statistics() const
Get statistics of the AMG solver (no of levels, timings).
Definition: novlpistlsolverbackend.hh:1036
V::ElementType norm(const V &v) const
compute global norm of a vector
Definition: novlpistlsolverbackend.hh:968
void setParameters(const Parameters ¶ms_)
set AMG parameters
Definition: novlpistlsolverbackend.hh:934
ISTLBackend_AMG_NOVLP(const GO &grid_operator, unsigned maxiter_=5000, int verbose_=1, bool reuse_=false, bool usesuperlu_=true)
Definition: novlpistlsolverbackend.hh:904
bool getReuse() const
Return whether the AMG is reused during call to apply()
Definition: novlpistlsolverbackend.hh:958
void setReuse(bool reuse_)
Set whether the AMG should be reused again during call to apply().
Definition: novlpistlsolverbackend.hh:952
Nonoverlapping parallel CG solver preconditioned with AMG smoothed by SSOR.
Definition: novlpistlsolverbackend.hh:1075
ISTLBackend_NOVLP_CG_AMG_SSOR(const GO &grid_operator, unsigned maxiter_=5000, int verbose_=1, bool reuse_=false, bool usesuperlu_=true)
Definition: novlpistlsolverbackend.hh:1078
Nonoverlapping parallel BiCGStab solver preconditioned with AMG smoothed by SSOR.
Definition: novlpistlsolverbackend.hh:1102
ISTLBackend_NOVLP_BCGS_AMG_SSOR(const GO &grid_operator, unsigned maxiter_=5000, int verbose_=1, bool reuse_=false, bool usesuperlu_=true)
Definition: novlpistlsolverbackend.hh:1105
Nonoverlapping parallel LoopSolver preconditioned with AMG smoothed by SSOR.
Definition: novlpistlsolverbackend.hh:1129
ISTLBackend_NOVLP_LS_AMG_SSOR(const GO &grid_operator, unsigned maxiter_=5000, int verbose_=1, bool reuse_=false, bool usesuperlu_=true)
Definition: novlpistlsolverbackend.hh:1132
Definition: parallelhelper.hh:51
RankIndex rank() const
Returns the MPI rank of this process.
Definition: parallelhelper.hh:248
void createIndexSetAndProjectForAMG(MatrixType &m, Comm &c)
Makes the matrix consistent and creates the parallel information for AMG.
Dune::Amg::SequentialInformation type
Definition: parallelhelper.hh:429
Class providing some statistics of the AMG solver.
Definition: seqistlsolverbackend.hh:701
double tprepare
The needed for computing the parallel information and for adapting the linear system.
Definition: seqistlsolverbackend.hh:706
double tsetup
The time needed for building the AMG hierarchy (coarsening).
Definition: seqistlsolverbackend.hh:712
double tsolve
The time spent in solving the system (without building the hierarchy.
Definition: seqistlsolverbackend.hh:710
bool directCoarseLevelSolver
True if a direct solver was used on the coarset level.
Definition: seqistlsolverbackend.hh:716
int levels
the number of levels in the AMG hierarchy.
Definition: seqistlsolverbackend.hh:708
RFType conv_rate
Definition: solver.hh:36
bool converged
Definition: solver.hh:32
RFType reduction
Definition: solver.hh:35
unsigned int iterations
Definition: solver.hh:33
double elapsed
Definition: solver.hh:34
Dune::PDELab::LinearSolverResult< double > res
Definition: solver.hh:63
Definition: genericdatahandle.hh:667
Definition: recipe-operator-splitting.cc:108