version 3.11-dev
discretization/cvfe/elementfluxvariablescache.hh
Go to the documentation of this file.
1// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2// vi: set et ts=4 sw=4 sts=4:
3//
4// SPDX-FileCopyrightText: Copyright © DuMux Project contributors, see AUTHORS.md in root folder
5// SPDX-License-Identifier: GPL-3.0-or-later
6//
12#ifndef DUMUX_DISCRETIZATION_CVFE_ELEMENT_FLUXVARSCACHE_HH
13#define DUMUX_DISCRETIZATION_CVFE_ELEMENT_FLUXVARSCACHE_HH
14
15#include <cstddef>
16#include <vector>
17#include <utility>
18
19#include <dune/common/std/type_traits.hh>
20
21#include <dumux/common/concepts/ipdata_.hh>
23
24namespace Dumux {
25
26namespace Detail {
27
28template<class FluxVariablesCache>
29using DefinesScvfQuadratureRule = typename FluxVariablesCache::ScvfQuadratureRule;
30
31template<class FluxVariablesCache>
34 FluxVariablesCache>;
35
36} // namespace Detail
37
46template<class GFVC, bool cachingEnabled, class ScvfQuadratureRule>
48{};
49
54template<class GFVC, bool cachingEnabled>
56
61template<class GFVC, class ScvfQR>
62class CVFEElementFluxVariablesCacheImpl<GFVC, true, ScvfQR>
63{
64public:
67
69 using FluxVariablesCache = typename GFVC::FluxVariablesCache;
70
72 : gridFluxVarsCachePtr_(&global) {}
73
74 // Function is called prior to flux calculations on the element.
75 // We assume the FVGeometries to be bound at this point
76 template<class FVElementGeometry, class ElementVolumeVariables>
77 void bind(const typename FVElementGeometry::GridGeometry::GridView::template Codim<0>::Entity& element,
78 const FVElementGeometry& fvGeometry,
79 const ElementVolumeVariables& elemVolVars) &
80 { bindElement(element, fvGeometry, elemVolVars); }
81
87 template<class FVElementGeometry, class ElementVolumeVariables>
88 CVFEElementFluxVariablesCacheImpl bind(const typename FVElementGeometry::GridGeometry::GridView::template Codim<0>::Entity& element,
89 const FVElementGeometry& fvGeometry,
90 const ElementVolumeVariables& elemVolVars) &&
91 {
92 this->bind(element, fvGeometry, elemVolVars);
93 return std::move(*this);
94 }
95
96 template<class FVElementGeometry, class ElementVolumeVariables>
97 void bindElement(const typename FVElementGeometry::GridGeometry::GridView::template Codim<0>::Entity& element,
98 const FVElementGeometry& fvGeometry,
99 const ElementVolumeVariables& elemVolVars) &
100 { eIdx_ = fvGeometry.gridGeometry().elementMapper().index(element); }
101
107 template<class FVElementGeometry, class ElementVolumeVariables>
108 CVFEElementFluxVariablesCacheImpl bindElement(const typename FVElementGeometry::GridGeometry::GridView::template Codim<0>::Entity& element,
109 const FVElementGeometry& fvGeometry,
110 const ElementVolumeVariables& elemVolVars) &&
111 {
112 this->bindElement(element, fvGeometry, elemVolVars);
113 return std::move(*this);
114 }
115
116 template<class FVElementGeometry, class ElementVolumeVariables>
117 void bindScvf(const typename FVElementGeometry::GridGeometry::GridView::template Codim<0>::Entity& element,
118 const FVElementGeometry& fvGeometry,
119 const ElementVolumeVariables& elemVolVars,
120 const typename FVElementGeometry::SubControlVolumeFace& scvf) &
121 { bindElement(element, fvGeometry, elemVolVars); }
122
128 template<class FVElementGeometry, class ElementVolumeVariables>
129 CVFEElementFluxVariablesCacheImpl bindScvf(const typename FVElementGeometry::GridGeometry::GridView::template Codim<0>::Entity& element,
130 const FVElementGeometry& fvGeometry,
131 const ElementVolumeVariables& elemVolVars,
132 const typename FVElementGeometry::SubControlVolumeFace& scvf) &&
133 {
134 this->bindScvf(element, fvGeometry, elemVolVars, scvf);
135 return std::move(*this);
136 }
137
139 template<class FVElementGeometry, class ElementVolumeVariables>
140 void update(const typename FVElementGeometry::Element& element,
141 const FVElementGeometry& fvGeometry,
142 const ElementVolumeVariables& elemVolVars) {}
143
144 // access operator
145 template<class SubControlVolumeFace>
146 const FluxVariablesCache& operator [](const SubControlVolumeFace& scvf) const
147 {
148 if constexpr (std::is_same_v<ScvfQR, QuadratureRules::MidpointQuadrature>)
149 return gridFluxVarsCache().cache(eIdx_, scvf.index());
150 else
151 DUNE_THROW(Dune::NotImplemented, "CVFEElementFluxVariablesCache: Scvf access operator only implemented for MidpointQuadrature.");
152 }
153
154 // access cache for given interpolation point data
155 template<Concept::ScvfIpData IpData>
156 const FluxVariablesCache& operator [](const IpData& ipData) const
157 {
158 if constexpr (std::is_same_v<ScvfQR, QuadratureRules::MidpointQuadrature>)
159 return gridFluxVarsCache().cache(eIdx_, ipData.scvfIndex());
160 else
161 return gridFluxVarsCache().cache(eIdx_, ipData.scvfIndex(), ipData.qpIndex());
162 }
163
166 { return *gridFluxVarsCachePtr_; }
167
168private:
169 const GridFluxVariablesCache* gridFluxVarsCachePtr_;
170 std::size_t eIdx_;
171};
172
177template<class GFVC>
178class CVFEElementFluxVariablesCacheImpl<GFVC, false, QuadratureRules::MidpointQuadrature>
179{
180public:
183
185 using FluxVariablesCache = typename GFVC::FluxVariablesCache;
186
188 : gridFluxVarsCachePtr_(&global) {}
189
190 // Function is called prior to flux calculations on the element.
191 // We assume the FVGeometries to be bound at this point
192 template<class FVElementGeometry, class ElementVolumeVariables>
193 void bind(const typename FVElementGeometry::GridGeometry::GridView::template Codim<0>::Entity& element,
194 const FVElementGeometry& fvGeometry,
195 const ElementVolumeVariables& elemVolVars) &
196 {
197 bindElement(element, fvGeometry, elemVolVars);
198 }
199
205 template<class FVElementGeometry, class ElementVolumeVariables>
206 CVFEElementFluxVariablesCacheImpl bind(const typename FVElementGeometry::GridGeometry::GridView::template Codim<0>::Entity& element,
207 const FVElementGeometry& fvGeometry,
208 const ElementVolumeVariables& elemVolVars) &&
209 {
210 this->bind(element, fvGeometry, elemVolVars);
211 return std::move(*this);
212 }
213
214 template<class FVElementGeometry, class ElementVolumeVariables>
215 void bindElement(const typename FVElementGeometry::GridGeometry::GridView::template Codim<0>::Entity& element,
216 const FVElementGeometry& fvGeometry,
217 const ElementVolumeVariables& elemVolVars) &
218 {
219 // temporary resizing of the cache
220 fluxVarsCache_.resize(fvGeometry.numScvf());
221 for (auto&& scvf : scvfs(fvGeometry))
222 (*this)[scvf].update(gridFluxVarsCache().problem(), element, fvGeometry, elemVolVars, scvf);
223 }
224
230 template<class FVElementGeometry, class ElementVolumeVariables>
231 CVFEElementFluxVariablesCacheImpl bindElement(const typename FVElementGeometry::GridGeometry::GridView::template Codim<0>::Entity& element,
232 const FVElementGeometry& fvGeometry,
233 const ElementVolumeVariables& elemVolVars) &&
234 {
235 this->bindElement(element, fvGeometry, elemVolVars);
236 return std::move(*this);
237 }
238
239 template<class FVElementGeometry, class ElementVolumeVariables>
240 void bindScvf(const typename FVElementGeometry::GridGeometry::GridView::template Codim<0>::Entity& element,
241 const FVElementGeometry& fvGeometry,
242 const ElementVolumeVariables& elemVolVars,
243 const typename FVElementGeometry::SubControlVolumeFace& scvf) &
244 {
245 fluxVarsCache_.resize(fvGeometry.numScvf());
246 (*this)[scvf].update(gridFluxVarsCache().problem(), element, fvGeometry, elemVolVars, scvf);
247 }
248
254 template<class FVElementGeometry, class ElementVolumeVariables>
255 CVFEElementFluxVariablesCacheImpl bindScvf(const typename FVElementGeometry::GridGeometry::GridView::template Codim<0>::Entity& element,
256 const FVElementGeometry& fvGeometry,
257 const ElementVolumeVariables& elemVolVars,
258 const typename FVElementGeometry::SubControlVolumeFace& scvf) &&
259 {
260 this->bindScvf(element, fvGeometry, elemVolVars, scvf);
261 return std::move(*this);
262 }
263
268 template<class FVElementGeometry, class ElementVolumeVariables>
269 void update(const typename FVElementGeometry::Element& element,
270 const FVElementGeometry& fvGeometry,
271 const ElementVolumeVariables& elemVolVars)
272 {
273 if constexpr (FluxVariablesCache::isSolDependent)
274 {
275 fluxVarsCache_.resize(fvGeometry.numScvf());
276 for (const auto& scvf : scvfs(fvGeometry))
277 (*this)[scvf].update(gridFluxVarsCache().problem(), element, fvGeometry, elemVolVars, scvf);
278 }
279 }
280
281 // access operator
282 template<class SubControlVolumeFace>
283 const FluxVariablesCache& operator [](const SubControlVolumeFace& scvf) const
284 { return fluxVarsCache_[scvf.index()]; }
285
286 // access operator
287 template<class SubControlVolumeFace>
288 FluxVariablesCache& operator [](const SubControlVolumeFace& scvf)
289 { return fluxVarsCache_[scvf.index()]; }
290
291 // access cache for a given interpolation point data
292 template<Concept::ScvfIpData IpData>
293 const FluxVariablesCache& operator [](const IpData& ipData) const
294 { return fluxVarsCache_[ipData.scvfIndex()]; }
295
296 // access cache for a given interpolation point data
297 template<Concept::ScvfIpData IpData>
298 FluxVariablesCache& operator [](const IpData& ipData)
299 { return fluxVarsCache_[ipData.scvfIndex()]; }
300
303 { return *gridFluxVarsCachePtr_; }
304
305private:
306 const GridFluxVariablesCache* gridFluxVarsCachePtr_;
307 std::vector<FluxVariablesCache> fluxVarsCache_;
308};
309
314template<class GFVC, class ScvfQR>
315class CVFEElementFluxVariablesCacheImpl<GFVC, false, ScvfQR>
316{
317public:
320
322 using FluxVariablesCache = typename GFVC::FluxVariablesCache;
323
325 : gridFluxVarsCachePtr_(&global) {}
326
327 // Function is called prior to flux calculations on the element.
328 // We assume the FVGeometries to be bound at this point
329 template<class FVElementGeometry, class ElementVolumeVariables>
330 void bind(const typename FVElementGeometry::GridGeometry::GridView::template Codim<0>::Entity& element,
331 const FVElementGeometry& fvGeometry,
332 const ElementVolumeVariables& elemVolVars) &
333 {
334 bindElement(element, fvGeometry, elemVolVars);
335 }
336
342 template<class FVElementGeometry, class ElementVolumeVariables>
343 CVFEElementFluxVariablesCacheImpl bind(const typename FVElementGeometry::GridGeometry::GridView::template Codim<0>::Entity& element,
344 const FVElementGeometry& fvGeometry,
345 const ElementVolumeVariables& elemVolVars) &&
346 {
347 this->bind(element, fvGeometry, elemVolVars);
348 return std::move(*this);
349 }
350
351 template<class FVElementGeometry, class ElementVolumeVariables>
352 void bindElement(const typename FVElementGeometry::GridGeometry::GridView::template Codim<0>::Entity& element,
353 const FVElementGeometry& fvGeometry,
354 const ElementVolumeVariables& elemVolVars) &
355 {
356 // temporary resizing of the cache
357 fluxVarsCache_.resize(fvGeometry.numScvf());
358 for (auto&& scvf : scvfs(fvGeometry))
359 {
360 const auto quadRule = CVFE::quadratureRule(fvGeometry, scvf);
361 fluxVarsCache_[scvf.index()].resize(std::ranges::size(quadRule));
362 for (const auto& qpData : quadRule)
363 fluxVarsCache_[scvf.index()][qpData.ipData().qpIndex()].update(
364 gridFluxVarsCache().problem(), element, fvGeometry, elemVolVars, qpData.ipData()
365 );
366 }
367 }
368
374 template<class FVElementGeometry, class ElementVolumeVariables>
375 CVFEElementFluxVariablesCacheImpl bindElement(const typename FVElementGeometry::GridGeometry::GridView::template Codim<0>::Entity& element,
376 const FVElementGeometry& fvGeometry,
377 const ElementVolumeVariables& elemVolVars) &&
378 {
379 this->bindElement(element, fvGeometry, elemVolVars);
380 return std::move(*this);
381 }
382
383 template<class FVElementGeometry, class ElementVolumeVariables>
384 void bindScvf(const typename FVElementGeometry::GridGeometry::GridView::template Codim<0>::Entity& element,
385 const FVElementGeometry& fvGeometry,
386 const ElementVolumeVariables& elemVolVars,
387 const typename FVElementGeometry::SubControlVolumeFace& scvf) &
388 {
389 fluxVarsCache_.resize(fvGeometry.numScvf());
390 const auto quadRule = CVFE::quadratureRule(fvGeometry, scvf);
391 fluxVarsCache_[scvf.index()].resize(std::ranges::size(quadRule));
392 for (const auto& qpData : quadRule)
393 fluxVarsCache_[scvf.index()][qpData.ipData().qpIndex()].update(
394 gridFluxVarsCache().problem(), element, fvGeometry, elemVolVars, qpData.ipData()
395 );
396 }
397
403 template<class FVElementGeometry, class ElementVolumeVariables>
404 CVFEElementFluxVariablesCacheImpl bindScvf(const typename FVElementGeometry::GridGeometry::GridView::template Codim<0>::Entity& element,
405 const FVElementGeometry& fvGeometry,
406 const ElementVolumeVariables& elemVolVars,
407 const typename FVElementGeometry::SubControlVolumeFace& scvf) &&
408 {
409 this->bindScvf(element, fvGeometry, elemVolVars, scvf);
410 return std::move(*this);
411 }
412
417 template<class FVElementGeometry, class ElementVolumeVariables>
418 void update(const typename FVElementGeometry::Element& element,
419 const FVElementGeometry& fvGeometry,
420 const ElementVolumeVariables& elemVolVars)
421 {
422 if constexpr (FluxVariablesCache::isSolDependent)
423 {
424 fluxVarsCache_.resize(fvGeometry.numScvf());
425 for (const auto& scvf : scvfs(fvGeometry))
426 {
427 const auto quadRule = CVFE::quadratureRule(fvGeometry, scvf);
428 fluxVarsCache_[scvf.index()].resize(std::ranges::size(quadRule));
429 for (const auto& qpData : quadRule)
430 fluxVarsCache_[scvf.index()][qpData.ipData().qpIndex()].update(
431 gridFluxVarsCache().problem(), element, fvGeometry, elemVolVars, qpData.ipData()
432 );
433 }
434 }
435 }
436
437 // access cache for a given interpolation point data
438 template<Concept::ScvfQpIpData IpData>
439 const FluxVariablesCache& operator [](const IpData& ipData) const
440 { return fluxVarsCache_[ipData.scvfIndex()][ipData.qpIndex()]; }
441
442 // access cache for a given interpolation point data
443 template<Concept::ScvfQpIpData IpData>
444 FluxVariablesCache& operator [](const IpData& ipData)
445 { return fluxVarsCache_[ipData.scvfIndex()][ipData.qpIndex()]; }
446
449 { return *gridFluxVarsCachePtr_; }
450
451private:
452 const GridFluxVariablesCache* gridFluxVarsCachePtr_;
453 std::vector<std::vector<FluxVariablesCache>> fluxVarsCache_;
454};
455
456} // end namespace Dumux
457
458#endif
CVFEElementFluxVariablesCacheImpl bindElement(const typename FVElementGeometry::GridGeometry::GridView::template Codim< 0 >::Entity &element, const FVElementGeometry &fvGeometry, const ElementVolumeVariables &elemVolVars) &&
bind the local view (r-value overload) This overload is called when an instance of this class is a te...
Definition: discretization/cvfe/elementfluxvariablescache.hh:231
void bind(const typename FVElementGeometry::GridGeometry::GridView::template Codim< 0 >::Entity &element, const FVElementGeometry &fvGeometry, const ElementVolumeVariables &elemVolVars) &
Definition: discretization/cvfe/elementfluxvariablescache.hh:193
void bindElement(const typename FVElementGeometry::GridGeometry::GridView::template Codim< 0 >::Entity &element, const FVElementGeometry &fvGeometry, const ElementVolumeVariables &elemVolVars) &
Definition: discretization/cvfe/elementfluxvariablescache.hh:215
typename GFVC::FluxVariablesCache FluxVariablesCache
export the type of the flux variables cache
Definition: discretization/cvfe/elementfluxvariablescache.hh:185
CVFEElementFluxVariablesCacheImpl bind(const typename FVElementGeometry::GridGeometry::GridView::template Codim< 0 >::Entity &element, const FVElementGeometry &fvGeometry, const ElementVolumeVariables &elemVolVars) &&
bind the local view (r-value overload) This overload is called when an instance of this class is a te...
Definition: discretization/cvfe/elementfluxvariablescache.hh:206
CVFEElementFluxVariablesCacheImpl bindScvf(const typename FVElementGeometry::GridGeometry::GridView::template Codim< 0 >::Entity &element, const FVElementGeometry &fvGeometry, const ElementVolumeVariables &elemVolVars, const typename FVElementGeometry::SubControlVolumeFace &scvf) &&
bind the local view (r-value overload) This overload is called when an instance of this class is a te...
Definition: discretization/cvfe/elementfluxvariablescache.hh:255
const GridFluxVariablesCache & gridFluxVarsCache() const
The global object we are a restriction of.
Definition: discretization/cvfe/elementfluxvariablescache.hh:302
void bindScvf(const typename FVElementGeometry::GridGeometry::GridView::template Codim< 0 >::Entity &element, const FVElementGeometry &fvGeometry, const ElementVolumeVariables &elemVolVars, const typename FVElementGeometry::SubControlVolumeFace &scvf) &
Definition: discretization/cvfe/elementfluxvariablescache.hh:240
void update(const typename FVElementGeometry::Element &element, const FVElementGeometry &fvGeometry, const ElementVolumeVariables &elemVolVars)
Update the caches if the volume variables have changed and the cache is solution-dependent.
Definition: discretization/cvfe/elementfluxvariablescache.hh:269
GFVC GridFluxVariablesCache
export the type of the grid flux variables cache
Definition: discretization/cvfe/elementfluxvariablescache.hh:182
CVFEElementFluxVariablesCacheImpl(const GridFluxVariablesCache &global)
Definition: discretization/cvfe/elementfluxvariablescache.hh:187
typename GFVC::FluxVariablesCache FluxVariablesCache
export the type of the flux variables cache
Definition: discretization/cvfe/elementfluxvariablescache.hh:322
void bindElement(const typename FVElementGeometry::GridGeometry::GridView::template Codim< 0 >::Entity &element, const FVElementGeometry &fvGeometry, const ElementVolumeVariables &elemVolVars) &
Definition: discretization/cvfe/elementfluxvariablescache.hh:352
void bindScvf(const typename FVElementGeometry::GridGeometry::GridView::template Codim< 0 >::Entity &element, const FVElementGeometry &fvGeometry, const ElementVolumeVariables &elemVolVars, const typename FVElementGeometry::SubControlVolumeFace &scvf) &
Definition: discretization/cvfe/elementfluxvariablescache.hh:384
CVFEElementFluxVariablesCacheImpl(const GridFluxVariablesCache &global)
Definition: discretization/cvfe/elementfluxvariablescache.hh:324
GFVC GridFluxVariablesCache
export the type of the grid flux variables cache
Definition: discretization/cvfe/elementfluxvariablescache.hh:319
const GridFluxVariablesCache & gridFluxVarsCache() const
The global object we are a restriction of.
Definition: discretization/cvfe/elementfluxvariablescache.hh:448
void update(const typename FVElementGeometry::Element &element, const FVElementGeometry &fvGeometry, const ElementVolumeVariables &elemVolVars)
Update the caches if the volume variables have changed and the cache is solution-dependent.
Definition: discretization/cvfe/elementfluxvariablescache.hh:418
CVFEElementFluxVariablesCacheImpl bindScvf(const typename FVElementGeometry::GridGeometry::GridView::template Codim< 0 >::Entity &element, const FVElementGeometry &fvGeometry, const ElementVolumeVariables &elemVolVars, const typename FVElementGeometry::SubControlVolumeFace &scvf) &&
bind the local view (r-value overload) This overload is called when an instance of this class is a te...
Definition: discretization/cvfe/elementfluxvariablescache.hh:404
CVFEElementFluxVariablesCacheImpl bind(const typename FVElementGeometry::GridGeometry::GridView::template Codim< 0 >::Entity &element, const FVElementGeometry &fvGeometry, const ElementVolumeVariables &elemVolVars) &&
bind the local view (r-value overload) This overload is called when an instance of this class is a te...
Definition: discretization/cvfe/elementfluxvariablescache.hh:343
CVFEElementFluxVariablesCacheImpl bindElement(const typename FVElementGeometry::GridGeometry::GridView::template Codim< 0 >::Entity &element, const FVElementGeometry &fvGeometry, const ElementVolumeVariables &elemVolVars) &&
bind the local view (r-value overload) This overload is called when an instance of this class is a te...
Definition: discretization/cvfe/elementfluxvariablescache.hh:375
void bind(const typename FVElementGeometry::GridGeometry::GridView::template Codim< 0 >::Entity &element, const FVElementGeometry &fvGeometry, const ElementVolumeVariables &elemVolVars) &
Definition: discretization/cvfe/elementfluxvariablescache.hh:330
CVFEElementFluxVariablesCacheImpl bindScvf(const typename FVElementGeometry::GridGeometry::GridView::template Codim< 0 >::Entity &element, const FVElementGeometry &fvGeometry, const ElementVolumeVariables &elemVolVars, const typename FVElementGeometry::SubControlVolumeFace &scvf) &&
bind the local view (r-value overload) This overload is called when an instance of this class is a te...
Definition: discretization/cvfe/elementfluxvariablescache.hh:129
CVFEElementFluxVariablesCacheImpl bind(const typename FVElementGeometry::GridGeometry::GridView::template Codim< 0 >::Entity &element, const FVElementGeometry &fvGeometry, const ElementVolumeVariables &elemVolVars) &&
bind the local view (r-value overload) This overload is called when an instance of this class is a te...
Definition: discretization/cvfe/elementfluxvariablescache.hh:88
void bind(const typename FVElementGeometry::GridGeometry::GridView::template Codim< 0 >::Entity &element, const FVElementGeometry &fvGeometry, const ElementVolumeVariables &elemVolVars) &
Definition: discretization/cvfe/elementfluxvariablescache.hh:77
void update(const typename FVElementGeometry::Element &element, const FVElementGeometry &fvGeometry, const ElementVolumeVariables &elemVolVars)
Specialization for the global caching being enabled - do nothing here.
Definition: discretization/cvfe/elementfluxvariablescache.hh:140
GFVC GridFluxVariablesCache
export the type of the grid flux variables cache
Definition: discretization/cvfe/elementfluxvariablescache.hh:66
typename GFVC::FluxVariablesCache FluxVariablesCache
export the type of the flux variables cache
Definition: discretization/cvfe/elementfluxvariablescache.hh:69
const GridFluxVariablesCache & gridFluxVarsCache() const
The global object we are a restriction of.
Definition: discretization/cvfe/elementfluxvariablescache.hh:165
void bindScvf(const typename FVElementGeometry::GridGeometry::GridView::template Codim< 0 >::Entity &element, const FVElementGeometry &fvGeometry, const ElementVolumeVariables &elemVolVars, const typename FVElementGeometry::SubControlVolumeFace &scvf) &
Definition: discretization/cvfe/elementfluxvariablescache.hh:117
CVFEElementFluxVariablesCacheImpl(const GridFluxVariablesCache &global)
Definition: discretization/cvfe/elementfluxvariablescache.hh:71
void bindElement(const typename FVElementGeometry::GridGeometry::GridView::template Codim< 0 >::Entity &element, const FVElementGeometry &fvGeometry, const ElementVolumeVariables &elemVolVars) &
Definition: discretization/cvfe/elementfluxvariablescache.hh:97
CVFEElementFluxVariablesCacheImpl bindElement(const typename FVElementGeometry::GridGeometry::GridView::template Codim< 0 >::Entity &element, const FVElementGeometry &fvGeometry, const ElementVolumeVariables &elemVolVars) &&
bind the local view (r-value overload) This overload is called when an instance of this class is a te...
Definition: discretization/cvfe/elementfluxvariablescache.hh:108
The flux variables caches for an element.
Definition: discretization/cvfe/elementfluxvariablescache.hh:48
auto quadratureRule(const FVElementGeometry &fvGeometry, const typename FVElementGeometry::SubControlVolume &scv, QuadratureRules::MidpointQuadrature)
Midpoint quadrature for scv.
Definition: quadraturerules.hh:148
Dune::Std::detected_or_t< QuadratureRules::MidpointQuadrature, DefinesScvfQuadratureRule, FluxVariablesCache > ScvfQuadratureRuleOrDefault_t
Definition: discretization/cvfe/elementfluxvariablescache.hh:34
typename FluxVariablesCache::ScvfQuadratureRule DefinesScvfQuadratureRule
Definition: discretization/cvfe/elementfluxvariablescache.hh:29
Definition: adapt.hh:17
Quadrature rules over sub-control volumes and sub-control volume faces.
Midpoint quadrature rule that uses scv/scvf centers.
Definition: quadraturerules.hh:58