1 #ifndef DUNE_PDELAB_BACKEND_ISTL_OVLP_AMG_DG_BACKEND_HH 2 #define DUNE_PDELAB_BACKEND_ISTL_OVLP_AMG_DG_BACKEND_HH 7 #include <dune/common/parametertree.hh> 8 #include <dune/common/power.hh> 10 #include <dune/istl/matrixmatrix.hh> 12 #include <dune/grid/common/datahandleif.hh> 35 :
public Dune::CommDataHandleIF<LocalGlobalMapDataHandle<GFS>,int>
39 typedef typename GFS::Traits::GridView
GV;
42 typedef typename GV::Grid
Grid;
44 typedef typename GlobalIdSet::IdType
IdType;
69 template<
class EntityType>
70 size_t size (EntityType&
e)
const 76 template<
class MessageBuffer,
class EntityType>
77 void gather (MessageBuffer& buff,
const EntityType&
e)
const 80 IndexType myindex = indexSet.index(e);
81 IdType myid = globalIdSet.id(e);
93 template<
class MessageBuffer,
class EntityType>
94 void scatter (MessageBuffer& buff,
const EntityType&
e,
size_t n)
99 IndexType myindex = indexSet.index(e);
100 IdType myid = globalIdSet.id(e);
108 : gfs(gfs_), gv(gfs.gridView()), indexSet(gv.indexSet()),
109 grid(gv.grid()), globalIdSet(grid.globalIdSet()),
117 const IndexSet& indexSet;
119 const GlobalIdSet& globalIdSet;
120 LocalToGlobalMap& l2g;
121 GlobalToLocalMap& g2l;
126 template<
class GFS,
class M>
128 :
public Dune::CommDataHandleIF<MatrixExchangeDataHandle<GFS,M>,
129 std::pair<typename GFS::Traits::GridView::Grid::Traits::GlobalIdSet::IdType,
130 typename M::block_type> >
134 typedef typename GFS::Traits::GridView
GV;
137 typedef typename GV::Grid
Grid;
139 typedef typename GlobalIdSet::IdType
IdType;
142 typedef typename M::block_type
B;
167 template<
class EntityType>
170 IndexType myindex = indexSet.index(e);
171 typename M::row_type myrow = m[myindex];
172 typename M::row_type::iterator endit=myrow.end();
174 for (
typename M::row_type::iterator it=myrow.begin(); it!=endit; ++it)
176 typename LocalToGlobalMap::const_iterator find=l2g.find(it.index());
187 template<
class MessageBuffer,
class EntityType>
188 void gather (MessageBuffer& buff,
const EntityType&
e)
const 190 IndexType myindex = indexSet.index(e);
192 typename M::row_type myrow = m[myindex];
193 typename M::row_type::iterator endit=myrow.end();
195 for (
typename M::row_type::iterator it=myrow.begin(); it!=endit; ++it)
197 typename LocalToGlobalMap::const_iterator find=l2g.find(it.index());
200 buff.write(std::make_pair(find->second,*it));
212 template<
class MessageBuffer,
class EntityType>
213 void scatter (MessageBuffer& buff,
const EntityType&
e,
size_t n)
215 IndexType myindex = indexSet.index(e);
216 std::cout << gv.comm().rank() <<
": begin scatter local=" << myindex <<
" size=" << n << std::endl;
219 for (
size_t i=0; i<n; ++i)
222 std::cout << gv.comm().rank() <<
": --> received global=" << x.first << std::endl;
223 typename GlobalToLocalMap::const_iterator find=g2l.find(x.first);
226 IndexType nbindex=find->second;
227 if (m.exists(myindex,nbindex))
229 m[myindex][nbindex] = x.second;
231 block -= m2[myindex][nbindex];
232 std::cout << gv.comm().rank() <<
": compare i=" << myindex <<
" j=" << nbindex
233 <<
" norm=" << block.infinity_norm() << std::endl;
245 : gfs(gfs_), m(m_), gv(gfs.gridView()), indexSet(gv.indexSet()),
246 grid(gv.grid()), globalIdSet(grid.globalIdSet()),
247 l2g(l2g_), g2l(g2l_), m2(m2_)
255 const IndexSet& indexSet;
257 const GlobalIdSet& globalIdSet;
258 const LocalToGlobalMap& l2g;
259 const GlobalToLocalMap& g2l;
266 template<
class GFS,
class T,
class A,
int n,
int m>
268 Dune::BCRSMatrix<Dune::FieldMatrix<T,n,m>,A>& matrix2)
270 typedef Dune::FieldMatrix<T,n,m> B;
271 typedef Dune::BCRSMatrix<B,A> M;
276 LocalToGlobalMap l2g;
277 GlobalToLocalMap g2l;
279 if (gfs.gridView().comm().size()>1)
280 gfs.gridView().communicate(lgdh,Dune::InteriorBorder_All_Interface,Dune::ForwardCommunication);
284 if (gfs.gridView().comm().size()>1)
285 gfs.gridView().communicate(mexdh,Dune::InteriorBorder_All_Interface,Dune::ForwardCommunication);
301 template<
class DGGFS,
class DGMatrix,
class DGPrec,
class DGCC,
302 class CGGFS,
class CGPrec,
class CGCC,
303 class P,
class DGHelper,
class Comm>
305 :
public Dune::Preconditioner<Dune::PDELab::Backend::Vector<DGGFS,typename DGPrec::domain_type::field_type>,
306 Dune::PDELab::Backend::Vector<DGGFS,typename DGPrec::range_type::field_type>>
316 const DGHelper& dghelper;
331 category=Dune::SolverCategory::overlapping
341 OvlpDGAMGPrec (
const DGGFS& dggfs_, DGMatrix& dgmatrix_, DGPrec& dgprec_,
const DGCC& dgcc_,
342 const CGGFS& cggfs_, CGPrec& cgprec_,
const CGCC& cgcc_, P& p_,
343 const DGHelper& dghelper_,
const Comm& comm_,
int n1_,
int n2_)
344 : dggfs(dggfs_), dgmatrix(dgmatrix_), dgprec(dgprec_), dgcc(dgcc_),
345 cggfs(cggfs_), cgprec(cgprec_), cgcc(cgcc_), p(p_), dghelper(dghelper_),
346 comm(comm_), n1(n1_), n2(n2_)
378 for (
int i=0; i<n1; i++)
384 if (dggfs.gridView().comm().size()>1)
385 dggfs.gridView().communicate(adddh,Dune::All_All_Interface,Dune::ForwardCommunication);
392 dghelper.maskForeignDOFs(d);
396 if (cggfs.gridView().comm().size()>1)
397 cggfs.gridView().communicate(adddh,Dune::All_All_Interface,Dune::ForwardCommunication);
399 comm.project(
native(cgd));
413 for (
int i=0; i<n2; i++)
418 if (dggfs.gridView().comm().size()>1)
419 dggfs.gridView().communicate(adddh,Dune::All_All_Interface,Dune::ForwardCommunication);
455 template<
class DGGO,
class DGCC,
class CGGFS,
class CGCC,
class TransferLOP,
456 template<
class,
class,
class,
int>
class DGPrec,
template<
class>
class Solver,
int s=96>
463 typedef typename DGGO::Traits::TrialGridFunctionSpace
GFS;
466 typedef typename DGGO::Traits::Jacobian
M;
467 typedef typename DGGO::Traits::Domain
V;
485 typedef typename Dune::TransposedMatMultMatResult<P,Matrix>::type
PTADG;
486 typedef typename Dune::MatMultMatResult<PTADG,P>::type
CGMatrix;
490 typedef Dune::OverlappingSchwarzOperator<CGMatrix,CGVector,CGVector,Comm>
ParCGOperator;
491 typedef Dune::SeqSSOR<CGMatrix,CGVector,CGVector,1>
Smoother;
492 typedef Dune::BlockPreconditioner<CGVector,CGVector,Comm,Smoother>
ParSmoother;
493 typedef Dune::Amg::AMG<ParCGOperator,CGVector,ParSmoother,Comm>
AMG;
503 std::shared_ptr<AMG> amg;
504 Parameters amg_parameters;
510 std::size_t low_order_space_entries_per_row;
545 amg_parameters = amg_parameters_;
557 return amg_parameters;
575 unsigned maxiter_=5000,
int verbose_=1,
bool reuse_=
false,
576 bool usesuperlu_=
true)
578 , gfs(dggo_.trialGridFunctionSpace())
583 , amg_parameters(15,2000)
588 , usesuperlu(usesuperlu_)
589 , low_order_space_entries_per_row(StaticPower<3,GFS::Traits::GridView::dimension>::power)
591 , pgo(cggfs,dggo.trialGridFunctionSpace(),cgtodglop,MBE(low_order_space_entries_per_row))
593 , acg(Backend::attached_container())
595 amg_parameters.setDefaultValuesIsotropic(GFS::Traits::GridViewType::Traits::Grid::dimension);
596 amg_parameters.setDebugLevel(verbose_);
598 if (usesuperlu ==
true)
600 if (gfs.gridView().comm().rank()==0)
601 std::cout <<
"WARNING: You are using AMG without SuperLU!" 602 <<
" Please consider installing SuperLU," 603 <<
" or set the usesuperlu flag to false" 604 <<
" to suppress this warning." << std::endl;
610 if (verbose>0 && gfs.gridView().comm().rank()==0) std::cout <<
"allocated prolongation matrix of size " << pmatrix.N() <<
" x " << pmatrix.M() << std::endl;
619 const ParameterTree& params)
621 , gfs(dggo_.trialGridFunctionSpace())
626 , maxiter(params.get<int>(
"max_iterations",5000))
627 , amg_parameters(15,2000)
628 , verbose(params.get<int>(
"verbose",1))
629 , reuse(params.get<bool>(
"reuse",false))
631 , usesuperlu(params.get<bool>(
"use_superlu",true))
632 , low_order_space_entries_per_row(params.get<
std::size_t>(
"low_order_space.entries_per_row",StaticPower<3,GFS::Traits::GridView::dimension>::power))
634 , pgo(cggfs,dggo.trialGridFunctionSpace(),cgtodglop,MBE(low_order_space_entries_per_row))
636 , acg(Backend::attached_container())
638 amg_parameters.setDefaultValuesIsotropic(GFS::Traits::GridViewType::Traits::Grid::dimension);
639 amg_parameters.setDebugLevel(params.get<
int>(
"verbose",1));
641 if (usesuperlu ==
true)
643 if (gfs.gridView().comm().rank()==0)
644 std::cout <<
"WARNING: You are using AMG without SuperLU!" 645 <<
" Please consider installing SuperLU," 646 <<
" or set the usesuperlu flag to false" 647 <<
" to suppress this warning." << std::endl;
653 if (verbose>0 && gfs.gridView().comm().rank()==0) std::cout <<
"allocated prolongation matrix of size " << pmatrix.N() <<
" x " << pmatrix.M() << std::endl;
666 void apply (M& A, V& z, V& r,
typename Dune::template FieldTraits<typename V::ElementType >::real_type reduction)
678 CGGO cggo(cggfs,cgcc,cggfs,cgcc,emptylop,MBE(low_order_space_entries_per_row));
684 double triple_product_time = 0.0;
686 if(reuse ==
false || firstapply ==
true) {
688 Dune::transposeMatMultMat(ptadg,
native(pmatrix),
native(A));
691 triple_product_time = watch.elapsed();
692 if (verbose>0 && gfs.gridView().comm().rank()==0)
693 std::cout <<
"=== triple matrix product " << triple_product_time <<
" s" << std::endl;
699 else if(verbose>0 && gfs.gridView().comm().rank()==0)
700 std::cout <<
"=== reuse CG matrix, SKIPPING triple matrix product " << std::endl;
704 DGGOEmpty dggoempty(gfs,dgcc,gfs,dgcc,emptylop,MBE(1 << GFS::Traits::GridView::dimension));
705 dggoempty.jacobian(z,A);
711 Comm oocc(gfs.gridView().comm());
713 CGHELPER cghelper(cggfs,2);
714 cghelper.createIndexSetAndProjectForAMG(acg,oocc);
715 ParCGOperator paroop(
native(acg),oocc);
716 Dune::OverlappingSchwarzScalarProduct<CGVector,Comm> sp(oocc);
718 typedef typename Dune::Amg::SmootherTraits<ParSmoother>::Arguments SmootherArgs;
719 SmootherArgs smootherArgs;
720 smootherArgs.iterations = 1;
721 smootherArgs.relaxationFactor = 1.0;
722 typedef Dune::Amg::CoarsenCriterion<Dune::Amg::SymmetricCriterion<CGMatrix,Dune::Amg::FirstDiagonal> > Criterion;
723 Criterion criterion(amg_parameters);
727 double amg_setup_time = 0.0;
728 if(reuse ==
false || firstapply ==
true) {
729 amg.reset(
new AMG(paroop,criterion,smootherArgs,oocc));
731 amg_setup_time = watch.elapsed();
732 if (verbose>0 && gfs.gridView().comm().rank()==0)
733 std::cout <<
"=== AMG setup " <<amg_setup_time <<
" s" << std::endl;
735 else if (verbose>0 && gfs.gridView().comm().rank()==0)
736 std::cout <<
"=== reuse CG matrix, SKIPPING AMG setup " << std::endl;
739 typedef DGPrec<Matrix,Vector,Vector,1> DGPrecType;
740 DGPrecType dgprec(
native(A),1,0.92);
744 HybridPrec hybridprec(gfs,
native(A),dgprec,dgcc,cggfs,*amg,cgcc,
native(pmatrix),
745 this->parallelHelper(),oocc,3,3);
759 if (gfs.gridView().comm().rank()>0) verb=0;
760 Solver<V> solver(pop,psp,hybridprec,reduction,maxiter,verb);
763 Dune::InverseOperatorResult stat;
765 solver.apply(z,r,stat);
766 double amg_solve_time = watch.elapsed();
767 if (verbose>0 && gfs.gridView().comm().rank()==0) std::cout <<
"=== Hybrid total solve time " << amg_solve_time+amg_setup_time+triple_product_time <<
" s" << std::endl;
768 res.converged = stat.converged;
769 res.iterations = stat.iterations;
770 res.elapsed = amg_solve_time+amg_setup_time+triple_product_time;
771 res.reduction = stat.reduction;
772 res.conv_rate = stat.conv_rate;
778 #endif // DUNE_PDELAB_BACKEND_ISTL_OVLP_AMG_DG_BACKEND_HH DGGO::Traits::TrialGridFunctionSpace GFS
Definition: ovlp_amg_dg_backend.hh:463
virtual void pre(V &x, W &b)
Prepare the preconditioner.
Definition: ovlp_amg_dg_backend.hh:355
Backend::Native< CGV > CGVector
Definition: ovlp_amg_dg_backend.hh:474
Dune::PDELab::Backend::Vector< CGGFS, typename CGPrec::range_type::field_type > CGW
Definition: ovlp_amg_dg_backend.hh:326
Backend::Native< V > Vector
Definition: ovlp_amg_dg_backend.hh:469
static const int dim
Definition: adaptivity.hh:83
Dune::Amg::Parameters Parameters
Definition: ovlp_amg_dg_backend.hh:494
std::map< IdType, IndexType > GlobalToLocalMap
Definition: ovlp_amg_dg_backend.hh:51
Definition: constraintstransformation.hh:111
size_t size(EntityType &e) const
Definition: ovlp_amg_dg_backend.hh:168
Default class for additional methods in instationary local operators.
Definition: idefault.hh:89
size_t size(EntityType &e) const
Definition: ovlp_amg_dg_backend.hh:70
Definition: parallelhelper.hh:53
std::map< IdType, IndexType > GlobalToLocalMap
Definition: ovlp_amg_dg_backend.hh:149
Definition: ovlp_amg_dg_backend.hh:127
const Parameters & parameters() const
Get the parameters describing the behaviuour of AMG.
Definition: ovlp_amg_dg_backend.hh:555
GlobalIdSet::IdType IdType
Definition: ovlp_amg_dg_backend.hh:44
const std::string s
Definition: function.hh:1101
Definition: genericdatahandle.hh:622
Dune::Amg::AMG< ParCGOperator, CGVector, ParSmoother, Comm > AMG
Definition: ovlp_amg_dg_backend.hh:493
void gather(MessageBuffer &buff, const EntityType &e) const
pack data from user to message buffer
Definition: ovlp_amg_dg_backend.hh:188
Definition: ovlpistlsolverbackend.hh:389
TransferLOP CGTODGLOP
Definition: ovlp_amg_dg_backend.hh:479
Definition: ovlp_amg_dg_backend.hh:457
Dune::OverlappingSchwarzOperator< CGMatrix, CGVector, CGVector, Comm > ParCGOperator
Definition: ovlp_amg_dg_backend.hh:490
DGGO::Traits::Jacobian M
Definition: ovlp_amg_dg_backend.hh:466
Implements linear and nonlinear versions of jacobian_apply_volume() based on alpha_volume() ...
Definition: numericaljacobianapply.hh:32
Backend::Native< PMatrix > P
Definition: ovlp_amg_dg_backend.hh:482
Dune::PDELab::ISTL::CommSelector< s, Dune::MPIHelper::isFake >::type Comm
Definition: ovlp_amg_dg_backend.hh:489
LocalGlobalMapDataHandle(const GFS &gfs_, LocalToGlobalMap &l2g_, GlobalToLocalMap &g2l_)
constructor
Definition: ovlp_amg_dg_backend.hh:107
Vector::field_type field_type
Definition: ovlp_amg_dg_backend.hh:470
Dune::MatMultMatResult< PTADG, P >::type CGMatrix
Definition: ovlp_amg_dg_backend.hh:486
GV::Grid Grid
Definition: ovlp_amg_dg_backend.hh:137
MatrixExchangeDataHandle(const GFS &gfs_, M &m_, const LocalToGlobalMap &l2g_, const GlobalToLocalMap &g2l_, M &m2_)
constructor
Definition: ovlp_amg_dg_backend.hh:244
GlobalIdSet::IdType IdType
Definition: ovlp_amg_dg_backend.hh:139
Dune::PDELab::Backend::Vector< DGGFS, typename DGPrec::range_type::field_type > W
Definition: ovlp_amg_dg_backend.hh:322
void set_constrained_dofs(const CG &cg, typename XG::ElementType x, XG &xg)
construct constraints from given boundary condition function
Definition: constraints.hh:798
Backend::Native< V > X
Definition: ovlp_amg_dg_backend.hh:323
bool contains(int dim, int codim) const
returns true if data for this codim should be communicated
Definition: ovlp_amg_dg_backend.hh:54
bool getReuse() const
Return whether the AMG is reused during call to apply()
Definition: ovlp_amg_dg_backend.hh:567
void setParameters(const Parameters &amg_parameters_)
set AMG parameters
Definition: ovlp_amg_dg_backend.hh:543
Grid::Traits::GlobalIdSet GlobalIdSet
Definition: ovlp_amg_dg_backend.hh:138
Dune::BlockPreconditioner< CGVector, CGVector, Comm, Smoother > ParSmoother
Definition: ovlp_amg_dg_backend.hh:492
std::map< IndexType, IdType > LocalToGlobalMap
Definition: ovlp_amg_dg_backend.hh:148
Dune::Amg::SequentialInformation type
Definition: parallelhelper.hh:417
GFS::Traits::GridView GV
Definition: ovlp_amg_dg_backend.hh:134
int DataType
export type of data for message buffer
Definition: ovlp_amg_dg_backend.hh:47
const P & p
Definition: constraints.hh:147
Dune::SeqSSOR< CGMatrix, CGVector, CGVector, 1 > Smoother
Definition: ovlp_amg_dg_backend.hh:491
GV::IndexSet IndexSet
Definition: ovlp_amg_dg_backend.hh:40
Backend::Native< W > Y
Definition: ovlp_amg_dg_backend.hh:324
void apply(M &A, V &z, V &r, typename Dune::template FieldTraits< typename V::ElementType >::real_type reduction)
solve the given linear system
Definition: ovlp_amg_dg_backend.hh:666
Dune::TransposedMatMultMatResult< P, Matrix >::type PTADG
Definition: ovlp_amg_dg_backend.hh:485
Grid::Traits::GlobalIdSet GlobalIdSet
Definition: ovlp_amg_dg_backend.hh:43
void setReuse(bool reuse_)
Set whether the AMG should be reused again during call to apply().
Definition: ovlp_amg_dg_backend.hh:561
Dune::PDELab::EmptyTransformation CC
Definition: ovlp_amg_dg_backend.hh:478
void gather(MessageBuffer &buff, const EntityType &e) const
pack data from user to message buffer
Definition: ovlp_amg_dg_backend.hh:77
typename impl::BackendVectorSelector< GridFunctionSpace, FieldType >::Type Vector
alias of the return type of BackendVectorSelector
Definition: backend/interface.hh:106
Dune::PDELab::GridOperator< CGGFS, GFS, CGTODGLOP, MBE, field_type, field_type, field_type, CC, CC > PGO
Definition: ovlp_amg_dg_backend.hh:480
bool fixedsize(int dim, int codim) const
returns true if size per entity of given dim and codim is a constant
Definition: ovlp_amg_dg_backend.hh:158
bool contains(int dim, int codim) const
returns true if data for this codim should be communicated
Definition: ovlp_amg_dg_backend.hh:152
Backend using (possibly nested) ISTL BCRSMatrices.
Definition: bcrsmatrixbackend.hh:190
bool fixedsize(int dim, int codim) const
returns true if size per entity of given dim and codim is a constant
Definition: ovlp_amg_dg_backend.hh:60
IndexSet::IndexType IndexType
Definition: ovlp_amg_dg_backend.hh:136
Dune::PDELab::Backend::Vector< CGGFS, typename CGPrec::domain_type::field_type > CGV
Definition: ovlp_amg_dg_backend.hh:325
Dune::PDELab::Backend::Vector< DGGFS, typename DGPrec::domain_type::field_type > V
Definition: ovlp_amg_dg_backend.hh:321
PMatrix & prolongation_matrix()
Definition: ovlp_amg_dg_backend.hh:534
DGGO::Traits::Domain V
Definition: ovlp_amg_dg_backend.hh:467
GFS::Traits::GridView GV
Definition: ovlp_amg_dg_backend.hh:39
For backward compatibility – Do not use this!
Definition: adaptivity.hh:27
sparsity pattern generator
Definition: pattern.hh:13
Definition: ovlp_amg_dg_backend.hh:34
GV::IndexSet IndexSet
Definition: ovlp_amg_dg_backend.hh:135
const Entity & e
Definition: localfunctionspace.hh:111
std::map< IndexType, IdType > LocalToGlobalMap
Definition: ovlp_amg_dg_backend.hh:50
IndexSet::IndexType IndexType
Definition: ovlp_amg_dg_backend.hh:41
std::enable_if< std::is_base_of< impl::WrapperBase, T >::value, Native< T > &>::type native(T &t)
Definition: backend/interface.hh:192
void restore_overlap_entries(const GFS &gfs, Dune::BCRSMatrix< Dune::FieldMatrix< T, n, m >, A > &matrix, Dune::BCRSMatrix< Dune::FieldMatrix< T, n, m >, A > &matrix2)
Definition: ovlp_amg_dg_backend.hh:267
void scatter(MessageBuffer &buff, const EntityType &e, size_t n)
Definition: ovlp_amg_dg_backend.hh:213
Definition: ovlpistlsolverbackend.hh:44
virtual void apply(V &x, const W &b)
Apply the precondioner.
Definition: ovlp_amg_dg_backend.hh:369
OvlpDGAMGPrec(const DGGFS &dggfs_, DGMatrix &dgmatrix_, DGPrec &dgprec_, const DGCC &dgcc_, const CGGFS &cggfs_, CGPrec &cgprec_, const CGCC &cgcc_, P &p_, const DGHelper &dghelper_, const Comm &comm_, int n1_, int n2_)
Constructor.
Definition: ovlp_amg_dg_backend.hh:341
Definition: ovlp_amg_dg_backend.hh:304
M::block_type B
Definition: ovlp_amg_dg_backend.hh:142
Backend::Native< M > Matrix
Definition: ovlp_amg_dg_backend.hh:468
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
GV::Grid Grid
Definition: ovlp_amg_dg_backend.hh:42
Dune::PDELab::Backend::Vector< CGGFS, field_type > CGV
Definition: ovlp_amg_dg_backend.hh:473
virtual void post(V &x)
Clean up.
Definition: ovlp_amg_dg_backend.hh:431
void scatter(MessageBuffer &buff, const EntityType &e, size_t n)
Definition: ovlp_amg_dg_backend.hh:94
PGO::Jacobian PMatrix
Definition: ovlp_amg_dg_backend.hh:481
Dune::PDELab::ISTL::BCRSMatrixBackend MBE
Definition: ovlp_amg_dg_backend.hh:477
void jacobian(const Domain &x, Jacobian &a) const
Assembler jacobian.
Definition: gridoperator.hh:205
Definition: ovlpistlsolverbackend.hh:438
ISTLBackend_OVLP_AMG_4_DG(DGGO &dggo_, const DGCC &dgcc_, CGGFS &cggfs_, const CGCC &cgcc_, const ParameterTree ¶ms)
Definition: ovlp_amg_dg_backend.hh:618
ISTLBackend_OVLP_AMG_4_DG(DGGO &dggo_, const DGCC &dgcc_, CGGFS &cggfs_, const CGCC &cgcc_, unsigned maxiter_=5000, int verbose_=1, bool reuse_=false, bool usesuperlu_=true)
Definition: ovlp_amg_dg_backend.hh:574
std::pair< IdType, B > DataType
export type of data for message buffer
Definition: ovlp_amg_dg_backend.hh:145
Dune::PDELab::Backend::Matrix< MB, Domain, Range, JF > Jacobian
The type of the jacobian.
Definition: gridoperator.hh:75
Default flags for all local operators.
Definition: flags.hh:18