3.3.0
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
33
39
41
42namespace Dumux {
43
44namespace Detail {
47{
49};
50
52{};
53} // end namespace Detail
54
62template <class Traits>
65, public EnergyVolumeVariables<Traits, RichardsVolumeVariables<Traits> >
66, public std::conditional_t<Traits::ModelTraits::enableMolecularDiffusion(),
67 Detail::VolVarsWithPVSwitch, Detail::VolVarsWithOutPVSwitch>
68{
71 using Scalar = typename Traits::PrimaryVariables::value_type;
72 using PermeabilityType = typename Traits::PermeabilityType;
73 using ModelTraits = typename Traits::ModelTraits;
74
75 static constexpr int numFluidComps = ParentType::numFluidComponents();
76 static constexpr int numPhases = ParentType::numFluidPhases();
77
78 using EffDiffModel = typename Traits::EffectiveDiffusivityModel;
79
80public:
82 using FluidSystem = typename Traits::FluidSystem;
84 using FluidState = typename Traits::FluidState;
87 using SolidState = typename Traits::SolidState;
89 using SolidSystem = typename Traits::SolidSystem;
90 using Indices = typename Traits::ModelTraits::Indices;
92 static constexpr bool enableWaterDiffusionInAir() { return ModelTraits::enableMolecularDiffusion(); };
93
103 template<class ElemSol, class Problem, class Element, class Scv>
104 void update(const ElemSol &elemSol,
105 const Problem &problem,
106 const Element &element,
107 const Scv& scv)
108 {
109 ParentType::update(elemSol, problem, element, scv);
110
111 // old material law interface is deprecated: Replace this by
112 // const auto fluidMatrixInteraction = problem.spatialParams().fluidMatrixInteraction(element, scv, elemSol);
113 // after the release of 3.3, when the deprecated interface is no longer supported
114 const auto fluidMatrixInteraction = Deprecated::makePcKrSw(Scalar{}, problem.spatialParams(), element, scv, elemSol);
115
116 const auto& priVars = elemSol[scv.localDofIndex()];
117 const auto phasePresence = priVars.state();
118
119 // precompute the minimum capillary pressure (entry pressure)
120 // needed to make sure we don't compute unphysical capillary pressures and thus saturations
121 minPc_ = fluidMatrixInteraction.endPointPc();
122
123 typename FluidSystem::ParameterCache paramCache;
124 auto getEffectiveDiffusionCoefficient = [&](int phaseIdx, int compIIdx, int compJIdx)
125 {
126 return EffDiffModel::effectiveDiffusionCoefficient(*this, phaseIdx, compIIdx, compJIdx);
127 };
128
129 if (phasePresence == Indices::gasPhaseOnly)
130 {
131 moleFraction_[FluidSystem::liquidPhaseIdx] = 1.0;
132 massFraction_[FluidSystem::liquidPhaseIdx] = 1.0;
133 moleFraction_[FluidSystem::gasPhaseIdx] = priVars[Indices::switchIdx];
134
135 const auto averageMolarMassGasPhase = (moleFraction_[FluidSystem::gasPhaseIdx]*FluidSystem::molarMass(FluidSystem::liquidPhaseIdx)) +
136 ((1-moleFraction_[FluidSystem::gasPhaseIdx])*FluidSystem::molarMass(FluidSystem::gasPhaseIdx));
137
138 //X_w = x_w* M_w/ M_avg
139 massFraction_[FluidSystem::gasPhaseIdx] = priVars[Indices::switchIdx]*FluidSystem::molarMass(FluidSystem::liquidPhaseIdx)/averageMolarMassGasPhase;
140
141 fluidState_.setSaturation(FluidSystem::liquidPhaseIdx, 0.0);
142 fluidState_.setSaturation(FluidSystem::gasPhaseIdx, 1.0);
143
144 EnergyVolVars::updateTemperature(elemSol, problem, element, scv, fluidState_, solidState_);
145
146 // get pc for sw = 0.0
147 const Scalar pc = fluidMatrixInteraction.pc(0.0);
148
149 // set the wetting pressure
150 fluidState_.setPressure(FluidSystem::liquidPhaseIdx, problem.nonwettingReferencePressure() - pc);
151 fluidState_.setPressure(FluidSystem::gasPhaseIdx, problem.nonwettingReferencePressure());
152
153 // set molar densities
155 {
156 molarDensity_[FluidSystem::liquidPhaseIdx] = FluidSystem::H2O::liquidDensity(temperature(), pressure(FluidSystem::liquidPhaseIdx))/FluidSystem::H2O::molarMass();
157 molarDensity_[FluidSystem::gasPhaseIdx] = IdealGas<Scalar>::molarDensity(temperature(), problem.nonwettingReferencePressure());
158 }
159
160 // density and viscosity
161 paramCache.updateAll(fluidState_);
162 fluidState_.setDensity(FluidSystem::liquidPhaseIdx, FluidSystem::density(fluidState_, paramCache, FluidSystem::liquidPhaseIdx));
163 fluidState_.setDensity(FluidSystem::gasPhaseIdx, FluidSystem::density(fluidState_, paramCache, FluidSystem::gasPhaseIdx));
164 fluidState_.setViscosity(FluidSystem::liquidPhaseIdx, FluidSystem::viscosity(fluidState_, paramCache, FluidSystem::liquidPhaseIdx));
165
166 // compute and set the enthalpy
167 fluidState_.setEnthalpy(FluidSystem::liquidPhaseIdx, EnergyVolVars::enthalpy(fluidState_, paramCache, FluidSystem::liquidPhaseIdx));
168 fluidState_.setEnthalpy(FluidSystem::gasPhaseIdx, EnergyVolVars::enthalpy(fluidState_, paramCache, FluidSystem::gasPhaseIdx));
169
170 //binary diffusion coefficients
171 paramCache.updateAll(fluidState_);
172 effectiveDiffCoeff_ = getEffectiveDiffusionCoefficient(FluidSystem::gasPhaseIdx,
173 FluidSystem::comp1Idx,
174 FluidSystem::comp0Idx);
175 }
176 else if (phasePresence == Indices::bothPhases)
177 {
178 completeFluidState(elemSol, problem, element, scv, fluidState_, solidState_);
179
180 // if we want to account for diffusion in the air phase
181 // use Raoult to compute the water mole fraction in air
183 {
184 molarDensity_[FluidSystem::liquidPhaseIdx] = FluidSystem::H2O::liquidDensity(temperature(), pressure(FluidSystem::liquidPhaseIdx))/FluidSystem::H2O::molarMass();
185 molarDensity_[FluidSystem::gasPhaseIdx] = IdealGas<Scalar>::molarDensity(temperature(), problem.nonwettingReferencePressure());
186 moleFraction_[FluidSystem::liquidPhaseIdx] = 1.0;
187
188 moleFraction_[FluidSystem::gasPhaseIdx] = FluidSystem::H2O::vaporPressure(temperature()) / problem.nonwettingReferencePressure();
189
190 const auto averageMolarMassGasPhase = (moleFraction_[FluidSystem::gasPhaseIdx]*FluidSystem::molarMass(FluidSystem::liquidPhaseIdx)) +
191 ((1-moleFraction_[FluidSystem::gasPhaseIdx])*FluidSystem::molarMass(FluidSystem::gasPhaseIdx));
192
193 //X_w = x_w* M_w/ M_avg
194 massFraction_[FluidSystem::gasPhaseIdx] = moleFraction_[FluidSystem::gasPhaseIdx]*FluidSystem::molarMass(FluidSystem::liquidPhaseIdx)/averageMolarMassGasPhase;
195
196 // binary diffusion coefficients
197 paramCache.updateAll(fluidState_);
198 effectiveDiffCoeff_ = getEffectiveDiffusionCoefficient(FluidSystem::gasPhaseIdx,
199 FluidSystem::comp1Idx,
200 FluidSystem::comp0Idx);
201 }
202 }
203 else if (phasePresence == Indices::liquidPhaseOnly)
204 {
205 completeFluidState(elemSol, problem, element, scv, fluidState_, solidState_);
206
208 {
209 molarDensity_[FluidSystem::liquidPhaseIdx] = FluidSystem::H2O::liquidDensity(temperature(), pressure(FluidSystem::liquidPhaseIdx))/FluidSystem::H2O::molarMass();
210 molarDensity_[FluidSystem::gasPhaseIdx] = IdealGas<Scalar>::molarDensity(temperature(), problem.nonwettingReferencePressure());
211 moleFraction_[FluidSystem::liquidPhaseIdx] = 1.0;
212 moleFraction_[FluidSystem::gasPhaseIdx] = 0.0;
213 massFraction_[FluidSystem::liquidPhaseIdx] = 1.0;
214 massFraction_[FluidSystem::gasPhaseIdx] = 0.0;
215
216 // binary diffusion coefficients (none required for liquid phase only)
218 }
219 }
220
222 // specify the other parameters
224 relativePermeabilityWetting_ = fluidMatrixInteraction.krw(fluidState_.saturation(FluidSystem::liquidPhaseIdx));
225 updateSolidVolumeFractions(elemSol, problem, element, scv, solidState_, numFluidComps);
226 EnergyVolVars::updateSolidEnergyParams(elemSol, problem, element, scv, solidState_);
227 permeability_ = problem.spatialParams().permeability(element, scv, elemSol);
228 EnergyVolVars::updateEffectiveThermalConductivity();
229 }
230
245 template<class ElemSol, class Problem, class Element, class Scv>
246 void completeFluidState(const ElemSol& elemSol,
247 const Problem& problem,
248 const Element& element,
249 const Scv& scv,
252 {
253 EnergyVolVars::updateTemperature(elemSol, problem, element, scv, fluidState, solidState);
254
255 // old material law interface is deprecated: Replace this by
256 // const auto& fluidMatrixInteraction = problem.spatialParams().fluidMatrixInteraction(element, scv, elemSol);
257 // after the release of 3.3, when the deprecated interface is no longer supported
258 const auto fluidMatrixInteraction = Deprecated::makePcKrSw(Scalar{}, problem.spatialParams(), element, scv, elemSol);
259
260 const auto& priVars = elemSol[scv.localDofIndex()];
261
262 // set the wetting pressure
263 using std::max;
264 Scalar minPc = fluidMatrixInteraction.pc(1.0);
265 fluidState.setPressure(FluidSystem::liquidPhaseIdx, priVars[Indices::pressureIdx]);
266 fluidState.setPressure(FluidSystem::gasPhaseIdx, max(problem.nonwettingReferencePressure(), fluidState.pressure(FluidSystem::liquidPhaseIdx) + minPc));
267
268 // compute the capillary pressure to compute the saturation
269 // make sure that we the capillary pressure is not smaller than the minimum pc
270 // this would possibly return unphysical values from regularized material laws
271 using std::max;
272 const Scalar pc = max(fluidMatrixInteraction.endPointPc(),
273 problem.nonwettingReferencePressure() - fluidState.pressure(FluidSystem::liquidPhaseIdx));
274 const Scalar sw = fluidMatrixInteraction.sw(pc);
275 fluidState.setSaturation(FluidSystem::liquidPhaseIdx, sw);
276 fluidState.setSaturation(FluidSystem::gasPhaseIdx, 1.0-sw);
277
278 // density and viscosity
279 typename FluidSystem::ParameterCache paramCache;
280 paramCache.updateAll(fluidState);
281 fluidState.setDensity(FluidSystem::liquidPhaseIdx,
282 FluidSystem::density(fluidState, paramCache, FluidSystem::liquidPhaseIdx));
283 fluidState.setDensity(FluidSystem::gasPhaseIdx,
284 FluidSystem::density(fluidState, paramCache, FluidSystem::gasPhaseIdx));
285
286 fluidState.setViscosity(FluidSystem::liquidPhaseIdx,
287 FluidSystem::viscosity(fluidState, paramCache, FluidSystem::liquidPhaseIdx));
288
289 // compute and set the enthalpy
290 fluidState.setEnthalpy(FluidSystem::liquidPhaseIdx, EnergyVolVars::enthalpy(fluidState, paramCache, FluidSystem::liquidPhaseIdx));
291 fluidState.setEnthalpy(FluidSystem::gasPhaseIdx, EnergyVolVars::enthalpy(fluidState, paramCache, FluidSystem::gasPhaseIdx));
292 }
293
298 const FluidState &fluidState() const
299 { return fluidState_; }
300
304 const SolidState &solidState() const
305 { return solidState_; }
306
310 Scalar temperature() const
311 { return fluidState_.temperature(); }
312
319 Scalar porosity() const
320 { return solidState_.porosity(); }
321
325 const PermeabilityType& permeability() const
326 { return permeability_; }
327
338 Scalar saturation(const int phaseIdx = FluidSystem::liquidPhaseIdx) const
339 { return fluidState_.saturation(phaseIdx); }
340
347 Scalar density(const int phaseIdx = FluidSystem::liquidPhaseIdx) const
348 { return fluidState_.density(phaseIdx); }
349
361 Scalar pressure(const int phaseIdx = FluidSystem::liquidPhaseIdx) const
362 { return fluidState_.pressure(phaseIdx); }
363
375 Scalar mobility(const int phaseIdx = FluidSystem::liquidPhaseIdx) const
376 { return relativePermeability(phaseIdx)/fluidState_.viscosity(phaseIdx); }
377
385 Scalar viscosity(const int phaseIdx = FluidSystem::liquidPhaseIdx) const
386 { return phaseIdx == FluidSystem::liquidPhaseIdx ? fluidState_.viscosity(FluidSystem::liquidPhaseIdx) : 0.0; }
387
394 Scalar relativePermeability(const int phaseIdx = FluidSystem::liquidPhaseIdx) const
395 { return phaseIdx == FluidSystem::liquidPhaseIdx ? relativePermeabilityWetting_ : 1.0; }
396
408 Scalar capillaryPressure() const
409 {
410 using std::max;
411 return max(minPc_, pressure(FluidSystem::gasPhaseIdx) - pressure(FluidSystem::liquidPhaseIdx));
412 }
413
428 Scalar pressureHead(const int phaseIdx = FluidSystem::liquidPhaseIdx) const
429 { return 100.0 *(pressure(phaseIdx) - pressure(FluidSystem::gasPhaseIdx))/density(phaseIdx)/9.81; }
430
441 Scalar waterContent(const int phaseIdx = FluidSystem::liquidPhaseIdx) const
442 { return saturation(phaseIdx) * solidState_.porosity(); }
443
451 Scalar moleFraction(const int phaseIdx, const int compIdx) const
452 {
454 if (compIdx != FluidSystem::comp0Idx)
455 DUNE_THROW(Dune::InvalidStateException, "There is only one component for Richards!");
456 return moleFraction_[phaseIdx];
457 }
458
466 Scalar massFraction(const int phaseIdx, const int compIdx) const
467 {
469 if (compIdx != FluidSystem::comp0Idx)
470 DUNE_THROW(Dune::InvalidStateException, "There is only one component for Richards!");
471 return massFraction_[phaseIdx];
472 }
473
480 Scalar molarDensity(const int phaseIdx) const
481 {
483 return molarDensity_[phaseIdx];
484 }
485
489 Scalar diffusionCoefficient(int phaseIdx, int compIIdx, int compJIdx) const
490 {
492 assert(phaseIdx == FluidSystem::gasPhaseIdx);
493 assert(compIIdx != compJIdx);
494 typename FluidSystem::ParameterCache paramCache;
495 paramCache.updatePhase(fluidState_, phaseIdx);
496 return FluidSystem::binaryDiffusionCoefficient(fluidState_, paramCache, phaseIdx, compIIdx, compJIdx);
497 }
498
502 Scalar effectiveDiffusionCoefficient(int phaseIdx, int compIIdx, int compJIdx) const
503 {
505 assert(phaseIdx == FluidSystem::gasPhaseIdx);
506 assert(compIIdx != compJIdx);
507 return effectiveDiffCoeff_;
508 }
509
510protected:
514 PermeabilityType permeability_;
515 Scalar minPc_;
516 Scalar moleFraction_[numPhases];
517 Scalar massFraction_[numPhases];
518 Scalar molarDensity_[numPhases];
519
520 // Effective diffusion coefficients for the phases
522
523};
524} // end namespace Dumux
525
526#endif
Helpers for deprecation.
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:47
Definition: porousmediumflow/richards/volumevariables.hh:52
Volume averaged quantities required by the Richards model.
Definition: porousmediumflow/richards/volumevariables.hh:68
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:347
FluidState fluidState_
the fluid state
Definition: porousmediumflow/richards/volumevariables.hh:511
Scalar relativePermeabilityWetting_
the relative permeability of the wetting phase
Definition: porousmediumflow/richards/volumevariables.hh:513
const PermeabilityType & permeability() const
Returns the permeability within the control volume in .
Definition: porousmediumflow/richards/volumevariables.hh:325
Scalar diffusionCoefficient(int phaseIdx, int compIIdx, int compJIdx) const
Returns the binary diffusion coefficients for a phase in .
Definition: porousmediumflow/richards/volumevariables.hh:489
Scalar porosity() const
Returns the average porosity [] within the control volume.
Definition: porousmediumflow/richards/volumevariables.hh:319
Scalar pressureHead(const int phaseIdx=FluidSystem::liquidPhaseIdx) const
Returns the pressureHead of a given phase within the control volume.
Definition: porousmediumflow/richards/volumevariables.hh:428
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:451
SolidState solidState_
Definition: porousmediumflow/richards/volumevariables.hh:512
const FluidState & fluidState() const
Returns the fluid configuration at the given primary variables.
Definition: porousmediumflow/richards/volumevariables.hh:298
static constexpr bool enableWaterDiffusionInAir()
If water diffusion in air is enabled.
Definition: porousmediumflow/richards/volumevariables.hh:92
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:104
Scalar capillaryPressure() const
Returns the effective capillary pressure within the control volume.
Definition: porousmediumflow/richards/volumevariables.hh:408
PermeabilityType permeability_
the instrinsic permeability
Definition: porousmediumflow/richards/volumevariables.hh:514
typename Traits::SolidSystem SolidSystem
Export type of solid system.
Definition: porousmediumflow/richards/volumevariables.hh:89
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:361
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:441
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:385
Scalar massFraction_[numPhases]
The water mass fractions in water and air.
Definition: porousmediumflow/richards/volumevariables.hh:517
Scalar effectiveDiffusionCoefficient(int phaseIdx, int compIIdx, int compJIdx) const
Returns the effective diffusion coefficients for a phase in .
Definition: porousmediumflow/richards/volumevariables.hh:502
Scalar molarDensity_[numPhases]
The molar density of water and air.
Definition: porousmediumflow/richards/volumevariables.hh:518
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:375
typename Traits::ModelTraits::Indices Indices
Definition: porousmediumflow/richards/volumevariables.hh:90
Scalar relativePermeability(const int phaseIdx=FluidSystem::liquidPhaseIdx) const
Returns relative permeability [-] of a given phase within the control volume.
Definition: porousmediumflow/richards/volumevariables.hh:394
Scalar moleFraction_[numPhases]
The water mole fractions in water and air.
Definition: porousmediumflow/richards/volumevariables.hh:516
const SolidState & solidState() const
Returns the phase state for the control volume.
Definition: porousmediumflow/richards/volumevariables.hh:304
typename Traits::SolidState SolidState
Definition: porousmediumflow/richards/volumevariables.hh:87
Scalar effectiveDiffCoeff_
Definition: porousmediumflow/richards/volumevariables.hh:521
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:338
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:246
Scalar molarDensity(const int phaseIdx) const
Returns the mass density of a given phase within the control volume in .
Definition: porousmediumflow/richards/volumevariables.hh:480
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:466
typename Traits::FluidSystem FluidSystem
Export type of the fluid system.
Definition: porousmediumflow/richards/volumevariables.hh:82
typename Traits::FluidState FluidState
Export type of the fluid state.
Definition: porousmediumflow/richards/volumevariables.hh:84
Scalar temperature() const
Returns the temperature.
Definition: porousmediumflow/richards/volumevariables.hh:310
Scalar minPc_
the minimum capillary pressure (entry pressure)
Definition: porousmediumflow/richards/volumevariables.hh:515
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.