24#ifndef DUMUX_DISCRETIZATION_CCMPFA_ELEMENT_FLUXVARSCACHE_HH
25#define DUMUX_DISCRETIZATION_CCMPFA_ELEMENT_FLUXVARSCACHE_HH
32#include <dune/common/exceptions.hh>
40template<
class PrimaryIV,
class PrimaryIVDataHandle,
41 class SecondaryIV,
class SecondaryIVDataHandle>
60template<
class GFVC,
bool cachingEnabled>
83 static constexpr bool cachingEnabled =
true;
90 using FluxVariablesCacheFiller =
typename GFVC::Traits::FluxVariablesCacheFiller;
93 class BoundaryCacheData
100 template<
class SubControlVolumeFace>
102 {
return fluxVarCaches_[getLocalIdx_(scvf.index())]; }
104 template<
class SubControlVolumeFace>
106 {
return fluxVarCaches_[getLocalIdx_(scvf.index())]; }
111 fluxVarCaches_.clear();
112 cacheScvfIndices_.clear();
113 ivDataStorage_.primaryInteractionVolumes.clear();
114 ivDataStorage_.secondaryInteractionVolumes.clear();
115 ivDataStorage_.primaryDataHandles.clear();
116 ivDataStorage_.secondaryDataHandles.clear();
121 int getLocalIdx_(
const int scvfIdx)
const
123 auto it = std::find(cacheScvfIndices_.begin(), cacheScvfIndices_.end(), scvfIdx);
124 assert(it != cacheScvfIndices_.end() &&
"Could not find the local idx for the given scvf idx!");
128 std::vector<std::size_t> cacheScvfIndices_;
129 std::vector<FluxVariablesCache> fluxVarCaches_;
136 IVDataStorage ivDataStorage_;
142 : gridFluxVarsCachePtr_(&global)
146 template<
class FVElementGeometry,
class ElementVolumeVariables>
147 void bindElement(
const typename FVElementGeometry::GridGeometry::GridView::template Codim<0>::Entity& element,
148 const FVElementGeometry& fvGeometry,
149 const ElementVolumeVariables& elemVolVars)
150 { DUNE_THROW(Dune::NotImplemented,
"Local element binding of the flux variables cache in mpfa schemes"); }
153 template<
class FVElementGeometry,
class ElementVolumeVariables>
154 void bind(
const typename FVElementGeometry::GridGeometry::GridView::template Codim<0>::Entity& element,
155 const FVElementGeometry& fvGeometry,
156 const ElementVolumeVariables& elemVolVars)
158 boundaryCacheData_.clear();
161 std::size_t numPrimaryIv; numPrimaryIv = 0;
162 std::size_t numSecondaryIv; numSecondaryIv = 0;
163 std::size_t numCaches; numCaches = 0;
165 const auto& gridGeometry = fvGeometry.gridGeometry();
166 const auto& gridIvIndexSets = gridGeometry.gridInteractionVolumeIndexSets();
169 auto scvfHandled = [&] (
auto idx)
171 return std::find(boundaryCacheData_.cacheScvfIndices_.begin(),
172 boundaryCacheData_.cacheScvfIndices_.end(),
173 idx) != boundaryCacheData_.cacheScvfIndices_.end();
177 auto handleScvf = [&] (
const auto& scvf,
const auto& indexSet,
bool isSecondary)
179 const auto& scvfIndices = indexSet.gridScvfIndices();
180 if ( indexSet.nodalIndexSet().numBoundaryScvfs() > 0
181 && !std::any_of(scvfIndices.begin(), scvfIndices.end(), scvfHandled) )
183 boundaryCacheData_.cacheScvfIndices_.insert(boundaryCacheData_.cacheScvfIndices_.end(),
186 numCaches += scvfIndices.size();
187 if (isSecondary) numSecondaryIv++;
193 for (
const auto& scvf : scvfs(fvGeometry))
194 gridGeometry.vertexUsesSecondaryInteractionVolume(scvf.vertexIndex()) ?
195 handleScvf(scvf, gridIvIndexSets.secondaryIndexSet(scvf),
true) :
196 handleScvf(scvf, gridIvIndexSets.primaryIndexSet(scvf),
false) ;
201 const auto& assemblyMapI = gridGeometry.connectivityMap()[gridGeometry.elementMapper().index(element)];
203 for (
const auto& dataJ : assemblyMapI)
205 for (
const auto& scvfJIdx : dataJ.scvfsJ)
207 const auto& scvfJ = fvGeometry.scvf(scvfJIdx);
208 if (gridGeometry.vertexUsesSecondaryInteractionVolume(scvfJ.vertexIndex()))
209 handleScvf(scvfJ, gridIvIndexSets.secondaryIndexSet(scvfJ),
true);
211 handleScvf(scvfJ, gridIvIndexSets.primaryIndexSet(scvfJ),
false);
216 boundaryCacheData_.ivDataStorage_.primaryInteractionVolumes.reserve(numPrimaryIv);
217 boundaryCacheData_.ivDataStorage_.secondaryInteractionVolumes.reserve(numSecondaryIv);
218 boundaryCacheData_.ivDataStorage_.primaryDataHandles.reserve(numPrimaryIv);
219 boundaryCacheData_.ivDataStorage_.secondaryDataHandles.reserve(numSecondaryIv);
221 boundaryCacheData_.fluxVarCaches_.resize(numCaches);
222 for (
auto& cache : boundaryCacheData_.fluxVarCaches_)
223 cache.setUpdateStatus(
false);
225 FluxVariablesCacheFiller filler(gridFluxVarsCachePtr_->problem());
226 for (
auto scvfIdx : boundaryCacheData_.cacheScvfIndices_)
228 const auto& scvf = fvGeometry.scvf(scvfIdx);
229 auto& cache = boundaryCacheData_[scvf];
230 if (!cache.isUpdated())
231 filler.fill(boundaryCacheData_, cache, boundaryCacheData_.ivDataStorage_,
232 element, fvGeometry, elemVolVars, scvf,
true);
238 template<
class FVElementGeometry,
class ElementVolumeVariables>
239 void bindScvf(
const typename FVElementGeometry::GridGeometry::GridView::template Codim<0>::Entity& element,
240 const FVElementGeometry& fvGeometry,
241 const ElementVolumeVariables& elemVolVars,
242 const typename FVElementGeometry::SubControlVolumeFace& scvf)
243 { DUNE_THROW(Dune::NotImplemented,
"Scvf-local binding of the flux variables cache in mpfa schemes"); }
246 template<
class FVElementGeometry,
class ElementVolumeVariables>
247 void update(
const typename FVElementGeometry::GridGeometry::GridView::template Codim<0>::Entity& element,
248 const FVElementGeometry& fvGeometry,
249 const ElementVolumeVariables& elemVolVars)
252 if (FluxVariablesCacheFiller::isSolDependent)
255 FluxVariablesCacheFiller filler(gridFluxVarsCachePtr_->problem());
258 for (
auto& cache : boundaryCacheData_.fluxVarCaches_)
259 cache.setUpdateStatus(
false);
262 std::size_t cacheIdx = 0;
263 for (
auto scvfIdx : boundaryCacheData_.cacheScvfIndices_)
265 auto& scvfCache = boundaryCacheData_.fluxVarCaches_[cacheIdx++];
266 if (!scvfCache.isUpdated())
267 filler.fill(boundaryCacheData_, scvfCache, boundaryCacheData_.ivDataStorage_,
268 element, fvGeometry, elemVolVars, fvGeometry.scvf(scvfIdx));
274 template<
class SubControlVolumeFace>
276 {
return !isEmbeddedInBoundaryIV_(scvf) ? (*gridFluxVarsCachePtr_)[scvf] : boundaryCacheData_[scvf]; }
279 template<
class SubControlVolumeFace>
282 return isEmbeddedInBoundaryIV_(scvf)
283 ? boundaryCacheData_.ivDataStorage_.primaryInteractionVolumes[ (*this)[scvf].ivIndexInContainer() ]
284 : gridFluxVarsCachePtr_->primaryInteractionVolume(scvf);
288 template<
class SubControlVolumeFace>
291 return isEmbeddedInBoundaryIV_(scvf)
292 ? boundaryCacheData_.ivDataStorage_.primaryDataHandles[ (*this)[scvf].ivIndexInContainer() ]
293 : gridFluxVarsCachePtr_->primaryDataHandle(scvf);
297 template<
class SubControlVolumeFace>
300 return isEmbeddedInBoundaryIV_(scvf)
301 ? boundaryCacheData_.ivDataStorage_.secondaryInteractionVolumes[ (*this)[scvf].ivIndexInContainer() ]
302 : gridFluxVarsCachePtr_->secondaryInteractionVolume(scvf);
306 template<
class SubControlVolumeFace>
309 return isEmbeddedInBoundaryIV_(scvf)
310 ? boundaryCacheData_.ivDataStorage_.secondaryDataHandles[ (*this)[scvf].ivIndexInContainer() ]
311 : gridFluxVarsCachePtr_->secondaryDataHandle(scvf);
316 {
return *gridFluxVarsCachePtr_; }
320 template<
class SubControlVolumeFace>
321 bool isEmbeddedInBoundaryIV_(
const SubControlVolumeFace& scvf)
const
323 const auto& gridGeometry = gridFluxVarsCachePtr_->problem().gridGeometry();
324 const auto& gridIvIndexSets = gridGeometry.gridInteractionVolumeIndexSets();
325 if (gridGeometry.vertexUsesSecondaryInteractionVolume(scvf.vertexIndex()))
326 return gridIvIndexSets.secondaryIndexSet(scvf).nodalIndexSet().numBoundaryScvfs() > 0;
328 return gridIvIndexSets.primaryIndexSet(scvf).nodalIndexSet().numBoundaryScvfs() > 0;
331 const GridFluxVariablesCache* gridFluxVarsCachePtr_;
336 BoundaryCacheData boundaryCacheData_;
347 using FluxVariablesCacheFiller =
typename GFVC::Traits::FluxVariablesCacheFiller;
363 static constexpr bool cachingEnabled =
false;
369 : gridFluxVarsCachePtr_(&global) {}
376 template<
class FVElementGeometry,
class ElementVolumeVariables>
377 void bindElement(
const typename FVElementGeometry::GridGeometry::GridView::template Codim<0>::Entity& element,
378 const FVElementGeometry& fvGeometry,
379 const ElementVolumeVariables& elemVolVars)
383 DUNE_THROW(Dune::NotImplemented,
"Local element binding of the flux variables cache in mpfa schemes");
391 template<
class FVElementGeometry,
class ElementVolumeVariables>
392 void bind(
const typename FVElementGeometry::GridGeometry::GridView::template Codim<0>::Entity& element,
393 const FVElementGeometry& fvGeometry,
394 const ElementVolumeVariables& elemVolVars)
399 const auto& problem = gridFluxVarsCache().problem();
400 const auto& gridGeometry = fvGeometry.gridGeometry();
403 const auto& assemblyMapI = gridGeometry.connectivityMap()[gridGeometry.elementMapper().index(element)];
406 unsigned int numNeighborScvfs = 0;
407 for (
const auto& dataJ : assemblyMapI)
408 numNeighborScvfs += dataJ.scvfsJ.size();
409 globalScvfIndices_.resize(fvGeometry.numScvf() + numNeighborScvfs);
413 for (
const auto& scvf : scvfs(fvGeometry))
414 globalScvfIndices_[i++] = scvf.index();
415 for (
const auto& dataJ : assemblyMapI)
416 for (
auto scvfIdx : dataJ.scvfsJ)
417 globalScvfIndices_[i++] = scvfIdx;
424 constexpr auto numIvEstimate = FVElementGeometry::maxNumElementScvfs
425 * GridFluxVariablesCache::Traits::maxLocalElementLevelDifference();
426 ivDataStorage_.primaryInteractionVolumes.reserve(numIvEstimate);
427 ivDataStorage_.secondaryInteractionVolumes.reserve(numIvEstimate);
428 ivDataStorage_.primaryDataHandles.reserve(numIvEstimate);
429 ivDataStorage_.secondaryDataHandles.reserve(numIvEstimate);
432 FluxVariablesCacheFiller filler(problem);
435 fluxVarsCache_.resize(globalScvfIndices_.size());
439 for (
const auto& scvf : scvfs(fvGeometry))
441 auto& scvfCache = fluxVarsCache_[i++];
442 if (!scvfCache.isUpdated())
443 filler.fill(*
this, scvfCache, ivDataStorage_, element, fvGeometry, elemVolVars, scvf,
true);
446 for (
const auto& dataJ : assemblyMapI)
448 const auto elementJ = gridGeometry.element(dataJ.globalJ);
449 for (
const auto scvfIdx : dataJ.scvfsJ)
451 auto& scvfCache = fluxVarsCache_[i++];
452 if (!scvfCache.isUpdated())
453 filler.fill(*
this, scvfCache, ivDataStorage_, elementJ, fvGeometry, elemVolVars, fvGeometry.scvf(scvfIdx),
true);
463 template<
class FVElementGeometry,
class ElementVolumeVariables>
464 void bindScvf(
const typename FVElementGeometry::GridGeometry::GridView::template Codim<0>::Entity& element,
465 const FVElementGeometry& fvGeometry,
466 const ElementVolumeVariables& elemVolVars,
467 const typename FVElementGeometry::SubControlVolumeFace& scvf)
471 DUNE_THROW(Dune::NotImplemented,
"Scvf-local binding of the flux variables cache in mpfa schemes");
478 template<
class FVElementGeometry,
class ElementVolumeVariables>
479 void update(
const typename FVElementGeometry::GridGeometry::GridView::template Codim<0>::Entity& element,
480 const FVElementGeometry& fvGeometry,
481 const ElementVolumeVariables& elemVolVars)
485 if (FluxVariablesCacheFiller::isSolDependent)
487 const auto& problem = gridFluxVarsCache().problem();
488 const auto& gridGeometry = fvGeometry.gridGeometry();
489 const auto& assemblyMapI = gridGeometry.connectivityMap()[gridGeometry.elementMapper().index(element)];
492 FluxVariablesCacheFiller filler(problem);
495 for (
auto& cache : fluxVarsCache_)
496 cache.setUpdateStatus(
false);
500 for (
const auto& scvf : scvfs(fvGeometry))
502 auto& scvfCache = fluxVarsCache_[i++];
503 if (!scvfCache.isUpdated())
504 filler.fill(*
this, scvfCache, ivDataStorage_, element, fvGeometry, elemVolVars, scvf);
507 for (
const auto& dataJ : assemblyMapI)
509 const auto elementJ = gridGeometry.element(dataJ.globalJ);
510 for (
const auto scvfIdx : dataJ.scvfsJ)
512 auto& scvfCache = fluxVarsCache_[i++];
513 if (!scvfCache.isUpdated())
514 filler.fill(*
this, scvfCache, ivDataStorage_, elementJ, fvGeometry, elemVolVars, fvGeometry.scvf(scvfIdx));
521 template<class SubControlVolumeFace, typename std::enable_if_t<!std::is_integral<SubControlVolumeFace>::value,
int> = 0>
523 {
return fluxVarsCache_[getLocalScvfIdx_(scvf.index())]; }
527 {
return fluxVarsCache_[getLocalScvfIdx_(scvfIdx)]; }
530 template<class SubControlVolumeFace, typename std::enable_if_t<!std::is_integral<SubControlVolumeFace>::value,
int> = 0>
532 {
return fluxVarsCache_[getLocalScvfIdx_(scvf.index())]; }
536 {
return fluxVarsCache_[getLocalScvfIdx_(scvfIdx)]; }
539 template<
class SubControlVolumeFace>
541 {
return ivDataStorage_.primaryInteractionVolumes[ (*this)[scvf].ivIndexInContainer() ]; }
544 template<
class SubControlVolumeFace>
546 {
return ivDataStorage_.primaryDataHandles[ (*this)[scvf].ivIndexInContainer() ]; }
549 template<
class SubControlVolumeFace>
551 {
return ivDataStorage_.secondaryInteractionVolumes[ (*this)[scvf].ivIndexInContainer() ]; }
554 template<
class SubControlVolumeFace>
556 {
return ivDataStorage_.secondaryDataHandles[ (*this)[scvf].ivIndexInContainer() ]; }
560 {
return *gridFluxVarsCachePtr_; }
563 const GridFluxVariablesCache* gridFluxVarsCachePtr_;
568 fluxVarsCache_.clear();
569 globalScvfIndices_.clear();
570 ivDataStorage_.primaryInteractionVolumes.clear();
571 ivDataStorage_.secondaryInteractionVolumes.clear();
572 ivDataStorage_.primaryDataHandles.clear();
573 ivDataStorage_.secondaryDataHandles.clear();
577 unsigned int getLocalScvfIdx_(
const int scvfIdx)
const
579 auto it = std::find(globalScvfIndices_.begin(), globalScvfIndices_.end(), scvfIdx);
580 assert(it != globalScvfIndices_.end() &&
"Could not find the flux vars cache for scvfIdx");
585 std::vector<FluxVariablesCache> fluxVarsCache_;
586 std::vector<std::size_t> globalScvfIndices_;
589 using IVDataStorage = InteractionVolumeDataStorage<PrimaryInteractionVolume,
591 SecondaryInteractionVolume,
592 SecondaryIvDataHandle>;
593 IVDataStorage ivDataStorage_;
ctype distance(const Dune::FieldVector< ctype, dimWorld > &a, const Dune::FieldVector< ctype, dimWorld > &b)
Compute the shortest distance between two points.
Definition: distance.hh:138
Structure to store interaction volumes and data handles.
Definition: discretization/cellcentered/mpfa/elementfluxvariablescache.hh:43
std::vector< PrimaryIVDataHandle > primaryDataHandles
Definition: discretization/cellcentered/mpfa/elementfluxvariablescache.hh:47
std::vector< SecondaryIV > secondaryInteractionVolumes
Definition: discretization/cellcentered/mpfa/elementfluxvariablescache.hh:45
std::vector< PrimaryIV > primaryInteractionVolumes
Definition: discretization/cellcentered/mpfa/elementfluxvariablescache.hh:44
std::vector< SecondaryIVDataHandle > secondaryDataHandles
Definition: discretization/cellcentered/mpfa/elementfluxvariablescache.hh:48
The flux variables caches for an element.
Definition: discretization/cellcentered/mpfa/elementfluxvariablescache.hh:61
The flux variables caches for an element with caching enabled.
Definition: discretization/cellcentered/mpfa/elementfluxvariablescache.hh:69
GFVC GridFluxVariablesCache
export the type of the grid flux variables
Definition: discretization/cellcentered/mpfa/elementfluxvariablescache.hh:86
typename GFVC::FluxVariablesCache FluxVariablesCache
export the flux variable cache type
Definition: discretization/cellcentered/mpfa/elementfluxvariablescache.hh:80
void bindElement(const typename FVElementGeometry::GridGeometry::GridView::template Codim< 0 >::Entity &element, const FVElementGeometry &fvGeometry, const ElementVolumeVariables &elemVolVars)
Bind the flux var caches for scvfs inside the element only.
Definition: discretization/cellcentered/mpfa/elementfluxvariablescache.hh:147
typename GFVC::PrimaryInteractionVolume PrimaryInteractionVolume
export the interaction volume types
Definition: discretization/cellcentered/mpfa/elementfluxvariablescache.hh:72
void bindScvf(const typename FVElementGeometry::GridGeometry::GridView::template Codim< 0 >::Entity &element, const FVElementGeometry &fvGeometry, const ElementVolumeVariables &elemVolVars, const typename FVElementGeometry::SubControlVolumeFace &scvf)
Bind the flux var caches for an individual scvf.
Definition: discretization/cellcentered/mpfa/elementfluxvariablescache.hh:239
const GridFluxVariablesCache & gridFluxVarsCache() const
The global object we are a restriction of.
Definition: discretization/cellcentered/mpfa/elementfluxvariablescache.hh:315
const PrimaryIvDataHandle & primaryDataHandle(const SubControlVolumeFace &scvf) const
access to the data handle of an interaction volume an scvf is embedded in
Definition: discretization/cellcentered/mpfa/elementfluxvariablescache.hh:289
const SecondaryIvDataHandle & secondaryDataHandle(const SubControlVolumeFace &scvf) const
access to the data handle of an interaction volume an scvf is embedded in
Definition: discretization/cellcentered/mpfa/elementfluxvariablescache.hh:307
typename GFVC::SecondaryIvDataHandle SecondaryIvDataHandle
Definition: discretization/cellcentered/mpfa/elementfluxvariablescache.hh:77
void bind(const typename FVElementGeometry::GridGeometry::GridView::template Codim< 0 >::Entity &element, const FVElementGeometry &fvGeometry, const ElementVolumeVariables &elemVolVars)
Specialization for the global caching being enabled - do nothing here.
Definition: discretization/cellcentered/mpfa/elementfluxvariablescache.hh:154
const SecondaryInteractionVolume & secondaryInteractionVolume(const SubControlVolumeFace &scvf) const
access to the interaction volume an scvf is embedded in
Definition: discretization/cellcentered/mpfa/elementfluxvariablescache.hh:298
const PrimaryInteractionVolume & primaryInteractionVolume(const SubControlVolumeFace &scvf) const
access to the interaction volume an scvf is embedded in
Definition: discretization/cellcentered/mpfa/elementfluxvariablescache.hh:280
typename GFVC::PrimaryIvDataHandle PrimaryIvDataHandle
export the data handle types used
Definition: discretization/cellcentered/mpfa/elementfluxvariablescache.hh:76
void update(const typename FVElementGeometry::GridGeometry::GridView::template Codim< 0 >::Entity &element, const FVElementGeometry &fvGeometry, const ElementVolumeVariables &elemVolVars)
Specialization for the global caching being enabled - do nothing here.
Definition: discretization/cellcentered/mpfa/elementfluxvariablescache.hh:247
CCMpfaElementFluxVariablesCache(const GridFluxVariablesCache &global)
The constructor.
Definition: discretization/cellcentered/mpfa/elementfluxvariablescache.hh:141
typename GFVC::SecondaryInteractionVolume SecondaryInteractionVolume
Definition: discretization/cellcentered/mpfa/elementfluxvariablescache.hh:73
const SecondaryInteractionVolume & secondaryInteractionVolume(const SubControlVolumeFace &scvf) const
access to the interaction volume an scvf is embedded in
Definition: discretization/cellcentered/mpfa/elementfluxvariablescache.hh:550
const PrimaryIvDataHandle & primaryDataHandle(const SubControlVolumeFace &scvf) const
access to the data handle of an interaction volume an scvf is embedded in
Definition: discretization/cellcentered/mpfa/elementfluxvariablescache.hh:545
void update(const typename FVElementGeometry::GridGeometry::GridView::template Codim< 0 >::Entity &element, const FVElementGeometry &fvGeometry, const ElementVolumeVariables &elemVolVars)
Update the transmissibilities if the volume variables have changed.
Definition: discretization/cellcentered/mpfa/elementfluxvariablescache.hh:479
const PrimaryInteractionVolume & primaryInteractionVolume(const SubControlVolumeFace &scvf) const
access to the interaction volume an scvf is embedded in
Definition: discretization/cellcentered/mpfa/elementfluxvariablescache.hh:540
typename GFVC::SecondaryIvDataHandle SecondaryIvDataHandle
Definition: discretization/cellcentered/mpfa/elementfluxvariablescache.hh:356
void bindScvf(const typename FVElementGeometry::GridGeometry::GridView::template Codim< 0 >::Entity &element, const FVElementGeometry &fvGeometry, const ElementVolumeVariables &elemVolVars, const typename FVElementGeometry::SubControlVolumeFace &scvf)
Prepares the transmissibilities of a single scv face.
Definition: discretization/cellcentered/mpfa/elementfluxvariablescache.hh:464
typename GFVC::PrimaryIvDataHandle PrimaryIvDataHandle
export the data handle types used
Definition: discretization/cellcentered/mpfa/elementfluxvariablescache.hh:355
void bind(const typename FVElementGeometry::GridGeometry::GridView::template Codim< 0 >::Entity &element, const FVElementGeometry &fvGeometry, const ElementVolumeVariables &elemVolVars)
Prepares the transmissibilities of the scv faces in the stencil of an element.
Definition: discretization/cellcentered/mpfa/elementfluxvariablescache.hh:392
const SecondaryIvDataHandle & secondaryDataHandle(const SubControlVolumeFace &scvf) const
access to the data handle of an interaction volume an scvf is embedded in
Definition: discretization/cellcentered/mpfa/elementfluxvariablescache.hh:555
typename GFVC::PrimaryInteractionVolume PrimaryInteractionVolume
export the interaction volume types
Definition: discretization/cellcentered/mpfa/elementfluxvariablescache.hh:351
const GridFluxVariablesCache & gridFluxVarsCache() const
The global object we are a restriction of.
Definition: discretization/cellcentered/mpfa/elementfluxvariablescache.hh:559
CCMpfaElementFluxVariablesCache(const GridFluxVariablesCache &global)
Definition: discretization/cellcentered/mpfa/elementfluxvariablescache.hh:368
typename GFVC::FluxVariablesCache FluxVariablesCache
export the flux variable cache type
Definition: discretization/cellcentered/mpfa/elementfluxvariablescache.hh:359
GFVC GridFluxVariablesCache
export the type of the grid flux variables
Definition: discretization/cellcentered/mpfa/elementfluxvariablescache.hh:366
void bindElement(const typename FVElementGeometry::GridGeometry::GridView::template Codim< 0 >::Entity &element, const FVElementGeometry &fvGeometry, const ElementVolumeVariables &elemVolVars)
Prepares the transmissibilities of the scv faces in an element.
Definition: discretization/cellcentered/mpfa/elementfluxvariablescache.hh:377
typename GFVC::SecondaryInteractionVolume SecondaryInteractionVolume
Definition: discretization/cellcentered/mpfa/elementfluxvariablescache.hh:352