25#ifndef DUMUX_FV_GRID_VARIABLES_HH
26#define DUMUX_FV_GRID_VARIABLES_HH
40template<
class GG,
class GVV,
class GFVC>
57 using Scalar = std::decay_t<decltype(std::declval<PrimaryVariables>()[0])>;
62 template<
class Problem>
66 , curGridVolVars_(*problem)
67 , prevGridVolVars_(*problem)
68 , gridFluxVarsCache_(*problem)
72 template<
class SolutionVector>
73 void init(
const SolutionVector& curSol)
79 gridFluxVarsCache_.update(*
gridGeometry_, curGridVolVars_, curSol,
true);
85 prevGridVolVars_ = curGridVolVars_;
89 template<
class SolutionVector>
90 void update(
const SolutionVector& curSol,
bool forceFluxCacheUpdate =
false)
96 gridFluxVarsCache_.update(*
gridGeometry_, curGridVolVars_, curSol, forceFluxCacheUpdate);
100 template<
class SolutionVector>
108 prevGridVolVars_ = curGridVolVars_;
117 prevGridVolVars_ = curGridVolVars_;
121 template<
class SolutionVector>
125 curGridVolVars_ = prevGridVolVars_;
128 gridFluxVarsCache_.update(*
gridGeometry_, curGridVolVars_, solution);
133 {
return gridFluxVarsCache_; }
137 {
return gridFluxVarsCache_; }
141 {
return curGridVolVars_; }
145 {
return curGridVolVars_; }
149 {
return prevGridVolVars_; }
153 {
return prevGridVolVars_; }
190 using GridGeometry =
typename GV::GridGeometry;
191 using FVElementGeometry =
typename GridGeometry::LocalView;
193 using GridView =
typename GridGeometry::GridView;
194 using Element =
typename GridView::template Codim<0>::Entity;
196 using ElementVolumeVariables =
typename GV::GridVolumeVariables::LocalView;
197 using ElementFluxVariablesCache =
typename GV::GridFluxVariablesCache::LocalView;
215 void bind(
const Element& element,
216 const FVElementGeometry& fvGeometry)
219 elemVolVars_.bind(element, fvGeometry, x);
220 elemFluxVarsCache_.bind(element, fvGeometry, elemVolVars_);
229 const FVElementGeometry& fvGeometry)
231 elemVolVars_.bind(element, fvGeometry,
gridVariables().dofs());
238 const ElementVolumeVariables&
elemVolVars()
const {
return elemVolVars_; }
247 {
return *gridVariables_; }
251 ElementVolumeVariables elemVolVars_;
252 ElementFluxVariablesCache elemFluxVarsCache_;
263template<
class GVV,
class GFVC,
class X>
265:
public GridVariables<typename ProblemTraits<typename GVV::Problem>::GridGeometry, X>
267 using Problem =
typename GVV::Problem;
305 , gridVolVars_(*problem)
306 , gridFluxVarsCache_(*problem)
317 template<
class SolOrInitializer>
320 SolOrInitializer&& solOrInitializer)
322 , gridVolVars_(*problem)
323 , gridFluxVarsCache_(*problem)
326 gridFluxVarsCache_.update(this->
gridGeometry(), gridVolVars_, this->
dofs(),
true);
338 gridFluxVarsCache_.update(this->
gridGeometry(), gridVolVars_, curSol);
350 gridFluxVarsCache_.update(this->
gridGeometry(), gridVolVars_, curSol,
true);
355 {
return gridFluxVarsCache_; }
359 {
return gridFluxVarsCache_; }
363 {
return gridVolVars_; }
367 {
return gridVolVars_; }
Free function to get the local view of a grid cache object.
GridCache::LocalView localView(const GridCache &gridCache)
Free function to get the local view of a grid cache object.
Definition: localview.hh:38
Definition: variables.hh:32
std::decay_t< decltype(std::declval< Problem >().gridGeometry())> GridGeometry
Definition: common/typetraits/problem.hh:45
void update(const SolutionVector &x)
Update the state to a new solution.
Definition: variables.hh:108
const SolutionVector & dofs() const
Return reference to the solution.
Definition: variables.hh:102
X SolutionVector
export the type of solution vector
Definition: variables.hh:64
The grid variable class for finite volume schemes storing variables on scv and scvf (volume and flux ...
Definition: discretization/fvgridvariables.hh:42
GridVolumeVariables & curGridVolVars()
return the current volume variables
Definition: discretization/fvgridvariables.hh:144
const GridFluxVariablesCache & gridFluxVarsCache() const
return the flux variables cache
Definition: discretization/fvgridvariables.hh:132
GG GridGeometry
export type of the finite volume grid geometry
Definition: discretization/fvgridvariables.hh:45
typename VolumeVariables::PrimaryVariables PrimaryVariables
export primary variable type
Definition: discretization/fvgridvariables.hh:54
std::shared_ptr< const GridGeometry > gridGeometry_
pointer to the constant grid geometry
Definition: discretization/fvgridvariables.hh:161
const GridVolumeVariables & curGridVolVars() const
return the current volume variables
Definition: discretization/fvgridvariables.hh:140
void advanceTimeStep()
Sets the current state as the previous for next time step.
Definition: discretization/fvgridvariables.hh:115
GVV GridVolumeVariables
export type of the finite volume grid geometry
Definition: discretization/fvgridvariables.hh:48
GridFluxVariablesCache & gridFluxVarsCache()
return the flux variables cache
Definition: discretization/fvgridvariables.hh:136
void init(const SolutionVector &curSol)
initialize all variables (stationary case)
Definition: discretization/fvgridvariables.hh:73
const GridVolumeVariables & prevGridVolVars() const
return the volume variables of the previous time step (for instationary problems)
Definition: discretization/fvgridvariables.hh:148
const GridGeometry & gridGeometry() const
return the finite volume grid geometry
Definition: discretization/fvgridvariables.hh:156
GridVolumeVariables & prevGridVolVars()
return the volume variables of the previous time step (for instationary problems)
Definition: discretization/fvgridvariables.hh:152
typename GridVolumeVariables::VolumeVariables VolumeVariables
export type of the volume variables
Definition: discretization/fvgridvariables.hh:51
GFVC GridFluxVariablesCache
export type of the finite volume grid geometry
Definition: discretization/fvgridvariables.hh:60
void updateAfterGridAdaption(const SolutionVector &curSol)
update all variables after grid adaption
Definition: discretization/fvgridvariables.hh:101
void resetTimeStep(const SolutionVector &solution)
resets state to the one before time integration
Definition: discretization/fvgridvariables.hh:122
FVGridVariables(std::shared_ptr< Problem > problem, std::shared_ptr< const GridGeometry > gridGeometry)
Definition: discretization/fvgridvariables.hh:63
std::decay_t< decltype(std::declval< PrimaryVariables >()[0])> Scalar
export scalar type (TODO get it directly from the volvars)
Definition: discretization/fvgridvariables.hh:57
void update(const SolutionVector &curSol, bool forceFluxCacheUpdate=false)
update all variables
Definition: discretization/fvgridvariables.hh:90
Finite volume-specific local view on grid variables.
Definition: discretization/fvgridvariables.hh:189
GV GridVariables
export corresponding grid-wide class
Definition: discretization/fvgridvariables.hh:201
ElementVolumeVariables & elemVolVars()
Definition: discretization/fvgridvariables.hh:239
FVGridVariablesLocalView(const GridVariables &gridVariables)
Constructor.
Definition: discretization/fvgridvariables.hh:204
const ElementVolumeVariables & elemVolVars() const
return reference to the elem vol vars
Definition: discretization/fvgridvariables.hh:238
void bindElemVolVars(const Element &element, const FVElementGeometry &fvGeometry)
Bind only the volume variables local view to a grid element.
Definition: discretization/fvgridvariables.hh:228
ElementFluxVariablesCache & elemFluxVarsCache()
Definition: discretization/fvgridvariables.hh:243
const ElementFluxVariablesCache & elemFluxVarsCache() const
return reference to the flux variables cache
Definition: discretization/fvgridvariables.hh:242
void bind(const Element &element, const FVElementGeometry &fvGeometry)
Bind this local view to a grid element.
Definition: discretization/fvgridvariables.hh:215
const GridVariables & gridVariables() const
Return reference to the grid variables.
Definition: discretization/fvgridvariables.hh:246
The grid variable class for finite volume schemes, storing variables on scv and scvf (volume and flux...
Definition: discretization/fvgridvariables.hh:266
GG GridGeometry
export type of the finite volume grid geometry
Definition: discretization/fvgridvariables.hh:277
void update(const SolutionVector &curSol)
Update all variables that may be affected by a change in solution.
Definition: discretization/fvgridvariables.hh:330
typename GridVolumeVariables::VolumeVariables VolumeVariables
export type of the volume variables
Definition: discretization/fvgridvariables.hh:283
GridFluxVariablesCache & gridFluxVarsCache()
return the flux variables cache
Definition: discretization/fvgridvariables.hh:358
GFVC GridFluxVariablesCache
export cache type for flux variables
Definition: discretization/fvgridvariables.hh:289
void forceUpdateAll(const SolutionVector &curSol)
Force the update of all variables.
Definition: discretization/fvgridvariables.hh:342
GVV GridVolumeVariables
export type of the grid volume variables
Definition: discretization/fvgridvariables.hh:280
FVGridVariables(std::shared_ptr< Problem > problem, std::shared_ptr< const GridGeometry > gridGeometry)
Constructor.
Definition: discretization/fvgridvariables.hh:302
GridVolumeVariables & gridVolVars()
return the current volume variables
Definition: discretization/fvgridvariables.hh:366
const GridFluxVariablesCache & gridFluxVarsCache() const
return the flux variables cache
Definition: discretization/fvgridvariables.hh:354
const GridVolumeVariables & gridVolVars() const
return the current volume variables
Definition: discretization/fvgridvariables.hh:362
typename VolumeVariables::PrimaryVariables PrimaryVariables
export primary variable type
Definition: discretization/fvgridvariables.hh:286
FVGridVariables(std::shared_ptr< Problem > problem, std::shared_ptr< const GridGeometry > gridGeometry, SolOrInitializer &&solOrInitializer)
Constructor with custom initialization of the solution.
Definition: discretization/fvgridvariables.hh:318
Base class for grid variables.
Definition: discretization/gridvariables.hh:43
const GridGeometry & gridGeometry() const
Return a reference to the grid geometry.
Definition: discretization/gridvariables.hh:62
Type traits for problem classes.
Base class for grid variables.