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>
342 bool rv =
lae0->skipEntity(eg);
343 if (rv !=
lae1->skipEntity(eg))
344 DUNE_THROW(NotImplemented,
345 "Spatial and temporal local operators are not allowed "
346 "to have different custom cell assembly rules");
350 template<
typename IG>
353 bool rv =
lae0->skipIntersection(
ig);
354 if (rv !=
lae1->skipIntersection(
ig))
355 DUNE_THROW(NotImplemented,
356 "Spatial and temporal local operators are not allowed "
357 "to have different custom intersection assembly rules");
361 template<
typename EG,
typename LFSU,
typename LFSV>
365 lae0->assembleUVVolume(eg,lfsu,lfsv);
366 lae1->assembleUVVolume(eg,lfsu,lfsv);
369 template<
typename EG,
typename LFSV>
373 lae0->assembleVVolume(eg,lfsv);
374 lae1->assembleVVolume(eg,lfsv);
377 template<
typename IG,
typename LFSU_S,
typename LFSV_S,
typename LFSU_N,
typename LFSV_N>
379 const LFSU_N & lfsu_n,
const LFSV_N & lfsv_n)
382 lae0->assembleUVSkeleton(
ig,lfsu_s,lfsv_s,lfsu_n,lfsv_n);
383 lae1->assembleUVSkeleton(
ig,lfsu_s,lfsv_s,lfsu_n,lfsv_n);
386 template<
typename IG,
typename LFSV_S,
typename LFSV_N>
390 lae0->assembleVSkeleton(
ig,lfsv_s,lfsv_n);
391 lae1->assembleVSkeleton(
ig,lfsv_s,lfsv_n);
394 template<
typename IG,
typename LFSU_S,
typename LFSV_S>
398 lae0->assembleUVBoundary(
ig,lfsu_s,lfsv_s);
399 lae1->assembleUVBoundary(
ig,lfsu_s,lfsv_s);
402 template<
typename IG,
typename LFSV_S>
406 lae0->assembleVBoundary(
ig,lfsv_s);
407 lae1->assembleVBoundary(
ig,lfsv_s);
410 template<
typename IG,
typename LFSU_S,
typename LFSV_S>
414 lae0->assembleUVProcessor(
ig,lfsu_s,lfsv_s);
415 lae1->assembleUVProcessor(
ig,lfsu_s,lfsv_s);
418 template<
typename IG,
typename LFSV_S>
422 lae0->assembleVProcessor(
ig,lfsv_s);
423 lae1->assembleVProcessor(
ig,lfsv_s);
426 template<
typename IG,
typename LFSU_S,
typename LFSV_S,
typename LFSU_N,
typename LFSV_N,
427 typename LFSU_C,
typename LFSV_C>
429 const LFSU_S & lfsu_s,
const LFSV_S & lfsv_s,
430 const LFSU_N & lfsu_n,
const LFSV_N & lfsv_n,
431 const LFSU_C & lfsu_c,
const LFSV_C & lfsv_c)
434 lae0->assembleUVEnrichedCoupling(
ig,lfsu_s,lfsv_s,lfsu_n,lfsv_n,lfsu_c,lfsv_c);
435 lae1->assembleUVEnrichedCoupling(
ig,lfsu_s,lfsv_s,lfsu_n,lfsv_n,lfsu_c,lfsv_c);
438 template<
typename IG,
typename LFSV_S,
typename LFSV_N,
typename LFSV_C>
440 const LFSV_S & lfsv_s,
441 const LFSV_N & lfsv_n,
442 const LFSV_C & lfsv_c)
445 lae0->assembleVEnrichedCoupling(
ig,lfsv_s,lfsv_n,lfsv_c);
448 template<
typename EG,
typename LFSU,
typename LFSV>
452 lae0->assembleUVVolumePostSkeleton(eg,lfsu,lfsv);
455 template<
typename EG,
typename LFSV>
459 lae0->assembleVVolumePostSkeleton(eg,lfsv);
const IG & ig
Definition: constraints.hh:149
For backward compatibility – Do not use this!
Definition: adaptivity.hh:28
GO::Traits::TrialGridFunctionSpaceConstraints TrialGridFunctionSpaceConstraints
The type of the trial grid function space constraints.
Definition: assemblerutilities.hh:61
GO::Traits::TestGridFunctionSpaceConstraints TestGridFunctionSpaceConstraints
The type of the test grid function space constraints.
Definition: assemblerutilities.hh:64
The local assembler engine for UDG sub triangulations which assembles the residual vector.
Definition: enginebase.hh:16
OSLA::LocalAssemblerDT1 LocalAssemblerDT1
Definition: enginebase.hh:33
void onUnbindLFSUV(const EG &eg, const LFSU &lfsu, const LFSV &lfsv)
Definition: enginebase.hh:230
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
bool requireVVolume() const
Definition: enginebase.hh:66
const LocalAssembler & la
Definition: enginebase.hh:472
OSLA::LocalAssemblerDT0 LocalAssemblerDT0
Definition: enginebase.hh:32
const LocalAssemblerEngineDT0 & localAssemblerEngineDT0() const
Definition: enginebase.hh:99
void assembleVSkeleton(const IG &ig, const LFSV_S &lfsv_s, const LFSV_N &lfsv_n)
Definition: enginebase.hh:387
bool needsConstraintsCaching(const TrialConstraintsContainer &cu, const TestConstraintsContainer &cv) const
Definition: enginebase.hh:24
void assembleVVolumePostSkeleton(const EG &eg, const LFSV &lfsv)
Definition: enginebase.hh:456
LAE1 LocalAssemblerEngineDT1
Definition: enginebase.hh:36
void loadCoefficientsLFSUCoupling(const LFSU &lfsu_c)
Definition: enginebase.hh:329
LAE0::Traits Traits
Definition: enginebase.hh:21
void assembleVProcessor(const IG &ig, const LFSV_S &lfsv_s)
Definition: enginebase.hh:419
void assembleUVVolume(const EG &eg, const LFSU &lfsu, const LFSV &lfsv)
Definition: enginebase.hh:362
LocalAssemblerEngineDT1 & localAssemblerEngineDT1()
Definition: enginebase.hh:104
void assembleVVolume(const EG &eg, const LFSV &lfsv)
Definition: enginebase.hh:370
bool requireUVProcessor() const
Definition: enginebase.hh:76
LocalAssemblerEngineDT0 & localAssemblerEngineDT0()
Definition: enginebase.hh:94
bool requireSkeletonTwoSided() const
Definition: enginebase.hh:62
void onBindLFSVInside(const IG &ig, const LFSV &lfsv)
Definition: enginebase.hh:175
const LocalAssembler & localAssembler()
Public access to the wrapping local assembler.
Definition: enginebase.hh:92
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 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
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:428
void onUnbindLFSVInside(const IG &ig, const LFSV &lfsv)
Definition: enginebase.hh:262
const LocalAssemblerEngineDT1 & localAssemblerEngineDT1() const
Definition: enginebase.hh:109
bool requireVProcessor() const
Definition: enginebase.hh:78
void onBindLFSUVInside(const IG &ig, const LFSU &lfsu, const LFSV &lfsv)
Definition: enginebase.hh:157
void setLocalAssemblerEngineDT0(LocalAssemblerEngineDT0 &lae0_)
Definition: enginebase.hh:119
void onBindLFSVOutside(const IG &ig, const LFSV_S &lfsv_s, const LFSV_N &lfsv_n)
Definition: enginebase.hh:184
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
void onUnbindLFSUVInside(const IG &ig, const LFSU &lfsu, const LFSV &lfsv)
Definition: enginebase.hh:244
LocalAssemblerEngineDT1 * lae1
Definition: enginebase.hh:475
void setLocalAssemblerEngineDT1(LocalAssemblerEngineDT1 &lae1_)
Definition: enginebase.hh:124
bool skipIntersection(const IG &ig)
Definition: enginebase.hh:351
bool requireUVSkeleton() const
Definition: enginebase.hh:68
void loadCoefficientsLFSUOutside(const LFSU &lfsu_n)
Definition: enginebase.hh:323
void loadCoefficientsLFSUInside(const LFSU &lfsu_s)
Definition: enginebase.hh:317
LocalAssemblerEngineDT0 * lae0
Definition: enginebase.hh:474
const OneStepLocalAssembler::Traits::TestGridFunctionSpaceConstraints & testConstraints() const
Definition: enginebase.hh:134
void onBindLFSUV(const EG &eg, const LFSU &lfsu, const LFSV &lfsv)
Definition: enginebase.hh:143
OSLA::Real Real
The type for real numbers.
Definition: enginebase.hh:40
void assembleUVVolumePostSkeleton(const EG &eg, const LFSU &lfsu, const LFSV &lfsv)
Definition: enginebase.hh:449
bool requireSkeleton() const
Definition: enginebase.hh:60
bool requireVSkeleton() const
Definition: enginebase.hh:70
bool skipEntity(const EG &eg)
Definition: enginebase.hh:340
bool implicit
Definition: enginebase.hh:477
void onBindLFSV(const EG &eg, const LFSV &lfsv)
Definition: enginebase.hh:150
void assembleUVBoundary(const IG &ig, const LFSU_S &lfsu_s, const LFSV_S &lfsv_s)
Definition: enginebase.hh:395
bool requireVVolumePostSkeleton() const
Definition: enginebase.hh:86
void assembleVBoundary(const IG &ig, const LFSV_S &lfsv_s)
Definition: enginebase.hh:403
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
void onUnbindLFSVOutside(const IG &ig, const LFSV_S &lfsv_s, const LFSV_N &lfsv_n)
Definition: enginebase.hh:271
void assembleVEnrichedCoupling(const IG &ig, const LFSV_S &lfsv_s, const LFSV_N &lfsv_n, const LFSV_C &lfsv_c)
Definition: enginebase.hh:439
OSLA LocalAssembler
Definition: enginebase.hh:42
LAE0 LocalAssemblerEngineDT0
Definition: enginebase.hh:35
OSLA OneStepLocalAssembler
The type of the wrapping local assembler.
Definition: enginebase.hh:19
void assembleUVProcessor(const IG &ig, const LFSU_S &lfsu_s, const LFSV_S &lfsv_s)
Definition: enginebase.hh:411
void onUnbindLFSV(const EG &eg, const LFSV &lfsv)
Definition: enginebase.hh:237
auto partition() const
Definition: enginebase.hh:114
bool requireUVEnrichedCoupling() const
Definition: enginebase.hh:80
const OneStepLocalAssembler::Traits::TrialGridFunctionSpaceConstraints & trialConstraints() const
Definition: enginebase.hh:129
bool requireUVBoundary() const
Definition: enginebase.hh:72
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:378
bool requireVBoundary() const
Definition: enginebase.hh:74
void onBindLFSVCoupling(const IG &ig, const LFSV_S &lfsv_s, const LFSV_N &lfsv_n, const LFSV_C &lfsv_c)
Definition: enginebase.hh:215
bool requireVEnrichedCoupling() const
Definition: enginebase.hh:82
bool requireUVVolume() const
Definition: enginebase.hh:64
bool requireUVVolumePostSkeleton() const
Definition: enginebase.hh:84