3 #ifndef DUNE_NOVLPISTLSOLVERBACKEND_HH
4 #define DUNE_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>
67 enum {
category=Dune::SolverCategory::nonoverlapping};
90 virtual void apply (
const X& x, Y& y)
const
98 if (gfs.gridView().comm().size()>1)
99 gfs.gridView().communicate(adddh,Dune::InteriorBorder_InteriorBorder_Interface,Dune::ForwardCommunication);
116 if (gfs.gridView().comm().size()>1)
117 gfs.gridView().communicate(adddh,Dune::InteriorBorder_InteriorBorder_Interface,Dune::ForwardCommunication);
132 template<
class GFS,
class X>
141 enum {
category=Dune::SolverCategory::nonoverlapping};
146 : gfs(gfs_), helper(helper_)
153 virtual field_type
dot (
const X& x,
const X& y)
156 field_type sum = helper.disjointDot(x,y);
159 return gfs.gridView().comm().sum(sum);
165 virtual double norm (
const X& x)
167 return sqrt(static_cast<double>(this->
dot(x,x)));
175 if (gfs.gridView().comm().size()>1)
176 gfs.gridView().communicate(adddh,Dune::InteriorBorder_InteriorBorder_Interface,Dune::ForwardCommunication);
185 template<
class GFS,
class X,
class Y>
204 : gfs(gfs_), helper(helper_)
211 virtual void pre (X& x, Y& b) {}
216 virtual void apply (X& v,
const Y& d)
244 template<
typename A,
typename X,
typename Y>
246 :
public Dune::Preconditioner<X,Y>
251 Diagonal _inverse_diagonal;
286 template<
typename GFS>
288 : _inverse_diagonal(m)
292 gfs.gridView().communicate(addDH,
293 InteriorBorder_InteriorBorder_Interface,
294 ForwardCommunication);
297 _inverse_diagonal.
invert();
302 virtual void pre (X& x, Y& b) {}
310 virtual void apply (X& v,
const Y& d)
312 _inverse_diagonal.
mv(d,v);
336 unsigned maxiter_=5000,
338 : gfs(gfs_), phelper(gfs,verbose_), maxiter(maxiter_), verbose(verbose_)
346 typename V::ElementType
norm (
const V& v)
const
350 PSP psp(gfs,phelper);
351 psp.make_consistent(x);
362 template<
class M,
class V,
class W>
363 void apply(M& A, V& z, W& r,
typename V::ElementType reduction)
368 PSP psp(gfs,phelper);
370 PRICH prich(gfs,phelper);
372 if (gfs.gridView().comm().rank()==0) verb=verbose;
373 Dune::CGSolver<V> solver(pop,psp,prich,reduction,maxiter,verb);
374 Dune::InverseOperatorResult stat;
375 solver.apply(z,r,stat);
417 unsigned maxiter_ = 5000,
419 gfs(gfs_), phelper(gfs,verbose_), maxiter(maxiter_), verbose(verbose_)
429 typename V::ElementType
norm (
const V& v)
const
433 PSP psp(gfs,phelper);
434 psp.make_consistent(x);
451 template<
class M,
class V,
class W>
452 void apply(M& A, V& z, W& r,
typename V::ElementType reduction)
457 PSP psp(gfs,phelper);
463 if (gfs.gridView().comm().rank()==0) verb=verbose;
464 CGSolver<V> solver(pop,psp,ppre,reduction,maxiter,verb);
465 InverseOperatorResult stat;
466 solver.apply(z,r,stat);
493 : gfs(gfs_), phelper(gfs,verbose_), maxiter(maxiter_), verbose(verbose_)
501 typename V::ElementType
norm (
const V& v)
const
505 PSP psp(gfs,phelper);
506 psp.make_consistent(x);
517 template<
class M,
class V,
class W>
518 void apply(M& A, V& z, W& r,
typename V::ElementType reduction)
523 PSP psp(gfs,phelper);
525 PRICH prich(gfs,phelper);
527 if (gfs.gridView().comm().rank()==0) verb=verbose;
528 Dune::BiCGSTABSolver<V> solver(pop,psp,prich,reduction,maxiter,verb);
529 Dune::InverseOperatorResult stat;
530 solver.apply(z,r,stat);
567 : gfs(gfs_), phelper(gfs,verbose_), maxiter(maxiter_), verbose(verbose_)
575 typename V::ElementType
norm (
const V& v)
const
579 PSP psp(gfs,phelper);
580 psp.make_consistent(x);
591 template<
class M,
class V,
class W>
592 void apply(M& A, V& z, W& r,
typename V::ElementType reduction)
597 PSP psp(gfs,phelper);
603 if (gfs.gridView().comm().rank()==0) verb=verbose;
604 Dune::BiCGSTABSolver<V> solver(pop,psp,ppre,reduction,maxiter,verb);
605 Dune::InverseOperatorResult stat;
606 solver.apply(z,r,stat);
629 template<
typename GFS>
645 : gfs(gfs_), phelper(gfs)
653 typename V::ElementType
norm (
const V& v)
const
657 PSP psp(gfs,phelper);
658 psp.make_consistent(x);
669 template<
class M,
class V,
class W>
670 void apply(M& A, V& z, W& r,
typename W::ElementType reduction)
672 Dune::SeqJac<M,V,W> jac(A,1,1.0);
676 if (gfs.gridView().comm().size()>1)
679 gfs.gridView().communicate(adddh,Dune::InteriorBorder_InteriorBorder_Interface,Dune::ForwardCommunication);
698 template<
class,
class,
class,
int>
class Preconditioner,
699 template<
class>
class Solver>
702 typedef typename GO::Traits::TrialGridFunctionSpace GFS;
714 : _grid_operator(grid_operator)
715 , gfs(grid_operator.trialGridFunctionSpace())
716 , phelper(gfs,verbose_)
726 template<
class Vector>
731 PSP psp(gfs,phelper);
732 psp.make_consistent(x);
743 template<
class M,
class V,
class W>
744 void apply(M& A, V& z, W& r,
typename V::ElementType reduction)
751 _grid_operator.make_consistent(A);
752 Comm oocc(gfs.gridView().comm(),Dune::SolverCategory::nonoverlapping);
754 typedef Preconditioner<MatrixType,VectorType,VectorType,1> Smoother;
755 Smoother smoother(mat, steps, 1.0);
756 typedef Dune::NonoverlappingSchwarzScalarProduct<VectorType,Comm> PSP;
758 typedef Dune::NonoverlappingSchwarzOperator<MatrixType,VectorType,VectorType,Comm> Operator;
759 Operator oop(mat,oocc);
760 typedef Dune::NonoverlappingBlockPreconditioner<Comm, Smoother> ParSmoother;
761 ParSmoother parsmoother(smoother, oocc);
763 typedef Preconditioner<MatrixType,VectorType,VectorType,1> ParSmoother;
764 ParSmoother parsmoother(mat, steps, 1.0);
765 typedef Dune::SeqScalarProduct<VectorType> PSP;
767 typedef Dune::MatrixAdapter<MatrixType,VectorType,VectorType> Operator;
771 if (gfs.gridView().comm().rank()==0) verb=verbose;
772 Solver<VectorType> solver(oop,psp,parsmoother,reduction,maxiter,verb);
773 Dune::InverseOperatorResult stat;
775 if (gfs.gridView().comm().size()>1){
777 gfs.gridView().communicate(adddh,
778 Dune::InteriorBorder_InteriorBorder_Interface,
779 Dune::ForwardCommunication);
782 solver.apply(z,r,stat);
797 const GO& _grid_operator;
834 int steps_=5,
int verbose_=1)
856 int steps_=5,
int verbose_=1)
863 template<
class GO,
int s,
template<
class,
class,
class,
int>
class Preconditioner,
864 template<
class>
class Solver>
867 typedef typename GO::Traits::TrialGridFunctionSpace GFS;
869 typedef typename GO::Traits::Jacobian M;
871 typedef typename GO::Traits::Domain V;
875 typedef Preconditioner<MatrixType,VectorType,VectorType,1> Smoother;
876 typedef Dune::NonoverlappingBlockPreconditioner<Comm,Smoother> ParSmoother;
877 typedef Dune::NonoverlappingSchwarzOperator<MatrixType,VectorType,VectorType,Comm> Operator;
879 typedef Preconditioner<MatrixType,VectorType,VectorType,1> ParSmoother;
880 typedef Dune::MatrixAdapter<MatrixType,VectorType,VectorType> Operator;
882 typedef typename Dune::Amg::SmootherTraits<ParSmoother>::Arguments SmootherArgs;
883 typedef Dune::Amg::AMG<Operator,VectorType,ParSmoother,Comm> AMG;
884 typedef Dune::Amg::Parameters Parameters;
888 int verbose_=1,
bool reuse_=
false,
889 bool usesuperlu_=
true)
890 : _grid_operator(grid_operator)
891 , gfs(grid_operator.trialGridFunctionSpace())
892 , phelper(gfs,verbose_)
894 , params(15,2000,1.2,1.6,
Dune::Amg::atOnceAccu)
898 , usesuperlu(usesuperlu_)
900 params.setDefaultValuesIsotropic(GFS::Traits::GridViewType::Traits::Grid::dimension);
901 params.setDebugLevel(verbose_);
903 if (phelper.
rank() == 0 && usesuperlu ==
true)
905 std::cout <<
"WARNING: You are using AMG without SuperLU!"
906 <<
" Please consider installing SuperLU,"
907 <<
" or set the usesuperlu flag to false"
908 <<
" to suppress this warning." << std::endl;
922 void setparams(Parameters params_) DUNE_DEPRECATED_MSG(
"setparams() is deprecated, use setParameters() instead")
943 typename V::ElementType
norm (
const V& v)
const
947 PSP psp(gfs,phelper);
948 psp.make_consistent(x);
952 void apply(M& A, V& z, V& r,
typename V::ElementType reduction)
956 typedef Dune::Amg::CoarsenCriterion<Dune::Amg::SymmetricCriterion<MatrixType,
957 Dune::Amg::FirstDiagonal> > Criterion;
959 Comm oocc(gfs.gridView().comm(),Dune::SolverCategory::nonoverlapping);
960 _grid_operator.make_consistent(A);
962 Dune::NonoverlappingSchwarzScalarProduct<VectorType,Comm> sp(oocc);
963 Operator oop(mat, oocc);
965 Comm oocc(gfs.gridView().comm());
967 Dune::SeqScalarProduct<VectorType> sp;
969 SmootherArgs smootherArgs;
970 smootherArgs.iterations = 1;
971 smootherArgs.relaxationFactor = 1;
973 Criterion criterion(params);
978 if (gfs.gridView().comm().rank()==0) verb=verbose;
980 if (reuse==
false || firstapply==
true){
981 amg.reset(
new AMG(oop, criterion, smootherArgs, oocc));
983 stats.
tsetup = watch.elapsed();
984 stats.
levels = amg->maxlevels();
988 Dune::InverseOperatorResult stat;
990 if (gfs.gridView().comm().size()>1) {
992 gfs.gridView().communicate(adddh,
993 Dune::InteriorBorder_InteriorBorder_Interface,
994 Dune::ForwardCommunication);
997 Solver<VectorType> solver(oop,sp,*amg,reduction,maxiter,verb);
999 stats.
tsolve= watch.elapsed();
1017 const GO& _grid_operator;
1026 std::shared_ptr<AMG> amg;
1045 template<
class GO,
int s=96>
1052 int verbose_=1,
bool reuse_=
false,
1053 bool usesuperlu_=
true)
1070 template<
class GO,
int s=96>
1077 int verbose_=1,
bool reuse_=
false,
1078 bool usesuperlu_=
true)
1095 template<
class GO,
int s=96>
1102 int verbose_=1,
bool reuse_=
false,
1103 bool usesuperlu_=
true)
The category the preconditioner is part of.
Definition: istl/novlpistlsolverbackend.hh:271
Y range_type
The range type of the operator.
Definition: istl/novlpistlsolverbackend.hh:265
ISTLBackend_AMG_NOVLP(const GO &grid_operator, unsigned maxiter_=5000, int verbose_=1, bool reuse_=false, bool usesuperlu_=true)
Definition: istl/novlpistlsolverbackend.hh:887
V::ElementType norm(const V &v) const
compute global norm of a vector
Definition: istl/novlpistlsolverbackend.hh:653
void mv(const X &x, Y &y) const
Definition: blockmatrixdiagonal.hh:239
void setParameters(const Parameters ¶ms_)
set AMG parameters
Definition: istl/novlpistlsolverbackend.hh:917
ISTLBackend_NOVLP_BCGS_Jacobi(const GFS &gfs_, unsigned maxiter_=5000, int verbose_=1)
make a linear solver object
Definition: istl/novlpistlsolverbackend.hh:566
Backend::Native< M > matrix_type
export type of matrix
Definition: istl/novlpistlsolverbackend.hh:58
ISTLBackend_NOVLP_BCGS_AMG_SSOR(const GO &grid_operator, unsigned maxiter_=5000, int verbose_=1, bool reuse_=false, bool usesuperlu_=true)
Definition: istl/novlpistlsolverbackend.hh:1076
Nonoverlapping parallel BiCGStab solver with Jacobi preconditioner.
Definition: istl/novlpistlsolverbackend.hh:555
const Dune::PDELab::LinearSolverResult< double > & result() const
Return access to result data.
Definition: istl/novlpistlsolverbackend.hh:791
ISTLBackend_NOVLP_CG_Jacobi(const GFS &gfs_, unsigned maxiter_=5000, int verbose_=1)
make a linear solver object
Definition: istl/novlpistlsolverbackend.hh:416
Nonoverlapping parallel CG solver without preconditioner.
Definition: istl/novlpistlsolverbackend.hh:324
Definition: istl/novlpistlsolverbackend.hh:133
Nonoverlapping parallel CG solver preconditioned with AMG smoothed by SSOR.
Definition: istl/novlpistlsolverbackend.hh:1046
const Parameters & parameters() const
Get the parameters describing the behaviuour of AMG.
Definition: istl/novlpistlsolverbackend.hh:934
Operator for the non-overlapping parallel case.
Definition: istl/novlpistlsolverbackend.hh:53
Vector::ElementType norm(const Vector &v) const
Compute global norm of a vector.
Definition: istl/novlpistlsolverbackend.hh:727
void apply(M &A, V &z, V &r, typename V::ElementType reduction)
Definition: istl/novlpistlsolverbackend.hh:952
double tsetup
The time needed for building the AMG hierarchy (coarsening).
Definition: istl/seqistlsolverbackend.hh:553
virtual void applyscaleadd(field_type alpha, const X &x, Y &y) const
apply operator to x, scale and add:
Definition: istl/novlpistlsolverbackend.hh:108
Nonoverlapping parallel LoopSolver preconditioned with AMG smoothed by SSOR.
Definition: istl/novlpistlsolverbackend.hh:1096
const ISTLAMGStatistics & statistics() const
Get statistics of the AMG solver (no of levels, timings).
Definition: istl/novlpistlsolverbackend.hh:1011
void apply(M &A, V &z, W &r, typename W::ElementType reduction)
solve the given linear system
Definition: istl/novlpistlsolverbackend.hh:670
ISTLBackend_NOVLP_CG_AMG_SSOR(const GO &grid_operator, unsigned maxiter_=5000, int verbose_=1, bool reuse_=false, bool usesuperlu_=true)
Definition: istl/novlpistlsolverbackend.hh:1051
typename impl::BackendVectorSelector< GridFunctionSpace, FieldType >::Type Vector
alias of the return type of BackendVectorSelector
Definition: backend/interface.hh:112
void setparams(Parameters params_)
Definition: istl/novlpistlsolverbackend.hh:922
RFType reduction
Definition: solver.hh:35
Definition: blockmatrixdiagonal.hh:219
virtual void apply(X &v, const Y &d)
Apply the precondioner.
Definition: istl/novlpistlsolverbackend.hh:310
Definition: parallelhelper.hh:45
X::ElementType field_type
The field type of the preconditioner.
Definition: istl/novlpistlsolverbackend.hh:194
double tprepare
The needed for computing the parallel information and for adapting the linear system.
Definition: istl/seqistlsolverbackend.hh:547
X::ElementType field_type
Definition: istl/novlpistlsolverbackend.hh:138
V::ElementType norm(const V &v) const
compute global norm of a vector
Definition: istl/novlpistlsolverbackend.hh:575
Nonoverlapping parallel CG solver with Jacobi preconditioner.
Definition: istl/novlpistlsolverbackend.hh:399
Definition: istl/novlpistlsolverbackend.hh:186
virtual void pre(X &x, Y &b)
Prepare the preconditioner.
Definition: istl/novlpistlsolverbackend.hh:302
Nonoverlapping parallel BiCGSTAB solver preconditioned by block SSOR.
Definition: istl/novlpistlsolverbackend.hh:821
virtual void post(X &x)
Clean up.
Definition: istl/novlpistlsolverbackend.hh:224
unsigned int iterations
Definition: solver.hh:33
void apply(M &A, V &z, W &r, typename V::ElementType reduction)
Solve the given linear system.
Definition: istl/novlpistlsolverbackend.hh:744
ISTLBackend_NOVLP_CG_NOPREC(const GFS &gfs_, unsigned maxiter_=5000, int verbose_=1)
make a linear solver object
Definition: istl/novlpistlsolverbackend.hh:335
NonoverlappingJacobi(const GFS &gfs, const A &m)
Constructor.
Definition: istl/novlpistlsolverbackend.hh:287
ISTLBackend_NOVLP_CG_SSORk(const GO &grid_operator, unsigned maxiter_=5000, int steps_=5, int verbose_=1)
make a linear solver object
Definition: istl/novlpistlsolverbackend.hh:855
Nonoverlapping parallel BiCGStab solver preconditioned with AMG smoothed by SSOR. ...
Definition: istl/novlpistlsolverbackend.hh:1071
NonoverlappingOperator(const GFS &gfs_, const M &A)
Construct a non-overlapping operator.
Definition: istl/novlpistlsolverbackend.hh:80
The category the preconditioner is part of.
Definition: istl/novlpistlsolverbackend.hh:199
const Dune::PDELab::LinearSolverResult< double > & result() const
Return access to result data.
Definition: istl/novlpistlsolverbackend.hh:689
NonoverlappingRichardson(const GFS &gfs_, const istl::ParallelHelper< GFS > &helper_)
Constructor.
Definition: istl/novlpistlsolverbackend.hh:203
Backend::Native< X > domain_type
export type of vectors the matrix is applied to
Definition: istl/novlpistlsolverbackend.hh:60
bool directCoarseLevelSolver
True if a direct solver was used on the coarset level.
Definition: istl/seqistlsolverbackend.hh:557
std::enable_if< std::is_base_of< impl::WrapperBase, T >::value, Native< T > & >::type native(T &t)
Definition: backend/interface.hh:198
void invert()
Definition: blockmatrixdiagonal.hh:233
void make_consistent(X &x) const
make additive vector consistent
Definition: istl/novlpistlsolverbackend.hh:172
ISTLBackend_NOVLP_BCGS_NOPREC(const GFS &gfs_, unsigned maxiter_=5000, int verbose_=1)
make a linear solver object
Definition: istl/novlpistlsolverbackend.hh:492
bool converged
Definition: solver.hh:32
Definition: istl/novlpistlsolverbackend.hh:67
ISTLBackend_NOVLP_LS_AMG_SSOR(const GO &grid_operator, unsigned maxiter_=5000, int verbose_=1, bool reuse_=false, bool usesuperlu_=true)
Definition: istl/novlpistlsolverbackend.hh:1101
V::ElementType norm(const V &v) const
compute global norm of a vector
Definition: istl/novlpistlsolverbackend.hh:429
NonoverlappingScalarProduct(const GFS &gfs_, const istl::ParallelHelper< GFS > &helper_)
Constructor needs to know the grid function space.
Definition: istl/novlpistlsolverbackend.hh:145
X domain_type
The domain type of the operator.
Definition: istl/novlpistlsolverbackend.hh:259
Solver to be used for explicit time-steppers with (block-)diagonal mass matrix.
Definition: istl/novlpistlsolverbackend.hh:630
const LinearSolverResult< double > & result() const
Return access to result data.
Definition: istl/novlpistlsolverbackend.hh:475
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: istl/novlpistlsolverbackend.hh:713
double elapsed
Definition: solver.hh:34
X::field_type field_type
export type of the entries for x
Definition: istl/novlpistlsolverbackend.hh:64
V::ElementType norm(const V &v) const
compute global norm of a vector
Definition: istl/novlpistlsolverbackend.hh:943
Definition: genericdatahandle.hh:622
const Dune::PDELab::LinearSolverResult< double > & result() const
Return access to result data.
Definition: istl/novlpistlsolverbackend.hh:384
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: istl/novlpistlsolverbackend.hh:153
V::ElementType norm(const V &v) const
compute global norm of a vector
Definition: istl/novlpistlsolverbackend.hh:346
Definition: adaptivity.hh:27
Definition: istl/novlpistlsolverbackend.hh:700
X domain_type
The domain type of the preconditioner.
Definition: istl/novlpistlsolverbackend.hh:190
virtual double norm(const X &x)
Norm of a right-hand side vector. The vector must be consistent on the interior+border partition...
Definition: istl/novlpistlsolverbackend.hh:165
Dune::Amg::SequentialInformation type
Definition: parallelhelper.hh:421
V::ElementType norm(const V &v) const
compute global norm of a vector
Definition: istl/novlpistlsolverbackend.hh:501
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:182
void createIndexSetAndProjectForAMG(MatrixType &m, Comm &c)
Makes the matrix consistent and creates the parallel information for AMG.
void apply(M &A, V &z, W &r, typename V::ElementType reduction)
solve the given linear system
Definition: istl/novlpistlsolverbackend.hh:363
virtual void post(X &x)
Clean up.
Definition: istl/novlpistlsolverbackend.hh:316
Nonoverlapping parallel BiCGStab solver without preconditioner.
Definition: istl/novlpistlsolverbackend.hh:481
const Dune::PDELab::LinearSolverResult< double > & result() const
Return access to result data.
Definition: istl/novlpistlsolverbackend.hh:615
parallel non-overlapping Jacobi preconditioner
Definition: istl/novlpistlsolverbackend.hh:245
Definition: istl/novlpistlsolverbackend.hh:141
Y range_type
The range type of the preconditioner.
Definition: istl/novlpistlsolverbackend.hh:192
void apply(M &A, V &z, W &r, typename V::ElementType reduction)
solve the given linear system
Definition: istl/novlpistlsolverbackend.hh:518
int levels
the number of levels in the AMG hierarchy.
Definition: istl/seqistlsolverbackend.hh:549
Nonoverlapping parallel CG solver preconditioned by block SSOR.
Definition: istl/novlpistlsolverbackend.hh:843
const std::string s
Definition: function.hh:1102
Definition: istl/novlpistlsolverbackend.hh:865
RankIndex rank() const
Returns the MPI rank of this process.
Definition: parallelhelper.hh:228
virtual void apply(X &v, const Y &d)
Apply the precondioner.
Definition: istl/novlpistlsolverbackend.hh:216
Class providing some statistics of the AMG solver.
Definition: istl/seqistlsolverbackend.hh:541
ISTLBackend_NOVLP_ExplicitDiagonal(const GFS &gfs_)
make a linear solver object
Definition: istl/novlpistlsolverbackend.hh:644
X domain_type
export types
Definition: istl/novlpistlsolverbackend.hh:137
Dune::PDELab::LinearSolverResult< double > res
Definition: solver.hh:52
Backend::Native< Y > range_type
export type of result vectors
Definition: istl/novlpistlsolverbackend.hh:62
virtual const M & getmat() const
extract the matrix
Definition: istl/novlpistlsolverbackend.hh:121
ISTLBackend_NOVLP_BCGS_SSORk(const GO &grid_operator, unsigned maxiter_=5000, int steps_=5, int verbose_=1)
make a linear solver object
Definition: istl/novlpistlsolverbackend.hh:833
virtual void apply(const X &x, Y &y) const
apply operator
Definition: istl/novlpistlsolverbackend.hh:90
virtual void pre(X &x, Y &b)
Prepare the preconditioner.
Definition: istl/novlpistlsolverbackend.hh:211
void apply(M &A, V &z, W &r, typename V::ElementType reduction)
solve the given linear system
Definition: istl/novlpistlsolverbackend.hh:592
const Dune::PDELab::LinearSolverResult< double > & result() const
Return access to result data.
Definition: istl/novlpistlsolverbackend.hh:539
double tsolve
The time spent in solving the system (without building the hierarchy.
Definition: istl/seqistlsolverbackend.hh:551
X::ElementType field_type
The field type of the preconditioner.
Definition: istl/novlpistlsolverbackend.hh:267
Definition: blockmatrixdiagonal.hh:214
void apply(M &A, V &z, W &r, typename V::ElementType reduction)
solve the given linear system
Definition: istl/novlpistlsolverbackend.hh:452