Go to the documentation of this file.
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
95 if (gfs.gridView().comm().size()>1)
96 gfs.gridView().communicate(adddh,Dune::InteriorBorder_InteriorBorder_Interface,Dune::ForwardCommunication);
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>
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);
766 phelper.createIndexSetAndProjectForAMG(mat, oocc);
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);
986 phelper.createIndexSetAndProjectForAMG(A, oocc);
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)
1144 #endif // DUNE_PDELAB_BACKEND_ISTL_NOVLPISTLSOLVERBACKEND_HH
const Parameters & parameters() const
Get the parameters describing the behaviuour of AMG.
Definition: novlpistlsolverbackend.hh:946
Backend::Native< Y > range_type
export type of result vectors
Definition: novlpistlsolverbackend.hh:62
void invert()
Definition: blockmatrixdiagonal.hh:233
RFType reduction
Definition: solver.hh:35
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
void setReuse(bool reuse_)
Set whether the AMG should be reused again during call to apply().
Definition: novlpistlsolverbackend.hh:952
const Dune::PDELab::LinearSolverResult< double > & result() const
Return access to result data.
Definition: novlpistlsolverbackend.hh:389
typename impl::BackendVectorSelector< GridFunctionSpace, FieldType >::Type Vector
alias of the return type of BackendVectorSelector
Definition: backend/interface.hh:106
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
V::ElementType norm(const V &v) const
compute global norm of a vector
Definition: novlpistlsolverbackend.hh:506
ISTLBackend_AMG_NOVLP(const GO &grid_operator, unsigned maxiter_=5000, int verbose_=1, bool reuse_=false, bool usesuperlu_=true)
Definition: novlpistlsolverbackend.hh:904
Nonoverlapping parallel CG solver with Jacobi preconditioner.
Definition: novlpistlsolverbackend.hh:404
NonoverlappingScalarProduct(const GFS &gfs_, const ISTL::ParallelHelper< GFS > &helper_)
Constructor needs to know the grid function space.
Definition: novlpistlsolverbackend.hh:149
Y range_type
The range type of the preconditioner.
Definition: novlpistlsolverbackend.hh:196
virtual void apply(const X &x, Y &y) const override
apply operator
Definition: novlpistlsolverbackend.hh:87
Backend::Native< M > matrix_type
export type of matrix
Definition: novlpistlsolverbackend.hh:58
Nonoverlapping parallel BiCGStab solver preconditioned with AMG smoothed by SSOR.
Definition: novlpistlsolverbackend.hh:1100
bool directCoarseLevelSolver
True if a direct solver was used on the coarset level.
Definition: seqistlsolverbackend.hh:716
RFType conv_rate
Definition: solver.hh:36
Nonoverlapping parallel CG solver preconditioned by block SSOR.
Definition: novlpistlsolverbackend.hh:860
SolverCategory::Category category() const override
Definition: novlpistlsolverbackend.hh:201
ISTLBackend_NOVLP_CG_Jacobi(const GFS &gfs_, unsigned maxiter_=5000, int verbose_=1)
make a linear solver object
Definition: novlpistlsolverbackend.hh:421
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
SolverCategory::Category category() const override
Definition: novlpistlsolverbackend.hh:274
void apply(M &A, V &z, V &r, typename Dune::template FieldTraits< typename V::ElementType >::real_type reduction)
Definition: novlpistlsolverbackend.hh:977
Dune::PDELab::LinearSolverResult< double > res
Definition: solver.hh:63
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
Operator for the non-overlapping parallel case.
Definition: novlpistlsolverbackend.hh:53
virtual void post(X &x) override
Clean up.
Definition: novlpistlsolverbackend.hh:321
Definition: blockmatrixdiagonal.hh:219
ISTLBackend_NOVLP_BASE_PREC(const GO &grid_operator, unsigned maxiter_=5000, unsigned steps_=5, int verbose_=1)
Constructor.
Definition: novlpistlsolverbackend.hh:725
Utility base class for preconditioned novlp backends.
Definition: novlpistlsolverbackend.hh:712
NonoverlappingRichardson(const GFS &gfs_, const ISTL::ParallelHelper< GFS > &helper_)
Constructor.
Definition: novlpistlsolverbackend.hh:207
SolverCategory::Category category() const override
Definition: novlpistlsolverbackend.hh:117
For backward compatibility – Do not use this!
Definition: adaptivity.hh:28
bool converged
Definition: solver.hh:32
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
void setParameters(const Parameters ¶ms_)
set AMG parameters
Definition: novlpistlsolverbackend.hh:934
V::ElementType norm(const V &v) const
compute global norm of a vector
Definition: novlpistlsolverbackend.hh:434
V::ElementType norm(const V &v) const
compute global norm of a vector
Definition: novlpistlsolverbackend.hh:968
bool getReuse() const
Return whether the AMG is reused during call to apply()
Definition: novlpistlsolverbackend.hh:958
Nonoverlapping parallel CG solver preconditioned with AMG smoothed by SSOR.
Definition: novlpistlsolverbackend.hh:1073
virtual void post(X &x) override
Clean up.
Definition: novlpistlsolverbackend.hh:228
std::enable_if< std::is_base_of< impl::WrapperBase, T >::value, Native< T > & >::type native(T &t)
Definition: backend/interface.hh:192
Definition: parallelhelper.hh:50
X::ElementType field_type
Definition: novlpistlsolverbackend.hh:140
Definition: novlpistlsolverbackend.hh:190
Class providing some statistics of the AMG solver.
Definition: seqistlsolverbackend.hh:700
X domain_type
The domain type of the operator.
Definition: novlpistlsolverbackend.hh:264
void make_consistent(X &x) const
make additive vector consistent
Definition: novlpistlsolverbackend.hh:176
unsigned int iterations
Definition: solver.hh:33
X::field_type field_type
export type of the entries for x
Definition: novlpistlsolverbackend.hh:64
Definition: blockmatrixdiagonal.hh:214
Solver to be used for explicit time-steppers with (block-)diagonal mass matrix.
Definition: novlpistlsolverbackend.hh:635
Definition: recipe-operator-splitting.cc:107
virtual void apply(X &v, const Y &d) override
Apply the precondioner.
Definition: novlpistlsolverbackend.hh:315
Backend::Native< X > domain_type
export type of vectors the matrix is applied to
Definition: novlpistlsolverbackend.hh:60
ISTLBackend_NOVLP_ExplicitDiagonal(const GFS &gfs_)
make a linear solver object
Definition: novlpistlsolverbackend.hh:649
int levels
the number of levels in the AMG hierarchy.
Definition: seqistlsolverbackend.hh:708
const Dune::PDELab::LinearSolverResult< double > & result() const
Return access to result data.
Definition: novlpistlsolverbackend.hh:544
RankIndex rank() const
Returns the MPI rank of this process.
Definition: parallelhelper.hh:248
NonoverlappingOperator(const GFS &gfs_, const M &A)
Construct a non-overlapping operator.
Definition: novlpistlsolverbackend.hh:77
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
const Dune::PDELab::LinearSolverResult< double > & result() const
Return access to result data.
Definition: novlpistlsolverbackend.hh:620
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 without preconditioner.
Definition: novlpistlsolverbackend.hh:486
virtual void pre(X &x, Y &b) const override
Prepare the preconditioner.
Definition: novlpistlsolverbackend.hh:215
ISTLBackend_NOVLP_BCGS_NOPREC(const GFS &gfs_, unsigned maxiter_=5000, int verbose_=1)
make a linear solver object
Definition: novlpistlsolverbackend.hh:497
double tsolve
The time spent in solving the system (without building the hierarchy.
Definition: seqistlsolverbackend.hh:710
Dune::Amg::SequentialInformation type
Definition: parallelhelper.hh:429
const Dune::PDELab::LinearSolverResult< double > & result() const
Return access to result data.
Definition: novlpistlsolverbackend.hh:804
SolverCategory::Category category() const override
Definition: novlpistlsolverbackend.hh:142
X::ElementType field_type
The field type of the preconditioner.
Definition: novlpistlsolverbackend.hh:272
double tsetup
The time needed for building the AMG hierarchy (coarsening).
Definition: seqistlsolverbackend.hh:712
const LinearSolverResult< double > & result() const
Return access to result data.
Definition: novlpistlsolverbackend.hh:480
Nonoverlapping parallel CG solver without preconditioner.
Definition: novlpistlsolverbackend.hh:329
V::ElementType norm(const V &v) const
compute global norm of a vector
Definition: novlpistlsolverbackend.hh:351
Definition: novlpistlsolverbackend.hh:135
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
Nonoverlapping parallel LoopSolver preconditioned with AMG smoothed by SSOR.
Definition: novlpistlsolverbackend.hh:1127
void mv(const X &x, Y &y) const
Definition: blockmatrixdiagonal.hh:239
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
virtual void apply(X &v, const Y &d) const override
Apply the precondioner.
Definition: novlpistlsolverbackend.hh:220
ISTLBackend_NOVLP_CG_NOPREC(const GFS &gfs_, unsigned maxiter_=5000, int verbose_=1)
make a linear solver object
Definition: novlpistlsolverbackend.hh:340
Y range_type
The range type of the operator.
Definition: novlpistlsolverbackend.hh:270
parallel non-overlapping Jacobi preconditioner
Definition: novlpistlsolverbackend.hh:250
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
Nonoverlapping parallel BiCGSTAB solver preconditioned by block SSOR.
Definition: novlpistlsolverbackend.hh:835
double elapsed
Definition: solver.hh:34
ISTLBackend_NOVLP_BCGS_Jacobi(const GFS &gfs_, unsigned maxiter_=5000, int verbose_=1)
make a linear solver object
Definition: novlpistlsolverbackend.hh:571
double tprepare
The needed for computing the parallel information and for adapting the linear system.
Definition: seqistlsolverbackend.hh:706
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
const Dune::PDELab::LinearSolverResult< double > & result() const
Return access to result data.
Definition: novlpistlsolverbackend.hh:694
Definition: genericdatahandle.hh:665
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
Vector::ElementType norm(const Vector &v) const
Compute global norm of a vector.
Definition: novlpistlsolverbackend.hh:739
Definition: novlpistlsolverbackend.hh:882
NonoverlappingJacobi(const GFS &gfs, const A &m)
Constructor.
Definition: novlpistlsolverbackend.hh:292
virtual void pre(X &x, Y &b) override
Prepare the preconditioner.
Definition: novlpistlsolverbackend.hh:307
virtual const M & getmat() const override
extract the matrix
Definition: novlpistlsolverbackend.hh:123
X domain_type
The domain type of the preconditioner.
Definition: novlpistlsolverbackend.hh:194
V::ElementType norm(const V &v) const
compute global norm of a vector
Definition: novlpistlsolverbackend.hh:658
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
const ISTLAMGStatistics & statistics() const
Get statistics of the AMG solver (no of levels, timings).
Definition: novlpistlsolverbackend.hh:1036
X domain_type
export types
Definition: novlpistlsolverbackend.hh:139
V::ElementType norm(const V &v) const
compute global norm of a vector
Definition: novlpistlsolverbackend.hh:580
Nonoverlapping parallel BiCGStab solver with Jacobi preconditioner.
Definition: novlpistlsolverbackend.hh:560
virtual void applyscaleadd(field_type alpha, const X &x, Y &y) const override
apply operator to x, scale and add:
Definition: novlpistlsolverbackend.hh:105
const std::string s
Definition: function.hh:843
X::ElementType field_type
The field type of the preconditioner.
Definition: novlpistlsolverbackend.hh:198
void assertParallelUG(T comm)
Definition: parallelhelper.hh:445
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