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)
248 template<
typename A,
typename X,
typename Y>
250 :
public Dune::Preconditioner<X,Y>
255 Diagonal _inverse_diagonal;
290 template<
typename GFS>
292 : _inverse_diagonal(m)
296 gfs.gridView().communicate(addDH,
297 InteriorBorder_InteriorBorder_Interface,
298 ForwardCommunication);
301 _inverse_diagonal.
invert();
306 virtual void pre (X& x, Y& b) {}
314 virtual void apply (X& v,
const Y& d)
316 _inverse_diagonal.
mv(d,v);
340 unsigned maxiter_=5000,
342 : gfs(gfs_), phelper(gfs,verbose_), maxiter(maxiter_), verbose(verbose_)
350 typename V::ElementType
norm (
const V& v)
const 354 PSP psp(gfs,phelper);
355 psp.make_consistent(x);
366 template<
class M,
class V,
class W>
367 void apply(M& A, V& z, W& r,
typename Dune::template FieldTraits<typename V::ElementType >::real_type reduction)
372 PSP psp(gfs,phelper);
374 PRICH prich(gfs,phelper);
376 if (gfs.gridView().comm().rank()==0) verb=verbose;
377 Dune::CGSolver<V> solver(pop,psp,prich,reduction,maxiter,verb);
378 Dune::InverseOperatorResult stat;
379 solver.apply(z,r,stat);
380 res.converged = stat.converged;
381 res.iterations = stat.iterations;
382 res.elapsed = stat.elapsed;
383 res.reduction = stat.reduction;
384 res.conv_rate = stat.conv_rate;
421 unsigned maxiter_ = 5000,
423 gfs(gfs_), phelper(gfs,verbose_), maxiter(maxiter_), verbose(verbose_)
433 typename V::ElementType
norm (
const V& v)
const 437 PSP psp(gfs,phelper);
438 psp.make_consistent(x);
455 template<
class M,
class V,
class W>
456 void apply(M& A, V& z, W& r,
typename Dune::template FieldTraits<typename V::ElementType >::real_type reduction)
461 PSP psp(gfs,phelper);
467 if (gfs.gridView().comm().rank()==0) verb=verbose;
468 CGSolver<V> solver(pop,psp,ppre,reduction,maxiter,verb);
469 InverseOperatorResult stat;
470 solver.apply(z,r,stat);
497 : gfs(gfs_), phelper(gfs,verbose_), maxiter(maxiter_), verbose(verbose_)
505 typename V::ElementType
norm (
const V& v)
const 509 PSP psp(gfs,phelper);
510 psp.make_consistent(x);
521 template<
class M,
class V,
class W>
522 void apply(M& A, V& z, W& r,
typename Dune::template FieldTraits<typename V::ElementType >::real_type reduction)
527 PSP psp(gfs,phelper);
529 PRICH prich(gfs,phelper);
531 if (gfs.gridView().comm().rank()==0) verb=verbose;
532 Dune::BiCGSTABSolver<V> solver(pop,psp,prich,reduction,maxiter,verb);
533 Dune::InverseOperatorResult stat;
534 solver.apply(z,r,stat);
535 res.converged = stat.converged;
536 res.iterations = stat.iterations;
537 res.elapsed = stat.elapsed;
538 res.reduction = stat.reduction;
539 res.conv_rate = stat.conv_rate;
571 : gfs(gfs_), phelper(gfs,verbose_), maxiter(maxiter_), verbose(verbose_)
579 typename V::ElementType
norm (
const V& v)
const 583 PSP psp(gfs,phelper);
584 psp.make_consistent(x);
595 template<
class M,
class V,
class W>
596 void apply(M& A, V& z, W& r,
typename Dune::template FieldTraits<typename V::ElementType >::real_type reduction)
601 PSP psp(gfs,phelper);
607 if (gfs.gridView().comm().rank()==0) verb=verbose;
608 Dune::BiCGSTABSolver<V> solver(pop,psp,ppre,reduction,maxiter,verb);
609 Dune::InverseOperatorResult stat;
610 solver.apply(z,r,stat);
611 res.converged = stat.converged;
612 res.iterations = stat.iterations;
613 res.elapsed = stat.elapsed;
614 res.reduction = stat.reduction;
615 res.conv_rate = stat.conv_rate;
633 template<
typename GFS>
649 : gfs(gfs_), phelper(gfs)
657 typename V::ElementType
norm (
const V& v)
const 661 PSP psp(gfs,phelper);
662 psp.make_consistent(x);
673 template<
class M,
class V,
class W>
674 void apply(M& A, V& z, W& r,
typename Dune::template FieldTraits<typename W::ElementType >::real_type reduction)
676 Dune::SeqJac<M,V,W> jac(A,1,1.0);
680 if (gfs.gridView().comm().size()>1)
683 gfs.gridView().communicate(adddh,Dune::InteriorBorder_InteriorBorder_Interface,Dune::ForwardCommunication);
709 template<
class,
class,
class,
int>
class Preconditioner,
710 template<
class>
class Solver>
713 typedef typename GO::Traits::TrialGridFunctionSpace GFS;
725 : _grid_operator(grid_operator)
726 , gfs(grid_operator.trialGridFunctionSpace())
727 , phelper(gfs,verbose_)
737 template<
class Vector>
742 PSP psp(gfs,phelper);
743 psp.make_consistent(x);
754 template<
class M,
class V,
class W>
755 void apply(M& A, V& z, W& r,
typename V::ElementType reduction)
762 _grid_operator.make_consistent(A);
764 Comm oocc(gfs.gridView().comm(),Dune::SolverCategory::nonoverlapping);
765 phelper.createIndexSetAndProjectForAMG(mat, oocc);
766 typedef Preconditioner<MatrixType,VectorType,VectorType,1> Smoother;
767 Smoother smoother(mat, steps, 1.0);
768 typedef Dune::NonoverlappingSchwarzScalarProduct<VectorType,Comm> PSP;
770 typedef Dune::NonoverlappingSchwarzOperator<MatrixType,VectorType,VectorType,Comm> Operator;
771 Operator oop(mat,oocc);
772 typedef Dune::NonoverlappingBlockPreconditioner<Comm, Smoother> ParSmoother;
773 ParSmoother parsmoother(smoother, oocc);
775 typedef Preconditioner<MatrixType,VectorType,VectorType,1> ParSmoother;
776 ParSmoother parsmoother(mat, steps, 1.0);
777 typedef Dune::SeqScalarProduct<VectorType> PSP;
779 typedef Dune::MatrixAdapter<MatrixType,VectorType,VectorType> Operator;
783 if (gfs.gridView().comm().rank()==0) verb=verbose;
784 Solver<VectorType> solver(oop,psp,parsmoother,reduction,maxiter,verb);
785 Dune::InverseOperatorResult stat;
787 if (gfs.gridView().comm().size()>1){
789 gfs.gridView().communicate(adddh,
790 Dune::InteriorBorder_InteriorBorder_Interface,
791 Dune::ForwardCommunication);
794 solver.apply(z,r,stat);
795 res.converged = stat.converged;
796 res.iterations = stat.iterations;
797 res.elapsed = stat.elapsed;
798 res.reduction = stat.reduction;
799 res.conv_rate = stat.conv_rate;
809 const GO& _grid_operator;
847 int steps_=5,
int verbose_=1)
872 int steps_=5,
int verbose_=1)
879 template<
class GO,
int s,
template<
class,
class,
class,
int>
class Preconditioner,
880 template<
class>
class Solver>
883 typedef typename GO::Traits::TrialGridFunctionSpace GFS;
885 typedef typename GO::Traits::Jacobian M;
887 typedef typename GO::Traits::Domain V;
891 typedef Preconditioner<MatrixType,VectorType,VectorType,1> Smoother;
892 typedef Dune::NonoverlappingBlockPreconditioner<Comm,Smoother> ParSmoother;
893 typedef Dune::NonoverlappingSchwarzOperator<MatrixType,VectorType,VectorType,Comm> Operator;
895 typedef Preconditioner<MatrixType,VectorType,VectorType,1> ParSmoother;
896 typedef Dune::MatrixAdapter<MatrixType,VectorType,VectorType> Operator;
898 typedef typename Dune::Amg::SmootherTraits<ParSmoother>::Arguments SmootherArgs;
899 typedef Dune::Amg::AMG<Operator,VectorType,ParSmoother,Comm> AMG;
900 typedef Dune::Amg::Parameters Parameters;
904 int verbose_=1,
bool reuse_=
false,
905 bool usesuperlu_=
true)
906 : _grid_operator(grid_operator)
907 , gfs(grid_operator.trialGridFunctionSpace())
908 , phelper(gfs,verbose_)
910 , params(15,2000,1.2,1.6,
Dune::Amg::atOnceAccu)
914 , usesuperlu(usesuperlu_)
916 params.setDefaultValuesIsotropic(GFS::Traits::GridViewType::Traits::Grid::dimension);
917 params.setDebugLevel(verbose_);
919 if (phelper.rank() == 0 && usesuperlu ==
true)
921 std::cout <<
"WARNING: You are using AMG without SuperLU!" 922 <<
" Please consider installing SuperLU," 923 <<
" or set the usesuperlu flag to false" 924 <<
" to suppress this warning." << std::endl;
967 typename V::ElementType
norm (
const V& v)
const 971 PSP psp(gfs,phelper);
972 psp.make_consistent(x);
976 void apply(M& A, V& z, V& r,
typename Dune::template FieldTraits<typename V::ElementType >::real_type reduction)
980 typedef Dune::Amg::CoarsenCriterion<Dune::Amg::SymmetricCriterion<MatrixType,
981 Dune::Amg::FirstDiagonal> > Criterion;
983 Comm oocc(gfs.gridView().comm(),Dune::SolverCategory::nonoverlapping);
984 _grid_operator.make_consistent(A);
985 phelper.createIndexSetAndProjectForAMG(A, oocc);
986 Dune::NonoverlappingSchwarzScalarProduct<VectorType,Comm> sp(oocc);
987 Operator oop(mat, oocc);
989 Comm oocc(gfs.gridView().comm());
991 Dune::SeqScalarProduct<VectorType> sp;
993 SmootherArgs smootherArgs;
994 smootherArgs.iterations = 1;
995 smootherArgs.relaxationFactor = 1;
997 Criterion criterion(params);
998 stats.tprepare=watch.elapsed();
1002 if (gfs.gridView().comm().rank()==0) verb=verbose;
1004 if (reuse==
false || firstapply==
true){
1005 amg.reset(
new AMG(oop, criterion, smootherArgs, oocc));
1007 stats.tsetup = watch.elapsed();
1008 stats.levels = amg->maxlevels();
1009 stats.directCoarseLevelSolver=amg->usesDirectCoarseLevelSolver();
1012 Dune::InverseOperatorResult stat;
1014 if (gfs.gridView().comm().size()>1) {
1016 gfs.gridView().communicate(adddh,
1017 Dune::InteriorBorder_InteriorBorder_Interface,
1018 Dune::ForwardCommunication);
1021 Solver<VectorType> solver(oop,sp,*amg,reduction,maxiter,verb);
1023 stats.tsolve= watch.elapsed();
1024 res.converged = stat.converged;
1025 res.iterations = stat.iterations;
1026 res.elapsed = stat.elapsed;
1027 res.reduction = stat.reduction;
1028 res.conv_rate = stat.conv_rate;
1041 const GO& _grid_operator;
1050 std::shared_ptr<AMG> amg;
1071 template<
class GO,
int s=96>
1078 int verbose_=1,
bool reuse_=
false,
1079 bool usesuperlu_=
true)
1098 template<
class GO,
int s=96>
1105 int verbose_=1,
bool reuse_=
false,
1106 bool usesuperlu_=
true)
1125 template<
class GO,
int s=96>
1132 int verbose_=1,
bool reuse_=
false,
1133 bool usesuperlu_=
true)
1143 #endif // DUNE_PDELAB_BACKEND_ISTL_NOVLPISTLSOLVERBACKEND_HH const Dune::PDELab::LinearSolverResult< double > & result() const
Return access to result data.
Definition: novlpistlsolverbackend.hh:803
const Dune::PDELab::LinearSolverResult< double > & result() const
Return access to result data.
Definition: novlpistlsolverbackend.hh:388
parallel non-overlapping Jacobi preconditioner
Definition: novlpistlsolverbackend.hh:249
Operator for the non-overlapping parallel case.
Definition: novlpistlsolverbackend.hh:56
std::enable_if< std::is_base_of< impl::WrapperBase, T >::value, Native< T > &>::type native(T &t)
Definition: backend/interface.hh:192
V::ElementType norm(const V &v) const
compute global norm of a vector
Definition: novlpistlsolverbackend.hh:433
NonoverlappingRichardson(const GFS &gfs_, const ISTL::ParallelHelper< GFS > &helper_)
Constructor.
Definition: novlpistlsolverbackend.hh:206
ISTLBackend_NOVLP_BASE_PREC(const GO &grid_operator, unsigned maxiter_=5000, unsigned steps_=5, int verbose_=1)
Constructor.
Definition: novlpistlsolverbackend.hh:724
virtual void pre(X &x, Y &b)
Prepare the preconditioner.
Definition: novlpistlsolverbackend.hh:214
virtual void apply(X &v, const Y &d)
Apply the precondioner.
Definition: novlpistlsolverbackend.hh:314
double elapsed
Definition: solver.hh:34
const std::string s
Definition: function.hh:830
X::field_type field_type
export type of the entries for x
Definition: novlpistlsolverbackend.hh:67
virtual void pre(X &x, Y &b)
Prepare the preconditioner.
Definition: novlpistlsolverbackend.hh:306
virtual void apply(X &v, const Y &d)
Apply the precondioner.
Definition: novlpistlsolverbackend.hh:219
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: novlpistlsolverbackend.hh:189
ISTLBackend_NOVLP_CG_Jacobi(const GFS &gfs_, unsigned maxiter_=5000, int verbose_=1)
make a linear solver object
Definition: novlpistlsolverbackend.hh:420
X::ElementType field_type
The field type of the preconditioner.
Definition: novlpistlsolverbackend.hh:197
Backend::Native< M > matrix_type
export type of matrix
Definition: novlpistlsolverbackend.hh:61
const Dune::PDELab::LinearSolverResult< double > & result() const
Return access to result data.
Definition: novlpistlsolverbackend.hh:693
void assertParallelUG(T comm)
Definition: parallelhelper.hh:433
virtual void applyscaleadd(field_type alpha, const X &x, Y &y) const
apply operator to x, scale and add:
Definition: novlpistlsolverbackend.hh:111
Dune::Amg::SequentialInformation type
Definition: parallelhelper.hh:417
typename impl::BackendVectorSelector< GridFunctionSpace, FieldType >::Type Vector
alias of the return type of BackendVectorSelector
Definition: backend/interface.hh:106
unsigned int iterations
Definition: solver.hh:33
Nonoverlapping parallel CG solver without preconditioner.
Definition: novlpistlsolverbackend.hh:328
X domain_type
The domain type of the operator.
Definition: novlpistlsolverbackend.hh:263
const Parameters & parameters() const
Get the parameters describing the behaviuour of AMG.
Definition: novlpistlsolverbackend.hh:945
bool getReuse() const
Return whether the AMG is reused during call to apply()
Definition: novlpistlsolverbackend.hh:957
ISTLBackend_NOVLP_CG_NOPREC(const GFS &gfs_, unsigned maxiter_=5000, int verbose_=1)
make a linear solver object
Definition: novlpistlsolverbackend.hh:339
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:674
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:871
void apply(M &A, V &z, V &r, typename Dune::template FieldTraits< typename V::ElementType >::real_type reduction)
Definition: novlpistlsolverbackend.hh:976
void apply(M &A, V &z, W &r, typename V::ElementType reduction)
Solve the given linear system.
Definition: novlpistlsolverbackend.hh:755
Y range_type
The range type of the operator.
Definition: novlpistlsolverbackend.hh:269
Y range_type
The range type of the preconditioner.
Definition: novlpistlsolverbackend.hh:195
ISTLBackend_NOVLP_BCGS_AMG_SSOR(const GO &grid_operator, unsigned maxiter_=5000, int verbose_=1, bool reuse_=false, bool usesuperlu_=true)
Definition: novlpistlsolverbackend.hh:1104
Utility base class for preconditioned novlp backends.
Definition: novlpistlsolverbackend.hh:711
void setReuse(bool reuse_)
Set whether the AMG should be reused again during call to apply().
Definition: novlpistlsolverbackend.hh:951
V::ElementType norm(const V &v) const
compute global norm of a vector
Definition: novlpistlsolverbackend.hh:350
NonoverlappingOperator(const GFS &gfs_, const M &A)
Construct a non-overlapping operator.
Definition: novlpistlsolverbackend.hh:83
const Dune::PDELab::LinearSolverResult< double > & result() const
Return access to result data.
Definition: novlpistlsolverbackend.hh:619
V::ElementType norm(const V &v) const
compute global norm of a vector
Definition: novlpistlsolverbackend.hh:505
NonoverlappingJacobi(const GFS &gfs, const A &m)
Constructor.
Definition: novlpistlsolverbackend.hh:291
For backward compatibility – Do not use this!
Definition: adaptivity.hh:27
V::ElementType norm(const V &v) const
compute global norm of a vector
Definition: novlpistlsolverbackend.hh:967
Definition: blockmatrixdiagonal.hh:217
const LinearSolverResult< double > & result() const
Return access to result data.
Definition: novlpistlsolverbackend.hh:479
Nonoverlapping parallel BiCGStab solver preconditioned with AMG smoothed by SSOR. ...
Definition: novlpistlsolverbackend.hh:1099
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:456
X::ElementType field_type
The field type of the preconditioner.
Definition: novlpistlsolverbackend.hh:271
Backend::Native< Y > range_type
export type of result vectors
Definition: novlpistlsolverbackend.hh:65
Backend::Native< X > domain_type
export type of vectors the matrix is applied to
Definition: novlpistlsolverbackend.hh:63
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
Nonoverlapping parallel BiCGStab solver without preconditioner.
Definition: novlpistlsolverbackend.hh:485
virtual void post(X &x)
Clean up.
Definition: novlpistlsolverbackend.hh:320
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:367
RFType conv_rate
Definition: solver.hh:36
const ISTLAMGStatistics & statistics() const
Get statistics of the AMG solver (no of levels, timings).
Definition: novlpistlsolverbackend.hh:1035
Vector::ElementType norm(const Vector &v) const
Compute global norm of a vector.
Definition: novlpistlsolverbackend.hh:738
void setParameters(const Parameters ¶ms_)
set AMG parameters
Definition: novlpistlsolverbackend.hh:933
Nonoverlapping parallel CG solver preconditioned by block SSOR.
Definition: novlpistlsolverbackend.hh:859
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:846
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:634
ISTLBackend_NOVLP_CG_AMG_SSOR(const GO &grid_operator, unsigned maxiter_=5000, int verbose_=1, bool reuse_=false, bool usesuperlu_=true)
Definition: novlpistlsolverbackend.hh:1077
Nonoverlapping parallel CG solver with Jacobi preconditioner.
Definition: novlpistlsolverbackend.hh:403
ISTLBackend_NOVLP_BCGS_NOPREC(const GFS &gfs_, unsigned maxiter_=5000, int verbose_=1)
make a linear solver object
Definition: novlpistlsolverbackend.hh:496
void invert()
Definition: blockmatrixdiagonal.hh:236
virtual const M & getmat() const
extract the matrix
Definition: novlpistlsolverbackend.hh:124
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:522
virtual void post(X &x)
Clean up.
Definition: novlpistlsolverbackend.hh:227
Nonoverlapping parallel CG solver preconditioned with AMG smoothed by SSOR.
Definition: novlpistlsolverbackend.hh:1072
V::ElementType norm(const V &v) const
compute global norm of a vector
Definition: novlpistlsolverbackend.hh:657
Nonoverlapping parallel BiCGSTAB solver preconditioned by block SSOR.
Definition: novlpistlsolverbackend.hh:834
ISTLBackend_NOVLP_BCGS_Jacobi(const GFS &gfs_, unsigned maxiter_=5000, int verbose_=1)
make a linear solver object
Definition: novlpistlsolverbackend.hh:570
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
Nonoverlapping parallel BiCGStab solver with Jacobi preconditioner.
Definition: novlpistlsolverbackend.hh:559
Definition: novlpistlsolverbackend.hh:70
bool converged
Definition: solver.hh:32
X domain_type
The domain type of the preconditioner.
Definition: novlpistlsolverbackend.hh:193
X::ElementType field_type
Definition: novlpistlsolverbackend.hh:141
ISTLBackend_NOVLP_LS_AMG_SSOR(const GO &grid_operator, unsigned maxiter_=5000, int verbose_=1, bool reuse_=false, bool usesuperlu_=true)
Definition: novlpistlsolverbackend.hh:1131
ISTLBackend_NOVLP_ExplicitDiagonal(const GFS &gfs_)
make a linear solver object
Definition: novlpistlsolverbackend.hh:648
void make_consistent(X &x) const
make additive vector consistent
Definition: novlpistlsolverbackend.hh:175
Class providing some statistics of the AMG solver.
Definition: seqistlsolverbackend.hh:544
Definition: blockmatrixdiagonal.hh:222
const Dune::PDELab::LinearSolverResult< double > & result() const
Return access to result data.
Definition: novlpistlsolverbackend.hh:543
Nonoverlapping parallel LoopSolver preconditioned with AMG smoothed by SSOR.
Definition: novlpistlsolverbackend.hh:1126
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:596
Definition: genericdatahandle.hh:622
Definition: novlpistlsolverbackend.hh:881
void mv(const X &x, Y &y) const
Definition: blockmatrixdiagonal.hh:242
Definition: novlpistlsolverbackend.hh:136
RFType reduction
Definition: solver.hh:35
X domain_type
export types
Definition: novlpistlsolverbackend.hh:140
ISTLBackend_AMG_NOVLP(const GO &grid_operator, unsigned maxiter_=5000, int verbose_=1, bool reuse_=false, bool usesuperlu_=true)
Definition: novlpistlsolverbackend.hh:903
Definition: parallelhelper.hh:53
V::ElementType norm(const V &v) const
compute global norm of a vector
Definition: novlpistlsolverbackend.hh:579
NonoverlappingScalarProduct(const GFS &gfs_, const ISTL::ParallelHelper< GFS > &helper_)
Constructor needs to know the grid function space.
Definition: novlpistlsolverbackend.hh:148