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(); }
137 template<
typename EG,
typename LFSU,
typename LFSV>
138 void onBindLFSUV(
const EG & eg,
const LFSU & lfsu,
const LFSV & lfsv)
140 lae0->onBindLFSUV(eg,lfsu,lfsv);
141 lae1->onBindLFSUV(eg,lfsu,lfsv);
144 template<
typename EG,
typename LFSV>
147 lae0->onBindLFSV(eg,lfsv);
148 lae1->onBindLFSV(eg,lfsv);
151 template<
typename IG,
typename LFSU,
typename LFSV>
154 lae0->onBindLFSUVInside(ig,lfsu,lfsv);
155 lae1->onBindLFSUVInside(ig,lfsu,lfsv);
158 template<
typename IG,
159 typename LFSU_S,
typename LFSV_S,
160 typename LFSU_N,
typename LFSV_N>
162 const LFSU_S & lfsu_s,
const LFSV_S & lfsv_s,
163 const LFSU_N & lfsu_n,
const LFSV_N & lfsv_n)
165 lae0->onBindLFSUVOutside(ig,lfsu_s,lfsv_s,lfsu_n,lfsv_n);
166 lae1->onBindLFSUVOutside(ig,lfsu_s,lfsv_s,lfsu_n,lfsv_n);
169 template<
typename IG,
typename LFSV>
172 lae0->onBindLFSVInside(ig,lfsv);
173 lae1->onBindLFSVInside(ig,lfsv);
176 template<
typename IG,
180 const LFSV_S & lfsv_s,
181 const LFSV_N & lfsv_n)
183 lae0->onBindLFSVOutside(ig,lfsv_s,lfsv_n);
184 lae1->onBindLFSVOutside(ig,lfsv_s,lfsv_n);
187 template<
typename IG,
188 typename LFSU_S,
typename LFSV_S,
189 typename LFSU_N,
typename LFSV_N,
190 typename LFSU_C,
typename LFSV_C>
192 const LFSU_S & lfsu_s,
const LFSV_S & lfsv_s,
193 const LFSU_N & lfsu_n,
const LFSV_N & lfsv_n,
194 const LFSU_C & lfsu_c,
const LFSV_C & lfsv_c)
196 lae0->onBindLFSUVCoupling(ig,
200 lae1->onBindLFSUVCoupling(ig,
206 template<
typename IG,
211 const LFSV_S & lfsv_s,
212 const LFSV_N & lfsv_n,
213 const LFSV_C & lfsv_c)
215 lae0->onBindLFSVCoupling(ig,lfsv_s,lfsv_n,lfsv_c);
216 lae1->onBindLFSVCoupling(ig,lfsv_s,lfsv_n,lfsv_c);
224 template<
typename EG,
typename LFSU,
typename LFSV>
227 lae0->onUnbindLFSUV(eg,lfsu, lfsv);
228 lae1->onUnbindLFSUV(eg,lfsu, lfsv);
231 template<
typename EG,
typename LFSV>
234 lae0->onUnbindLFSV(eg,lfsv);
235 lae1->onUnbindLFSV(eg,lfsv);
238 template<
typename IG,
typename LFSU,
typename LFSV>
241 lae0->onUnbindLFSUVInside(ig,lfsu, lfsv);
242 lae1->onUnbindLFSUVInside(ig,lfsu, lfsv);
245 template<
typename IG,
246 typename LFSU_S,
typename LFSV_S,
247 typename LFSU_N,
typename LFSV_N>
249 const LFSU_S & lfsu_s,
const LFSV_S & lfsv_s,
250 const LFSU_N & lfsu_n,
const LFSV_N & lfsv_n)
252 lae0->onUnbindLFSUVOutside(ig,lfsu_s,lfsv_s,lfsu_n,lfsv_n);
253 lae1->onUnbindLFSUVOutside(ig,lfsu_s,lfsv_s,lfsu_n,lfsv_n);
256 template<
typename IG,
typename LFSV>
259 lae0->onUnbindLFSVInside(ig,lfsv);
260 lae1->onUnbindLFSVInside(ig,lfsv);
263 template<
typename IG,
267 const LFSV_S & lfsv_s,
268 const LFSV_N & lfsv_n)
270 lae0->onUnbindLFSVOutside(ig,lfsv_s,lfsv_n);
271 lae1->onUnbindLFSVOutside(ig,lfsv_s,lfsv_n);
274 template<
typename IG,
275 typename LFSU_S,
typename LFSV_S,
276 typename LFSU_N,
typename LFSV_N,
277 typename LFSU_C,
typename LFSV_C>
279 const LFSU_S & lfsu_s,
const LFSV_S & lfsv_s,
280 const LFSU_N & lfsu_n,
const LFSV_N & lfsv_n,
281 const LFSU_C & lfsu_c,
const LFSV_C & lfsv_c)
283 lae0->onUnbindLFSUVCoupling(ig,
287 lae1->onUnbindLFSUVCoupling(ig,
293 template<
typename IG,
298 const LFSV_S & lfsv_s,
299 const LFSV_N & lfsv_n,
300 const LFSV_C & lfsv_c)
302 lae0->onUnbindLFSVCoupling(ig,lfsv_s,lfsv_n,lfsv_c);
303 lae1->onUnbindLFSVCoupling(ig,lfsv_s,lfsv_n,lfsv_c);
311 template<
typename LFSU>
314 lae0->loadCoefficientsLFSUInside(lfsu_s);
315 lae1->loadCoefficientsLFSUInside(lfsu_s);
317 template<
typename LFSU>
320 lae0->loadCoefficientsLFSUOutside(lfsu_n);
321 lae1->loadCoefficientsLFSUOutside(lfsu_n);
323 template<
typename LFSU>
326 lae0->loadCoefficientsLFSUCoupling(lfsu_c);
327 lae1->loadCoefficientsLFSUCoupling(lfsu_c);
334 template<
typename EG>
338 rv &=
lae0->assembleCell(eg);
339 rv &=
lae1->assembleCell(eg);
343 template<
typename EG,
typename LFSU,
typename LFSV>
347 lae0->assembleUVVolume(eg,lfsu,lfsv);
348 lae1->assembleUVVolume(eg,lfsu,lfsv);
351 template<
typename EG,
typename LFSV>
355 lae0->assembleVVolume(eg,lfsv);
356 lae1->assembleVVolume(eg,lfsv);
359 template<
typename IG,
typename LFSU_S,
typename LFSV_S,
typename LFSU_N,
typename LFSV_N>
361 const LFSU_N & lfsu_n,
const LFSV_N & lfsv_n)
364 lae0->assembleUVSkeleton(ig,lfsu_s,lfsv_s,lfsu_n,lfsv_n);
365 lae1->assembleUVSkeleton(ig,lfsu_s,lfsv_s,lfsu_n,lfsv_n);
368 template<
typename IG,
typename LFSV_S,
typename LFSV_N>
372 lae0->assembleVSkeleton(ig,lfsv_s,lfsv_n);
373 lae1->assembleVSkeleton(ig,lfsv_s,lfsv_n);
376 template<
typename IG,
typename LFSU_S,
typename LFSV_S>
380 lae0->assembleUVBoundary(ig,lfsu_s,lfsv_s);
381 lae1->assembleUVBoundary(ig,lfsu_s,lfsv_s);
384 template<
typename IG,
typename LFSV_S>
388 lae0->assembleVBoundary(ig,lfsv_s);
389 lae1->assembleVBoundary(ig,lfsv_s);
392 template<
typename IG,
typename LFSU_S,
typename LFSV_S>
396 lae0->assembleUVProcessor(ig,lfsu_s,lfsv_s);
397 lae1->assembleUVProcessor(ig,lfsu_s,lfsv_s);
400 template<
typename IG,
typename LFSV_S>
404 lae0->assembleVProcessor(ig,lfsv_s);
405 lae1->assembleVProcessor(ig,lfsv_s);
408 template<
typename IG,
typename LFSU_S,
typename LFSV_S,
typename LFSU_N,
typename LFSV_N,
409 typename LFSU_C,
typename LFSV_C>
411 const LFSU_S & lfsu_s,
const LFSV_S & lfsv_s,
412 const LFSU_N & lfsu_n,
const LFSV_N & lfsv_n,
413 const LFSU_C & lfsu_c,
const LFSV_C & lfsv_c)
416 lae0->assembleUVEnrichedCoupling(ig,lfsu_s,lfsv_s,lfsu_n,lfsv_n,lfsu_c,lfsv_c);
417 lae1->assembleUVEnrichedCoupling(ig,lfsu_s,lfsv_s,lfsu_n,lfsv_n,lfsu_c,lfsv_c);
420 template<
typename IG,
typename LFSV_S,
typename LFSV_N,
typename LFSV_C>
422 const LFSV_S & lfsv_s,
423 const LFSV_N & lfsv_n,
424 const LFSV_C & lfsv_c)
427 lae0->assembleVEnrichedCoupling(ig,lfsv_s,lfsv_n,lfsv_c);
430 template<
typename EG,
typename LFSU,
typename LFSV>
434 lae0->assembleUVVolumePostSkeleton(eg,lfsu,lfsv);
437 template<
typename EG,
typename LFSV>
441 lae0->assembleVVolumePostSkeleton(eg,lfsv);
447 LocalAssemblerEngineDT0 *
const invalid_lae0;
448 LocalAssemblerEngineDT1 *
const invalid_lae1;
454 const LocalAssembler &
la;
456 LocalAssemblerEngineDT0 *
lae0;
457 LocalAssemblerEngineDT1 *
lae1;
466 #endif // DUNE_PDELAB_GRIDOPERATOR_ONESTEP_ENGINEBASE_HH const IG & ig
Definition: constraints.hh:148
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:161
bool needsConstraintsCaching(const TrialConstraintsContainer &cu, const TestConstraintsContainer &cv) const
Definition: enginebase.hh:24
bool requireSkeletonTwoSided() const
Definition: enginebase.hh:62
void setLocalAssemblerEngineDT1(LocalAssemblerEngineDT1 &lae1_)
Definition: enginebase.hh:119
const LocalAssembler & la
Definition: enginebase.hh:454
The local assembler engine for UDG sub triangulations which assembles the residual vector...
Definition: enginebase.hh:15
void onBindLFSVCoupling(const IG &ig, const LFSV_S &lfsv_s, const LFSV_N &lfsv_n, const LFSV_C &lfsv_c)
Definition: enginebase.hh:210
const LocalAssemblerEngineDT1 & localAssemblerEngineDT1() const
Definition: enginebase.hh:109
bool requireUVSkeleton() const
Definition: enginebase.hh:68
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:248
void assembleVSkeleton(const IG &ig, const LFSV_S &lfsv_s, const LFSV_N &lfsv_n)
Definition: enginebase.hh:369
bool requireVProcessor() const
Definition: enginebase.hh:78
LAE1 LocalAssemblerEngineDT1
Definition: enginebase.hh:36
LocalAssemblerEngineDT1 & localAssemblerEngineDT1()
Definition: enginebase.hh:104
void onUnbindLFSV(const EG &eg, const LFSV &lfsv)
Definition: enginebase.hh:232
GO::Traits::TrialGridFunctionSpaceConstraints TrialGridFunctionSpaceConstraints
The type of the trial grid function space constraints.
Definition: assemblerutilities.hh:33
LocalAssemblerEngineDT0 & localAssemblerEngineDT0()
Definition: enginebase.hh:94
void assembleVProcessor(const IG &ig, const LFSV_S &lfsv_s)
Definition: enginebase.hh:401
void assembleUVVolumePostSkeleton(const EG &eg, const LFSU &lfsu, const LFSV &lfsv)
Definition: enginebase.hh:431
bool requireSkeleton() const
Definition: enginebase.hh:60
void onUnbindLFSUVInside(const IG &ig, const LFSU &lfsu, const LFSV &lfsv)
Definition: enginebase.hh:239
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:360
const LocalAssembler & localAssembler()
Public access to the wrapping local assembler.
Definition: enginebase.hh:92
void setLocalAssemblerEngineDT0(LocalAssemblerEngineDT0 &lae0_)
Definition: enginebase.hh:114
bool assembleCell(const EG &eg)
Definition: enginebase.hh:335
bool implicit
Definition: enginebase.hh:459
void onUnbindLFSVInside(const IG &ig, const LFSV &lfsv)
Definition: enginebase.hh:257
For backward compatibility – Do not use this!
Definition: adaptivity.hh:27
bool requireUVVolumePostSkeleton() const
Definition: enginebase.hh:84
bool requireUVEnrichedCoupling() const
Definition: enginebase.hh:80
bool requireVVolumePostSkeleton() const
Definition: enginebase.hh:86
void onBindLFSV(const EG &eg, const LFSV &lfsv)
Definition: enginebase.hh:145
void assembleVEnrichedCoupling(const IG &ig, const LFSV_S &lfsv_s, const LFSV_N &lfsv_n, const LFSV_C &lfsv_c)
Definition: enginebase.hh:421
const LocalAssemblerEngineDT0 & localAssemblerEngineDT0() const
Definition: enginebase.hh:99
void assembleVVolumePostSkeleton(const EG &eg, const LFSV &lfsv)
Definition: enginebase.hh:438
OSLA::Real Real
The type for real numbers.
Definition: enginebase.hh:40
bool requireVVolume() const
Definition: enginebase.hh:66
void onBindLFSUVInside(const IG &ig, const LFSU &lfsu, const LFSV &lfsv)
Definition: enginebase.hh:152
void onUnbindLFSVCoupling(const IG &ig, const LFSV_S &lfsv_s, const LFSV_N &lfsv_n, const LFSV_C &lfsv_c)
Definition: enginebase.hh:297
LocalAssemblerEngineDT0 * lae0
Definition: enginebase.hh:456
bool requireVSkeleton() const
Definition: enginebase.hh:70
void assembleUVVolume(const EG &eg, const LFSU &lfsu, const LFSV &lfsv)
Definition: enginebase.hh:344
LocalAssemblerEngineDT1 * lae1
Definition: enginebase.hh:457
bool requireUVVolume() const
Definition: enginebase.hh:64
void assembleUVBoundary(const IG &ig, const LFSU_S &lfsu_s, const LFSV_S &lfsv_s)
Definition: enginebase.hh:377
void assembleUVProcessor(const IG &ig, const LFSU_S &lfsu_s, const LFSV_S &lfsv_s)
Definition: enginebase.hh:393
bool requireUVBoundary() const
Definition: enginebase.hh:72
void loadCoefficientsLFSUInside(const LFSU &lfsu_s)
Definition: enginebase.hh:312
void loadCoefficientsLFSUOutside(const LFSU &lfsu_n)
Definition: enginebase.hh:318
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:410
LAE0::Traits Traits
Definition: enginebase.hh:21
bool requireVEnrichedCoupling() const
Definition: enginebase.hh:82
bool requireVBoundary() const
Definition: enginebase.hh:74
GO::Traits::TestGridFunctionSpaceConstraints TestGridFunctionSpaceConstraints
The type of the test grid function space constraints.
Definition: assemblerutilities.hh:36
void loadCoefficientsLFSUCoupling(const LFSU &lfsu_c)
Definition: enginebase.hh:324
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:191
void onBindLFSVOutside(const IG &ig, const LFSV_S &lfsv_s, const LFSV_N &lfsv_n)
Definition: enginebase.hh:179
void onUnbindLFSUV(const EG &eg, const LFSU &lfsu, const LFSV &lfsv)
Definition: enginebase.hh:225
OSLA OneStepLocalAssembler
The type of the wrapping local assembler.
Definition: enginebase.hh:19
OSLA LocalAssembler
Definition: enginebase.hh:42
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:278
void onBindLFSUV(const EG &eg, const LFSU &lfsu, const LFSV &lfsv)
Definition: enginebase.hh:138
bool requireUVProcessor() const
Definition: enginebase.hh:76
void assembleVVolume(const EG &eg, const LFSV &lfsv)
Definition: enginebase.hh:352
void assembleVBoundary(const IG &ig, const LFSV_S &lfsv_s)
Definition: enginebase.hh:385
void onUnbindLFSVOutside(const IG &ig, const LFSV_S &lfsv_s, const LFSV_N &lfsv_n)
Definition: enginebase.hh:266
OSLA::LocalAssemblerDT1 LocalAssemblerDT1
Definition: enginebase.hh:33
const OneStepLocalAssembler::Traits::TrialGridFunctionSpaceConstraints & trialConstraints() const
Definition: enginebase.hh:124
const OneStepLocalAssembler::Traits::TestGridFunctionSpaceConstraints & testConstraints() const
Definition: enginebase.hh:129
void onBindLFSVInside(const IG &ig, const LFSV &lfsv)
Definition: enginebase.hh:170
LAE0 LocalAssemblerEngineDT0
Definition: enginebase.hh:35
OneStepLocalAssemblerEngineBase(const LocalAssembler &local_assembler_)
Constructor.
Definition: enginebase.hh:50
OSLA::LocalAssemblerDT0 LocalAssemblerDT0
Definition: enginebase.hh:32