26#ifndef DUMUX_3P2CNI_VOLUME_VARIABLES_HH
27#define DUMUX_3P2CNI_VOLUME_VARIABLES_HH
52template <
class Traits>
59 using Scalar =
typename Traits::PrimaryVariables::value_type;
60 using ModelTraits =
typename Traits::ModelTraits;
61 using FS =
typename Traits::FluidSystem;
67 wCompIdx = FS::wCompIdx,
68 nCompIdx = FS::nCompIdx,
70 wPhaseIdx = FS::wPhaseIdx,
71 gPhaseIdx = FS::gPhaseIdx,
72 nPhaseIdx = FS::nPhaseIdx,
74 switch1Idx = ModelTraits::Indices::switch1Idx,
75 switch2Idx = ModelTraits::Indices::switch2Idx,
76 pressureIdx = ModelTraits::Indices::pressureIdx
81 threePhases = ModelTraits::Indices::threePhases,
82 wPhaseOnly = ModelTraits::Indices::wPhaseOnly,
83 gnPhaseOnly = ModelTraits::Indices::gnPhaseOnly,
84 wnPhaseOnly = ModelTraits::Indices::wnPhaseOnly,
85 gPhaseOnly = ModelTraits::Indices::gPhaseOnly,
86 wgPhaseOnly = ModelTraits::Indices::wgPhaseOnly
104 {
return Traits::ModelTraits::onlyGasPhaseCanDisappear(); }
114 template<
class ElemSol,
class Problem,
class Element,
class Scv>
116 const Problem &problem,
117 const Element &element,
121 const auto&
priVars = elemSol[scv.localDofIndex()];
125 using MaterialLaw =
typename Problem::SpatialParams::MaterialLaw;
126 const auto& materialParams = problem.spatialParams().materialLawParams(element, scv, elemSol);
135 sg_ = 1. - sw_ - sn_;
167 else DUNE_THROW(Dune::InvalidStateException,
"phasePresence: " <<
phasePresence <<
" is invalid.");
180 Scalar pcgw = MaterialLaw::pcgw(materialParams, sw_);
181 Scalar pcnw = MaterialLaw::pcnw(materialParams, sw_);
182 Scalar pcgn = MaterialLaw::pcgn(materialParams, sw_ + sn_);
184 Scalar pcAlpha = MaterialLaw::pcAlpha(materialParams, sn_);
187 pn_ = pg_- pcAlpha * pcgn - (1.-pcAlpha)*(pcgw - pcNW1);
188 pw_ = pn_ - pcAlpha * pcnw - (1.-pcAlpha)*pcNW1;
195 Scalar pcgw = MaterialLaw::pcgw(materialParams, sw_);
196 Scalar pcnw = MaterialLaw::pcnw(materialParams, sw_);
197 Scalar pcgn = MaterialLaw::pcgn(materialParams, sw_ + sn_);
199 Scalar pcAlpha = MaterialLaw::pcAlpha(materialParams, sn_);
202 pn_ = pw_ + pcAlpha * pcnw + (1.-pcAlpha)*pcNW1;
203 pg_ = pn_ + pcAlpha * pcgn + (1.-pcAlpha)*(pcgw - pcNW1);
205 else DUNE_THROW(Dune::InvalidStateException,
"phasePresence: " <<
phasePresence <<
" is invalid.");
220 Scalar temp = FluidSystem::inverseVaporPressureCurve(
fluidState_, gPhaseIdx, wCompIdx);
221 for(
int phaseIdx=0; phaseIdx < FluidSystem::numPhases; ++phaseIdx)
226 Scalar defect = pg_ - FluidSystem::partialPressureGas(
fluidState_, gPhaseIdx, wCompIdx)
227 - FluidSystem::partialPressureGas(
fluidState_, gPhaseIdx, nCompIdx);
230 while(abs(defect) > 0.01)
232 Scalar deltaT = 1.e-8 * temp;
233 for(
int phaseIdx=0; phaseIdx < FluidSystem::numPhases; ++phaseIdx)
238 Scalar fUp = pg_ - FluidSystem::partialPressureGas(
fluidState_, gPhaseIdx, wCompIdx)
239 - FluidSystem::partialPressureGas(
fluidState_, gPhaseIdx, nCompIdx);
241 for(
int phaseIdx=0; phaseIdx < FluidSystem::numPhases; ++phaseIdx)
246 Scalar fDown = pg_ - FluidSystem::partialPressureGas(
fluidState_, gPhaseIdx, wCompIdx)
247 - FluidSystem::partialPressureGas(
fluidState_, gPhaseIdx, nCompIdx);
249 temp = temp - defect * 2. * deltaT / (fUp - fDown);
251 for(
int phaseIdx=0; phaseIdx < FluidSystem::numPhases; ++phaseIdx)
256 defect = pg_ - FluidSystem::partialPressureGas(
fluidState_, gPhaseIdx, wCompIdx)
257 - FluidSystem::partialPressureGas(
fluidState_, gPhaseIdx, nCompIdx);
264 temp_ = FluidSystem::inverseVaporPressureCurve(
fluidState_, gPhaseIdx, wCompIdx);
269 temp_ = FluidSystem::inverseVaporPressureCurve(
fluidState_, gPhaseIdx, nCompIdx);
271 else DUNE_THROW(Dune::InvalidStateException,
"phasePresence: " <<
phasePresence <<
" is invalid.");
274 for(
int phaseIdx=0; phaseIdx < FluidSystem::numPhases; ++phaseIdx)
285 Scalar partPressH2O = FluidSystem::partialPressureGas(
fluidState_, gPhaseIdx, wCompIdx);
286 Scalar partPressNAPL = pg_ - partPressH2O;
288 Scalar xgn = partPressNAPL/pg_;
289 Scalar xgw = partPressH2O/pg_;
292 Scalar xwn = partPressNAPL / FluidSystem::henryCoefficient(
fluidState_, wPhaseIdx,nCompIdx);
296 Scalar xnw = partPressH2O / FluidSystem::henryCoefficient(
fluidState_, nPhaseIdx,wCompIdx);
299 fluidState_.setMoleFraction(wPhaseIdx, wCompIdx, xww);
300 fluidState_.setMoleFraction(wPhaseIdx, nCompIdx, xwn);
301 fluidState_.setMoleFraction(gPhaseIdx, wCompIdx, xgw);
302 fluidState_.setMoleFraction(gPhaseIdx, nCompIdx, xgn);
303 fluidState_.setMoleFraction(nPhaseIdx, wCompIdx, xnw);
304 fluidState_.setMoleFraction(nPhaseIdx, nCompIdx, xnn);
325 Scalar xwn =
priVars[switch2Idx];
326 Scalar xww = 1 - xwn;
329 fluidState_.setMoleFraction(wPhaseIdx, wCompIdx, xww);
330 fluidState_.setMoleFraction(wPhaseIdx, nCompIdx, xwn);
334 Scalar xgn = FluidSystem::partialPressureGas(
fluidState_, gPhaseIdx, nCompIdx) / pg_;
335 Scalar xgw = FluidSystem::partialPressureGas(
fluidState_, gPhaseIdx, wCompIdx) / pg_;
341 Scalar xnn = xwn * FluidSystem::henryCoefficient(
fluidState_, wPhaseIdx,nCompIdx) / (xgn * pg_);
342 Scalar xnw = xgw*pg_ / FluidSystem::henryCoefficient(
fluidState_, nPhaseIdx,wCompIdx);
344 fluidState_.setMoleFraction(gPhaseIdx, wCompIdx, xgw);
345 fluidState_.setMoleFraction(gPhaseIdx, nCompIdx, xgn);
346 fluidState_.setMoleFraction(nPhaseIdx, wCompIdx, xnw);
347 fluidState_.setMoleFraction(nPhaseIdx, nCompIdx, xnn);
367 Scalar xnw =
priVars[switch2Idx];
369 Scalar xgn = FluidSystem::partialPressureGas(
fluidState_, gPhaseIdx, nCompIdx) / pg_;
374 Scalar xww = FluidSystem::partialPressureGas(
fluidState_, gPhaseIdx, wCompIdx) / pg_;
377 fluidState_.setMoleFraction(wPhaseIdx, wCompIdx, xww);
378 fluidState_.setMoleFraction(gPhaseIdx, wCompIdx, xgw);
379 fluidState_.setMoleFraction(gPhaseIdx, nCompIdx, xgn);
380 fluidState_.setMoleFraction(nPhaseIdx, wCompIdx, xnw);
381 fluidState_.setMoleFraction(nPhaseIdx, nCompIdx, xnn);
401 Scalar partPressH2O = FluidSystem::partialPressureGas(
fluidState_, gPhaseIdx, wCompIdx);
402 Scalar partPressNAPL = FluidSystem::partialPressureGas(
fluidState_, gPhaseIdx, nCompIdx);
404 Scalar xgn = partPressNAPL/pg_;
405 Scalar xgw = partPressH2O/pg_;
408 Scalar xwn = partPressNAPL / FluidSystem::henryCoefficient(
fluidState_, wPhaseIdx,nCompIdx);
411 Scalar xnw = partPressH2O / FluidSystem::henryCoefficient(
fluidState_, nPhaseIdx,wCompIdx);
414 fluidState_.setMoleFraction(wPhaseIdx, wCompIdx, xww);
415 fluidState_.setMoleFraction(wPhaseIdx, nCompIdx, xwn);
416 fluidState_.setMoleFraction(gPhaseIdx, wCompIdx, xgw);
417 fluidState_.setMoleFraction(gPhaseIdx, nCompIdx, xgn);
418 fluidState_.setMoleFraction(nPhaseIdx, wCompIdx, xnw);
419 fluidState_.setMoleFraction(nPhaseIdx, nCompIdx, xnn);
439 const Scalar xgn =
priVars[switch2Idx];
440 Scalar xgw = 1 - xgn;
443 fluidState_.setMoleFraction(gPhaseIdx, wCompIdx, xgw);
444 fluidState_.setMoleFraction(gPhaseIdx, nCompIdx, xgn);
448 Scalar xww = FluidSystem::partialPressureGas(
fluidState_, gPhaseIdx, wCompIdx) / pg_;
449 Scalar xnn = FluidSystem::partialPressureGas(
fluidState_, gPhaseIdx, nCompIdx) / pg_;
451 fluidState_.setMoleFraction(wPhaseIdx, wCompIdx, xww);
452 fluidState_.setMoleFraction(nPhaseIdx, nCompIdx, xnn);
470 const Scalar xgn =
priVars[switch2Idx];
471 Scalar xgw = 1 - xgn;
474 fluidState_.setMoleFraction(gPhaseIdx, wCompIdx, xgw);
475 fluidState_.setMoleFraction(gPhaseIdx, nCompIdx, xgn);
478 Scalar xwn = xgn*pg_/FluidSystem::henryCoefficient(
fluidState_, wPhaseIdx,nCompIdx);
482 fluidState_.setMoleFraction(wPhaseIdx, wCompIdx, xww);
483 fluidState_.setMoleFraction(wPhaseIdx, nCompIdx, xwn);
487 Scalar xnn = FluidSystem::partialPressureGas(
fluidState_, gPhaseIdx, nCompIdx) / pg_;
489 fluidState_.setMoleFraction(nPhaseIdx, nCompIdx, xnn);
515 sg_ = 1. - sw_ - sn_;
523 else DUNE_THROW(Dune::InvalidStateException,
"phasePresence: " <<
phasePresence <<
" is invalid.");
536 Scalar pcgw = MaterialLaw::pcgw(materialParams, sw_);
537 Scalar pcnw = MaterialLaw::pcnw(materialParams, sw_);
538 Scalar pcgn = MaterialLaw::pcgn(materialParams, sw_ + sn_);
540 Scalar pcAlpha = MaterialLaw::pcAlpha(materialParams, sn_);
543 pn_ = pg_- pcAlpha * pcgn - (1.-pcAlpha)*(pcgw - pcNW1);
544 pw_ = pn_ - pcAlpha * pcnw - (1.-pcAlpha)*pcNW1;
551 Scalar pcgw = MaterialLaw::pcgw(materialParams, sw_);
552 Scalar pcnw = MaterialLaw::pcnw(materialParams, sw_);
553 Scalar pcgn = MaterialLaw::pcgn(materialParams, sw_ + sn_);
555 Scalar pcAlpha = MaterialLaw::pcAlpha(materialParams, sn_);
558 pn_ = pw_ + pcAlpha * pcnw + (1.-pcAlpha)*pcNW1;
559 pg_ = pn_ + pcAlpha * pcgn + (1.-pcAlpha)*(pcgw - pcNW1);
561 else DUNE_THROW(Dune::InvalidStateException,
"phasePresence: " <<
phasePresence <<
" is invalid.");
577 Scalar tempOnlyWater = FluidSystem::inverseVaporPressureCurve(
fluidState_, gPhaseIdx, wCompIdx);
578 temp_ = tempOnlyWater;
582 Scalar tempOnlyNAPL = FluidSystem::inverseVaporPressureCurve(
fluidState_, gPhaseIdx, nCompIdx);
583 temp_ = tempOnlyNAPL;
588 Scalar tempOnlyNAPL = FluidSystem::inverseVaporPressureCurve(
fluidState_, gPhaseIdx, nCompIdx);
589 Scalar tempOnlyWater = FluidSystem::inverseVaporPressureCurve(
fluidState_, gPhaseIdx, wCompIdx);
590 for(
int phaseIdx=0; phaseIdx < FluidSystem::numPhases; ++phaseIdx)
592 fluidState_.setTemperature(phaseIdx, tempOnlyWater);
595 Scalar defect = pg_ - FluidSystem::partialPressureGas(
fluidState_, gPhaseIdx, wCompIdx)
596 - FluidSystem::partialPressureGas(
fluidState_, gPhaseIdx, nCompIdx);
598 Scalar temp = tempOnlyWater;
601 while(abs(defect) > 0.01)
603 Scalar deltaT = 1.e-6;
604 for(
int phaseIdx=0; phaseIdx < FluidSystem::numPhases; ++phaseIdx)
609 Scalar fUp = pg_ - FluidSystem::partialPressureGas(
fluidState_, gPhaseIdx, wCompIdx)
610 - FluidSystem::partialPressureGas(
fluidState_, gPhaseIdx, nCompIdx);
612 for(
int phaseIdx=0; phaseIdx < FluidSystem::numPhases; ++phaseIdx)
617 Scalar fDown = pg_ - FluidSystem::partialPressureGas(
fluidState_, gPhaseIdx, wCompIdx)
618 - FluidSystem::partialPressureGas(
fluidState_, gPhaseIdx, nCompIdx);
620 temp = temp - defect * 2. * deltaT / (fUp - fDown);
622 for(
int phaseIdx=0; phaseIdx < FluidSystem::numPhases; ++phaseIdx)
627 defect = pg_ - FluidSystem::partialPressureGas(
fluidState_, gPhaseIdx, wCompIdx)
628 - FluidSystem::partialPressureGas(
fluidState_, gPhaseIdx, nCompIdx);
630 if (counter>10)
break;
632 if ((sw_>1.e-10)&&(sw_<0.01))
633 temp = temp + (sw_ - 1.e-10) * (temp - tempOnlyNAPL) / (0.01 - 1.e-10);
634 if ((sn_>1.e-10)&&(sn_<0.01))
635 temp = temp + (sn_ - 1.e-10) * (temp - tempOnlyWater) / (0.01 - 1.e-10);
639 else DUNE_THROW(Dune::InvalidStateException,
"phasePresence: " <<
phasePresence <<
" is invalid.");
642 for(
int phaseIdx=0; phaseIdx < FluidSystem::numPhases; ++phaseIdx)
653 Scalar partPressH2O = FluidSystem::partialPressureGas(
fluidState_, gPhaseIdx, wCompIdx);
654 Scalar partPressNAPL = pg_ - partPressH2O;
657 if (sw_<0.02) partPressH2O *= sw_/0.02;
658 if (partPressH2O < 0.) partPressH2O = 0;
659 if (sn_<0.02) partPressNAPL *= sn_ / 0.02;
660 if (partPressNAPL < 0.) partPressNAPL = 0;
662 Scalar xgn = partPressNAPL/pg_;
663 Scalar xgw = partPressH2O/pg_;
673 fluidState_.setMoleFraction(wPhaseIdx, wCompIdx, xww);
674 fluidState_.setMoleFraction(wPhaseIdx, nCompIdx, xwn);
675 fluidState_.setMoleFraction(gPhaseIdx, wCompIdx, xgw);
676 fluidState_.setMoleFraction(gPhaseIdx, nCompIdx, xgn);
677 fluidState_.setMoleFraction(nPhaseIdx, wCompIdx, xnw);
678 fluidState_.setMoleFraction(nPhaseIdx, nCompIdx, xnn);
696 Scalar partPressH2O = FluidSystem::partialPressureGas(
fluidState_, gPhaseIdx, wCompIdx);
697 Scalar partPressNAPL = FluidSystem::partialPressureGas(
fluidState_, gPhaseIdx, nCompIdx);
699 Scalar xgn = partPressNAPL/pg_;
700 Scalar xgw = partPressH2O/pg_;
709 fluidState_.setMoleFraction(wPhaseIdx, wCompIdx, xww);
710 fluidState_.setMoleFraction(wPhaseIdx, nCompIdx, xwn);
711 fluidState_.setMoleFraction(gPhaseIdx, wCompIdx, xgw);
712 fluidState_.setMoleFraction(gPhaseIdx, nCompIdx, xgn);
713 fluidState_.setMoleFraction(nPhaseIdx, wCompIdx, xnw);
714 fluidState_.setMoleFraction(nPhaseIdx, nCompIdx, xnn);
730 else DUNE_THROW(Dune::InvalidStateException,
"phasePresence: " <<
phasePresence <<
" is invalid.");
733 for (
int phaseIdx = 0; phaseIdx < numPs; ++phaseIdx) {
741 kr = MaterialLaw::kr(materialParams, phaseIdx,
745 mobility_[phaseIdx] = kr / mu;
750 bulkDensTimesAdsorpCoeff_ =
751 MaterialLaw::bulkDensTimesAdsorpCoeff(materialParams);
757 diffusionCoefficient_[gPhaseIdx] = FluidSystem::diffusionCoefficient(
fluidState_, gPhaseIdx);
758 diffusionCoefficient_[wPhaseIdx] = FluidSystem::diffusionCoefficient(
fluidState_, wPhaseIdx);
760 diffusionCoefficient_[nPhaseIdx] = 1.e-10;
765 EnergyVolVars::updateSolidEnergyParams(elemSol, problem, element, scv,
solidState_);
768 permeability_ = problem.spatialParams().permeability(element, scv, elemSol);
773 for (
int phaseIdx = 0; phaseIdx < numPs; ++phaseIdx) {
774 Scalar h = FluidSystem::enthalpy(
fluidState_, phaseIdx);
817 {
return fluidState_.massFraction(phaseIdx, compIdx); }
827 {
return fluidState_.moleFraction(phaseIdx, compIdx); }
873 {
return mobility_[phaseIdx]; }
894 {
return permeability_; }
901 return diffusionCoefficient_[phaseIdx];
908 {
return bulkDensTimesAdsorpCoeff_; }
933 Scalar sw_, sg_, sn_, pg_, pw_, pn_, temp_;
935 Scalar moleFrac_[numPs][numFluidComps];
936 Scalar massFrac_[numPs][numFluidComps];
938 Scalar permeability_;
939 Scalar mobility_[numPs];
940 Scalar bulkDensTimesAdsorpCoeff_;
943 Dune::FieldVector<Scalar, numPs> diffusionCoefficient_;
944 std::array<std::array<Scalar, numFluidComps-1>, numPs> diffCoefficient_;
Some exceptions thrown in DuMux
Define some often used mathematical functions.
Some templates to wrap the valgrind macros.
Represents all relevant thermodynamic quantities of a multi-phase, multi-component fluid system assum...
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.
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
bool CheckDefined(const T &value)
Make valgrind complain if the object occupied by an object is undefined.
Definition: valgrind.hh:72
make the local view function available whenever we use the grid geometry
Definition: adapt.hh:29
Property tag Indices
Definition: porousmediumflow/sequential/properties.hh:59
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 molarDensity(int phaseIdx) noexcept
I/O name of molar density for multiphase systems.
Definition: name.hh:83
std::string density(int phaseIdx) noexcept
I/O name of density for multiphase systems.
Definition: name.hh:65
The primary variable switch controlling the phase presence state variable.
Definition: 3pwateroil/primaryvariableswitch.hh:39
Contains the quantities which are are constant within a finite volume in the three-phase,...
Definition: porousmediumflow/3pwateroil/volumevariables.hh:56
const FluidState & fluidState() const
Returns the phase state for the control-volume.
Definition: porousmediumflow/3pwateroil/volumevariables.hh:783
Scalar diffusionCoefficient(int phaseIdx, int compIdx) const
Returns the diffusion coefficient.
Definition: porousmediumflow/3pwateroil/volumevariables.hh:899
SolidState solidState_
Definition: porousmediumflow/3pwateroil/volumevariables.hh:930
Scalar molarDensity(const int phaseIdx) const
Returns the molar density of a given phase within the control volume.
Definition: porousmediumflow/3pwateroil/volumevariables.hh:844
Scalar massFraction(const int phaseIdx, const int compIdx) const
Returns the mass fraction of a given component in a given phase within the control volume in .
Definition: porousmediumflow/3pwateroil/volumevariables.hh:816
typename Traits::FluidState FluidState
The type of the object returned by the fluidState() method.
Definition: porousmediumflow/3pwateroil/volumevariables.hh:91
Scalar permeability() const
Returns the permeability within the control volume.
Definition: porousmediumflow/3pwateroil/volumevariables.hh:893
typename Traits::FluidSystem FluidSystem
The type of the fluid system.
Definition: porousmediumflow/3pwateroil/volumevariables.hh:93
Scalar viscosity(const int phaseIdx) const
Definition: porousmediumflow/3pwateroil/volumevariables.hh:875
Scalar bulkDensTimesAdsorpCoeff() const
Returns the adsorption information.
Definition: porousmediumflow/3pwateroil/volumevariables.hh:907
typename Traits::SolidState SolidState
Export type of solid state.
Definition: porousmediumflow/3pwateroil/volumevariables.hh:97
Scalar porosity() const
Returns the average porosity within the control volume.
Definition: porousmediumflow/3pwateroil/volumevariables.hh:887
Scalar enthalpy(int phaseIdx) const
Returns the total enthalpy of a phase in the sub-control volume.
Definition: porousmediumflow/3pwateroil/volumevariables.hh:925
Scalar mobility(const int phaseIdx) const
Returns the effective mobility of a given phase within the control volume.
Definition: porousmediumflow/3pwateroil/volumevariables.hh:872
Scalar capillaryPressure() const
Returns the effective capillary pressure within the control volume.
Definition: porousmediumflow/3pwateroil/volumevariables.hh:881
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/3pwateroil/volumevariables.hh:826
Scalar saturation(const int phaseIdx) const
Returns the effective saturation of a given phase within the control volume.
Definition: porousmediumflow/3pwateroil/volumevariables.hh:806
Scalar density(const int phaseIdx) const
Returns the mass density of a given phase within the control volume.
Definition: porousmediumflow/3pwateroil/volumevariables.hh:835
typename Traits::SolidSystem SolidSystem
Export type of solid system.
Definition: porousmediumflow/3pwateroil/volumevariables.hh:99
void update(const ElemSol &elemSol, const Problem &problem, const Element &element, const Scv &scv)
Updates all quantities for a given control volume.
Definition: porousmediumflow/3pwateroil/volumevariables.hh:115
static constexpr bool onlyGasPhaseCanDisappear()
State if only the gas phase is allowed to disappear.
Definition: porousmediumflow/3pwateroil/volumevariables.hh:103
Scalar temperature() const
Returns temperature inside the sub-control volume.
Definition: porousmediumflow/3pwateroil/volumevariables.hh:863
Scalar internalEnergy(int phaseIdx) const
Returns the total internal energy of a phase in the sub-control volume.
Definition: porousmediumflow/3pwateroil/volumevariables.hh:916
typename ModelTraits::Indices Indices
Export the indices.
Definition: porousmediumflow/3pwateroil/volumevariables.hh:95
const SolidState & solidState() const
Returns the phase state for the control volume.
Definition: porousmediumflow/3pwateroil/volumevariables.hh:789
Scalar averageMolarMass(int phaseIdx) const
Returns the average molar mass of the fluid phase.
Definition: porousmediumflow/3pwateroil/volumevariables.hh:797
FluidState fluidState_
Definition: porousmediumflow/3pwateroil/volumevariables.hh:926
Scalar pressure(const int phaseIdx) const
Returns the effective pressure of a given phase within the control volume.
Definition: porousmediumflow/3pwateroil/volumevariables.hh:853
Definition: porousmediumflow/nonisothermal/volumevariables.hh:75
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.