1 #ifndef DUNE_ONE_STEP_ENGINEBASE_HH 2 #define DUNE_ONE_STEP_ENGINEBASE_HH 14 template<
typename OSLA,
typename LAE0,
typename LAE1>
21 typedef typename LAE0::Traits
Traits;
23 template<
typename TrialConstra
intsContainer,
typename TestConstra
intsContainer>
27 lae0->needsConstraintsCaching(cu,cv) ||
28 lae1->needsConstraintsCaching(cu,cv);
42 typedef typename OSLA::Real
Real;
53 : invalid_lae0(static_cast<LocalAssemblerEngineDT0*>(0)),
54 invalid_lae1(static_cast<LocalAssemblerEngineDT1*>(0)),
56 lae0(invalid_lae0),
lae1(invalid_lae1),
65 {
return lae0->requireSkeletonTwoSided() ||
lae1->requireSkeletonTwoSided(); }
67 {
return lae0->requireUVVolume() ||
lae1->requireUVVolume(); }
69 {
return lae0->requireVVolume() ||
lae1->requireVVolume(); }
71 {
return lae0->requireUVSkeleton() ||
lae1->requireUVSkeleton(); }
73 {
return lae0->requireVSkeleton() ||
lae1->requireVSkeleton(); }
75 {
return lae0->requireUVBoundary() ||
lae1->requireUVBoundary(); }
77 {
return lae0->requireVBoundary() ||
lae1->requireVBoundary(); }
79 {
return lae0->requireUVProcessor() ||
lae1->requireUVProcessor(); }
81 {
return lae0->requireVProcessor() ||
lae1->requireVProcessor(); }
83 {
return lae0->requireUVEnrichedCoupling() ||
lae1->requireUVEnrichedCoupling(); }
85 {
return lae0->requireVEnrichedCoupling() ||
lae1->requireVEnrichedCoupling(); }
87 {
return lae0->requireUVVolumePostSkeleton() ||
lae1->requireUVVolumePostSkeleton();}
89 {
return lae0->requireVVolumePostSkeleton() ||
lae1->requireVVolumePostSkeleton(); }
139 template<
typename EG,
typename LFSU,
typename LFSV>
140 void onBindLFSUV(
const EG & eg,
const LFSU & lfsu,
const LFSV & lfsv){
141 lae0->onBindLFSUV(eg,lfsu,lfsv);
142 lae1->onBindLFSUV(eg,lfsu,lfsv);
145 template<
typename EG,
typename LFSV>
147 lae0->onBindLFSV(eg,lfsv);
148 lae1->onBindLFSV(eg,lfsv);
151 template<
typename IG,
typename LFSU,
typename LFSV>
153 lae0->onBindLFSUVInside(ig,lfsu,lfsv);
154 lae1->onBindLFSUVInside(ig,lfsu,lfsv);
157 template<
typename IG,
158 typename LFSU_S,
typename LFSV_S,
159 typename LFSU_N,
typename LFSV_N>
161 const LFSU_S & lfsu_s,
const LFSV_S & lfsv_s,
162 const LFSU_N & lfsu_n,
const LFSV_N & lfsv_n){
163 lae0->onBindLFSUVOutside(ig,lfsu_s,lfsv_s,lfsu_n,lfsv_n);
164 lae1->onBindLFSUVOutside(ig,lfsu_s,lfsv_s,lfsu_n,lfsv_n);
167 template<
typename IG,
typename LFSV>
169 lae0->onBindLFSVInside(ig,lfsv);
170 lae1->onBindLFSVInside(ig,lfsv);
173 template<
typename IG,
177 const LFSV_S & lfsv_s,
178 const LFSV_N & lfsv_n){
179 lae0->onBindLFSVOutside(ig,lfsv_s,lfsv_n);
180 lae1->onBindLFSVOutside(ig,lfsv_s,lfsv_n);
183 template<
typename IG,
184 typename LFSU_S,
typename LFSV_S,
185 typename LFSU_N,
typename LFSV_N,
186 typename LFSU_C,
typename LFSV_C>
188 const LFSU_S & lfsu_s,
const LFSV_S & lfsv_s,
189 const LFSU_N & lfsu_n,
const LFSV_N & lfsv_n,
190 const LFSU_C & lfsu_c,
const LFSV_C & lfsv_c){
191 lae0->onBindLFSUVCoupling(ig,
195 lae1->onBindLFSUVCoupling(ig,
201 template<
typename IG,
206 const LFSV_S & lfsv_s,
207 const LFSV_N & lfsv_n,
208 const LFSV_C & lfsv_c){
209 lae0->onBindLFSVCoupling(ig,lfsv_s,lfsv_n,lfsv_c);
210 lae1->onBindLFSVCoupling(ig,lfsv_s,lfsv_n,lfsv_c);
218 template<
typename EG,
typename LFSU,
typename LFSV>
220 lae0->onUnbindLFSUV(eg,lfsu, lfsv);
221 lae1->onUnbindLFSUV(eg,lfsu, lfsv);
224 template<
typename EG,
typename LFSV>
226 lae0->onUnbindLFSV(eg,lfsv);
227 lae1->onUnbindLFSV(eg,lfsv);
230 template<
typename IG,
typename LFSU,
typename LFSV>
232 lae0->onUnbindLFSUVInside(ig,lfsu, lfsv);
233 lae1->onUnbindLFSUVInside(ig,lfsu, lfsv);
236 template<
typename IG,
237 typename LFSU_S,
typename LFSV_S,
238 typename LFSU_N,
typename LFSV_N>
240 const LFSU_S & lfsu_s,
const LFSV_S & lfsv_s,
241 const LFSU_N & lfsu_n,
const LFSV_N & lfsv_n){
242 lae0->onUnbindLFSUVOutside(ig,lfsu_s,lfsv_s,lfsu_n,lfsv_n);
243 lae1->onUnbindLFSUVOutside(ig,lfsu_s,lfsv_s,lfsu_n,lfsv_n);
246 template<
typename IG,
typename LFSV>
248 lae0->onUnbindLFSVInside(ig,lfsv);
249 lae1->onUnbindLFSVInside(ig,lfsv);
252 template<
typename IG,
256 const LFSV_S & lfsv_s,
257 const LFSV_N & lfsv_n){
258 lae0->onUnbindLFSVOutside(ig,lfsv_s,lfsv_n);
259 lae1->onUnbindLFSVOutside(ig,lfsv_s,lfsv_n);
262 template<
typename IG,
263 typename LFSU_S,
typename LFSV_S,
264 typename LFSU_N,
typename LFSV_N,
265 typename LFSU_C,
typename LFSV_C>
267 const LFSU_S & lfsu_s,
const LFSV_S & lfsv_s,
268 const LFSU_N & lfsu_n,
const LFSV_N & lfsv_n,
269 const LFSU_C & lfsu_c,
const LFSV_C & lfsv_c){
270 lae0->onUnbindLFSUVCoupling(ig,
274 lae1->onUnbindLFSUVCoupling(ig,
280 template<
typename IG,
285 const LFSV_S & lfsv_s,
286 const LFSV_N & lfsv_n,
287 const LFSV_C & lfsv_c){
288 lae0->onUnbindLFSVCoupling(ig,lfsv_s,lfsv_n,lfsv_c);
289 lae1->onUnbindLFSVCoupling(ig,lfsv_s,lfsv_n,lfsv_c);
297 template<
typename LFSU>
299 lae0->loadCoefficientsLFSUInside(lfsu_s);
300 lae1->loadCoefficientsLFSUInside(lfsu_s);
302 template<
typename LFSU>
304 lae0->loadCoefficientsLFSUOutside(lfsu_n);
305 lae1->loadCoefficientsLFSUOutside(lfsu_n);
307 template<
typename LFSU>
309 lae0->loadCoefficientsLFSUCoupling(lfsu_c);
310 lae1->loadCoefficientsLFSUCoupling(lfsu_c);
317 template<
typename EG>
321 rv &=
lae0->assembleCell(eg);
322 rv &=
lae1->assembleCell(eg);
326 template<
typename EG,
typename LFSU,
typename LFSV>
330 lae0->assembleUVVolume(eg,lfsu,lfsv);
331 lae1->assembleUVVolume(eg,lfsu,lfsv);
334 template<
typename EG,
typename LFSV>
338 lae0->assembleVVolume(eg,lfsv);
339 lae1->assembleVVolume(eg,lfsv);
342 template<
typename IG,
typename LFSU_S,
typename LFSV_S,
typename LFSU_N,
typename LFSV_N>
344 const LFSU_N & lfsu_n,
const LFSV_N & lfsv_n)
347 lae0->assembleUVSkeleton(ig,lfsu_s,lfsv_s,lfsu_n,lfsv_n);
348 lae1->assembleUVSkeleton(ig,lfsu_s,lfsv_s,lfsu_n,lfsv_n);
351 template<
typename IG,
typename LFSV_S,
typename LFSV_N>
355 lae0->assembleVSkeleton(ig,lfsv_s,lfsv_n);
356 lae1->assembleVSkeleton(ig,lfsv_s,lfsv_n);
359 template<
typename IG,
typename LFSU_S,
typename LFSV_S>
363 lae0->assembleUVBoundary(ig,lfsu_s,lfsv_s);
364 lae1->assembleUVBoundary(ig,lfsu_s,lfsv_s);
367 template<
typename IG,
typename LFSV_S>
371 lae0->assembleVBoundary(ig,lfsv_s);
372 lae1->assembleVBoundary(ig,lfsv_s);
375 template<
typename IG,
typename LFSU_S,
typename LFSV_S>
379 lae0->assembleUVProcessor(ig,lfsu_s,lfsv_s);
380 lae1->assembleUVProcessor(ig,lfsu_s,lfsv_s);
383 template<
typename IG,
typename LFSV_S>
387 lae0->assembleVProcessor(ig,lfsv_s);
388 lae1->assembleVProcessor(ig,lfsv_s);
391 template<
typename IG,
typename LFSU_S,
typename LFSV_S,
typename LFSU_N,
typename LFSV_N,
392 typename LFSU_C,
typename LFSV_C>
394 const LFSU_S & lfsu_s,
const LFSV_S & lfsv_s,
395 const LFSU_N & lfsu_n,
const LFSV_N & lfsv_n,
396 const LFSU_C & lfsu_c,
const LFSV_C & lfsv_c)
399 lae0->assembleUVEnrichedCoupling(ig,lfsu_s,lfsv_s,lfsu_n,lfsv_n,lfsu_c,lfsv_c);
400 lae1->assembleUVEnrichedCoupling(ig,lfsu_s,lfsv_s,lfsu_n,lfsv_n,lfsu_c,lfsv_c);
403 template<
typename IG,
typename LFSV_S,
typename LFSV_N,
typename LFSV_C>
405 const LFSV_S & lfsv_s,
406 const LFSV_N & lfsv_n,
407 const LFSV_C & lfsv_c)
410 lae0->assembleVEnrichedCoupling(ig,lfsv_s,lfsv_n,lfsv_c);
413 template<
typename EG,
typename LFSU,
typename LFSV>
417 lae0->assembleUVVolumePostSkeleton(eg,lfsu,lfsv);
420 template<
typename EG,
typename LFSV>
424 lae0->assembleVVolumePostSkeleton(eg,lfsv);
430 LocalAssemblerEngineDT0 *
const invalid_lae0;
431 LocalAssemblerEngineDT1 *
const invalid_lae1;
437 const LocalAssembler &
la;
439 LocalAssemblerEngineDT0 *
lae0;
440 LocalAssemblerEngineDT1 *
lae1;
449 #endif // DUNE_ONE_STEP_ENGINEBASE_HH bool needsConstraintsCaching(const TrialConstraintsContainer &cu, const TestConstraintsContainer &cv) const
Definition: enginebase.hh:24
const LocalAssemblerEngineDT1 & localAssemblerEngineDT1() const
Definition: enginebase.hh:111
void onBindLFSUVInside(const IG &ig, const LFSU &lfsu, const LFSV &lfsv)
Definition: enginebase.hh:152
The local assembler engine for UDG sub triangulations which assembles the residual vector...
Definition: enginebase.hh:15
void onUnbindLFSUVInside(const IG &ig, const LFSU &lfsu, const LFSV &lfsv)
Definition: enginebase.hh:231
bool assembleCell(const EG &eg)
Definition: enginebase.hh:318
LocalAssemblerEngineDT1 * lae1
Definition: enginebase.hh:440
const OneStepLocalAssembler::Traits::TrialGridFunctionSpaceConstraints & trialConstraints() const
Definition: enginebase.hh:126
const LocalAssembler & la
Definition: enginebase.hh:437
void onUnbindLFSUVCoupling(const IG &ig, const LFSU_S &lfsu_s, const LFSV_S &lfsv_s, const LFSU_N &lfsu_n, const LFSV_N &lfsv_n, const LFSU_C &lfsu_c, const LFSV_C &lfsv_c)
Definition: enginebase.hh:266
void onUnbindLFSVOutside(const IG &ig, const LFSV_S &lfsv_s, const LFSV_N &lfsv_n)
Definition: enginebase.hh:255
const IG & ig
Definition: constraints.hh:148
bool requireUVVolumePostSkeleton() const
Definition: enginebase.hh:86
OSLA::LocalAssemblerDT1 LocalAssemblerDT1
Definition: enginebase.hh:35
const LocalAssembler & localAssembler()
Public access to the wrapping local assembler.
Definition: enginebase.hh:94
const OneStepLocalAssembler::Traits::TestGridFunctionSpaceConstraints & testConstraints() const
Definition: enginebase.hh:131
LAE0 LocalAssemblerEngineDT0
Definition: enginebase.hh:37
void assembleUVProcessor(const IG &ig, const LFSU_S &lfsu_s, const LFSV_S &lfsv_s)
Definition: enginebase.hh:376
void onBindLFSV(const EG &eg, const LFSV &lfsv)
Definition: enginebase.hh:146
void onUnbindLFSUV(const EG &eg, const LFSU &lfsu, const LFSV &lfsv)
Definition: enginebase.hh:219
OneStepLocalAssemblerEngineBase(const LocalAssembler &local_assembler_)
Constructor.
Definition: enginebase.hh:52
Definition: adaptivity.hh:27
void onUnbindLFSVCoupling(const IG &ig, const LFSV_S &lfsv_s, const LFSV_N &lfsv_n, const LFSV_C &lfsv_c)
Definition: enginebase.hh:284
void setLocalAssemblerEngineDT1(LocalAssemblerEngineDT1 &lae1_)
Definition: enginebase.hh:121
void onBindLFSVCoupling(const IG &ig, const LFSV_S &lfsv_s, const LFSV_N &lfsv_n, const LFSV_C &lfsv_c)
Definition: enginebase.hh:205
void setLocalAssemblerEngineDT0(LocalAssemblerEngineDT0 &lae0_)
Definition: enginebase.hh:116
bool requireVBoundary() const
Definition: enginebase.hh:76
void onBindLFSVInside(const IG &ig, const LFSV &lfsv)
Definition: enginebase.hh:168
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)
Definition: enginebase.hh:160
void assembleUVEnrichedCoupling(const IG &ig, const LFSU_S &lfsu_s, const LFSV_S &lfsv_s, const LFSU_N &lfsu_n, const LFSV_N &lfsv_n, const LFSU_C &lfsu_c, const LFSV_C &lfsv_c)
Definition: enginebase.hh:393
OSLA::Real Real
The type for real numbers.
Definition: enginebase.hh:42
bool requireUVSkeleton() const
Definition: enginebase.hh:70
const LocalAssemblerEngineDT0 & localAssemblerEngineDT0() const
Definition: enginebase.hh:101
LocalAssemblerEngineDT0 & localAssemblerEngineDT0()
Definition: enginebase.hh:96
void assembleUVVolume(const EG &eg, const LFSU &lfsu, const LFSV &lfsv)
Definition: enginebase.hh:327
void assembleVBoundary(const IG &ig, const LFSV_S &lfsv_s)
Definition: enginebase.hh:368
OSLA OneStepLocalAssembler
The type of the wrapping local assembler.
Definition: enginebase.hh:19
void onBindLFSUV(const EG &eg, const LFSU &lfsu, const LFSV &lfsv)
Definition: enginebase.hh:140
bool requireUVProcessor() const
Definition: enginebase.hh:78
void onBindLFSUVCoupling(const IG &ig, const LFSU_S &lfsu_s, const LFSV_S &lfsv_s, const LFSU_N &lfsu_n, const LFSV_N &lfsv_n, const LFSU_C &lfsu_c, const LFSV_C &lfsv_c)
Definition: enginebase.hh:187
void assembleVSkeleton(const IG &ig, const LFSV_S &lfsv_s, const LFSV_N &lfsv_n)
Definition: enginebase.hh:352
bool requireSkeleton() const
Definition: enginebase.hh:62
void assembleVProcessor(const IG &ig, const LFSV_S &lfsv_s)
Definition: enginebase.hh:384
void assembleVVolume(const EG &eg, const LFSV &lfsv)
Definition: enginebase.hh:335
bool requireUVBoundary() const
Definition: enginebase.hh:74
OSLA::LocalAssemblerDT0 LocalAssemblerDT0
Definition: enginebase.hh:34
void assembleVVolumePostSkeleton(const EG &eg, const LFSV &lfsv)
Definition: enginebase.hh:421
bool requireUVVolume() const
Definition: enginebase.hh:66
GO::Traits::TrialGridFunctionSpaceConstraints TrialGridFunctionSpaceConstraints
The type of the trial grid function space constraints.
Definition: assemblerutilities.hh:33
GO::Traits::TestGridFunctionSpaceConstraints TestGridFunctionSpaceConstraints
The type of the test grid function space constraints.
Definition: assemblerutilities.hh:36
bool requireSkeletonTwoSided() const
Definition: enginebase.hh:64
bool requireVVolume() const
Definition: enginebase.hh:68
void loadCoefficientsLFSUOutside(const LFSU &lfsu_n)
Definition: enginebase.hh:303
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)
Definition: enginebase.hh:239
LAE0::Traits Traits
Definition: enginebase.hh:21
bool requireVEnrichedCoupling() const
Definition: enginebase.hh:84
void onUnbindLFSV(const EG &eg, const LFSV &lfsv)
Definition: enginebase.hh:225
LocalAssemblerEngineDT0 * lae0
Definition: enginebase.hh:439
void assembleUVVolumePostSkeleton(const EG &eg, const LFSU &lfsu, const LFSV &lfsv)
Definition: enginebase.hh:414
bool requireVVolumePostSkeleton() const
Definition: enginebase.hh:88
void assembleUVBoundary(const IG &ig, const LFSU_S &lfsu_s, const LFSV_S &lfsv_s)
Definition: enginebase.hh:360
void loadCoefficientsLFSUCoupling(const LFSU &lfsu_c)
Definition: enginebase.hh:308
LocalAssemblerEngineDT1 & localAssemblerEngineDT1()
Definition: enginebase.hh:106
bool implicit
Definition: enginebase.hh:442
void onBindLFSVOutside(const IG &ig, const LFSV_S &lfsv_s, const LFSV_N &lfsv_n)
Definition: enginebase.hh:176
void onUnbindLFSVInside(const IG &ig, const LFSV &lfsv)
Definition: enginebase.hh:247
bool requireVProcessor() const
Definition: enginebase.hh:80
void loadCoefficientsLFSUInside(const LFSU &lfsu_s)
Definition: enginebase.hh:298
bool requireUVEnrichedCoupling() const
Definition: enginebase.hh:82
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)
Definition: enginebase.hh:343
void assembleVEnrichedCoupling(const IG &ig, const LFSV_S &lfsv_s, const LFSV_N &lfsv_n, const LFSV_C &lfsv_c)
Definition: enginebase.hh:404
LAE1 LocalAssemblerEngineDT1
Definition: enginebase.hh:38
bool requireVSkeleton() const
Definition: enginebase.hh:72
OSLA LocalAssembler
Definition: enginebase.hh:44