Go to the documentation of this file. 1 #ifndef DUNE_PDELAB_GRIDOPERATOR_ONESTEP_ENGINEBASE_HH
2 #define DUNE_PDELAB_GRIDOPERATOR_ONESTEP_ENGINEBASE_HH
14 template<
typename OSLA,
typename LAE0,
typename LAE1>
21 typedef typename LAE0::Traits
Traits;
23 template<
typename TrialConstra
intsContainer,
typename TestConstra
intsContainer>
26 return (
lae0->needsConstraintsCaching(cu,cv) or
lae1->needsConstraintsCaching(cu,cv));
40 typedef typename OSLA::Real
Real;
51 : invalid_lae0(nullptr),
52 invalid_lae1(nullptr),
54 lae0(invalid_lae0),
lae1(invalid_lae1),
63 {
return lae0->requireSkeletonTwoSided() ||
lae1->requireSkeletonTwoSided(); }
65 {
return lae0->requireUVVolume() ||
lae1->requireUVVolume(); }
67 {
return lae0->requireVVolume() ||
lae1->requireVVolume(); }
69 {
return lae0->requireUVSkeleton() ||
lae1->requireUVSkeleton(); }
71 {
return lae0->requireVSkeleton() ||
lae1->requireVSkeleton(); }
73 {
return lae0->requireUVBoundary() ||
lae1->requireUVBoundary(); }
75 {
return lae0->requireVBoundary() ||
lae1->requireVBoundary(); }
77 {
return lae0->requireUVProcessor() ||
lae1->requireUVProcessor(); }
79 {
return lae0->requireVProcessor() ||
lae1->requireVProcessor(); }
81 {
return lae0->requireUVEnrichedCoupling() ||
lae1->requireUVEnrichedCoupling(); }
83 {
return lae0->requireVEnrichedCoupling() ||
lae1->requireVEnrichedCoupling(); }
85 {
return lae0->requireUVVolumePostSkeleton() ||
lae1->requireUVVolumePostSkeleton();}
87 {
return lae0->requireVVolumePostSkeleton() ||
lae1->requireVVolumePostSkeleton(); }
142 template<
typename EG,
typename LFSU,
typename LFSV>
143 void onBindLFSUV(
const EG & eg,
const LFSU & lfsu,
const LFSV & lfsv)
145 lae0->onBindLFSUV(eg,lfsu,lfsv);
146 lae1->onBindLFSUV(eg,lfsu,lfsv);
149 template<
typename EG,
typename LFSV>
152 lae0->onBindLFSV(eg,lfsv);
153 lae1->onBindLFSV(eg,lfsv);
156 template<
typename IG,
typename LFSU,
typename LFSV>
159 lae0->onBindLFSUVInside(
ig,lfsu,lfsv);
160 lae1->onBindLFSUVInside(
ig,lfsu,lfsv);
163 template<
typename IG,
164 typename LFSU_S,
typename LFSV_S,
165 typename LFSU_N,
typename LFSV_N>
167 const LFSU_S & lfsu_s,
const LFSV_S & lfsv_s,
168 const LFSU_N & lfsu_n,
const LFSV_N & lfsv_n)
170 lae0->onBindLFSUVOutside(
ig,lfsu_s,lfsv_s,lfsu_n,lfsv_n);
171 lae1->onBindLFSUVOutside(
ig,lfsu_s,lfsv_s,lfsu_n,lfsv_n);
174 template<
typename IG,
typename LFSV>
177 lae0->onBindLFSVInside(
ig,lfsv);
178 lae1->onBindLFSVInside(
ig,lfsv);
181 template<
typename IG,
185 const LFSV_S & lfsv_s,
186 const LFSV_N & lfsv_n)
188 lae0->onBindLFSVOutside(
ig,lfsv_s,lfsv_n);
189 lae1->onBindLFSVOutside(
ig,lfsv_s,lfsv_n);
192 template<
typename IG,
193 typename LFSU_S,
typename LFSV_S,
194 typename LFSU_N,
typename LFSV_N,
195 typename LFSU_C,
typename LFSV_C>
197 const LFSU_S & lfsu_s,
const LFSV_S & lfsv_s,
198 const LFSU_N & lfsu_n,
const LFSV_N & lfsv_n,
199 const LFSU_C & lfsu_c,
const LFSV_C & lfsv_c)
201 lae0->onBindLFSUVCoupling(
ig,
205 lae1->onBindLFSUVCoupling(
ig,
211 template<
typename IG,
216 const LFSV_S & lfsv_s,
217 const LFSV_N & lfsv_n,
218 const LFSV_C & lfsv_c)
220 lae0->onBindLFSVCoupling(
ig,lfsv_s,lfsv_n,lfsv_c);
221 lae1->onBindLFSVCoupling(
ig,lfsv_s,lfsv_n,lfsv_c);
229 template<
typename EG,
typename LFSU,
typename LFSV>
232 lae0->onUnbindLFSUV(eg,lfsu, lfsv);
233 lae1->onUnbindLFSUV(eg,lfsu, lfsv);
236 template<
typename EG,
typename LFSV>
239 lae0->onUnbindLFSV(eg,lfsv);
240 lae1->onUnbindLFSV(eg,lfsv);
243 template<
typename IG,
typename LFSU,
typename LFSV>
246 lae0->onUnbindLFSUVInside(
ig,lfsu, lfsv);
247 lae1->onUnbindLFSUVInside(
ig,lfsu, lfsv);
250 template<
typename IG,
251 typename LFSU_S,
typename LFSV_S,
252 typename LFSU_N,
typename LFSV_N>
254 const LFSU_S & lfsu_s,
const LFSV_S & lfsv_s,
255 const LFSU_N & lfsu_n,
const LFSV_N & lfsv_n)
257 lae0->onUnbindLFSUVOutside(
ig,lfsu_s,lfsv_s,lfsu_n,lfsv_n);
258 lae1->onUnbindLFSUVOutside(
ig,lfsu_s,lfsv_s,lfsu_n,lfsv_n);
261 template<
typename IG,
typename LFSV>
264 lae0->onUnbindLFSVInside(
ig,lfsv);
265 lae1->onUnbindLFSVInside(
ig,lfsv);
268 template<
typename IG,
272 const LFSV_S & lfsv_s,
273 const LFSV_N & lfsv_n)
275 lae0->onUnbindLFSVOutside(
ig,lfsv_s,lfsv_n);
276 lae1->onUnbindLFSVOutside(
ig,lfsv_s,lfsv_n);
279 template<
typename IG,
280 typename LFSU_S,
typename LFSV_S,
281 typename LFSU_N,
typename LFSV_N,
282 typename LFSU_C,
typename LFSV_C>
284 const LFSU_S & lfsu_s,
const LFSV_S & lfsv_s,
285 const LFSU_N & lfsu_n,
const LFSV_N & lfsv_n,
286 const LFSU_C & lfsu_c,
const LFSV_C & lfsv_c)
288 lae0->onUnbindLFSUVCoupling(
ig,
292 lae1->onUnbindLFSUVCoupling(
ig,
298 template<
typename IG,
303 const LFSV_S & lfsv_s,
304 const LFSV_N & lfsv_n,
305 const LFSV_C & lfsv_c)
307 lae0->onUnbindLFSVCoupling(
ig,lfsv_s,lfsv_n,lfsv_c);
308 lae1->onUnbindLFSVCoupling(
ig,lfsv_s,lfsv_n,lfsv_c);
316 template<
typename LFSU>
319 lae0->loadCoefficientsLFSUInside(lfsu_s);
320 lae1->loadCoefficientsLFSUInside(lfsu_s);
322 template<
typename LFSU>
325 lae0->loadCoefficientsLFSUOutside(lfsu_n);
326 lae1->loadCoefficientsLFSUOutside(lfsu_n);
328 template<
typename LFSU>
331 lae0->loadCoefficientsLFSUCoupling(lfsu_c);
332 lae1->loadCoefficientsLFSUCoupling(lfsu_c);
339 template<
typename EG>
343 rv &=
lae0->assembleCell(eg);
344 rv &=
lae1->assembleCell(eg);
348 template<
typename EG,
typename LFSU,
typename LFSV>
352 lae0->assembleUVVolume(eg,lfsu,lfsv);
353 lae1->assembleUVVolume(eg,lfsu,lfsv);
356 template<
typename EG,
typename LFSV>
360 lae0->assembleVVolume(eg,lfsv);
361 lae1->assembleVVolume(eg,lfsv);
364 template<
typename IG,
typename LFSU_S,
typename LFSV_S,
typename LFSU_N,
typename LFSV_N>
366 const LFSU_N & lfsu_n,
const LFSV_N & lfsv_n)
369 lae0->assembleUVSkeleton(
ig,lfsu_s,lfsv_s,lfsu_n,lfsv_n);
370 lae1->assembleUVSkeleton(
ig,lfsu_s,lfsv_s,lfsu_n,lfsv_n);
373 template<
typename IG,
typename LFSV_S,
typename LFSV_N>
377 lae0->assembleVSkeleton(
ig,lfsv_s,lfsv_n);
378 lae1->assembleVSkeleton(
ig,lfsv_s,lfsv_n);
381 template<
typename IG,
typename LFSU_S,
typename LFSV_S>
385 lae0->assembleUVBoundary(
ig,lfsu_s,lfsv_s);
386 lae1->assembleUVBoundary(
ig,lfsu_s,lfsv_s);
389 template<
typename IG,
typename LFSV_S>
393 lae0->assembleVBoundary(
ig,lfsv_s);
394 lae1->assembleVBoundary(
ig,lfsv_s);
397 template<
typename IG,
typename LFSU_S,
typename LFSV_S>
401 lae0->assembleUVProcessor(
ig,lfsu_s,lfsv_s);
402 lae1->assembleUVProcessor(
ig,lfsu_s,lfsv_s);
405 template<
typename IG,
typename LFSV_S>
409 lae0->assembleVProcessor(
ig,lfsv_s);
410 lae1->assembleVProcessor(
ig,lfsv_s);
413 template<
typename IG,
typename LFSU_S,
typename LFSV_S,
typename LFSU_N,
typename LFSV_N,
414 typename LFSU_C,
typename LFSV_C>
416 const LFSU_S & lfsu_s,
const LFSV_S & lfsv_s,
417 const LFSU_N & lfsu_n,
const LFSV_N & lfsv_n,
418 const LFSU_C & lfsu_c,
const LFSV_C & lfsv_c)
421 lae0->assembleUVEnrichedCoupling(
ig,lfsu_s,lfsv_s,lfsu_n,lfsv_n,lfsu_c,lfsv_c);
422 lae1->assembleUVEnrichedCoupling(
ig,lfsu_s,lfsv_s,lfsu_n,lfsv_n,lfsu_c,lfsv_c);
425 template<
typename IG,
typename LFSV_S,
typename LFSV_N,
typename LFSV_C>
427 const LFSV_S & lfsv_s,
428 const LFSV_N & lfsv_n,
429 const LFSV_C & lfsv_c)
432 lae0->assembleVEnrichedCoupling(
ig,lfsv_s,lfsv_n,lfsv_c);
435 template<
typename EG,
typename LFSU,
typename LFSV>
439 lae0->assembleUVVolumePostSkeleton(eg,lfsu,lfsv);
442 template<
typename EG,
typename LFSV>
446 lae0->assembleVVolumePostSkeleton(eg,lfsv);
471 #endif // DUNE_PDELAB_GRIDOPERATOR_ONESTEP_ENGINEBASE_HH
const LocalAssemblerEngineDT0 & localAssemblerEngineDT0() const
Definition: enginebase.hh:99
GO::Traits::TestGridFunctionSpaceConstraints TestGridFunctionSpaceConstraints
The type of the test grid function space constraints.
Definition: assemblerutilities.hh:36
The local assembler engine for UDG sub triangulations which assembles the residual vector.
Definition: enginebase.hh:15
LAE1 LocalAssemblerEngineDT1
Definition: enginebase.hh:36
bool requireUVProcessor() const
Definition: enginebase.hh:76
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:196
GO::Traits::TrialGridFunctionSpaceConstraints TrialGridFunctionSpaceConstraints
The type of the trial grid function space constraints.
Definition: assemblerutilities.hh:33
const LocalAssembler & localAssembler()
Public access to the wrapping local assembler.
Definition: enginebase.hh:92
bool requireUVBoundary() const
Definition: enginebase.hh:72
OSLA::LocalAssemblerDT1 LocalAssemblerDT1
Definition: enginebase.hh:33
bool requireVSkeleton() const
Definition: enginebase.hh:70
bool requireVBoundary() const
Definition: enginebase.hh:74
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:283
const LocalAssemblerEngineDT1 & localAssemblerEngineDT1() const
Definition: enginebase.hh:109
void assembleVBoundary(const IG &ig, const LFSV_S &lfsv_s)
Definition: enginebase.hh:390
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:365
void loadCoefficientsLFSUCoupling(const LFSU &lfsu_c)
Definition: enginebase.hh:329
void setLocalAssemblerEngineDT0(LocalAssemblerEngineDT0 &lae0_)
Definition: enginebase.hh:119
void setLocalAssemblerEngineDT1(LocalAssemblerEngineDT1 &lae1_)
Definition: enginebase.hh:124
void onBindLFSVCoupling(const IG &ig, const LFSV_S &lfsv_s, const LFSV_N &lfsv_n, const LFSV_C &lfsv_c)
Definition: enginebase.hh:215
void onBindLFSUV(const EG &eg, const LFSU &lfsu, const LFSV &lfsv)
Definition: enginebase.hh:143
void onUnbindLFSVInside(const IG &ig, const LFSV &lfsv)
Definition: enginebase.hh:262
For backward compatibility – Do not use this!
Definition: adaptivity.hh:28
void assembleUVBoundary(const IG &ig, const LFSU_S &lfsu_s, const LFSV_S &lfsv_s)
Definition: enginebase.hh:382
auto partition() const
Definition: enginebase.hh:114
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:166
void loadCoefficientsLFSUOutside(const LFSU &lfsu_n)
Definition: enginebase.hh:323
bool requireSkeletonTwoSided() const
Definition: enginebase.hh:62
LAE0::Traits Traits
Definition: enginebase.hh:21
void assembleVVolumePostSkeleton(const EG &eg, const LFSV &lfsv)
Definition: enginebase.hh:443
OSLA::Real Real
The type for real numbers.
Definition: enginebase.hh:40
void onUnbindLFSV(const EG &eg, const LFSV &lfsv)
Definition: enginebase.hh:237
bool requireUVEnrichedCoupling() const
Definition: enginebase.hh:80
void onUnbindLFSUVInside(const IG &ig, const LFSU &lfsu, const LFSV &lfsv)
Definition: enginebase.hh:244
OSLA LocalAssembler
Definition: enginebase.hh:42
void onBindLFSV(const EG &eg, const LFSV &lfsv)
Definition: enginebase.hh:150
void assembleVSkeleton(const IG &ig, const LFSV_S &lfsv_s, const LFSV_N &lfsv_n)
Definition: enginebase.hh:374
bool needsConstraintsCaching(const TrialConstraintsContainer &cu, const TestConstraintsContainer &cv) const
Definition: enginebase.hh:24
bool requireVVolume() const
Definition: enginebase.hh:66
void assembleVVolume(const EG &eg, const LFSV &lfsv)
Definition: enginebase.hh:357
void onBindLFSVOutside(const IG &ig, const LFSV_S &lfsv_s, const LFSV_N &lfsv_n)
Definition: enginebase.hh:184
void onUnbindLFSUV(const EG &eg, const LFSU &lfsu, const LFSV &lfsv)
Definition: enginebase.hh:230
LocalAssemblerEngineDT0 * lae0
Definition: enginebase.hh:461
const OneStepLocalAssembler::Traits::TrialGridFunctionSpaceConstraints & trialConstraints() const
Definition: enginebase.hh:129
OSLA::LocalAssemblerDT0 LocalAssemblerDT0
Definition: enginebase.hh:32
void assembleUVProcessor(const IG &ig, const LFSU_S &lfsu_s, const LFSV_S &lfsv_s)
Definition: enginebase.hh:398
LAE0 LocalAssemblerEngineDT0
Definition: enginebase.hh:35
LocalAssemblerEngineDT1 * lae1
Definition: enginebase.hh:462
bool requireUVVolume() const
Definition: enginebase.hh:64
OSLA OneStepLocalAssembler
The type of the wrapping local assembler.
Definition: enginebase.hh:19
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:253
bool implicit
Definition: enginebase.hh:464
const OneStepLocalAssembler::Traits::TestGridFunctionSpaceConstraints & testConstraints() const
Definition: enginebase.hh:134
bool requireVProcessor() const
Definition: enginebase.hh:78
void loadCoefficientsLFSUInside(const LFSU &lfsu_s)
Definition: enginebase.hh:317
bool requireUVSkeleton() const
Definition: enginebase.hh:68
void assembleUVVolumePostSkeleton(const EG &eg, const LFSU &lfsu, const LFSV &lfsv)
Definition: enginebase.hh:436
bool requireVVolumePostSkeleton() const
Definition: enginebase.hh:86
void assembleVEnrichedCoupling(const IG &ig, const LFSV_S &lfsv_s, const LFSV_N &lfsv_n, const LFSV_C &lfsv_c)
Definition: enginebase.hh:426
void onUnbindLFSVOutside(const IG &ig, const LFSV_S &lfsv_s, const LFSV_N &lfsv_n)
Definition: enginebase.hh:271
LocalAssemblerEngineDT0 & localAssemblerEngineDT0()
Definition: enginebase.hh:94
const LocalAssembler & la
Definition: enginebase.hh:459
void assembleUVVolume(const EG &eg, const LFSU &lfsu, const LFSV &lfsv)
Definition: enginebase.hh:349
bool requireSkeleton() const
Definition: enginebase.hh:60
void onUnbindLFSVCoupling(const IG &ig, const LFSV_S &lfsv_s, const LFSV_N &lfsv_n, const LFSV_C &lfsv_c)
Definition: enginebase.hh:302
OneStepLocalAssemblerEngineBase(const LocalAssembler &local_assembler_)
Constructor.
Definition: enginebase.hh:50
void onBindLFSVInside(const IG &ig, const LFSV &lfsv)
Definition: enginebase.hh:175
const IG & ig
Definition: constraints.hh:149
bool assembleCell(const EG &eg)
Definition: enginebase.hh:340
bool requireVEnrichedCoupling() const
Definition: enginebase.hh:82
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:415
LocalAssemblerEngineDT1 & localAssemblerEngineDT1()
Definition: enginebase.hh:104
void onBindLFSUVInside(const IG &ig, const LFSU &lfsu, const LFSV &lfsv)
Definition: enginebase.hh:157
bool requireUVVolumePostSkeleton() const
Definition: enginebase.hh:84
void assembleVProcessor(const IG &ig, const LFSV_S &lfsv_s)
Definition: enginebase.hh:406