3 #ifndef DUNE_OVLPISTLSOLVERBACKEND_HH
4 #define DUNE_OVLPISTLSOLVERBACKEND_HH
6 #include <dune/common/deprecated.hh>
7 #include <dune/common/parallel/mpihelper.hh>
9 #include <dune/istl/owneroverlapcopy.hh>
10 #include <dune/istl/solvercategory.hh>
11 #include <dune/istl/operators.hh>
12 #include <dune/istl/solvers.hh>
13 #include <dune/istl/preconditioners.hh>
14 #include <dune/istl/scalarproducts.hh>
15 #include <dune/istl/paamg/amg.hh>
16 #include <dune/istl/paamg/pinfo.hh>
17 #include <dune/istl/io.hh>
18 #include <dune/istl/superlu.hh>
40 template<
class CC,
class M,
class X,
class Y>
42 :
public Dune::AssembledLinearOperator<M,X,Y>
52 enum {
category=Dune::SolverCategory::overlapping};
85 template<
class GFS,
class X>
87 :
public Dune::ScalarProduct<X>
95 enum {
category=Dune::SolverCategory::overlapping};
100 : gfs(gfs_), helper(helper_)
114 return gfs.gridView().comm().sum(sum);
120 virtual double norm (
const X& x)
122 return sqrt(static_cast<double>(this->
dot(x,x)));
131 template<
class CC,
class GFS,
class P>
133 :
public Dune::Preconditioner<typename Dune::PDELab::BackendVectorSelector<GFS,typename P::domain_type::field_type>::Type,
134 typename Dune::PDELab::BackendVectorSelector<GFS,typename P::range_type::field_type>::Type>
153 : gfs(gfs_), prec(prec_), cc(cc_), helper(helper_)
173 if (gfs.gridView().comm().size()>1)
174 gfs.gridView().communicate(adddh,Dune::All_All_Interface,Dune::ForwardCommunication);
195 template<
class GFS,
class M,
class X,
class Y>
196 class SuperLUSubdomainSolver :
public Dune::Preconditioner<X,Y>
198 typedef typename M::BaseT ISTLM;
202 typedef X domain_type;
204 typedef Y range_type;
206 typedef typename X::ElementType field_type;
212 category=Dune::SolverCategory::overlapping
221 SuperLUSubdomainSolver (
const GFS& gfs_,
const M& A_)
222 : gfs(gfs_), solver(istl::
raw(A_),false)
228 virtual void pre (X& x, Y& b) {}
233 virtual void apply (X& v,
const Y& d)
235 Dune::InverseOperatorResult stat;
238 if (gfs.gridView().comm().size()>1)
240 AddDataHandle<GFS,X> adddh(gfs,v);
241 gfs.gridView().communicate(adddh,Dune::All_All_Interface,Dune::ForwardCommunication);
248 virtual void post (X& x) {}
252 Dune::SuperLU<ISTLM> solver;
256 template<
class GFS,
class M,
class X,
class Y>
257 class RestrictedSuperLUSubdomainSolver :
public Dune::Preconditioner<X,Y>
259 typedef typename M::BaseT ISTLM;
263 typedef X domain_type;
265 typedef Y range_type;
267 typedef typename X::ElementType field_type;
273 category=Dune::SolverCategory::overlapping
283 RestrictedSuperLUSubdomainSolver (
const GFS& gfs_,
const M& A_,
284 const istl::ParallelHelper<GFS>& helper_)
285 : gfs(gfs_), solver(istl::
raw(A_),false), helper(helper_)
291 virtual void pre (X& x, Y& b) {}
296 virtual void apply (X& v,
const Y& d)
298 Dune::InverseOperatorResult stat;
301 if (gfs.gridView().comm().size()>1)
304 AddDataHandle<GFS,X> adddh(gfs,v);
305 gfs.gridView().communicate(adddh,Dune::InteriorBorder_All_Interface,Dune::ForwardCommunication);
312 virtual void post (X& x) {}
316 Dune::SuperLU<ISTLM> solver;
317 const istl::ParallelHelper<GFS>& helper;
321 template<
typename GFS>
326 : gfs(gfs_), helper(gfs_)
334 typename X::ElementType
dot (
const X& x,
const X& y)
const
337 typename X::ElementType sum = helper.disjointDot(x,y);
340 return gfs.gridView().comm().sum(sum);
347 typename X::ElementType
norm (
const X& x)
const
349 return sqrt(static_cast<double>(this->
dot(x,x)));
369 template<
typename GFS,
typename X>
371 :
public ScalarProduct<X>
376 : implementation(implementation_)
379 virtual typename X::BaseT::field_type
dot(
const X& x,
const X& y)
381 return implementation.dot(x,y);
384 virtual typename X::BaseT::field_type
norm (
const X& x)
386 return sqrt(static_cast<double>(this->
dot(x,x)));
393 template<
class GFS,
class C,
394 template<
class,
class,
class,
int>
class Preconditioner,
395 template<
class>
class Solver>
409 int steps_=5,
int verbose_=1)
420 template<
class M,
class V,
class W>
421 void apply(M& A, V& z, W& r,
typename V::ElementType reduction)
427 typedef Preconditioner<typename M::BaseT,typename V::BaseT,typename W::BaseT,1> SeqPrec;
432 if (gfs.gridView().comm().rank()==0) verb=verbose;
433 Solver<V> solver(pop,psp,wprec,reduction,maxiter,verb);
434 Dune::InverseOperatorResult stat;
435 solver.apply(z,r,stat);
451 template<
class GFS,
class C,
452 template<
class>
class Solver>
475 template<
class M,
class V,
class W>
476 void apply(M& A, V& z, W& r,
typename V::ElementType reduction)
482 typedef SeqILU0<typename M::BaseT,typename V::BaseT,typename W::BaseT,1> SeqPrec;
487 if (gfs.gridView().comm().rank()==0) verb=verbose;
488 Solver<V> solver(pop,psp,wprec,reduction,maxiter,verb);
489 Dune::InverseOperatorResult stat;
490 solver.apply(z,r,stat);
506 template<
class GFS,
class C,
507 template<
class>
class Solver>
531 template<
class M,
class V,
class W>
532 void apply(M& A, V& z, W& r,
typename V::ElementType reduction)
538 typedef SeqILUn<typename M::BaseT,typename V::BaseT,typename W::BaseT,1> SeqPrec;
543 if (gfs.gridView().comm().rank()==0) verb=verbose;
544 Solver<V> solver(pop,psp,wprec,reduction,maxiter,verb);
545 Dune::InverseOperatorResult stat;
546 solver.apply(z,r,stat);
570 template<
class GFS,
class CC>
584 int steps=5,
int verbose=1)
585 :
ISTLBackend_OVLP_Base<GFS,CC,Dune::SeqSSOR, Dune::BiCGSTABSolver>(gfs, cc, maxiter, steps, verbose)
593 template<
class GFS,
class CC>
614 template<
class GFS,
class CC>
636 template<
class GFS,
class CC>
650 int steps=5,
int verbose=1)
660 template<
class GFS,
class CC>
673 int restart_ = 20,
bool recalc_defect_ =
false)
675 restart(restart_), recalc_defect(recalc_defect_)
684 template<
class M,
class V,
class W>
685 void apply(M& A, V& z, W& r,
typename V::ElementType reduction)
691 typedef SeqILU0<typename M::BaseT,typename V::BaseT,typename W::BaseT,1> SeqPrec;
696 if (gfs.gridView().comm().rank()==0) verb=verbose;
697 RestartedGMResSolver<V> solver(pop,psp,wprec,reduction,restart,maxiter,verb,recalc_defect);
698 Dune::InverseOperatorResult stat;
699 solver.apply(z,r,stat);
719 template<
class GFS,
class C,
template<
typename>
class Solver>
743 template<
class M,
class V,
class W>
744 void apply(M& A, V& z, W& r,
typename V::ElementType reduction)
751 typedef SuperLUSubdomainSolver<GFS,M,V,W> PREC;
754 if (gfs.gridView().comm().rank()==0) verb=verbose;
755 Solver<V> solver(pop,psp,prec,reduction,maxiter,verb);
756 Dune::InverseOperatorResult stat;
757 solver.apply(z,r,stat);
764 std::cout <<
"No superLU support, please install and configure it." << std::endl;
782 template<
class GFS,
class CC>
806 template<
class GFS,
class CC>
820 unsigned maxiter_=5000,
852 typename V::ElementType
norm(
const V& v)
const
856 "ISTLBackend_OVLP_ExplicitDiagonal::norm() should not be "
857 "neccessary, so we skipped the implementation. If you have a "
858 "scenario where you need it, please implement it or report back to "
869 template<
class M,
class V,
class W>
870 void apply(M& A, V& z, W& r,
typename W::ElementType reduction)
872 Dune::SeqJac<typename M::BaseT,typename V::BaseT,typename W::BaseT> jac(
istl::raw(A),1,1.0);
876 if (gfs.gridView().comm().size()>1)
879 gfs.gridView().communicate(copydh,Dune::InteriorBorder_All_Interface,Dune::ForwardCommunication);
893 template<
class GO,
int s,
template<
class,
class,
class,
int>
class Preconditioner,
894 template<
class>
class Solver>
897 typedef typename GO::Traits::TrialGridFunctionSpace GFS;
899 typedef typename GO::Traits::Jacobian M;
900 typedef typename M::BaseT MatrixType;
901 typedef typename GO::Traits::Domain V;
902 typedef typename V::BaseT VectorType;
905 typedef Preconditioner<MatrixType,VectorType,VectorType,1> Smoother;
906 typedef Dune::BlockPreconditioner<VectorType,VectorType,Comm,Smoother> ParSmoother;
907 typedef Dune::OverlappingSchwarzOperator<MatrixType,VectorType,VectorType,Comm> Operator;
909 typedef Preconditioner<MatrixType,VectorType,VectorType,1> ParSmoother;
910 typedef Dune::MatrixAdapter<MatrixType,VectorType,VectorType> Operator;
912 typedef typename Dune::Amg::SmootherTraits<ParSmoother>::Arguments SmootherArgs;
913 typedef Dune::Amg::AMG<Operator,VectorType,ParSmoother,Comm> AMG;
915 typedef typename V::ElementType RF;
926 int verbose_=1,
bool reuse_=
false,
927 bool usesuperlu_=
true)
928 : gfs(gfs_), phelper(gfs,verbose_), maxiter(maxiter_), params(15,2000),
929 verbose(verbose_), reuse(reuse_), firstapply(true),
930 usesuperlu(usesuperlu_)
932 params.setDefaultValuesIsotropic(GFS::Traits::GridViewType::Traits::Grid::dimension);
933 params.setDebugLevel(verbose_);
935 if (gfs.gridView().comm().rank() == 0 && usesuperlu ==
true)
937 std::cout <<
"WARNING: You are using AMG without SuperLU!"
938 <<
" Please consider installing SuperLU,"
939 <<
" or set the usesuperlu flag to false"
940 <<
" to suppress this warning." << std::endl;
954 void setparams(
Parameters params_) DUNE_DEPRECATED_MSG(
"setparams() is deprecated, use setParameters() instead")
975 typename V::ElementType
norm (
const V& v)
const
978 PSP psp(gfs,phelper);
989 void apply(M& A, V& z, V& r,
typename V::ElementType reduction)
992 Comm oocc(gfs.gridView().comm());
994 typedef Dune::Amg::CoarsenCriterion<Dune::Amg::SymmetricCriterion<MatrixType,
995 Dune::Amg::FirstDiagonal> > Criterion;
998 Operator oop(mat, oocc);
999 Dune::OverlappingSchwarzScalarProduct<VectorType,Comm> sp(oocc);
1002 Dune::SeqScalarProduct<VectorType> sp;
1004 SmootherArgs smootherArgs;
1005 smootherArgs.iterations = 1;
1006 smootherArgs.relaxationFactor = 1;
1007 Criterion criterion(params);
1012 if (gfs.gridView().comm().rank()==0) verb=verbose;
1014 if (reuse==
false || firstapply==
true){
1015 amg.reset(
new AMG(oop, criterion, smootherArgs, oocc));
1017 stats.
tsetup = watch.elapsed();
1018 stats.
levels = amg->maxlevels();
1022 Solver<VectorType> solver(oop,sp,*amg,RF(reduction),maxiter,verb);
1023 Dune::InverseOperatorResult stat;
1026 stats.
tsolve= watch.elapsed();
1052 shared_ptr<AMG> amg;
1065 template<
class GO,
int s=96>
1069 typedef typename GO::Traits::TrialGridFunctionSpace GFS;
1081 int verbose_=1,
bool reuse_=
false,
1082 bool usesuperlu_=
true)
1084 (gfs_, maxiter_, verbose_, reuse_, usesuperlu_)
1094 template<
class GO,
int s=96>
1098 typedef typename GO::Traits::TrialGridFunctionSpace GFS;
1110 int verbose_=1,
bool reuse_=
false,
1111 bool usesuperlu_=
true)
1113 (gfs_, maxiter_, verbose_, reuse_, usesuperlu_)
1123 template<
class GO,
int s=96>
1127 typedef typename GO::Traits::TrialGridFunctionSpace GFS;
1139 int verbose_=1,
bool reuse_=
false,
1140 bool usesuperlu_=
true)
1142 (gfs_, maxiter_, verbose_, reuse_, usesuperlu_)
void apply(M &A, V &z, W &r, typename V::ElementType reduction)
solve the given linear system
Definition: ovlpistlsolverbackend.hh:421
X domain_type
Definition: ovlpistlsolverbackend.hh:47
void apply(M &A, V &z, W &r, typename V::ElementType reduction)
solve the given linear system
Definition: ovlpistlsolverbackend.hh:685
void apply(M &A, V &z, W &r, typename V::ElementType reduction)
solve the given linear system
Definition: ovlpistlsolverbackend.hh:532
ISTLBackend_BCGS_AMG_SSOR(const GFS &gfs_, unsigned maxiter_=5000, int verbose_=1, bool reuse_=false, bool usesuperlu_=true)
Constructor.
Definition: ovlpistlsolverbackend.hh:1109
ISTLBackend_BCGS_AMG_ILU0(const GFS &gfs_, unsigned maxiter_=5000, int verbose_=1, bool reuse_=false, bool usesuperlu_=true)
Constructor.
Definition: ovlpistlsolverbackend.hh:1138
Y range_type
Definition: ovlpistlsolverbackend.hh:48
Definition: ovlpistlsolverbackend.hh:41
ISTLBackend_OVLP_Base(const GFS &gfs_, const C &c_, unsigned maxiter_=5000, int steps_=5, int verbose_=1)
make a linear solver object
Definition: ovlpistlsolverbackend.hh:408
Definition: ovlpistlsolverbackend.hh:720
Class providing some statistics of the AMG solver.
Definition: seqistlsolverbackend.hh:472
ISTLBackend_OVLP_BCGS_ILUn(const GFS &gfs, const CC &cc, int n=1, unsigned maxiter=5000, int verbose=1)
make a linear solver object
Definition: ovlpistlsolverbackend.hh:627
X domain_type
export types
Definition: ovlpistlsolverbackend.hh:91
Dune::PDELab::BackendVectorSelector< GFS, typename P::domain_type::field_type >::Type domain_type
The domain type of the preconditioner.
Definition: ovlpistlsolverbackend.hh:139
double tsetup
The time needed for building the AMG hierarchy (coarsening).
Definition: seqistlsolverbackend.hh:484
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: ovlpistlsolverbackend.hh:108
virtual void post(domain_type &x)
Clean up.
Definition: ovlpistlsolverbackend.hh:180
Definition: genericdatahandle.hh:686
void setParameters(const Parameters ¶ms_)
set AMG parameters
Definition: ovlpistlsolverbackend.hh:949
bool converged
Definition: solver.hh:32
Overlapping parallel BiCGStab solver preconditioned with AMG smoothed by ILU0.
Definition: ovlpistlsolverbackend.hh:1124
OVLPScalarProduct(const OVLPScalarProductImplementation< GFS > &implementation_)
Definition: ovlpistlsolverbackend.hh:375
ISTLBackend_AMG(const GFS &gfs_, unsigned maxiter_=5000, int verbose_=1, bool reuse_=false, bool usesuperlu_=true)
Definition: ovlpistlsolverbackend.hh:925
double tsolve
The time spent in solving the system (without building the hierarchy.
Definition: seqistlsolverbackend.hh:482
Overlapping parallel BiCGStab solver with ILU0 preconditioner.
Definition: ovlpistlsolverbackend.hh:615
OverlappingWrappedPreconditioner(const GFS &gfs_, P &prec_, const CC &cc_, const istl::ParallelHelper< GFS > &helper_)
Constructor.
Definition: ovlpistlsolverbackend.hh:151
void setparams(Parameters params_)
Definition: ovlpistlsolverbackend.hh:954
double elapsed
Definition: solver.hh:34
X::ElementType dot(const X &x, const X &y) const
Dot product of two vectors. It is assumed that the vectors are consistent on the interior+border part...
Definition: ovlpistlsolverbackend.hh:334
The category the preconditioner is part of.
Definition: ovlpistlsolverbackend.hh:147
void apply(M &A, V &z, W &r, typename W::ElementType reduction)
solve the given linear system
Definition: ovlpistlsolverbackend.hh:870
Overlapping parallel CGS solver with SSOR preconditioner.
Definition: ovlpistlsolverbackend.hh:637
void set_constrained_dofs(const CG &cg, typename XG::ElementType x, XG &xg)
construct constraints from given boundary condition function
Definition: common/constraints.hh:772
int levels
the number of levels in the AMG hierarchy.
Definition: seqistlsolverbackend.hh:480
virtual const M & getmat() const
get matrix via *
Definition: ovlpistlsolverbackend.hh:73
virtual void applyscaleadd(field_type alpha, const domain_type &x, range_type &y) const
apply operator to x, scale and add:
Definition: ovlpistlsolverbackend.hh:66
Definition: ovlpistlsolverbackend.hh:508
void apply(M &A, V &z, W &r, typename V::ElementType reduction)
solve the given linear system
Definition: ovlpistlsolverbackend.hh:476
ISTLBackend_OVLP_ILU0_Base(const GFS &gfs_, const C &c_, unsigned maxiter_=5000, int verbose_=1)
make a linear solver object
Definition: ovlpistlsolverbackend.hh:464
X::ElementType field_type
Definition: ovlpistlsolverbackend.hh:92
Definition: ovlpistlsolverbackend.hh:95
OVLPScalarProductImplementation(const GFS &gfs_)
Definition: ovlpistlsolverbackend.hh:325
istl::ParallelHelper< GFS > & parallelHelper()
Definition: ovlpistlsolverbackend.hh:358
V & raw(V &v)
Returns the raw ISTL object associated with v, or v itself it is already an ISTL object.
Definition: backend/istl/utility.hh:26
Dune::PDELab::LinearSolverResult< double > res
Definition: solver.hh:52
const istl::ParallelHelper< GFS > & parallelHelper() const
Definition: ovlpistlsolverbackend.hh:352
Definition: ovlpistlsolverbackend.hh:374
Definition: ovlpistlsolverbackend.hh:132
const Parameters & parameters() const
Get the parameters describing the behaviuour of AMG.
Definition: ovlpistlsolverbackend.hh:966
Overlapping parallel BiCGStab solver with ILU0 preconditioner.
Definition: ovlpistlsolverbackend.hh:594
V::ElementType norm(const V &v) const
compute global norm of a vector
Definition: ovlpistlsolverbackend.hh:852
ISTLBackend_OVLP_GMRES_ILU0(const GFS &gfs_, const CC &cc_, unsigned maxiter_=5000, int verbose_=1, int restart_=20, bool recalc_defect_=false)
make a linear solver object
Definition: ovlpistlsolverbackend.hh:672
Definition: parallelhelper.hh:45
ISTLBackend_OVLP_BCGS_ILU0(const GFS &gfs, const CC &cc, unsigned maxiter=5000, int verbose=1)
make a linear solver object
Definition: ovlpistlsolverbackend.hh:605
Overlapping parallel conjugate gradient solver preconditioned with AMG smoothed by SSOR...
Definition: ovlpistlsolverbackend.hh:1066
V::ElementType norm(const V &v) const
compute global norm of a vector
Definition: ovlpistlsolverbackend.hh:975
void apply(M &A, V &z, V &r, typename V::ElementType reduction)
solve the given linear system
Definition: ovlpistlsolverbackend.hh:989
Definition: genericdatahandle.hh:623
virtual double norm(const X &x)
Norm of a right-hand side vector. The vector must be consistent on the interior+border partition...
Definition: ovlpistlsolverbackend.hh:120
ISTLBackend_OVLP_SuperLU_Base(const GFS &gfs_, const C &c_, unsigned maxiter_=5000, int verbose_=1)
make a linear solver object
Definition: ovlpistlsolverbackend.hh:731
Definition: ovlpistlsolverbackend.hh:52
void createIndexSetAndProjectForAMG(MatrixType &m, Comm &c)
Makes the matrix consistent and creates the parallel information for AMG.
Overlapping parallel BiCGStab solver with SuperLU preconditioner.
Definition: ovlpistlsolverbackend.hh:783
RFType reduction
Definition: solver.hh:35
ISTLBackend_OVLP_BCGS_SuperLU(const GFS &gfs_, const CC &cc_, unsigned maxiter_=5000, int verbose_=1)
make a linear solver object
Definition: ovlpistlsolverbackend.hh:795
ISTLBackend_OVLP_ExplicitDiagonal(const GFS &gfs_)
make a linear solver object
Definition: ovlpistlsolverbackend.hh:839
static const unsigned int value
Definition: gridfunctionspace/tags.hh:175
Definition: ovlpistlsolverbackend.hh:453
BackendVectorSelectorHelper< Backend, GridFunctionSpace, FieldType >::Type Type
Definition: backendselector.hh:14
Solver to be used for explicit time-steppers with (block-)diagonal mass matrix.
Definition: ovlpistlsolverbackend.hh:831
virtual X::BaseT::field_type dot(const X &x, const X &y)
Definition: ovlpistlsolverbackend.hh:379
virtual void pre(domain_type &x, range_type &b)
Prepare the preconditioner.
Definition: ovlpistlsolverbackend.hh:159
virtual void apply(const domain_type &x, range_type &y) const
apply operator to x:
Definition: ovlpistlsolverbackend.hh:59
const ISTLAMGStatistics & statistics() const
Get statistics of the AMG solver (no of levels, timings).
Definition: ovlpistlsolverbackend.hh:1038
Definition: ovlpistlsolverbackend.hh:322
ISTLBackend_OVLP_ILUn_Base(const GFS &gfs_, const C &c_, int n_=1, unsigned maxiter_=5000, int verbose_=1)
make a linear solver object
Definition: ovlpistlsolverbackend.hh:520
bool directCoarseLevelSolver
True if a direct solver was used on the coarset level.
Definition: seqistlsolverbackend.hh:488
Definition: ovlpistlsolverbackend.hh:396
ISTLBackend_OVLP_ExplicitDiagonal(const ISTLBackend_OVLP_ExplicitDiagonal &other_)
Definition: ovlpistlsolverbackend.hh:843
ISTLBackend_OVLP_BCGS_SSORk(const GFS &gfs, const CC &cc, unsigned maxiter=5000, int steps=5, int verbose=1)
make a linear solver object
Definition: ovlpistlsolverbackend.hh:583
virtual void apply(domain_type &v, const range_type &d)
Apply the preconditioner.
Definition: ovlpistlsolverbackend.hh:167
Overlapping parallel BiCGStab solver preconditioned with AMG smoothed by SSOR.
Definition: ovlpistlsolverbackend.hh:1095
M matrix_type
export types
Definition: ovlpistlsolverbackend.hh:46
Dune::PDELab::BackendVectorSelector< GFS, typename P::range_type::field_type >::Type range_type
The range type of the preconditioner.
Definition: ovlpistlsolverbackend.hh:142
ISTLBackend_OVLP_CG_SuperLU(const GFS &gfs_, const CC &cc_, unsigned maxiter_=5000, int verbose_=1)
make a linear solver object
Definition: ovlpistlsolverbackend.hh:819
Dune::Amg::SequentialInformation type
Definition: parallelhelper.hh:417
Dune::Amg::Parameters Parameters
Parameters object to customize matrix hierachy building.
Definition: ovlpistlsolverbackend.hh:922
X::ElementType norm(const X &x) const
Norm of a right-hand side vector. The vector must be consistent on the interior+border partition...
Definition: ovlpistlsolverbackend.hh:347
X::ElementType field_type
Definition: ovlpistlsolverbackend.hh:49
Definition: ovlpistlsolverbackend.hh:86
void apply(M &A, V &z, W &r, typename V::ElementType reduction)
solve the given linear system
Definition: ovlpistlsolverbackend.hh:744
Overlapping parallel restarted GMRes solver with ILU0 preconditioner.
Definition: ovlpistlsolverbackend.hh:661
Definition: ovlpistlsolverbackend.hh:895
double tprepare
The needed for computing the parallel information and for adapting the linear system.
Definition: seqistlsolverbackend.hh:478
ISTLBackend_OVLP_CG_SSORk(const GFS &gfs, const CC &cc, unsigned maxiter=5000, int steps=5, int verbose=1)
make a linear solver object
Definition: ovlpistlsolverbackend.hh:649
Overlapping parallel CG solver with SuperLU preconditioner.
Definition: ovlpistlsolverbackend.hh:807
OverlappingOperator(const CC &cc_, const M &A)
Definition: ovlpistlsolverbackend.hh:54
virtual X::BaseT::field_type norm(const X &x)
Definition: ovlpistlsolverbackend.hh:384
RFType conv_rate
Definition: solver.hh:36
Definition: ovlpistlsolverbackend.hh:370
OverlappingScalarProduct(const GFS &gfs_, const istl::ParallelHelper< GFS > &helper_)
Constructor needs to know the grid function space.
Definition: ovlpistlsolverbackend.hh:99
Overlapping parallel BiCGStab solver with SSOR preconditioner.
Definition: ovlpistlsolverbackend.hh:571
ISTLBackend_CG_AMG_SSOR(const GFS &gfs_, unsigned maxiter_=5000, int verbose_=1, bool reuse_=false, bool usesuperlu_=true)
Constructor.
Definition: ovlpistlsolverbackend.hh:1080
const std::string s
Definition: function.hh:1103
unsigned int iterations
Definition: solver.hh:33