3.2-git
DUNE for Multi-{Phase, Component, Scale, Physics, ...} flow and transport in porous media
porousmediumflow/richards/volumevariables.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 * See the file COPYING for full copying permissions. *
5 * *
6 * This program is free software: you can redistribute it and/or modify *
7 * it under the terms of the GNU General Public License as published by *
8 * the Free Software Foundation, either version 3 of the License, or *
9 * (at your option) any later version. *
10 * *
11 * This program is distributed in the hope that it will be useful, *
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
14 * GNU General Public License for more details. *
15 * *
16 * You should have received a copy of the GNU General Public License *
17 * along with this program. If not, see <http://www.gnu.org/licenses/>. *
18 *****************************************************************************/
25#ifndef DUMUX_RICHARDS_VOLUME_VARIABLES_HH
26#define DUMUX_RICHARDS_VOLUME_VARIABLES_HH
27
28#include <cassert>
29
30#include <dune/common/exceptions.hh>
31
37
39
40namespace Dumux {
41
42namespace Detail {
45{
47};
48
50{};
51}
52
60template <class Traits>
63, public EnergyVolumeVariables<Traits, RichardsVolumeVariables<Traits> >
64, public std::conditional_t<Traits::ModelTraits::enableMolecularDiffusion(),
65 Detail::VolVarsWithPVSwitch, Detail::VolVarsWithOutPVSwitch>
66{
69 using Scalar = typename Traits::PrimaryVariables::value_type;
70 using PermeabilityType = typename Traits::PermeabilityType;
71 using ModelTraits = typename Traits::ModelTraits;
72
73 static constexpr int numFluidComps = ParentType::numFluidComponents();
74 static constexpr int numPhases = ParentType::numFluidPhases();
75
76 using EffDiffModel = typename Traits::EffectiveDiffusivityModel;
77
78public:
80 using FluidSystem = typename Traits::FluidSystem;
82 using FluidState = typename Traits::FluidState;
85 using SolidState = typename Traits::SolidState;
87 using SolidSystem = typename Traits::SolidSystem;
88 using Indices = typename Traits::ModelTraits::Indices;
90 static constexpr bool enableWaterDiffusionInAir() { return ModelTraits::enableMolecularDiffusion(); };
91
101 template<class ElemSol, class Problem, class Element, class Scv>
102 void update(const ElemSol &elemSol,
103 const Problem &problem,
104 const Element &element,
105 const Scv& scv)
106 {
107 ParentType::update(elemSol, problem, element, scv);
108 const auto& materialParams = problem.spatialParams().materialLawParams(element, scv, elemSol);
109 const auto& priVars = elemSol[scv.localDofIndex()];
110 const auto phasePresence = priVars.state();
111
112 // precompute the minimum capillary pressure (entry pressure)
113 // needed to make sure we don't compute unphysical capillary pressures and thus saturations
114 using MaterialLaw = typename Problem::SpatialParams::MaterialLaw;
115 minPc_ = MaterialLaw::endPointPc(materialParams);
116
117 typename FluidSystem::ParameterCache paramCache;
118 auto getEffectiveDiffusionCoefficient = [&](int phaseIdx, int compIIdx, int compJIdx)
119 {
120 return EffDiffModel::effectiveDiffusionCoefficient(*this, phaseIdx, compIIdx, compJIdx);
121 };
122
123 if (phasePresence == Indices::gasPhaseOnly)
124 {
125 moleFraction_[FluidSystem::liquidPhaseIdx] = 1.0;
126 massFraction_[FluidSystem::liquidPhaseIdx] = 1.0;
127 moleFraction_[FluidSystem::gasPhaseIdx] = priVars[Indices::switchIdx];
128
129 const auto averageMolarMassGasPhase = (moleFraction_[FluidSystem::gasPhaseIdx]*FluidSystem::molarMass(FluidSystem::liquidPhaseIdx)) +
130 ((1-moleFraction_[FluidSystem::gasPhaseIdx])*FluidSystem::molarMass(FluidSystem::gasPhaseIdx));
131
132 //X_w = x_w* M_w/ M_avg
133 massFraction_[FluidSystem::gasPhaseIdx] = priVars[Indices::switchIdx]*FluidSystem::molarMass(FluidSystem::liquidPhaseIdx)/averageMolarMassGasPhase;
134
135 fluidState_.setSaturation(FluidSystem::liquidPhaseIdx, 0.0);
136 fluidState_.setSaturation(FluidSystem::gasPhaseIdx, 1.0);
137
138 EnergyVolVars::updateTemperature(elemSol, problem, element, scv, fluidState_, solidState_);
139
140 // get pc for sw = 0.0
141 const Scalar pc = MaterialLaw::pc(materialParams, 0.0);
142
143 // set the wetting pressure
144 fluidState_.setPressure(FluidSystem::liquidPhaseIdx, problem.nonWettingReferencePressure() - pc);
145 fluidState_.setPressure(FluidSystem::gasPhaseIdx, problem.nonWettingReferencePressure());
146
147 // set molar densities
149 {
150 molarDensity_[FluidSystem::liquidPhaseIdx] = FluidSystem::H2O::liquidDensity(temperature(), pressure(FluidSystem::liquidPhaseIdx))/FluidSystem::H2O::molarMass();
151 molarDensity_[FluidSystem::gasPhaseIdx] = IdealGas<Scalar>::molarDensity(temperature(), problem.nonWettingReferencePressure());
152 }
153
154 // density and viscosity
155 paramCache.updateAll(fluidState_);
156 fluidState_.setDensity(FluidSystem::liquidPhaseIdx, FluidSystem::density(fluidState_, paramCache, FluidSystem::liquidPhaseIdx));
157 fluidState_.setDensity(FluidSystem::gasPhaseIdx, FluidSystem::density(fluidState_, paramCache, FluidSystem::gasPhaseIdx));
158 fluidState_.setViscosity(FluidSystem::liquidPhaseIdx, FluidSystem::viscosity(fluidState_, paramCache, FluidSystem::liquidPhaseIdx));
159
160 // compute and set the enthalpy
161 fluidState_.setEnthalpy(FluidSystem::liquidPhaseIdx, EnergyVolVars::enthalpy(fluidState_, paramCache, FluidSystem::liquidPhaseIdx));
162 fluidState_.setEnthalpy(FluidSystem::gasPhaseIdx, EnergyVolVars::enthalpy(fluidState_, paramCache, FluidSystem::gasPhaseIdx));
163
164 //binary diffusion coefficients
165 paramCache.updateAll(fluidState_);
166 effectiveDiffCoeff_ = getEffectiveDiffusionCoefficient(FluidSystem::gasPhaseIdx,
167 FluidSystem::comp1Idx,
168 FluidSystem::comp0Idx);
169 }
170 else if (phasePresence == Indices::bothPhases)
171 {
172 completeFluidState(elemSol, problem, element, scv, fluidState_, solidState_);
173
174 // if we want to account for diffusion in the air phase
175 // use Raoult to compute the water mole fraction in air
177 {
178 molarDensity_[FluidSystem::liquidPhaseIdx] = FluidSystem::H2O::liquidDensity(temperature(), pressure(FluidSystem::liquidPhaseIdx))/FluidSystem::H2O::molarMass();
179 molarDensity_[FluidSystem::gasPhaseIdx] = IdealGas<Scalar>::molarDensity(temperature(), problem.nonWettingReferencePressure());
180 moleFraction_[FluidSystem::liquidPhaseIdx] = 1.0;
181
182 moleFraction_[FluidSystem::gasPhaseIdx] = FluidSystem::H2O::vaporPressure(temperature()) / problem.nonWettingReferencePressure();
183
184 const auto averageMolarMassGasPhase = (moleFraction_[FluidSystem::gasPhaseIdx]*FluidSystem::molarMass(FluidSystem::liquidPhaseIdx)) +
185 ((1-moleFraction_[FluidSystem::gasPhaseIdx])*FluidSystem::molarMass(FluidSystem::gasPhaseIdx));
186
187 //X_w = x_w* M_w/ M_avg
188 massFraction_[FluidSystem::gasPhaseIdx] = moleFraction_[FluidSystem::gasPhaseIdx]*FluidSystem::molarMass(FluidSystem::liquidPhaseIdx)/averageMolarMassGasPhase;
189
190 // binary diffusion coefficients
191 paramCache.updateAll(fluidState_);
192 effectiveDiffCoeff_ = getEffectiveDiffusionCoefficient(FluidSystem::gasPhaseIdx,
193 FluidSystem::comp1Idx,
194 FluidSystem::comp0Idx);
195 }
196 }
197 else if (phasePresence == Indices::liquidPhaseOnly)
198 {
199 completeFluidState(elemSol, problem, element, scv, fluidState_, solidState_);
200
202 {
203 molarDensity_[FluidSystem::liquidPhaseIdx] = FluidSystem::H2O::liquidDensity(temperature(), pressure(FluidSystem::liquidPhaseIdx))/FluidSystem::H2O::molarMass();
204 molarDensity_[FluidSystem::gasPhaseIdx] = IdealGas<Scalar>::molarDensity(temperature(), problem.nonWettingReferencePressure());
205 moleFraction_[FluidSystem::liquidPhaseIdx] = 1.0;
206 moleFraction_[FluidSystem::gasPhaseIdx] = 0.0;
207 massFraction_[FluidSystem::liquidPhaseIdx] = 1.0;
208 massFraction_[FluidSystem::gasPhaseIdx] = 0.0;
209
210 // binary diffusion coefficients (none required for liquid phase only)
212 }
213 }
214
216 // specify the other parameters
218 relativePermeabilityWetting_ = MaterialLaw::krw(materialParams, fluidState_.saturation(FluidSystem::liquidPhaseIdx));
219 updateSolidVolumeFractions(elemSol, problem, element, scv, solidState_, numFluidComps);
220 EnergyVolVars::updateSolidEnergyParams(elemSol, problem, element, scv, solidState_);
221 permeability_ = problem.spatialParams().permeability(element, scv, elemSol);
222 EnergyVolVars::updateEffectiveThermalConductivity();
223 }
224
239 template<class ElemSol, class Problem, class Element, class Scv>
240 void completeFluidState(const ElemSol& elemSol,
241 const Problem& problem,
242 const Element& element,
243 const Scv& scv,
246 {
247 EnergyVolVars::updateTemperature(elemSol, problem, element, scv, fluidState, solidState);
248
249 const auto& materialParams = problem.spatialParams().materialLawParams(element, scv, elemSol);
250 const auto& priVars = elemSol[scv.localDofIndex()];
251
252 // set the wetting pressure
253 using std::max;
254 using MaterialLaw = typename Problem::SpatialParams::MaterialLaw;
255 Scalar minPc = MaterialLaw::pc(materialParams, 1.0);
256 fluidState.setPressure(FluidSystem::liquidPhaseIdx, priVars[Indices::pressureIdx]);
257 fluidState.setPressure(FluidSystem::gasPhaseIdx, max(problem.nonWettingReferencePressure(), fluidState.pressure(FluidSystem::liquidPhaseIdx) + minPc));
258
259 // compute the capillary pressure to compute the saturation
260 // make sure that we the capillary pressure is not smaller than the minimum pc
261 // this would possibly return unphysical values from regularized material laws
262 using std::max;
263 const Scalar pc = max(MaterialLaw::endPointPc(materialParams),
264 problem.nonWettingReferencePressure() - fluidState.pressure(FluidSystem::liquidPhaseIdx));
265 const Scalar sw = MaterialLaw::sw(materialParams, pc);
266 fluidState.setSaturation(FluidSystem::liquidPhaseIdx, sw);
267 fluidState.setSaturation(FluidSystem::gasPhaseIdx, 1.0-sw);
268
269 // density and viscosity
270 typename FluidSystem::ParameterCache paramCache;
271 paramCache.updateAll(fluidState);
272 fluidState.setDensity(FluidSystem::liquidPhaseIdx,
273 FluidSystem::density(fluidState, paramCache, FluidSystem::liquidPhaseIdx));
274 fluidState.setDensity(FluidSystem::gasPhaseIdx,
275 FluidSystem::density(fluidState, paramCache, FluidSystem::gasPhaseIdx));
276
277 fluidState.setViscosity(FluidSystem::liquidPhaseIdx,
278 FluidSystem::viscosity(fluidState, paramCache, FluidSystem::liquidPhaseIdx));
279
280 // compute and set the enthalpy
281 fluidState.setEnthalpy(FluidSystem::liquidPhaseIdx, EnergyVolVars::enthalpy(fluidState, paramCache, FluidSystem::liquidPhaseIdx));
282 fluidState.setEnthalpy(FluidSystem::gasPhaseIdx, EnergyVolVars::enthalpy(fluidState, paramCache, FluidSystem::gasPhaseIdx));
283 }
284
289 const FluidState &fluidState() const
290 { return fluidState_; }
291
295 const SolidState &solidState() const
296 { return solidState_; }
297
301 Scalar temperature() const
302 { return fluidState_.temperature(); }
303
310 Scalar porosity() const
311 { return solidState_.porosity(); }
312
316 const PermeabilityType& permeability() const
317 { return permeability_; }
318
329 Scalar saturation(const int phaseIdx = FluidSystem::liquidPhaseIdx) const
330 { return fluidState_.saturation(phaseIdx); }
331
338 Scalar density(const int phaseIdx = FluidSystem::liquidPhaseIdx) const
339 { return fluidState_.density(phaseIdx); }
340
352 Scalar pressure(const int phaseIdx = FluidSystem::liquidPhaseIdx) const
353 { return fluidState_.pressure(phaseIdx); }
354
366 Scalar mobility(const int phaseIdx = FluidSystem::liquidPhaseIdx) const
367 { return relativePermeability(phaseIdx)/fluidState_.viscosity(phaseIdx); }
368
376 Scalar viscosity(const int phaseIdx = FluidSystem::liquidPhaseIdx) const
377 { return phaseIdx == FluidSystem::liquidPhaseIdx ? fluidState_.viscosity(FluidSystem::liquidPhaseIdx) : 0.0; }
378
385 Scalar relativePermeability(const int phaseIdx = FluidSystem::liquidPhaseIdx) const
386 { return phaseIdx == FluidSystem::liquidPhaseIdx ? relativePermeabilityWetting_ : 1.0; }
387
399 Scalar capillaryPressure() const
400 {
401 using std::max;
402 return max(minPc_, pressure(FluidSystem::gasPhaseIdx) - pressure(FluidSystem::liquidPhaseIdx));
403 }
404
419 Scalar pressureHead(const int phaseIdx = FluidSystem::liquidPhaseIdx) const
420 { return 100.0 *(pressure(phaseIdx) - pressure(FluidSystem::gasPhaseIdx))/density(phaseIdx)/9.81; }
421
432 Scalar waterContent(const int phaseIdx = FluidSystem::liquidPhaseIdx) const
433 { return saturation(phaseIdx) * solidState_.porosity(); }
434
442 Scalar moleFraction(const int phaseIdx, const int compIdx) const
443 {
445 if (compIdx != FluidSystem::comp0Idx)
446 DUNE_THROW(Dune::InvalidStateException, "There is only one component for Richards!");
447 return moleFraction_[phaseIdx];
448 }
449
457 Scalar massFraction(const int phaseIdx, const int compIdx) const
458 {
460 if (compIdx != FluidSystem::comp0Idx)
461 DUNE_THROW(Dune::InvalidStateException, "There is only one component for Richards!");
462 return massFraction_[phaseIdx];
463 }
464
471 Scalar molarDensity(const int phaseIdx) const
472 {
474 return molarDensity_[phaseIdx];
475 }
476
483 [[deprecated("Will be removed after release 3.2. Use diffusionCoefficient(phaseIdx, compIIdx, compJIdx)!")]]
484 Scalar diffusionCoefficient(int phaseIdx, int compIdx) const
485 {
486 assert(enableWaterDiffusionInAir() && phaseIdx == FluidSystem::gasPhaseIdx && compIdx == FluidSystem::comp0Idx);
487 return diffusionCoefficient(phaseIdx, FluidSystem::getMainComponent(phaseIdx), compIdx);
488 }
489
493 Scalar diffusionCoefficient(int phaseIdx, int compIIdx, int compJIdx) const
494 {
496 assert(phaseIdx == FluidSystem::gasPhaseIdx);
497 assert(compIIdx != compJIdx);
498 typename FluidSystem::ParameterCache paramCache;
499 paramCache.updatePhase(fluidState_, phaseIdx);
500 return FluidSystem::binaryDiffusionCoefficient(fluidState_, paramCache, phaseIdx, compIIdx, compJIdx);
501 }
502
506 Scalar effectiveDiffusionCoefficient(int phaseIdx, int compIIdx, int compJIdx) const
507 {
509 assert(phaseIdx == FluidSystem::gasPhaseIdx);
510 assert(compIIdx != compJIdx);
511 return effectiveDiffCoeff_;
512 }
513
514protected:
518 PermeabilityType permeability_;
519 Scalar minPc_;
520 Scalar moleFraction_[numPhases];
521 Scalar massFraction_[numPhases];
522 Scalar molarDensity_[numPhases];
523
524 // Effective diffusion coefficients for the phases
526
527};
528} // end namespace Dumux
529
530#endif
Update the solid volume fractions (inert and reacitve) and set them in the solidstate.
A central place for various physical constants occuring in some equations.
Relations valid for an ideal gas.
void updateSolidVolumeFractions(const ElemSol &elemSol, const Problem &problem, const Element &element, const Scv &scv, SolidState &solidState, const int solidVolFracOffset)
update the solid volume fractions (inert and reacitve) and set them in the solidstate
Definition: updatesolidvolumefractions.hh:36
Definition: adapt.hh:29
std::string phasePresence() noexcept
I/O name of phase presence.
Definition: name.hh:147
std::string viscosity(int phaseIdx) noexcept
I/O name of viscosity for multiphase systems.
Definition: name.hh:74
std::string density(int phaseIdx) noexcept
I/O name of density for multiphase systems.
Definition: name.hh:65
static constexpr Scalar molarDensity(Scalar temperature, Scalar pressure)
The molar density of the gas , depending on pressure and temperature.
Definition: idealgas.hh:70
Definition: porousmediumflow/nonisothermal/volumevariables.hh:75
The primary variable switch controlling the phase presence state variable.
Definition: richards/primaryvariableswitch.hh:41
Helper structs to conditionally use a primary variable switch or not.
Definition: porousmediumflow/richards/volumevariables.hh:45
Definition: porousmediumflow/richards/volumevariables.hh:50
Volume averaged quantities required by the Richards model.
Definition: porousmediumflow/richards/volumevariables.hh:66
Scalar density(const int phaseIdx=FluidSystem::liquidPhaseIdx) const
Returns the average mass density of a given fluid phase within the control volume.
Definition: porousmediumflow/richards/volumevariables.hh:338
FluidState fluidState_
the fluid state
Definition: porousmediumflow/richards/volumevariables.hh:515
Scalar relativePermeabilityWetting_
the relative permeability of the wetting phase
Definition: porousmediumflow/richards/volumevariables.hh:517
const PermeabilityType & permeability() const
Returns the permeability within the control volume in .
Definition: porousmediumflow/richards/volumevariables.hh:316
Scalar diffusionCoefficient(int phaseIdx, int compIIdx, int compJIdx) const
Returns the binary diffusion coefficients for a phase in .
Definition: porousmediumflow/richards/volumevariables.hh:493
Scalar porosity() const
Returns the average porosity [] within the control volume.
Definition: porousmediumflow/richards/volumevariables.hh:310
Scalar pressureHead(const int phaseIdx=FluidSystem::liquidPhaseIdx) const
Returns the pressureHead of a given phase within the control volume.
Definition: porousmediumflow/richards/volumevariables.hh:419
Scalar moleFraction(const int phaseIdx, const int compIdx) const
Returns the mole fraction of a given component in a given phase within the control volume in .
Definition: porousmediumflow/richards/volumevariables.hh:442
SolidState solidState_
Definition: porousmediumflow/richards/volumevariables.hh:516
Scalar diffusionCoefficient(int phaseIdx, int compIdx) const
Returns the binary diffusion coefficients for a phase in .
Definition: porousmediumflow/richards/volumevariables.hh:484
const FluidState & fluidState() const
Returns the fluid configuration at the given primary variables.
Definition: porousmediumflow/richards/volumevariables.hh:289
static constexpr bool enableWaterDiffusionInAir()
If water diffusion in air is enabled.
Definition: porousmediumflow/richards/volumevariables.hh:90
void update(const ElemSol &elemSol, const Problem &problem, const Element &element, const Scv &scv)
Updates all quantities for a given control volume.
Definition: porousmediumflow/richards/volumevariables.hh:102
Scalar capillaryPressure() const
Returns the effective capillary pressure within the control volume.
Definition: porousmediumflow/richards/volumevariables.hh:399
PermeabilityType permeability_
the instrinsic permeability
Definition: porousmediumflow/richards/volumevariables.hh:518
typename Traits::SolidSystem SolidSystem
Export type of solid system.
Definition: porousmediumflow/richards/volumevariables.hh:87
Scalar pressure(const int phaseIdx=FluidSystem::liquidPhaseIdx) const
Returns the effective pressure of a given phase within the control volume.
Definition: porousmediumflow/richards/volumevariables.hh:352
Scalar waterContent(const int phaseIdx=FluidSystem::liquidPhaseIdx) const
Returns the water content of a fluid phase within the finite volume.
Definition: porousmediumflow/richards/volumevariables.hh:432
Scalar viscosity(const int phaseIdx=FluidSystem::liquidPhaseIdx) const
Returns the dynamic viscosity of a given phase within the control volume.
Definition: porousmediumflow/richards/volumevariables.hh:376
Scalar massFraction_[numPhases]
The water mass fractions in water and air.
Definition: porousmediumflow/richards/volumevariables.hh:521
Scalar effectiveDiffusionCoefficient(int phaseIdx, int compIIdx, int compJIdx) const
Returns the effective diffusion coefficients for a phase in .
Definition: porousmediumflow/richards/volumevariables.hh:506
Scalar molarDensity_[numPhases]
The molar density of water and air.
Definition: porousmediumflow/richards/volumevariables.hh:522
Scalar mobility(const int phaseIdx=FluidSystem::liquidPhaseIdx) const
Returns the effective mobility of a given phase within the control volume.
Definition: porousmediumflow/richards/volumevariables.hh:366
typename Traits::ModelTraits::Indices Indices
Definition: porousmediumflow/richards/volumevariables.hh:88
Scalar relativePermeability(const int phaseIdx=FluidSystem::liquidPhaseIdx) const
Returns relative permeability [-] of a given phase within the control volume.
Definition: porousmediumflow/richards/volumevariables.hh:385
Scalar moleFraction_[numPhases]
The water mole fractions in water and air.
Definition: porousmediumflow/richards/volumevariables.hh:520
const SolidState & solidState() const
Returns the phase state for the control volume.
Definition: porousmediumflow/richards/volumevariables.hh:295
typename Traits::SolidState SolidState
Definition: porousmediumflow/richards/volumevariables.hh:85
Scalar effectiveDiffCoeff_
Definition: porousmediumflow/richards/volumevariables.hh:525
Scalar saturation(const int phaseIdx=FluidSystem::liquidPhaseIdx) const
Returns the average absolute saturation [] of a given fluid phase within the finite volume.
Definition: porousmediumflow/richards/volumevariables.hh:329
void completeFluidState(const ElemSol &elemSol, const Problem &problem, const Element &element, const Scv &scv, FluidState &fluidState, SolidState &solidState)
Fills the fluid state according to the primary variables.
Definition: porousmediumflow/richards/volumevariables.hh:240
Scalar molarDensity(const int phaseIdx) const
Returns the mass density of a given phase within the control volume in .
Definition: porousmediumflow/richards/volumevariables.hh:471
Scalar massFraction(const int phaseIdx, const int compIdx) const
Returns the mole fraction of a given component in a given phase within the control volume in .
Definition: porousmediumflow/richards/volumevariables.hh:457
typename Traits::FluidSystem FluidSystem
Export type of the fluid system.
Definition: porousmediumflow/richards/volumevariables.hh:80
typename Traits::FluidState FluidState
Export type of the fluid state.
Definition: porousmediumflow/richards/volumevariables.hh:82
Scalar temperature() const
Returns the temperature.
Definition: porousmediumflow/richards/volumevariables.hh:301
Scalar minPc_
the minimum capillary pressure (entry pressure)
Definition: porousmediumflow/richards/volumevariables.hh:519
The isothermal base class.
Definition: porousmediumflow/volumevariables.hh:40
static constexpr int numFluidComponents()
Return number of components considered by the model.
Definition: porousmediumflow/volumevariables.hh:52
const PrimaryVariables & priVars() const
Returns the vector of primary variables.
Definition: porousmediumflow/volumevariables.hh:76
static constexpr int numFluidPhases()
Return number of phases considered by the model.
Definition: porousmediumflow/volumevariables.hh:50
void update(const ElemSol &elemSol, const Problem &problem, const Element &element, const Scv &scv)
Updates all quantities for a given control volume.
Definition: porousmediumflow/volumevariables.hh:64
Base class for the model specific class which provides access to all volume averaged quantities.
Base class for the model specific class which provides access to all volume averaged quantities.
The primary variable switch for the extended Richards model.