1 #ifndef DUNE_PDELAB_DEFAULT_ASSEMBLER_HH
2 #define DUNE_PDELAB_DEFAULT_ASSEMBLER_HH
4 #include <dune/common/typetraits.hh>
22 template<
typename GFSU,
typename GFSV,
typename CU,
typename CV,
bool nonoverlapping_mode=false>
28 typedef typename GFSU::Traits::GridViewType
GV;
30 typedef typename GV::Traits::template Codim<0>::Entity
Element;
42 typedef typename GFSU::Traits::SizeType
SizeType;
87 template<
class LocalAssemblerEngine>
90 typedef typename GV::Traits::template Codim<0>::Entity
Element;
96 const bool needs_constraints_caching = assembler_engine.needsConstraintsCaching(cu,cv);
98 LFSUCache lfsu_cache(lfsu,cu,needs_constraints_caching);
99 LFSVCache lfsv_cache(lfsv,cv,needs_constraints_caching);
100 LFSUCache lfsun_cache(lfsun,cu,needs_constraints_caching);
101 LFSVCache lfsvn_cache(lfsvn,cv,needs_constraints_caching);
121 for (ElementIterator it = gfsu.gridView().template begin<0>();
122 it!=gfsu.gridView().template end<0>(); ++it)
125 const typename GV::IndexSet::IndexType ids = cell_mapper.map(*it);
147 assembler_engine.
onBindLFSUV(eg,lfsu_cache,lfsv_cache);
156 if (require_uv_skeleton || require_v_skeleton ||
157 require_uv_boundary || require_v_boundary ||
158 require_uv_processor || require_v_processor)
161 unsigned int intersection_index = 0;
162 IntersectionIterator endit = gfsu.gridView().iend(*it);
163 IntersectionIterator iit = gfsu.gridView().ibegin(*it);
164 for(; iit!=endit; ++iit, ++intersection_index)
175 if (require_uv_skeleton || require_v_skeleton)
179 const typename GV::IndexSet::IndexType idn = cell_mapper.map(iit->outside());
182 bool visit_face = ids > idn || require_skeleton_two_sided;
188 lfsvn.bind(iit->outside());
189 lfsvn_cache.update();
197 if(require_uv_skeleton){
200 lfsun.bind(iit->outside());
201 lfsun_cache.update();
205 lfsu_cache,lfsv_cache,
206 lfsun_cache,lfsvn_cache);
212 assembler_engine.
assembleUVSkeleton(ig,lfsu_cache,lfsv_cache,lfsun_cache,lfsvn_cache);
216 lfsu_cache,lfsv_cache,
217 lfsun_cache,lfsvn_cache);
227 if(require_uv_boundary || require_v_boundary )
233 if(require_uv_boundary){
241 if(require_uv_processor || require_v_processor )
247 if(require_uv_processor){
258 if(require_uv_post_skeleton || require_v_post_skeleton){
262 if(require_uv_post_skeleton){
287 typename conditional<
292 typename conditional<
Class providing a consecutive index for codim 0 entities of a GridView.
Definition: elementmapper.hh:113
const GFSV & testGridFunctionSpace() const
Get the test grid function space.
Definition: default/assembler.hh:76
The assembler for standard DUNE grid.
Definition: default/assembler.hh:23
void assembleUVSkeleton(const IG &ig, const LFSU_S &lfsu_s, const LFSV_S &lfsv_s, const LFSU_N &lfsu_n, const LFSV_N &lfsv_n)
void postAssembly()
Called last thing after assembling.
domain boundary intersection (neighbor() == false && boundary() == true)
Definition: assemblerutilities.hh:88
void assembleUVVolumePostSkeleton(const EG &eg, const LFSU &lfsu, const LFSV &lfsv)
void onUnbindLFSUV(const EG &eg, const LFSU_S &lfsu_s, const LFSV_S &lfsv_s)
static const bool isGalerkinMethod
Static check on whether this is a Galerkin method.
Definition: default/assembler.hh:45
DefaultAssembler(const GFSU &gfsu_, const GFSV &gfsv_, const CU &cu_, const CV &cv_)
Definition: default/assembler.hh:47
periodic boundary intersection (neighbor() == true && boundary() == true)
Definition: assemblerutilities.hh:89
bool requireVVolumePostSkeleton() const
void assembleUVProcessor(const IG &ig, const LFSU_S &lfsu_s, const LFSV_S &lfsv_s)
Wrap element.
Definition: geometrywrapper.hh:15
GFSU TrialGridFunctionSpace
Definition: default/assembler.hh:37
const GFSU & trialGridFunctionSpace() const
Get the trial grid function space.
Definition: default/assembler.hh:70
void assembleUVBoundary(const IG &ig, const LFSU_S &lfsu_s, const LFSV_S &lfsv_s)
const IG & ig
Definition: constraints.hh:147
bool requireVSkeleton() const
static const unsigned int value
Definition: gridfunctionspace/tags.hh:175
void onUnbindLFSVOutside(const IG &ig, const LFSV_S &lfsv_s, const LFSV_N &lfsv_n)
void assembleVVolume(const EG &eg, const LFSV &lfsv)
void onBindLFSV(const EG &eg, const LFSV_S &lfsv_s)
void onBindLFSUVOutside(const IG &ig, const LFSU_S &lfsu_s, const LFSV_S &lfsv_s, const LFSU_N &lfsu_n, const LFSV_N &lfsv_n)
bool requireUVVolumePostSkeleton() const
bool requireUVBoundary() const
void loadCoefficientsLFSUInside(const LFSU_S &lfsu_s)
void assembleUVVolume(const EG &eg, const LFSU &lfsu, const LFSV &lfsv)
void assembleVVolumePostSkeleton(const EG &eg, const LFSV &lfsv)
bool requireUVSkeleton() const
GV::Traits::template Codim< 0 >::Iterator ElementIterator
Definition: default/assembler.hh:29
The local assembler engine which handles the integration parts as provided by the global assemblers...
Definition: common/assembler.hh:31
IntersectionIterator::Intersection Intersection
Definition: default/assembler.hh:32
Definition: adaptivity.hh:27
Wrap intersection.
Definition: geometrywrapper.hh:56
void onUnbindLFSV(const EG &eg, const LFSV_S &lfsv_s)
void assembleVProcessor(const IG &ig, const LFSV_S &lfsv_s)
bool requireVBoundary() const
void assembleVSkeleton(const IG &ig, const LFSV_S &lfsv_s, const LFSV_N &lfsv_n)
GFSU::Traits::GridViewType GV
Definition: default/assembler.hh:28
void onBindLFSUV(const EG &eg, const LFSU_S &lfsu_s, const LFSV_S &lfsv_s)
void loadCoefficientsLFSUOutside(const LFSU_N &lfsu_n)
void assembleVBoundary(const IG &ig, const LFSV_S &lfsv_s)
GV::Traits::template Codim< 0 >::Entity Element
Definition: default/assembler.hh:30
void onUnbindLFSUVOutside(const IG &ig, const LFSU_S &lfsu_s, const LFSV_S &lfsv_s, const LFSU_N &lfsu_n, const LFSV_N &lfsv_n)
skeleton intersection (neighbor() == true && boundary() == false)
Definition: assemblerutilities.hh:87
processor boundary intersection (neighbor() == false && boundary() == false)
Definition: assemblerutilities.hh:86
GV::IntersectionIterator IntersectionIterator
Definition: default/assembler.hh:31
Definition: lfsindexcache.hh:948
bool assembleCell(const EG &eg)
void assemble(LocalAssemblerEngine &assembler_engine) const
Definition: default/assembler.hh:88
GFSV TestGridFunctionSpace
Definition: default/assembler.hh:38
void preAssembly()
Called directly before assembling.
bool requireSkeletonTwoSided() const
DefaultAssembler(const GFSU &gfsu_, const GFSV &gfsv_)
Definition: default/assembler.hh:58
const EG & eg
Definition: constraints.hh:280
GFSU::Traits::SizeType SizeType
Size type as used in grid function space.
Definition: default/assembler.hh:42
void onBindLFSVOutside(const IG &ig, const LFSV_S &lfsv_s, const LFSV_N &lfsv_n)
static Type get(const Intersection &is)
Returns the type of the intersection.
Definition: assemblerutilities.hh:94