3 #ifndef DUNE_PDELAB_BACKEND_ISTL_NOVLPISTLSOLVERBACKEND_HH 4 #define DUNE_PDELAB_BACKEND_ISTL_NOVLPISTLSOLVERBACKEND_HH 11 #include <dune/common/deprecated.hh> 12 #include <dune/common/parallel/mpihelper.hh> 14 #include <dune/grid/common/gridenums.hh> 16 #include <dune/istl/io.hh> 17 #include <dune/istl/operators.hh> 18 #include <dune/istl/owneroverlapcopy.hh> 19 #include <dune/istl/paamg/amg.hh> 20 #include <dune/istl/paamg/pinfo.hh> 21 #include <dune/istl/preconditioners.hh> 22 #include <dune/istl/scalarproducts.hh> 23 #include <dune/istl/solvercategory.hh> 24 #include <dune/istl/solvers.hh> 25 #include <dune/istl/superlu.hh> 55 template<
typename GFS,
typename M,
typename X,
typename Y>
57 :
public Dune::AssembledLinearOperator<M,X,Y>
70 enum {
category=Dune::SolverCategory::nonoverlapping};
93 virtual void apply (
const X& x, Y& y)
const 101 if (gfs.gridView().comm().size()>1)
102 gfs.gridView().communicate(adddh,Dune::InteriorBorder_InteriorBorder_Interface,Dune::ForwardCommunication);
119 if (gfs.gridView().comm().size()>1)
120 gfs.gridView().communicate(adddh,Dune::InteriorBorder_InteriorBorder_Interface,Dune::ForwardCommunication);
135 template<
class GFS,
class X>
144 enum {
category=Dune::SolverCategory::nonoverlapping};
149 : gfs(gfs_), helper(helper_)
156 virtual field_type
dot (
const X& x,
const X& y)
159 field_type sum = helper.disjointDot(x,y);
162 return gfs.gridView().comm().sum(sum);
168 virtual double norm (
const X& x)
170 return sqrt(static_cast<double>(this->dot(x,x)));
178 if (gfs.gridView().comm().size()>1)
179 gfs.gridView().communicate(adddh,Dune::InteriorBorder_InteriorBorder_Interface,Dune::ForwardCommunication);
188 template<
class GFS,
class X,
class Y>
207 : gfs(gfs_), helper(helper_)
214 virtual void pre (X& x, Y& b) {}
219 virtual void apply (X& v,
const Y& d)
247 template<
typename A,
typename X,
typename Y>
249 :
public Dune::Preconditioner<X,Y>
254 Diagonal _inverse_diagonal;
289 template<
typename GFS>
291 : _inverse_diagonal(m)
295 gfs.gridView().communicate(addDH,
296 InteriorBorder_InteriorBorder_Interface,
297 ForwardCommunication);
300 _inverse_diagonal.
invert();
305 virtual void pre (X& x, Y& b) {}
313 virtual void apply (X& v,
const Y& d)
315 _inverse_diagonal.
mv(d,v);
339 unsigned maxiter_=5000,
341 : gfs(gfs_), phelper(gfs,verbose_), maxiter(maxiter_), verbose(verbose_)
349 typename V::ElementType
norm (
const V& v)
const 353 PSP psp(gfs,phelper);
354 psp.make_consistent(x);
365 template<
class M,
class V,
class W>
366 void apply(M& A, V& z, W& r,
typename Dune::template FieldTraits<typename V::ElementType >::real_type reduction)
371 PSP psp(gfs,phelper);
373 PRICH prich(gfs,phelper);
375 if (gfs.gridView().comm().rank()==0) verb=verbose;
376 Dune::CGSolver<V> solver(pop,psp,prich,reduction,maxiter,verb);
377 Dune::InverseOperatorResult stat;
378 solver.apply(z,r,stat);
379 res.converged = stat.converged;
380 res.iterations = stat.iterations;
381 res.elapsed = stat.elapsed;
382 res.reduction = stat.reduction;
383 res.conv_rate = stat.conv_rate;
420 unsigned maxiter_ = 5000,
422 gfs(gfs_), phelper(gfs,verbose_), maxiter(maxiter_), verbose(verbose_)
432 typename V::ElementType
norm (
const V& v)
const 436 PSP psp(gfs,phelper);
437 psp.make_consistent(x);
454 template<
class M,
class V,
class W>
455 void apply(M& A, V& z, W& r,
typename Dune::template FieldTraits<typename V::ElementType >::real_type reduction)
460 PSP psp(gfs,phelper);
466 if (gfs.gridView().comm().rank()==0) verb=verbose;
467 CGSolver<V> solver(pop,psp,ppre,reduction,maxiter,verb);
468 InverseOperatorResult stat;
469 solver.apply(z,r,stat);
496 : gfs(gfs_), phelper(gfs,verbose_), maxiter(maxiter_), verbose(verbose_)
504 typename V::ElementType
norm (
const V& v)
const 508 PSP psp(gfs,phelper);
509 psp.make_consistent(x);
520 template<
class M,
class V,
class W>
521 void apply(M& A, V& z, W& r,
typename Dune::template FieldTraits<typename V::ElementType >::real_type reduction)
526 PSP psp(gfs,phelper);
528 PRICH prich(gfs,phelper);
530 if (gfs.gridView().comm().rank()==0) verb=verbose;
531 Dune::BiCGSTABSolver<V> solver(pop,psp,prich,reduction,maxiter,verb);
532 Dune::InverseOperatorResult stat;
533 solver.apply(z,r,stat);
534 res.converged = stat.converged;
535 res.iterations = stat.iterations;
536 res.elapsed = stat.elapsed;
537 res.reduction = stat.reduction;
538 res.conv_rate = stat.conv_rate;
570 : gfs(gfs_), phelper(gfs,verbose_), maxiter(maxiter_), verbose(verbose_)
578 typename V::ElementType
norm (
const V& v)
const 582 PSP psp(gfs,phelper);
583 psp.make_consistent(x);
594 template<
class M,
class V,
class W>
595 void apply(M& A, V& z, W& r,
typename Dune::template FieldTraits<typename V::ElementType >::real_type reduction)
600 PSP psp(gfs,phelper);
606 if (gfs.gridView().comm().rank()==0) verb=verbose;
607 Dune::BiCGSTABSolver<V> solver(pop,psp,ppre,reduction,maxiter,verb);
608 Dune::InverseOperatorResult stat;
609 solver.apply(z,r,stat);
610 res.converged = stat.converged;
611 res.iterations = stat.iterations;
612 res.elapsed = stat.elapsed;
613 res.reduction = stat.reduction;
614 res.conv_rate = stat.conv_rate;
632 template<
typename GFS>
648 : gfs(gfs_), phelper(gfs)
656 typename V::ElementType
norm (
const V& v)
const 660 PSP psp(gfs,phelper);
661 psp.make_consistent(x);
672 template<
class M,
class V,
class W>
673 void apply(M& A, V& z, W& r,
typename Dune::template FieldTraits<typename W::ElementType >::real_type reduction)
675 Dune::SeqJac<M,V,W> jac(A,1,1.0);
679 if (gfs.gridView().comm().size()>1)
682 gfs.gridView().communicate(adddh,Dune::InteriorBorder_InteriorBorder_Interface,Dune::ForwardCommunication);
701 template<
class,
class,
class,
int>
class Preconditioner,
702 template<
class>
class Solver>
705 typedef typename GO::Traits::TrialGridFunctionSpace GFS;
717 : _grid_operator(grid_operator)
718 , gfs(grid_operator.trialGridFunctionSpace())
719 , phelper(gfs,verbose_)
729 template<
class Vector>
734 PSP psp(gfs,phelper);
735 psp.make_consistent(x);
746 template<
class M,
class V,
class W>
747 void apply(M& A, V& z, W& r,
typename V::ElementType reduction)
754 _grid_operator.make_consistent(A);
756 Comm oocc(gfs.gridView().comm(),Dune::SolverCategory::nonoverlapping);
757 phelper.createIndexSetAndProjectForAMG(mat, oocc);
758 typedef Preconditioner<MatrixType,VectorType,VectorType,1> Smoother;
759 Smoother smoother(mat, steps, 1.0);
760 typedef Dune::NonoverlappingSchwarzScalarProduct<VectorType,Comm> PSP;
762 typedef Dune::NonoverlappingSchwarzOperator<MatrixType,VectorType,VectorType,Comm> Operator;
763 Operator oop(mat,oocc);
764 typedef Dune::NonoverlappingBlockPreconditioner<Comm, Smoother> ParSmoother;
765 ParSmoother parsmoother(smoother, oocc);
767 typedef Preconditioner<MatrixType,VectorType,VectorType,1> ParSmoother;
768 ParSmoother parsmoother(mat, steps, 1.0);
769 typedef Dune::SeqScalarProduct<VectorType> PSP;
771 typedef Dune::MatrixAdapter<MatrixType,VectorType,VectorType> Operator;
775 if (gfs.gridView().comm().rank()==0) verb=verbose;
776 Solver<VectorType> solver(oop,psp,parsmoother,reduction,maxiter,verb);
777 Dune::InverseOperatorResult stat;
779 if (gfs.gridView().comm().size()>1){
781 gfs.gridView().communicate(adddh,
782 Dune::InteriorBorder_InteriorBorder_Interface,
783 Dune::ForwardCommunication);
786 solver.apply(z,r,stat);
787 res.converged = stat.converged;
788 res.iterations = stat.iterations;
789 res.elapsed = stat.elapsed;
790 res.reduction = stat.reduction;
791 res.conv_rate = stat.conv_rate;
801 const GO& _grid_operator;
838 int steps_=5,
int verbose_=1)
860 int steps_=5,
int verbose_=1)
867 template<
class GO,
int s,
template<
class,
class,
class,
int>
class Preconditioner,
868 template<
class>
class Solver>
871 typedef typename GO::Traits::TrialGridFunctionSpace GFS;
873 typedef typename GO::Traits::Jacobian M;
875 typedef typename GO::Traits::Domain V;
879 typedef Preconditioner<MatrixType,VectorType,VectorType,1> Smoother;
880 typedef Dune::NonoverlappingBlockPreconditioner<Comm,Smoother> ParSmoother;
881 typedef Dune::NonoverlappingSchwarzOperator<MatrixType,VectorType,VectorType,Comm> Operator;
883 typedef Preconditioner<MatrixType,VectorType,VectorType,1> ParSmoother;
884 typedef Dune::MatrixAdapter<MatrixType,VectorType,VectorType> Operator;
886 typedef typename Dune::Amg::SmootherTraits<ParSmoother>::Arguments SmootherArgs;
887 typedef Dune::Amg::AMG<Operator,VectorType,ParSmoother,Comm> AMG;
888 typedef Dune::Amg::Parameters Parameters;
892 int verbose_=1,
bool reuse_=
false,
893 bool usesuperlu_=
true)
894 : _grid_operator(grid_operator)
895 , gfs(grid_operator.trialGridFunctionSpace())
896 , phelper(gfs,verbose_)
898 , params(15,2000,1.2,1.6,
Dune::Amg::atOnceAccu)
902 , usesuperlu(usesuperlu_)
904 params.setDefaultValuesIsotropic(GFS::Traits::GridViewType::Traits::Grid::dimension);
905 params.setDebugLevel(verbose_);
907 if (phelper.rank() == 0 && usesuperlu ==
true)
909 std::cout <<
"WARNING: You are using AMG without SuperLU!" 910 <<
" Please consider installing SuperLU," 911 <<
" or set the usesuperlu flag to false" 912 <<
" to suppress this warning." << std::endl;
942 typename V::ElementType
norm (
const V& v)
const 946 PSP psp(gfs,phelper);
947 psp.make_consistent(x);
951 void apply(M& A, V& z, V& r,
typename Dune::template FieldTraits<typename V::ElementType >::real_type reduction)
955 typedef Dune::Amg::CoarsenCriterion<Dune::Amg::SymmetricCriterion<MatrixType,
956 Dune::Amg::FirstDiagonal> > Criterion;
958 Comm oocc(gfs.gridView().comm(),Dune::SolverCategory::nonoverlapping);
959 _grid_operator.make_consistent(A);
960 phelper.createIndexSetAndProjectForAMG(A, oocc);
961 Dune::NonoverlappingSchwarzScalarProduct<VectorType,Comm> sp(oocc);
962 Operator oop(mat, oocc);
964 Comm oocc(gfs.gridView().comm());
966 Dune::SeqScalarProduct<VectorType> sp;
968 SmootherArgs smootherArgs;
969 smootherArgs.iterations = 1;
970 smootherArgs.relaxationFactor = 1;
972 Criterion criterion(params);
973 stats.tprepare=watch.elapsed();
977 if (gfs.gridView().comm().rank()==0) verb=verbose;
979 if (reuse==
false || firstapply==
true){
980 amg.reset(
new AMG(oop, criterion, smootherArgs, oocc));
982 stats.tsetup = watch.elapsed();
983 stats.levels = amg->maxlevels();
984 stats.directCoarseLevelSolver=amg->usesDirectCoarseLevelSolver();
987 Dune::InverseOperatorResult stat;
989 if (gfs.gridView().comm().size()>1) {
991 gfs.gridView().communicate(adddh,
992 Dune::InteriorBorder_InteriorBorder_Interface,
993 Dune::ForwardCommunication);
996 Solver<VectorType> solver(oop,sp,*amg,reduction,maxiter,verb);
998 stats.tsolve= watch.elapsed();
999 res.converged = stat.converged;
1000 res.iterations = stat.iterations;
1001 res.elapsed = stat.elapsed;
1002 res.reduction = stat.reduction;
1003 res.conv_rate = stat.conv_rate;
1016 const GO& _grid_operator;
1025 std::shared_ptr<AMG> amg;
1044 template<
class GO,
int s=96>
1051 int verbose_=1,
bool reuse_=
false,
1052 bool usesuperlu_=
true)
1069 template<
class GO,
int s=96>
1076 int verbose_=1,
bool reuse_=
false,
1077 bool usesuperlu_=
true)
1094 template<
class GO,
int s=96>
1101 int verbose_=1,
bool reuse_=
false,
1102 bool usesuperlu_=
true)
1112 #endif // DUNE_PDELAB_BACKEND_ISTL_NOVLPISTLSOLVERBACKEND_HH virtual void post(X &x)
Clean up.
Definition: novlpistlsolverbackend.hh:319
RFType conv_rate
Definition: solver.hh:36
ISTLBackend_NOVLP_BASE_PREC(const GO &grid_operator, unsigned maxiter_=5000, unsigned steps_=5, int verbose_=1)
Constructor.
Definition: novlpistlsolverbackend.hh:716
virtual void apply(X &v, const Y &d)
Apply the precondioner.
Definition: novlpistlsolverbackend.hh:313
V::ElementType norm(const V &v) const
compute global norm of a vector
Definition: novlpistlsolverbackend.hh:942
virtual double norm(const X &x)
Norm of a right-hand side vector. The vector must be consistent on the interior+border partition...
Definition: novlpistlsolverbackend.hh:168
NonoverlappingRichardson(const GFS &gfs_, const ISTL::ParallelHelper< GFS > &helper_)
Constructor.
Definition: novlpistlsolverbackend.hh:206
void setParameters(const Parameters ¶ms_)
set AMG parameters
Definition: novlpistlsolverbackend.hh:921
Nonoverlapping parallel CG solver preconditioned with AMG smoothed by SSOR.
Definition: novlpistlsolverbackend.hh:1045
ISTLBackend_NOVLP_CG_AMG_SSOR(const GO &grid_operator, unsigned maxiter_=5000, int verbose_=1, bool reuse_=false, bool usesuperlu_=true)
Definition: novlpistlsolverbackend.hh:1050
typename impl::BackendVectorSelector< GridFunctionSpace, FieldType >::Type Vector
alias of the return type of BackendVectorSelector
Definition: backend/interface.hh:106
Backend::Native< X > domain_type
export type of vectors the matrix is applied to
Definition: novlpistlsolverbackend.hh:63
X::ElementType field_type
The field type of the preconditioner.
Definition: novlpistlsolverbackend.hh:270
V::ElementType norm(const V &v) const
compute global norm of a vector
Definition: novlpistlsolverbackend.hh:578
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
NonoverlappingJacobi(const GFS &gfs, const A &m)
Constructor.
Definition: novlpistlsolverbackend.hh:290
Class providing some statistics of the AMG solver.
Definition: seqistlsolverbackend.hh:544
Definition: blockmatrixdiagonal.hh:217
Nonoverlapping parallel LoopSolver preconditioned with AMG smoothed by SSOR.
Definition: novlpistlsolverbackend.hh:1095
const Dune::PDELab::LinearSolverResult< double > & result() const
Return access to result data.
Definition: novlpistlsolverbackend.hh:692
X domain_type
export types
Definition: novlpistlsolverbackend.hh:140
bool converged
Definition: solver.hh:32
Definition: parallelhelper.hh:53
ISTLBackend_NOVLP_BCGS_NOPREC(const GFS &gfs_, unsigned maxiter_=5000, int verbose_=1)
make a linear solver object
Definition: novlpistlsolverbackend.hh:495
const std::string s
Definition: function.hh:1101
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:595
void mv(const X &x, Y &y) const
Definition: blockmatrixdiagonal.hh:242
X domain_type
The domain type of the operator.
Definition: novlpistlsolverbackend.hh:262
parallel non-overlapping Jacobi preconditioner
Definition: novlpistlsolverbackend.hh:248
For backward compatibility – Do not use this!
Definition: adaptivity.hh:27
const Dune::PDELab::LinearSolverResult< double > & result() const
Return access to result data.
Definition: novlpistlsolverbackend.hh:795
Operator for the non-overlapping parallel case.
Definition: novlpistlsolverbackend.hh:56
Y range_type
The range type of the preconditioner.
Definition: novlpistlsolverbackend.hh:195
Definition: genericdatahandle.hh:622
Vector::ElementType norm(const Vector &v) const
Compute global norm of a vector.
Definition: novlpistlsolverbackend.hh:730
X::ElementType field_type
The field type of the preconditioner.
Definition: novlpistlsolverbackend.hh:197
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:455
ISTLBackend_NOVLP_BCGS_Jacobi(const GFS &gfs_, unsigned maxiter_=5000, int verbose_=1)
make a linear solver object
Definition: novlpistlsolverbackend.hh:569
const Dune::PDELab::LinearSolverResult< double > & result() const
Return access to result data.
Definition: novlpistlsolverbackend.hh:387
virtual const M & getmat() const
extract the matrix
Definition: novlpistlsolverbackend.hh:124
ISTLBackend_NOVLP_LS_AMG_SSOR(const GO &grid_operator, unsigned maxiter_=5000, int verbose_=1, bool reuse_=false, bool usesuperlu_=true)
Definition: novlpistlsolverbackend.hh:1100
virtual void apply(const X &x, Y &y) const
apply operator
Definition: novlpistlsolverbackend.hh:93
Solver to be used for explicit time-steppers with (block-)diagonal mass matrix.
Definition: novlpistlsolverbackend.hh:633
void make_consistent(X &x) const
make additive vector consistent
Definition: novlpistlsolverbackend.hh:175
Nonoverlapping parallel CG solver with Jacobi preconditioner.
Definition: novlpistlsolverbackend.hh:402
Nonoverlapping parallel BiCGStab solver preconditioned with AMG smoothed by SSOR. ...
Definition: novlpistlsolverbackend.hh:1070
unsigned int iterations
Definition: solver.hh:33
void apply(M &A, V &z, V &r, typename Dune::template FieldTraits< typename V::ElementType >::real_type reduction)
Definition: novlpistlsolverbackend.hh:951
ISTLBackend_AMG_NOVLP(const GO &grid_operator, unsigned maxiter_=5000, int verbose_=1, bool reuse_=false, bool usesuperlu_=true)
Definition: novlpistlsolverbackend.hh:891
double elapsed
Definition: solver.hh:34
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:673
virtual void pre(X &x, Y &b)
Prepare the preconditioner.
Definition: novlpistlsolverbackend.hh:214
ISTLBackend_NOVLP_CG_Jacobi(const GFS &gfs_, unsigned maxiter_=5000, int verbose_=1)
make a linear solver object
Definition: novlpistlsolverbackend.hh:419
virtual void pre(X &x, Y &b)
Prepare the preconditioner.
Definition: novlpistlsolverbackend.hh:305
Nonoverlapping parallel BiCGSTAB solver preconditioned by block SSOR.
Definition: novlpistlsolverbackend.hh:825
Definition: blockmatrixdiagonal.hh:222
virtual void applyscaleadd(field_type alpha, const X &x, Y &y) const
apply operator to x, scale and add:
Definition: novlpistlsolverbackend.hh:111
virtual void apply(X &v, const Y &d)
Apply the precondioner.
Definition: novlpistlsolverbackend.hh:219
const ISTLAMGStatistics & statistics() const
Get statistics of the AMG solver (no of levels, timings).
Definition: novlpistlsolverbackend.hh:1010
Definition: novlpistlsolverbackend.hh:189
const Dune::PDELab::LinearSolverResult< double > & result() const
Return access to result data.
Definition: novlpistlsolverbackend.hh:618
V::ElementType norm(const V &v) const
compute global norm of a vector
Definition: novlpistlsolverbackend.hh:504
ISTLBackend_NOVLP_ExplicitDiagonal(const GFS &gfs_)
make a linear solver object
Definition: novlpistlsolverbackend.hh:647
const LinearSolverResult< double > & result() const
Return access to result data.
Definition: novlpistlsolverbackend.hh:478
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:859
Nonoverlapping parallel BiCGStab solver with Jacobi preconditioner.
Definition: novlpistlsolverbackend.hh:558
virtual void post(X &x)
Clean up.
Definition: novlpistlsolverbackend.hh:227
Backend::Native< Y > range_type
export type of result vectors
Definition: novlpistlsolverbackend.hh:65
ISTLBackend_NOVLP_CG_NOPREC(const GFS &gfs_, unsigned maxiter_=5000, int verbose_=1)
make a linear solver object
Definition: novlpistlsolverbackend.hh:338
Definition: novlpistlsolverbackend.hh:70
Nonoverlapping parallel CG solver without preconditioner.
Definition: novlpistlsolverbackend.hh:327
virtual field_type dot(const X &x, const X &y)
Dot product of two vectors. It is assumed that the vectors are consistent on the interior+border part...
Definition: novlpistlsolverbackend.hh:156
Definition: novlpistlsolverbackend.hh:136
V::ElementType norm(const V &v) const
compute global norm of a vector
Definition: novlpistlsolverbackend.hh:656
V::ElementType norm(const V &v) const
compute global norm of a vector
Definition: novlpistlsolverbackend.hh:349
X domain_type
The domain type of the preconditioner.
Definition: novlpistlsolverbackend.hh:193
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:837
void apply(M &A, V &z, W &r, typename V::ElementType reduction)
Solve the given linear system.
Definition: novlpistlsolverbackend.hh:747
NonoverlappingOperator(const GFS &gfs_, const M &A)
Construct a non-overlapping operator.
Definition: novlpistlsolverbackend.hh:83
Dune::Amg::SequentialInformation type
Definition: parallelhelper.hh:417
Definition: novlpistlsolverbackend.hh:869
ISTLBackend_NOVLP_BCGS_AMG_SSOR(const GO &grid_operator, unsigned maxiter_=5000, int verbose_=1, bool reuse_=false, bool usesuperlu_=true)
Definition: novlpistlsolverbackend.hh:1075
void invert()
Definition: blockmatrixdiagonal.hh:236
Definition: novlpistlsolverbackend.hh:703
std::enable_if< std::is_base_of< impl::WrapperBase, T >::value, Native< T > &>::type native(T &t)
Definition: backend/interface.hh:192
Nonoverlapping parallel BiCGStab solver without preconditioner.
Definition: novlpistlsolverbackend.hh:484
X::ElementType field_type
Definition: novlpistlsolverbackend.hh:141
V::ElementType norm(const V &v) const
compute global norm of a vector
Definition: novlpistlsolverbackend.hh:432
const Dune::PDELab::LinearSolverResult< double > & result() const
Return access to result data.
Definition: novlpistlsolverbackend.hh:542
Y range_type
The range type of the operator.
Definition: novlpistlsolverbackend.hh:268
X::field_type field_type
export type of the entries for x
Definition: novlpistlsolverbackend.hh:67
const Parameters & parameters() const
Get the parameters describing the behaviuour of AMG.
Definition: novlpistlsolverbackend.hh:933
RFType reduction
Definition: solver.hh:35
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:521
void assertParallelUG(T comm)
Definition: parallelhelper.hh:433
NonoverlappingScalarProduct(const GFS &gfs_, const ISTL::ParallelHelper< GFS > &helper_)
Constructor needs to know the grid function space.
Definition: novlpistlsolverbackend.hh:148
Backend::Native< M > matrix_type
export type of matrix
Definition: novlpistlsolverbackend.hh:61
Nonoverlapping parallel CG solver preconditioned by block SSOR.
Definition: novlpistlsolverbackend.hh:847
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:366