3 #ifndef DUNE_PDELAB_BACKEND_ISTL_OVLPISTLSOLVERBACKEND_HH 4 #define DUNE_PDELAB_BACKEND_ISTL_OVLPISTLSOLVERBACKEND_HH 9 #include <dune/common/deprecated.hh> 10 #include <dune/common/parallel/mpihelper.hh> 12 #include <dune/istl/owneroverlapcopy.hh> 13 #include <dune/istl/solvercategory.hh> 14 #include <dune/istl/operators.hh> 15 #include <dune/istl/solvers.hh> 16 #include <dune/istl/preconditioners.hh> 17 #include <dune/istl/scalarproducts.hh> 18 #include <dune/istl/paamg/amg.hh> 19 #include <dune/istl/paamg/pinfo.hh> 20 #include <dune/istl/io.hh> 21 #include <dune/istl/superlu.hh> 43 template<
class CC,
class M,
class X,
class Y>
45 :
public Dune::AssembledLinearOperator<M,X,Y>
55 enum {
category=Dune::SolverCategory::overlapping};
62 virtual void apply (
const domain_type& x, range_type& y)
const 70 virtual void applyscaleadd (field_type alpha,
const domain_type& x, range_type& y)
const 90 template<
class GFS,
class X>
92 :
public Dune::ScalarProduct<X>
105 : gfs(gfs_), helper(helper_)
113 virtual field_type
dot (
const X& x,
const X& y)
116 field_type sum = helper.disjointDot(x,y);
119 return gfs.gridView().comm().sum(sum);
125 virtual double norm (
const X& x)
127 return sqrt(static_cast<double>(this->dot(x,x)));
136 template<
class CC,
class GFS,
class P>
138 :
public Dune::Preconditioner<Dune::PDELab::Backend::Vector<GFS,typename P::domain_type::field_type>,
139 Dune::PDELab::Backend::Vector<GFS,typename P::range_type::field_type>>
156 : gfs(gfs_), prec(prec_), cc(cc_), helper(helper_)
176 if (gfs.gridView().comm().size()>1)
177 gfs.gridView().communicate(adddh,Dune::All_All_Interface,Dune::ForwardCommunication);
196 #if HAVE_SUITESPARSE_UMFPACK || DOXYGEN 198 template<
class GFS,
class M,
class X,
class Y>
225 : gfs(gfs_), solver(Backend::
native(A_),false)
231 virtual void pre (X& x, Y& b) {}
236 virtual void apply (X& v,
const Y& d)
238 Dune::InverseOperatorResult stat;
241 if (gfs.gridView().comm().size()>1)
244 gfs.gridView().communicate(adddh,Dune::All_All_Interface,Dune::ForwardCommunication);
255 Dune::UMFPack<ISTLM> solver;
261 template<
class GFS,
class M,
class X,
class Y>
262 class SuperLUSubdomainSolver :
public Dune::Preconditioner<X,Y>
278 category=Dune::SolverCategory::overlapping
287 SuperLUSubdomainSolver (
const GFS& gfs_,
const M& A_)
294 virtual void pre (X& x, Y& b) {}
299 virtual void apply (X& v,
const Y& d)
301 Dune::InverseOperatorResult stat;
304 if (gfs.gridView().comm().size()>1)
307 gfs.gridView().communicate(adddh,Dune::All_All_Interface,Dune::ForwardCommunication);
314 virtual void post (X& x) {}
318 Dune::SuperLU<ISTLM> solver;
322 template<
class GFS,
class M,
class X,
class Y>
323 class RestrictedSuperLUSubdomainSolver :
public Dune::Preconditioner<X,Y>
325 typedef typename M::Container ISTLM;
339 category=Dune::SolverCategory::overlapping
349 RestrictedSuperLUSubdomainSolver (
const GFS& gfs_,
const M& A_,
357 virtual void pre (X& x, Y& b) {}
362 virtual void apply (X& v,
const Y& d)
365 Dune::InverseOperatorResult stat;
368 if (gfs.gridView().comm().size()>1)
370 helper.maskForeignDOFs(
native(v));
372 gfs.gridView().communicate(adddh,Dune::InteriorBorder_All_Interface,Dune::ForwardCommunication);
379 virtual void post (X& x) {}
383 Dune::SuperLU<ISTLM> solver;
388 template<
typename GFS>
393 : gfs(gfs_), helper(gfs_)
401 typename X::ElementType
dot (
const X& x,
const X& y)
const 404 typename X::ElementType sum = helper.disjointDot(x,y);
407 return gfs.gridView().comm().sum(sum);
414 typename Dune::template FieldTraits<typename X::ElementType >::real_type
norm (
const X& x)
const 417 return sqrt(static_cast<double>(this->dot(x,x)));
437 template<
typename GFS,
typename X>
439 :
public ScalarProduct<X>
444 : implementation(implementation_)
447 virtual typename X::Container::field_type
dot(
const X& x,
const X& y)
449 return implementation.dot(x,y);
452 virtual typename X::Container::field_type
norm (
const X& x)
455 return sqrt(static_cast<double>(this->dot(x,x)));
462 template<
class GFS,
class C,
463 template<
class,
class,
class,
int>
class Preconditioner,
464 template<
class>
class Solver>
478 int steps_=5,
int verbose_=1)
489 template<
class M,
class V,
class W>
490 void apply(M& A, V& z, W& r,
typename Dune::template FieldTraits<typename V::ElementType >::real_type reduction)
498 typedef Preconditioner<
504 SeqPrec seqprec(
native(A),steps,1.0);
506 WPREC wprec(gfs,seqprec,c,this->parallelHelper());
508 if (gfs.gridView().comm().rank()==0) verb=verbose;
509 Solver<V> solver(pop,psp,wprec,reduction,maxiter,verb);
510 Dune::InverseOperatorResult stat;
511 solver.apply(z,r,stat);
512 res.converged = stat.converged;
513 res.iterations = stat.iterations;
514 res.elapsed = stat.elapsed;
515 res.reduction = stat.reduction;
516 res.conv_rate = stat.conv_rate;
527 template<
class GFS,
class C,
528 template<
class>
class Solver>
551 template<
class M,
class V,
class W>
552 void apply(M& A, V& z, W& r,
typename Dune::template FieldTraits<typename V::ElementType >::real_type reduction)
566 SeqPrec seqprec(
native(A),1.0);
568 WPREC wprec(gfs,seqprec,c,this->parallelHelper());
570 if (gfs.gridView().comm().rank()==0) verb=verbose;
571 Solver<V> solver(pop,psp,wprec,reduction,maxiter,verb);
572 Dune::InverseOperatorResult stat;
573 solver.apply(z,r,stat);
574 res.converged = stat.converged;
575 res.iterations = stat.iterations;
576 res.elapsed = stat.elapsed;
577 res.reduction = stat.reduction;
578 res.conv_rate = stat.conv_rate;
589 template<
class GFS,
class C,
590 template<
class>
class Solver>
614 template<
class M,
class V,
class W>
615 void apply(M& A, V& z, W& r,
typename Dune::template FieldTraits<typename V::ElementType >::real_type reduction)
629 SeqPrec seqprec(
native(A),n,1.0);
631 WPREC wprec(gfs,seqprec,c,this->parallelHelper());
633 if (gfs.gridView().comm().rank()==0) verb=verbose;
634 Solver<V> solver(pop,psp,wprec,reduction,maxiter,verb);
635 Dune::InverseOperatorResult stat;
636 solver.apply(z,r,stat);
637 res.converged = stat.converged;
638 res.iterations = stat.iterations;
639 res.elapsed = stat.elapsed;
640 res.reduction = stat.reduction;
641 res.conv_rate = stat.conv_rate;
660 template<
class GFS,
class CC>
674 int steps=5,
int verbose=1)
683 template<
class GFS,
class CC>
704 template<
class GFS,
class CC>
726 template<
class GFS,
class CC>
740 int steps=5,
int verbose=1)
750 template<
class GFS,
class CC>
774 template<
class M,
class V,
class W>
775 void apply(M& A, V& z, W& r,
typename Dune::template FieldTraits<typename V::ElementType >::real_type reduction)
789 SeqPrec seqprec(
native(A),1.0);
791 WPREC wprec(gfs,seqprec,cc,this->parallelHelper());
793 if (gfs.gridView().comm().rank()==0) verb=verbose;
794 RestartedGMResSolver<V> solver(pop,psp,wprec,reduction,restart,maxiter,verb);
795 Dune::InverseOperatorResult stat;
796 solver.apply(z,r,stat);
797 res.converged = stat.converged;
798 res.iterations = stat.iterations;
799 res.elapsed = stat.elapsed;
800 res.reduction = stat.reduction;
801 res.conv_rate = stat.conv_rate;
815 template<
class GFS,
class C,
template<
typename>
class Solver>
839 template<
class M,
class V,
class W>
840 void apply(M& A, V& z, W& r,
typename Dune::template FieldTraits<typename V::ElementType >::real_type reduction)
847 typedef SuperLUSubdomainSolver<GFS,M,V,W> PREC;
850 if (gfs.gridView().comm().rank()==0) verb=verbose;
851 Solver<V> solver(pop,psp,prec,reduction,maxiter,verb);
852 Dune::InverseOperatorResult stat;
853 solver.apply(z,r,stat);
854 res.converged = stat.converged;
855 res.iterations = stat.iterations;
856 res.elapsed = stat.elapsed;
857 res.reduction = stat.reduction;
858 res.conv_rate = stat.conv_rate;
860 std::cout <<
"No superLU support, please install and configure it." << std::endl;
873 template<
class GFS,
class C,
template<
typename>
class Solver>
897 template<
class M,
class V,
class W>
898 void apply(M& A, V& z, W& r,
typename Dune::template FieldTraits<typename V::ElementType >::real_type reduction)
904 #if HAVE_SUITESPARSE_UMFPACK || DOXYGEN 908 if (gfs.gridView().comm().rank()==0) verb=verbose;
909 Solver<V> solver(pop,psp,prec,reduction,maxiter,verb);
910 Dune::InverseOperatorResult stat;
911 solver.apply(z,r,stat);
912 res.converged = stat.converged;
913 res.iterations = stat.iterations;
914 res.elapsed = stat.elapsed;
915 res.reduction = stat.reduction;
916 res.conv_rate = stat.conv_rate;
918 std::cout <<
"No UMFPack support, please install and configure it." << std::endl;
936 template<
class GFS,
class CC>
960 template<
class GFS,
class CC>
974 unsigned maxiter_=5000,
985 template<
class GFS,
class CC>
999 unsigned maxiter_=5000,
1031 typename V::ElementType
norm(
const V& v)
const 1035 "ISTLBackend_OVLP_ExplicitDiagonal::norm() should not be " 1036 "neccessary, so we skipped the implementation. If you have a " 1037 "scenario where you need it, please implement it or report back to " 1048 template<
class M,
class V,
class W>
1049 void apply(M& A, V& z, W& r,
typename Dune::template FieldTraits<typename W::ElementType >::real_type reduction)
1061 if (gfs.gridView().comm().size()>1)
1064 gfs.gridView().communicate(copydh,Dune::InteriorBorder_All_Interface,Dune::ForwardCommunication);
1066 res.converged =
true;
1069 res.reduction =
static_cast<double>(reduction);
1070 res.conv_rate =
static_cast<double>(reduction);
1078 template<
class GO,
int s,
template<
class,
class,
class,
int>
class Preconditioner,
1079 template<
class>
class Solver>
1082 typedef typename GO::Traits::TrialGridFunctionSpace GFS;
1084 typedef typename GO::Traits::Jacobian M;
1086 typedef typename GO::Traits::Domain V;
1090 typedef Preconditioner<MatrixType,VectorType,VectorType,1> Smoother;
1091 typedef Dune::BlockPreconditioner<VectorType,VectorType,Comm,Smoother> ParSmoother;
1092 typedef Dune::OverlappingSchwarzOperator<MatrixType,VectorType,VectorType,Comm> Operator;
1094 typedef Preconditioner<MatrixType,VectorType,VectorType,1> ParSmoother;
1095 typedef Dune::MatrixAdapter<MatrixType,VectorType,VectorType> Operator;
1097 typedef typename Dune::Amg::SmootherTraits<ParSmoother>::Arguments SmootherArgs;
1098 typedef Dune::Amg::AMG<Operator,VectorType,ParSmoother,Comm> AMG;
1100 typedef typename V::ElementType RF;
1111 int verbose_=1,
bool reuse_=
false,
1112 bool usesuperlu_=
true)
1113 : gfs(gfs_), phelper(gfs,verbose_), maxiter(maxiter_), params(15,2000),
1114 verbose(verbose_), reuse(reuse_), firstapply(true),
1115 usesuperlu(usesuperlu_)
1117 params.setDefaultValuesIsotropic(GFS::Traits::GridViewType::Traits::Grid::dimension);
1118 params.setDebugLevel(verbose_);
1120 if (gfs.gridView().comm().rank() == 0 && usesuperlu ==
true)
1122 std::cout <<
"WARNING: You are using AMG without SuperLU!" 1123 <<
" Please consider installing SuperLU," 1124 <<
" or set the usesuperlu flag to false" 1125 <<
" to suppress this warning." << std::endl;
1167 typename V::ElementType
norm (
const V& v)
const 1170 PSP psp(gfs,phelper);
1181 void apply(M& A, V& z, V& r,
typename Dune::template FieldTraits<typename V::ElementType >::real_type reduction)
1184 Comm oocc(gfs.gridView().comm());
1186 typedef Dune::Amg::CoarsenCriterion<Dune::Amg::SymmetricCriterion<MatrixType,
1187 Dune::Amg::FirstDiagonal> > Criterion;
1189 phelper.createIndexSetAndProjectForAMG(A, oocc);
1190 Operator oop(mat, oocc);
1191 Dune::OverlappingSchwarzScalarProduct<VectorType,Comm> sp(oocc);
1194 Dune::SeqScalarProduct<VectorType> sp;
1196 SmootherArgs smootherArgs;
1197 smootherArgs.iterations = 1;
1198 smootherArgs.relaxationFactor = 1;
1199 Criterion criterion(params);
1200 stats.tprepare=watch.elapsed();
1204 if (gfs.gridView().comm().rank()==0) verb=verbose;
1206 if (reuse==
false || firstapply==
true){
1207 amg.reset(
new AMG(oop, criterion, smootherArgs, oocc));
1209 stats.tsetup = watch.elapsed();
1210 stats.levels = amg->maxlevels();
1211 stats.directCoarseLevelSolver=amg->usesDirectCoarseLevelSolver();
1214 Solver<VectorType> solver(oop,sp,*amg,RF(reduction),maxiter,verb);
1215 Dune::InverseOperatorResult stat;
1218 stats.tsolve= watch.elapsed();
1219 res.converged = stat.converged;
1220 res.iterations = stat.iterations;
1221 res.elapsed = stat.elapsed;
1222 res.reduction = stat.reduction;
1223 res.conv_rate = stat.conv_rate;
1244 shared_ptr<AMG> amg;
1257 template<
class GO,
int s=96>
1261 typedef typename GO::Traits::TrialGridFunctionSpace GFS;
1273 int verbose_=1,
bool reuse_=
false,
1274 bool usesuperlu_=
true)
1276 (gfs_, maxiter_, verbose_, reuse_, usesuperlu_)
1286 template<
class GO,
int s=96>
1290 typedef typename GO::Traits::TrialGridFunctionSpace GFS;
1302 int verbose_=1,
bool reuse_=
false,
1303 bool usesuperlu_=
true)
1305 (gfs_, maxiter_, verbose_, reuse_, usesuperlu_)
1315 template<
class GO,
int s=96>
1319 typedef typename GO::Traits::TrialGridFunctionSpace GFS;
1331 int verbose_=1,
bool reuse_=
false,
1332 bool usesuperlu_=
true)
1334 (gfs_, maxiter_, verbose_, reuse_, usesuperlu_)
1345 #endif // DUNE_PDELAB_BACKEND_ISTL_OVLPISTLSOLVERBACKEND_HH M matrix_type
export types
Definition: ovlpistlsolverbackend.hh:49
ISTLBackend_OVLP_ExplicitDiagonal(const ISTLBackend_OVLP_ExplicitDiagonal &other_)
Definition: ovlpistlsolverbackend.hh:1022
Overlapping parallel CG solver with SuperLU preconditioner.
Definition: ovlpistlsolverbackend.hh:961
typename impl::BackendVectorSelector< GridFunctionSpace, FieldType >::Type Vector
alias of the return type of BackendVectorSelector
Definition: backend/interface.hh:106
virtual const M & getmat() const
get matrix via *
Definition: ovlpistlsolverbackend.hh:78
OverlappingOperator(const CC &cc_, const M &A)
Definition: ovlpistlsolverbackend.hh:57
virtual void post(domain_type &x)
Clean up.
Definition: ovlpistlsolverbackend.hh:183
virtual void post(X &x)
Clean up.
Definition: ovlpistlsolverbackend.hh:251
OVLPScalarProduct(const OVLPScalarProductImplementation< GFS > &implementation_)
Definition: ovlpistlsolverbackend.hh:443
ISTLBackend_BCGS_AMG_SSOR(const GFS &gfs_, unsigned maxiter_=5000, int verbose_=1, bool reuse_=false, bool usesuperlu_=true)
Constructor.
Definition: ovlpistlsolverbackend.hh:1301
void setParameters(const Parameters ¶ms_)
set AMG parameters
Definition: ovlpistlsolverbackend.hh:1134
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:603
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
virtual void apply(X &v, const Y &d)
Apply the precondioner.
Definition: ovlpistlsolverbackend.hh:236
Class providing some statistics of the AMG solver.
Definition: seqistlsolverbackend.hh:544
Overlapping parallel BiCGStab solver preconditioned with AMG smoothed by SSOR.
Definition: ovlpistlsolverbackend.hh:1287
const ISTLAMGStatistics & statistics() const
Get statistics of the AMG solver (no of levels, timings).
Definition: ovlpistlsolverbackend.hh:1230
Solver to be used for explicit time-steppers with (block-)diagonal mass matrix.
Definition: ovlpistlsolverbackend.hh:1010
ISTL::ParallelHelper< GFS > & parallelHelper()
Definition: ovlpistlsolverbackend.hh:426
Definition: ovlpistlsolverbackend.hh:55
ISTLBackend_OVLP_UMFPack_Base(const GFS &gfs_, const C &c_, unsigned maxiter_=5000, int verbose_=1)
make a linear solver object
Definition: ovlpistlsolverbackend.hh:885
V::ElementType norm(const V &v) const
compute global norm of a vector
Definition: ovlpistlsolverbackend.hh:1167
ISTLBackend_OVLP_BCGS_SuperLU(const GFS &gfs_, const CC &cc_, unsigned maxiter_=5000, int verbose_=1)
make a linear solver object
Definition: ovlpistlsolverbackend.hh:949
Dune::PDELab::Backend::Vector< GFS, typename P::domain_type::field_type > domain_type
The domain type of the preconditioner.
Definition: ovlpistlsolverbackend.hh:143
OVLPScalarProductImplementation(const GFS &gfs_)
Definition: ovlpistlsolverbackend.hh:392
bool getReuse() const
Return whether the AMG is reused during call to apply()
Definition: ovlpistlsolverbackend.hh:1158
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:673
Definition: ovlpistlsolverbackend.hh:137
Definition: parallelhelper.hh:53
const std::string s
Definition: function.hh:1101
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:717
const Parameters & parameters() const
Get the parameters describing the behaviuour of AMG.
Definition: ovlpistlsolverbackend.hh:1146
ISTLBackend_OVLP_ILU0_Base(const GFS &gfs_, const C &c_, unsigned maxiter_=5000, int verbose_=1)
make a linear solver object
Definition: ovlpistlsolverbackend.hh:540
virtual void applyscaleadd(field_type alpha, const domain_type &x, range_type &y) const
apply operator to x, scale and add:
Definition: ovlpistlsolverbackend.hh:70
virtual void pre(domain_type &x, range_type &b)
Prepare the preconditioner.
Definition: ovlpistlsolverbackend.hh:162
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:477
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:125
OverlappingWrappedPreconditioner(const GFS &gfs_, P &prec_, const CC &cc_, const ISTL::ParallelHelper< GFS > &helper_)
Constructor.
Definition: ovlpistlsolverbackend.hh:154
X domain_type
Definition: ovlpistlsolverbackend.hh:50
Y range_type
The range type of the preconditioner.
Definition: ovlpistlsolverbackend.hh:207
Definition: ovlpistlsolverbackend.hh:529
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:401
For backward compatibility – Do not use this!
Definition: adaptivity.hh:27
Definition: ovlpistlsolverbackend.hh:389
Definition: genericdatahandle.hh:622
ISTLBackend_OVLP_GMRES_ILU0(const GFS &gfs_, const CC &cc_, unsigned maxiter_=5000, int verbose_=1, int restart_=20)
make a linear solver object
Definition: ovlpistlsolverbackend.hh:762
ISTLBackend_OVLP_SuperLU_Base(const GFS &gfs_, const C &c_, unsigned maxiter_=5000, int verbose_=1)
make a linear solver object
Definition: ovlpistlsolverbackend.hh:827
ISTLBackend_OVLP_ExplicitDiagonal(const GFS &gfs_)
make a linear solver object
Definition: ovlpistlsolverbackend.hh:1018
virtual void pre(X &x, Y &b)
Prepare the preconditioner.
Definition: ovlpistlsolverbackend.hh:231
OverlappingScalarProduct(const GFS &gfs_, const ISTL::ParallelHelper< GFS > &helper_)
Constructor needs to know the grid function space.
Definition: ovlpistlsolverbackend.hh:104
Overlapping parallel CGS solver with SSOR preconditioner.
Definition: ovlpistlsolverbackend.hh:727
X domain_type
export types
Definition: ovlpistlsolverbackend.hh:96
Overlapping parallel conjugate gradient solver preconditioned with AMG smoothed by SSOR...
Definition: ovlpistlsolverbackend.hh:1258
void apply(M &A, V &z, W &r, typename Dune::template FieldTraits< typename V::ElementType >::real_type reduction)
solve the given linear system
Definition: ovlpistlsolverbackend.hh:840
Overlapping parallel BiCGStab solver with SSOR preconditioner.
Definition: ovlpistlsolverbackend.hh:661
virtual void apply(const domain_type &x, range_type &y) const
apply operator to x:
Definition: ovlpistlsolverbackend.hh:62
Overlapping parallel CG solver with UMFPack preconditioner.
Definition: ovlpistlsolverbackend.hh:986
virtual X::Container::field_type dot(const X &x, const X &y)
Definition: ovlpistlsolverbackend.hh:447
ISTLBackend_OVLP_CG_UMFPack(const GFS &gfs_, const CC &cc_, unsigned maxiter_=5000, int verbose_=1)
make a linear solver object
Definition: ovlpistlsolverbackend.hh:998
static const unsigned int value
Definition: gridfunctionspace/tags.hh:139
virtual X::Container::field_type norm(const X &x)
Definition: ovlpistlsolverbackend.hh:452
X::ElementType field_type
Definition: ovlpistlsolverbackend.hh:52
Definition: ovlpistlsolverbackend.hh:91
void apply(M &A, V &z, W &r, typename Dune::template FieldTraits< typename V::ElementType >::real_type reduction)
solve the given linear system
Definition: ovlpistlsolverbackend.hh:552
Definition: ovlpistlsolverbackend.hh:816
Overlapping parallel BiCGStab solver preconditioned with AMG smoothed by ILU0.
Definition: ovlpistlsolverbackend.hh:1316
ISTLBackend_OVLP_BCGS_ILU0(const GFS &gfs, const CC &cc, unsigned maxiter=5000, int verbose=1)
make a linear solver object
Definition: ovlpistlsolverbackend.hh:695
Definition: ovlpistlsolverbackend.hh:1080
void apply(M &A, V &z, W &r, typename Dune::template FieldTraits< typename V::ElementType >::real_type reduction)
solve the given linear system
Definition: ovlpistlsolverbackend.hh:775
void apply(M &A, V &z, V &r, typename Dune::template FieldTraits< typename V::ElementType >::real_type reduction)
solve the given linear system
Definition: ovlpistlsolverbackend.hh:1181
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:113
Definition: ovlpistlsolverbackend.hh:465
Definition: ovlpistlsolverbackend.hh:199
Dune::template FieldTraits< typename X::ElementType >::real_type 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:414
Definition: ovlpistlsolverbackend.hh:44
X::ElementType field_type
Definition: ovlpistlsolverbackend.hh:97
void setReuse(bool reuse_)
Set whether the AMG should be reused again during call to apply().
Definition: ovlpistlsolverbackend.hh:1152
ISTLBackend_OVLP_CG_SuperLU(const GFS &gfs_, const CC &cc_, unsigned maxiter_=5000, int verbose_=1)
make a linear solver object
Definition: ovlpistlsolverbackend.hh:973
void apply(M &A, V &z, W &r, typename Dune::template FieldTraits< typename W::ElementType >::real_type reduction)
solve the given linear system
Definition: ovlpistlsolverbackend.hh:1049
UMFPackSubdomainSolver(const GFS &gfs_, const M &A_)
Constructor.
Definition: ovlpistlsolverbackend.hh:224
Overlapping parallel BiCGStab solver with ILU0 preconditioner.
Definition: ovlpistlsolverbackend.hh:705
Dune::Amg::Parameters Parameters
Parameters object to customize matrix hierachy building.
Definition: ovlpistlsolverbackend.hh:1107
X::ElementType field_type
The field type of the preconditioner.
Definition: ovlpistlsolverbackend.hh:209
Definition: ovlpistlsolverbackend.hh:591
const ISTL::ParallelHelper< GFS > & parallelHelper() const
Definition: ovlpistlsolverbackend.hh:420
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:739
ISTLBackend_AMG(const GFS &gfs_, unsigned maxiter_=5000, int verbose_=1, bool reuse_=false, bool usesuperlu_=true)
Definition: ovlpistlsolverbackend.hh:1110
Definition: genericdatahandle.hh:685
Definition: ovlpistlsolverbackend.hh:438
void apply(M &A, V &z, W &r, typename Dune::template FieldTraits< typename V::ElementType >::real_type reduction)
solve the given linear system
Definition: ovlpistlsolverbackend.hh:615
Dune::Amg::SequentialInformation type
Definition: parallelhelper.hh:417
void set_constrained_dofs(const CG &cg, typename XG::ElementType x, XG &xg)
construct constraints from given boundary condition function
Definition: constraints.hh:798
Overlapping parallel BiCGStab solver with SuperLU preconditioner.
Definition: ovlpistlsolverbackend.hh:937
ISTLBackend_BCGS_AMG_ILU0(const GFS &gfs_, unsigned maxiter_=5000, int verbose_=1, bool reuse_=false, bool usesuperlu_=true)
Constructor.
Definition: ovlpistlsolverbackend.hh:1330
Dune::PDELab::Backend::Vector< GFS, typename P::range_type::field_type > range_type
The range type of the preconditioner.
Definition: ovlpistlsolverbackend.hh:145
Overlapping parallel restarted GMRes solver with ILU0 preconditioner.
Definition: ovlpistlsolverbackend.hh:751
std::enable_if< std::is_base_of< impl::WrapperBase, T >::value, Native< T > &>::type native(T &t)
Definition: backend/interface.hh:192
Y range_type
Definition: ovlpistlsolverbackend.hh:51
V::ElementType norm(const V &v) const
compute global norm of a vector
Definition: ovlpistlsolverbackend.hh:1031
Overlapping parallel BiCGStab solver with ILU0 preconditioner.
Definition: ovlpistlsolverbackend.hh:684
void apply(M &A, V &z, W &r, typename Dune::template FieldTraits< typename V::ElementType >::real_type reduction)
solve the given linear system
Definition: ovlpistlsolverbackend.hh:490
void apply(M &A, V &z, W &r, typename Dune::template FieldTraits< typename V::ElementType >::real_type reduction)
solve the given linear system
Definition: ovlpistlsolverbackend.hh:898
virtual void apply(domain_type &v, const range_type &d)
Apply the preconditioner.
Definition: ovlpistlsolverbackend.hh:170
ISTLBackend_CG_AMG_SSOR(const GFS &gfs_, unsigned maxiter_=5000, int verbose_=1, bool reuse_=false, bool usesuperlu_=true)
Constructor.
Definition: ovlpistlsolverbackend.hh:1272
Definition: ovlpistlsolverbackend.hh:874
X domain_type
The domain type of the preconditioner.
Definition: ovlpistlsolverbackend.hh:205