1 #ifndef DUNE_PDELAB_BACKEND_ISTL_OVLP_AMG_DG_BACKEND_HH 2 #define DUNE_PDELAB_BACKEND_ISTL_OVLP_AMG_DG_BACKEND_HH 4 #include <dune/common/parametertree.hh> 5 #include <dune/common/power.hh> 7 #include <dune/istl/matrixmatrix.hh> 9 #include <dune/grid/common/datahandleif.hh> 32 :
public Dune::CommDataHandleIF<LocalGlobalMapDataHandle<GFS>,int>
36 typedef typename GFS::Traits::GridView
GV;
39 typedef typename GV::Grid
Grid;
41 typedef typename GlobalIdSet::IdType
IdType;
66 template<
class EntityType>
67 size_t size (EntityType&
e)
const 73 template<
class MessageBuffer,
class EntityType>
74 void gather (MessageBuffer& buff,
const EntityType&
e)
const 77 IndexType myindex = indexSet.index(e);
78 IdType myid = globalIdSet.id(e);
90 template<
class MessageBuffer,
class EntityType>
91 void scatter (MessageBuffer& buff,
const EntityType&
e,
size_t n)
96 IndexType myindex = indexSet.index(e);
97 IdType myid = globalIdSet.id(e);
105 : gfs(gfs_), gv(gfs.gridView()), indexSet(gv.indexSet()),
106 grid(gv.grid()), globalIdSet(grid.globalIdSet()),
114 const IndexSet& indexSet;
116 const GlobalIdSet& globalIdSet;
117 LocalToGlobalMap& l2g;
118 GlobalToLocalMap& g2l;
123 template<
class GFS,
class M>
125 :
public Dune::CommDataHandleIF<MatrixExchangeDataHandle<GFS,M>,
126 std::pair<typename GFS::Traits::GridView::Grid::Traits::GlobalIdSet::IdType,
127 typename M::block_type> >
131 typedef typename GFS::Traits::GridView
GV;
134 typedef typename GV::Grid
Grid;
136 typedef typename GlobalIdSet::IdType
IdType;
139 typedef typename M::block_type
B;
164 template<
class EntityType>
167 IndexType myindex = indexSet.index(e);
168 typename M::row_type myrow = m[myindex];
169 typename M::row_type::iterator endit=myrow.end();
171 for (
typename M::row_type::iterator it=myrow.begin(); it!=endit; ++it)
173 typename LocalToGlobalMap::const_iterator find=l2g.find(it.index());
184 template<
class MessageBuffer,
class EntityType>
185 void gather (MessageBuffer& buff,
const EntityType&
e)
const 187 IndexType myindex = indexSet.index(e);
189 typename M::row_type myrow = m[myindex];
190 typename M::row_type::iterator endit=myrow.end();
192 for (
typename M::row_type::iterator it=myrow.begin(); it!=endit; ++it)
194 typename LocalToGlobalMap::const_iterator find=l2g.find(it.index());
197 buff.write(std::make_pair(find->second,*it));
209 template<
class MessageBuffer,
class EntityType>
210 void scatter (MessageBuffer& buff,
const EntityType&
e,
size_t n)
212 IndexType myindex = indexSet.index(e);
213 std::cout << gv.comm().rank() <<
": begin scatter local=" << myindex <<
" size=" << n << std::endl;
216 for (
size_t i=0; i<n; ++i)
219 std::cout << gv.comm().rank() <<
": --> received global=" << x.first << std::endl;
220 typename GlobalToLocalMap::const_iterator find=g2l.find(x.first);
223 IndexType nbindex=find->second;
224 if (m.exists(myindex,nbindex))
226 m[myindex][nbindex] = x.second;
228 block -= m2[myindex][nbindex];
229 std::cout << gv.comm().rank() <<
": compare i=" << myindex <<
" j=" << nbindex
230 <<
" norm=" << block.infinity_norm() << std::endl;
242 : gfs(gfs_), m(m_), gv(gfs.gridView()), indexSet(gv.indexSet()),
243 grid(gv.grid()), globalIdSet(grid.globalIdSet()),
244 l2g(l2g_), g2l(g2l_), m2(m2_)
252 const IndexSet& indexSet;
254 const GlobalIdSet& globalIdSet;
255 const LocalToGlobalMap& l2g;
256 const GlobalToLocalMap& g2l;
263 template<
class GFS,
class T,
class A,
int n,
int m>
265 Dune::BCRSMatrix<Dune::FieldMatrix<T,n,m>,A>& matrix2)
267 typedef Dune::FieldMatrix<T,n,m> B;
268 typedef Dune::BCRSMatrix<B,A> M;
273 LocalToGlobalMap l2g;
274 GlobalToLocalMap g2l;
276 if (gfs.gridView().comm().size()>1)
277 gfs.gridView().communicate(lgdh,Dune::InteriorBorder_All_Interface,Dune::ForwardCommunication);
281 if (gfs.gridView().comm().size()>1)
282 gfs.gridView().communicate(mexdh,Dune::InteriorBorder_All_Interface,Dune::ForwardCommunication);
298 template<
class DGGFS,
class DGMatrix,
class DGPrec,
class DGCC,
299 class CGGFS,
class CGPrec,
class CGCC,
300 class P,
class DGHelper,
class Comm>
302 :
public Dune::Preconditioner<Dune::PDELab::Backend::Vector<DGGFS,typename DGPrec::domain_type::field_type>,
303 Dune::PDELab::Backend::Vector<DGGFS,typename DGPrec::range_type::field_type>>
313 const DGHelper& dghelper;
328 return SolverCategory::overlapping;
338 OvlpDGAMGPrec (
const DGGFS& dggfs_, DGMatrix& dgmatrix_, DGPrec& dgprec_,
const DGCC& dgcc_,
339 const CGGFS& cggfs_, CGPrec& cgprec_,
const CGCC& cgcc_, P& p_,
340 const DGHelper& dghelper_,
const Comm& comm_,
int n1_,
int n2_)
341 : dggfs(dggfs_), dgmatrix(dgmatrix_), dgprec(dgprec_), dgcc(dgcc_),
342 cggfs(cggfs_), cgprec(cgprec_), cgcc(cgcc_), p(p_), dghelper(dghelper_),
343 comm(comm_), n1(n1_), n2(n2_)
352 virtual void pre (
V& x,
W& b)
override 366 virtual void apply (
V& x,
const W& b)
override 375 for (
int i=0; i<n1; i++)
381 if (dggfs.gridView().comm().size()>1)
382 dggfs.gridView().communicate(adddh,Dune::All_All_Interface,Dune::ForwardCommunication);
389 dghelper.maskForeignDOFs(d);
393 if (cggfs.gridView().comm().size()>1)
394 cggfs.gridView().communicate(adddh,Dune::All_All_Interface,Dune::ForwardCommunication);
396 comm.project(
native(cgd));
410 for (
int i=0; i<n2; i++)
415 if (dggfs.gridView().comm().size()>1)
416 dggfs.gridView().communicate(adddh,Dune::All_All_Interface,Dune::ForwardCommunication);
452 template<
class DGGO,
class DGCC,
class CGGFS,
class CGCC,
class TransferLOP,
453 template<
class,
class,
class,
int>
class DGPrec,
template<
class>
class Solver,
int s=96>
460 typedef typename DGGO::Traits::TrialGridFunctionSpace
GFS;
463 typedef typename DGGO::Traits::Jacobian
M;
464 typedef typename DGGO::Traits::Domain
V;
482 typedef typename Dune::TransposedMatMultMatResult<P,Matrix>::type
PTADG;
483 typedef typename Dune::MatMultMatResult<PTADG,P>::type
CGMatrix;
487 typedef Dune::OverlappingSchwarzOperator<CGMatrix,CGVector,CGVector,Comm>
ParCGOperator;
488 typedef Dune::SeqSSOR<CGMatrix,CGVector,CGVector,1>
Smoother;
489 typedef Dune::BlockPreconditioner<CGVector,CGVector,Comm,Smoother>
ParSmoother;
490 typedef Dune::Amg::AMG<ParCGOperator,CGVector,ParSmoother,Comm>
AMG;
500 std::shared_ptr<AMG> amg;
501 Parameters amg_parameters;
507 std::size_t low_order_space_entries_per_row;
542 amg_parameters = amg_parameters_;
554 return amg_parameters;
572 unsigned maxiter_=5000,
int verbose_=1,
bool reuse_=
false,
573 bool usesuperlu_=
true)
575 , gfs(dggo_.trialGridFunctionSpace())
580 , amg_parameters(15,2000)
585 , usesuperlu(usesuperlu_)
586 , low_order_space_entries_per_row(StaticPower<3,GFS::Traits::GridView::dimension>::power)
588 , pgo(cggfs,dggo.trialGridFunctionSpace(),cgtodglop,MBE(low_order_space_entries_per_row))
590 , acg(Backend::attached_container())
592 amg_parameters.setDefaultValuesIsotropic(GFS::Traits::GridViewType::Traits::Grid::dimension);
593 amg_parameters.setDebugLevel(verbose_);
595 if (usesuperlu ==
true)
597 if (gfs.gridView().comm().rank()==0)
598 std::cout <<
"WARNING: You are using AMG without SuperLU!" 599 <<
" Please consider installing SuperLU," 600 <<
" or set the usesuperlu flag to false" 601 <<
" to suppress this warning." << std::endl;
607 if (verbose>0 && gfs.gridView().comm().rank()==0) std::cout <<
"allocated prolongation matrix of size " << pmatrix.N() <<
" x " << pmatrix.M() << std::endl;
616 const ParameterTree& params)
618 , gfs(dggo_.trialGridFunctionSpace())
623 , maxiter(params.get<int>(
"max_iterations",5000))
624 , amg_parameters(15,2000)
625 , verbose(params.get<int>(
"verbose",1))
626 , reuse(params.get<bool>(
"reuse",false))
628 , usesuperlu(params.get<bool>(
"use_superlu",true))
629 , low_order_space_entries_per_row(params.get<
std::size_t>(
"low_order_space.entries_per_row",StaticPower<3,GFS::Traits::GridView::dimension>::power))
631 , pgo(cggfs,dggo.trialGridFunctionSpace(),cgtodglop,MBE(low_order_space_entries_per_row))
633 , acg(Backend::attached_container())
635 amg_parameters.setDefaultValuesIsotropic(GFS::Traits::GridViewType::Traits::Grid::dimension);
636 amg_parameters.setDebugLevel(params.get<
int>(
"verbose",1));
638 if (usesuperlu ==
true)
640 if (gfs.gridView().comm().rank()==0)
641 std::cout <<
"WARNING: You are using AMG without SuperLU!" 642 <<
" Please consider installing SuperLU," 643 <<
" or set the usesuperlu flag to false" 644 <<
" to suppress this warning." << std::endl;
650 if (verbose>0 && gfs.gridView().comm().rank()==0) std::cout <<
"allocated prolongation matrix of size " << pmatrix.N() <<
" x " << pmatrix.M() << std::endl;
663 void apply (M& A, V& z, V& r,
typename Dune::template FieldTraits<typename V::ElementType >::real_type reduction)
675 CGGO cggo(cggfs,cgcc,cggfs,cgcc,emptylop,MBE(low_order_space_entries_per_row));
681 double triple_product_time = 0.0;
683 if(reuse ==
false || firstapply ==
true) {
685 Dune::transposeMatMultMat(ptadg,
native(pmatrix),
native(A));
688 triple_product_time = watch.elapsed();
689 if (verbose>0 && gfs.gridView().comm().rank()==0)
690 std::cout <<
"=== triple matrix product " << triple_product_time <<
" s" << std::endl;
696 else if(verbose>0 && gfs.gridView().comm().rank()==0)
697 std::cout <<
"=== reuse CG matrix, SKIPPING triple matrix product " << std::endl;
701 DGGOEmpty dggoempty(gfs,dgcc,gfs,dgcc,emptylop,MBE(1 << GFS::Traits::GridView::dimension));
702 dggoempty.jacobian(z,A);
708 Comm oocc(gfs.gridView().comm());
710 CGHELPER cghelper(cggfs,2);
711 cghelper.createIndexSetAndProjectForAMG(acg,oocc);
712 ParCGOperator paroop(
native(acg),oocc);
713 Dune::OverlappingSchwarzScalarProduct<CGVector,Comm> sp(oocc);
715 typedef typename Dune::Amg::SmootherTraits<ParSmoother>::Arguments SmootherArgs;
716 SmootherArgs smootherArgs;
717 smootherArgs.iterations = 1;
718 smootherArgs.relaxationFactor = 1.0;
719 typedef Dune::Amg::CoarsenCriterion<Dune::Amg::SymmetricCriterion<CGMatrix,Dune::Amg::FirstDiagonal> > Criterion;
720 Criterion criterion(amg_parameters);
724 double amg_setup_time = 0.0;
725 if(reuse ==
false || firstapply ==
true) {
726 amg.reset(
new AMG(paroop,criterion,smootherArgs,oocc));
728 amg_setup_time = watch.elapsed();
729 if (verbose>0 && gfs.gridView().comm().rank()==0)
730 std::cout <<
"=== AMG setup " <<amg_setup_time <<
" s" << std::endl;
732 else if (verbose>0 && gfs.gridView().comm().rank()==0)
733 std::cout <<
"=== reuse CG matrix, SKIPPING AMG setup " << std::endl;
736 typedef DGPrec<Matrix,Vector,Vector,1> DGPrecType;
737 DGPrecType dgprec(
native(A),1,0.92);
741 HybridPrec hybridprec(gfs,
native(A),dgprec,dgcc,cggfs,*amg,cgcc,
native(pmatrix),
742 this->parallelHelper(),oocc,3,3);
756 if (gfs.gridView().comm().rank()>0) verb=0;
757 Solver<V> solver(pop,psp,hybridprec,reduction,maxiter,verb);
760 Dune::InverseOperatorResult stat;
762 solver.apply(z,r,stat);
763 double amg_solve_time = watch.elapsed();
764 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;
765 res.converged = stat.converged;
766 res.iterations = stat.iterations;
767 res.elapsed = amg_solve_time+amg_setup_time+triple_product_time;
768 res.reduction = stat.reduction;
769 res.conv_rate = stat.conv_rate;
775 #endif // DUNE_PDELAB_BACKEND_ISTL_OVLP_AMG_DG_BACKEND_HH Dune::PDELab::Backend::Matrix< MB, Domain, Range, JF > Jacobian
The type of the jacobian.
Definition: gridoperator.hh:47
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:57
Definition: ovlp_amg_dg_backend.hh:454
static const int dim
Definition: adaptivity.hh:84
LocalGlobalMapDataHandle(const GFS &gfs_, LocalToGlobalMap &l2g_, GlobalToLocalMap &g2l_)
constructor
Definition: ovlp_amg_dg_backend.hh:104
const Entity & e
Definition: localfunctionspace.hh:120
void set_constrained_dofs(const CG &cg, typename XG::ElementType x, XG &xg)
construct constraints from given boundary condition function
Definition: constraints.hh:798
Definition: ovlpistlsolverbackend.hh:383
Dune::PDELab::Backend::Vector< CGGFS, field_type > CGV
Definition: ovlp_amg_dg_backend.hh:470
Default flags for all local operators.
Definition: flags.hh:18
void scatter(MessageBuffer &buff, const EntityType &e, size_t n)
Definition: ovlp_amg_dg_backend.hh:210
void scatter(MessageBuffer &buff, const EntityType &e, size_t n)
Definition: ovlp_amg_dg_backend.hh:91
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
Dune::PDELab::Backend::Vector< CGGFS, typename CGPrec::range_type::field_type > CGW
Definition: ovlp_amg_dg_backend.hh:323
DGGO::Traits::Jacobian M
Definition: ovlp_amg_dg_backend.hh:463
ISTLBackend_OVLP_AMG_4_DG(DGGO &dggo_, const DGCC &dgcc_, CGGFS &cggfs_, const CGCC &cgcc_, const ParameterTree ¶ms)
Definition: ovlp_amg_dg_backend.hh:615
IndexSet::IndexType IndexType
Definition: ovlp_amg_dg_backend.hh:133
Backend using (possibly nested) ISTL BCRSMatrices.
Definition: bcrsmatrixbackend.hh:187
TransferLOP CGTODGLOP
Definition: ovlp_amg_dg_backend.hh:476
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:338
typename impl::BackendVectorSelector< GridFunctionSpace, FieldType >::Type Vector
alias of the return type of BackendVectorSelector
Definition: backend/interface.hh:106
GFS::Traits::GridView GV
Definition: ovlp_amg_dg_backend.hh:36
GlobalIdSet::IdType IdType
Definition: ovlp_amg_dg_backend.hh:41
Definition: constraintstransformation.hh:111
size_t size(EntityType &e) const
Definition: ovlp_amg_dg_backend.hh:165
Default class for additional methods in instationary local operators.
Definition: idefault.hh:89
DGGO::Traits::TrialGridFunctionSpace GFS
Definition: ovlp_amg_dg_backend.hh:460
Definition: ovlp_amg_dg_backend.hh:31
Dune::PDELab::ISTL::CommSelector< s, Dune::MPIHelper::isFake >::type Comm
Definition: ovlp_amg_dg_backend.hh:486
sparsity pattern generator
Definition: pattern.hh:13
GV::Grid Grid
Definition: ovlp_amg_dg_backend.hh:134
Dune::MatMultMatResult< PTADG, P >::type CGMatrix
Definition: ovlp_amg_dg_backend.hh:483
GV::IndexSet IndexSet
Definition: ovlp_amg_dg_backend.hh:37
std::map< IdType, IndexType > GlobalToLocalMap
Definition: ovlp_amg_dg_backend.hh:146
Dune::Amg::AMG< ParCGOperator, CGVector, ParSmoother, Comm > AMG
Definition: ovlp_amg_dg_backend.hh:490
GlobalIdSet::IdType IdType
Definition: ovlp_amg_dg_backend.hh:136
Definition: ovlpistlsolverbackend.hh:41
Dune::BlockPreconditioner< CGVector, CGVector, Comm, Smoother > ParSmoother
Definition: ovlp_amg_dg_backend.hh:489
const Parameters & parameters() const
Get the parameters describing the behaviuour of AMG.
Definition: ovlp_amg_dg_backend.hh:552
Definition: ovlp_amg_dg_backend.hh:301
Dune::Amg::SequentialInformation type
Definition: parallelhelper.hh:429
Dune::OverlappingSchwarzOperator< CGMatrix, CGVector, CGVector, Comm > ParCGOperator
Definition: ovlp_amg_dg_backend.hh:487
std::pair< IdType, B > DataType
export type of data for message buffer
Definition: ovlp_amg_dg_backend.hh:142
size_t size(EntityType &e) const
Definition: ovlp_amg_dg_backend.hh:67
Dune::TransposedMatMultMatResult< P, Matrix >::type PTADG
Definition: ovlp_amg_dg_backend.hh:482
bool getReuse() const
Return whether the AMG is reused during call to apply()
Definition: ovlp_amg_dg_backend.hh:564
M::block_type B
Definition: ovlp_amg_dg_backend.hh:139
Definition: parallelhelper.hh:50
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:155
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:663
Backend::Native< PMatrix > P
Definition: ovlp_amg_dg_backend.hh:479
IndexSet::IndexType IndexType
Definition: ovlp_amg_dg_backend.hh:38
Backend::Native< W > Y
Definition: ovlp_amg_dg_backend.hh:321
Vector::field_type field_type
Definition: ovlp_amg_dg_backend.hh:467
For backward compatibility – Do not use this!
Definition: adaptivity.hh:28
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:264
MatrixExchangeDataHandle(const GFS &gfs_, M &m_, const LocalToGlobalMap &l2g_, const GlobalToLocalMap &g2l_, M &m2_)
constructor
Definition: ovlp_amg_dg_backend.hh:241
void setParameters(const Parameters &amg_parameters_)
set AMG parameters
Definition: ovlp_amg_dg_backend.hh:540
Grid::Traits::GlobalIdSet GlobalIdSet
Definition: ovlp_amg_dg_backend.hh:40
Grid::Traits::GlobalIdSet GlobalIdSet
Definition: ovlp_amg_dg_backend.hh:135
virtual void apply(V &x, const W &b) override
Apply the precondioner.
Definition: ovlp_amg_dg_backend.hh:366
GV::IndexSet IndexSet
Definition: ovlp_amg_dg_backend.hh:132
Implements linear and nonlinear versions of jacobian_apply_volume() based on alpha_volume() ...
Definition: numericaljacobianapply.hh:32
GFS::Traits::GridView GV
Definition: ovlp_amg_dg_backend.hh:131
bool contains(int dim, int codim) const
returns true if data for this codim should be communicated
Definition: ovlp_amg_dg_backend.hh:51
virtual void pre(V &x, W &b) override
Prepare the preconditioner.
Definition: ovlp_amg_dg_backend.hh:352
void gather(MessageBuffer &buff, const EntityType &e) const
pack data from user to message buffer
Definition: ovlp_amg_dg_backend.hh:185
Backend::Native< M > Matrix
Definition: ovlp_amg_dg_backend.hh:465
void setReuse(bool reuse_)
Set whether the AMG should be reused again during call to apply().
Definition: ovlp_amg_dg_backend.hh:558
void gather(MessageBuffer &buff, const EntityType &e) const
pack data from user to message buffer
Definition: ovlp_amg_dg_backend.hh:74
Dune::SeqSSOR< CGMatrix, CGVector, CGVector, 1 > Smoother
Definition: ovlp_amg_dg_backend.hh:488
Dune::PDELab::GridOperator< CGGFS, GFS, CGTODGLOP, MBE, field_type, field_type, field_type, CC, CC > PGO
Definition: ovlp_amg_dg_backend.hh:477
Dune::PDELab::Backend::Vector< DGGFS, typename DGPrec::range_type::field_type > W
Definition: ovlp_amg_dg_backend.hh:319
Dune::PDELab::ISTL::BCRSMatrixBackend MBE
Definition: ovlp_amg_dg_backend.hh:474
void jacobian(const Domain &x, Jacobian &a) const
Assembler jacobian.
Definition: gridoperator.hh:180
SolverCategory::Category category() const override
Definition: ovlp_amg_dg_backend.hh:326
Dune::PDELab::EmptyTransformation CC
Definition: ovlp_amg_dg_backend.hh:475
Dune::PDELab::Backend::Vector< CGGFS, typename CGPrec::domain_type::field_type > CGV
Definition: ovlp_amg_dg_backend.hh:322
Dune::PDELab::Backend::Vector< DGGFS, typename DGPrec::domain_type::field_type > V
Definition: ovlp_amg_dg_backend.hh:318
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:571
Backend::Native< CGV > CGVector
Definition: ovlp_amg_dg_backend.hh:471
Backend::Native< V > Vector
Definition: ovlp_amg_dg_backend.hh:466
Dune::Amg::Parameters Parameters
Definition: ovlp_amg_dg_backend.hh:491
Definition: genericdatahandle.hh:665
PMatrix & prolongation_matrix()
Definition: ovlp_amg_dg_backend.hh:531
int DataType
export type of data for message buffer
Definition: ovlp_amg_dg_backend.hh:44
DGGO::Traits::Domain V
Definition: ovlp_amg_dg_backend.hh:464
std::map< IdType, IndexType > GlobalToLocalMap
Definition: ovlp_amg_dg_backend.hh:48
virtual void post(V &x) override
Clean up.
Definition: ovlp_amg_dg_backend.hh:428
bool contains(int dim, int codim) const
returns true if data for this codim should be communicated
Definition: ovlp_amg_dg_backend.hh:149
Definition: ovlp_amg_dg_backend.hh:124
Definition: ovlpistlsolverbackend.hh:432
std::map< IndexType, IdType > LocalToGlobalMap
Definition: ovlp_amg_dg_backend.hh:47
const P & p
Definition: constraints.hh:147
std::enable_if< std::is_base_of< impl::WrapperBase, T >::value, Native< T > &>::type native(T &t)
Definition: backend/interface.hh:192
std::map< IndexType, IdType > LocalToGlobalMap
Definition: ovlp_amg_dg_backend.hh:145
const std::string s
Definition: function.hh:830
GV::Grid Grid
Definition: ovlp_amg_dg_backend.hh:39
Backend::Native< V > X
Definition: ovlp_amg_dg_backend.hh:320
PGO::Jacobian PMatrix
Definition: ovlp_amg_dg_backend.hh:478