2 #ifndef DUNE_PDELAB_BACKEND_ISTL_CG_TO_DG_PROLONGATION_HH 3 #define DUNE_PDELAB_BACKEND_ISTL_CG_TO_DG_PROLONGATION_HH 8 #include <dune/common/exceptions.hh> 9 #include <dune/common/fvector.hh> 11 #include <dune/geometry/quadraturerules.hh> 13 #include <dune/localfunctions/common/interfaceswitch.hh> 15 #include <dune/typetree/pairtraversal.hh> 16 #include <dune/typetree/transformation.hh> 17 #include <dune/typetree/visitor.hh> 32 namespace CG2DGHelper {
34 template <
typename Imp>
36 typedef typename Imp::Traits::FiniteElementType::
37 Traits::LocalBasisType::Traits::RangeType
RangeType;
38 typedef typename Imp::Traits::FiniteElementType::
43 template<
typename Imp>
49 typedef typename Imp::Traits::FiniteElementType FEM;
50 typedef FiniteElementInterfaceSwitch<FEM> FESwitch;
51 typedef BasisInterfaceSwitch<typename FESwitch::Basis > BasisSwitch;
52 typedef typename BasisSwitch::DomainField DF;
53 typedef typename BasisSwitch::Range RT;
54 enum {
dim = BasisSwitch::dimDomainLocal };
58 _imp(imp), _comp(comp) {}
60 void evaluate(
const Dune::FieldVector<DF,dim> & x,
61 Dune::FieldVector<DF,1> & y)
const 64 _imp.finiteElement().localBasis().evaluateFunction(x,v);
71 public TypeTree::DefaultPairVisitor,
72 public TypeTree::DynamicTraversal,
73 public TypeTree::VisitTree
82 template<
typename LFSU,
typename LFSV,
typename TreePath>
83 void leaf(
const LFSU& lfsu,
const LFSV& lfsv, TreePath treePath)
const 86 typedef typename LFSV::Traits::FiniteElementType DG_FEM;
87 typedef FiniteElementInterfaceSwitch<DG_FEM> FESwitch;
88 typedef BasisInterfaceSwitch<typename FESwitch::Basis > BasisSwitch;
89 typedef typename BasisSwitch::DomainField DF;
91 for (
unsigned int i=0; i<lfsu.size(); i++)
96 FESwitch::interpolation(lfsv.finiteElement()).
99 for (
unsigned int j=0; j<lfsv.size(); j++)
101 _mat(lfsv,j,lfsu,i) = v[j];
115 template<
typename LFSU,
typename LFSV,
typename R>
116 void computeCG2DG(
const LFSU & lfsu,
const LFSV & lfsv,
122 TypeTree::applyToTreePair(lfsu, lfsv, cg2dg);
126 enum { doPatternVolume =
true };
129 enum { doAlphaVolume =
true };
138 template<
typename EG,
typename LFSU,
typename X,
typename LFSV,
typename M>
142 computeCG2DG(lfsu, lfsv, mat.container());
150 #endif // DUNE_PDELAB_BACKEND_ISTL_CG_TO_DG_PROLONGATION_HH Definition: cg_to_dg_prolongation.hh:35
WrappedLocalShapeFunction(const Imp &imp, int comp)
Definition: cg_to_dg_prolongation.hh:57
static const int dim
Definition: adaptivity.hh:83
Imp::Traits::FiniteElementType::Traits::LocalBasisType::Traits::DomainType DomainType
Definition: cg_to_dg_prolongation.hh:39
ComputeCG2DGVisitor(LocalMatrix< R > &mat)
Definition: cg_to_dg_prolongation.hh:78
void interpolate(const F &f, const GFS &gfs, XG &xg)
interpolation from a given grid function
Definition: interpolate.hh:204
Imp::Traits::FiniteElementType::Traits::LocalBasisType::Traits::RangeType RangeType
Definition: cg_to_dg_prolongation.hh:37
Default class for additional methods in instationary local operators.
Definition: idefault.hh:89
For backward compatibility – Do not use this!
Definition: adaptivity.hh:27
WrappedLocalShapeFunction< Imp > Traits
Definition: cg_to_dg_prolongation.hh:56
Definition: cg_to_dg_prolongation.hh:70
void leaf(const LFSU &lfsu, const LFSV &lfsv, TreePath treePath) const
Definition: cg_to_dg_prolongation.hh:83
CG2DGProlongation()
Definition: cg_to_dg_prolongation.hh:131
void evaluate(const Dune::FieldVector< DF, dim > &x, Dune::FieldVector< DF, 1 > &y) const
Definition: cg_to_dg_prolongation.hh:60
void jacobian_volume(const EG &, const LFSU &lfsu, const X &, const LFSV &lfsv, M &mat) const
Definition: cg_to_dg_prolongation.hh:139
sparsity pattern generator
Definition: pattern.hh:13
Definition: cg_to_dg_prolongation.hh:44
Default flags for all local operators.
Definition: flags.hh:18
Definition: cg_to_dg_prolongation.hh:110