26#ifndef DUMUX_RICHARDSNC_VOLUME_VARIABLES_HH
27#define DUMUX_RICHARDSNC_VOLUME_VARIABLES_HH
45template <
class Traits>
53 using Scalar =
typename Traits::PrimaryVariables::value_type;
54 using PermeabilityType =
typename Traits::PermeabilityType;
57 static constexpr bool useMoles = Traits::ModelTraits::useMoles();
59 using EffDiffModel =
typename Traits::EffectiveDiffusivityModel;
60 using DiffusionCoefficients =
typename Traits::DiffusionType::DiffusionCoefficientsContainer;
72 using Indices =
typename Traits::ModelTraits::Indices;
86 template<
class ElemSol,
class Problem,
class Element,
class Scv>
88 const Problem &problem,
89 const Element &element,
102 const auto fluidMatrixInteraction = Deprecated::makePcKrSw(Scalar{}, problem.spatialParams(), element, scv, elemSol);
104 relativePermeabilityWetting_ = fluidMatrixInteraction.krw(
fluidState_.saturation(0));
108 minPc_ = fluidMatrixInteraction.endPointPc();
109 pn_ = problem.nonwettingReferencePressure();
112 EnergyVolVars::updateSolidEnergyParams(elemSol, problem, element, scv, solidState_);
113 permeability_ = problem.spatialParams().permeability(element, scv, elemSol);
114 EnergyVolVars::updateEffectiveThermalConductivity();
119 typename FluidSystem::ParameterCache paramCache;
122 auto getEffectiveDiffusionCoefficient = [&](
int phaseIdx,
int compIIdx,
int compJIdx)
124 return EffDiffModel::effectiveDiffusionCoefficient(*
this, phaseIdx, compIIdx, compJIdx);
127 effectiveDiffCoeff_.update(getEffectiveDiffusionCoefficient);
130 EnergyVolVars::updateSolidEnergyParams(elemSol, problem, element, scv, solidState_);
131 permeability_ = problem.spatialParams().permeability(element, scv, elemSol);
132 EnergyVolVars::updateEffectiveThermalConductivity();
149 template<
class ElemSol,
class Problem,
class Element,
class Scv>
151 const Problem& problem,
152 const Element& element,
162 const auto fluidMatrixInteraction = Deprecated::makePcKrSw(Scalar{}, problem.spatialParams(), element, scv, elemSol);
164 const auto&
priVars = elemSol[scv.localDofIndex()];
173 const Scalar pc = max(fluidMatrixInteraction.endPointPc(),
174 problem.nonwettingReferencePressure() -
fluidState.pressure(0));
175 const Scalar sw = fluidMatrixInteraction.sw(pc);
181 Scalar sumSecondaryFractions = 0.0;
185 sumSecondaryFractions +=
priVars[compIdx];
187 fluidState.setMoleFraction(0, 0, 1.0 - sumSecondaryFractions);
196 typename FluidSystem::ParameterCache paramCache;
217 {
return solidState_; }
240 {
return solidState_.porosity(); }
246 {
return permeability_; }
268 {
return phaseIdx == 0 ?
fluidState_.density(phaseIdx) : 0.0; }
282 {
return phaseIdx == 0 ?
fluidState_.pressure(phaseIdx) : pn_; }
306 {
return phaseIdx == 0 ?
fluidState_.viscosity(0) : 0.0; }
315 {
return phaseIdx == 0 ? relativePermeabilityWetting_ : 1.0; }
363 {
return saturation(phaseIdx) * solidState_.porosity(); }
371 {
return phaseIdx == 0 ? this->
fluidState_.molarDensity(phaseIdx) : 0.0; }
382 {
return phaseIdx == 0 ? this->
fluidState_.moleFraction(phaseIdx, compIdx) : 0.0; }
393 {
return phaseIdx == 0 ? this->
fluidState_.massFraction(phaseIdx, compIdx) : 0.0; }
403 Scalar
molarity(
const int phaseIdx,
const int compIdx)
const
404 {
return phaseIdx == 0 ? this->
fluidState_.molarity(phaseIdx, compIdx) : 0.0; }
411 typename FluidSystem::ParameterCache paramCache;
413 return FluidSystem::binaryDiffusionCoefficient(
fluidState_, paramCache, phaseIdx, compIIdx, compJIdx);
420 {
return effectiveDiffCoeff_(phaseIdx, compIIdx, compJIdx); }
427 DiffusionCoefficients effectiveDiffCoeff_;
429 Scalar relativePermeabilityWetting_;
431 PermeabilityType permeability_;
Update the solid volume fractions (inert and reacitve) and set them in the solidstate.
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
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
Definition: porousmediumflow/nonisothermal/volumevariables.hh:75
Contains the quantities which are constant within a finite volume in the Richards,...
Definition: porousmediumflow/richardsnc/volumevariables.hh:49
Scalar molarDensity(const int phaseIdx=0) const
Returns the molar density the of the fluid phase.
Definition: porousmediumflow/richardsnc/volumevariables.hh:370
Scalar relativePermeability(const int phaseIdx=0) const
Returns relative permeability [-] of a given phase within the control volume.
Definition: porousmediumflow/richardsnc/volumevariables.hh:314
Scalar porosity() const
Returns the average porosity [] within the control volume.
Definition: porousmediumflow/richardsnc/volumevariables.hh:239
Scalar massFraction(const int phaseIdx, const int compIdx) const
Returns the mass fraction of a component in the phase.
Definition: porousmediumflow/richardsnc/volumevariables.hh:392
Scalar saturation(const int phaseIdx=0) const
Returns the average absolute saturation [] of a given fluid phase within the finite volume.
Definition: porousmediumflow/richardsnc/volumevariables.hh:258
typename Traits::ModelTraits::Indices Indices
Export indices.
Definition: porousmediumflow/richardsnc/volumevariables.hh:72
Scalar effectiveDiffusionCoefficient(int phaseIdx, int compIIdx, int compJIdx) const
Returns the effective diffusion coefficients for a phase in .
Definition: porousmediumflow/richardsnc/volumevariables.hh:419
Scalar averageMolarMass(const int phaseIdx=0) const
Returns the average molar mass of the fluid phase.
Definition: porousmediumflow/richardsnc/volumevariables.hh:224
typename Traits::FluidState FluidState
Export type of the fluid state.
Definition: porousmediumflow/richardsnc/volumevariables.hh:66
Scalar viscosity(const int phaseIdx=0) const
Returns the dynamic viscosity of a given phase within the control volume.
Definition: porousmediumflow/richardsnc/volumevariables.hh:305
Scalar waterContent(const int phaseIdx=0) const
Returns the water content fluid phase within the finite volume.
Definition: porousmediumflow/richardsnc/volumevariables.hh:362
Scalar capillaryPressure() const
Returns the effective capillary pressure within the control volume.
Definition: porousmediumflow/richardsnc/volumevariables.hh:328
static constexpr int liquidPhaseIdx
Export phase acess indices.
Definition: porousmediumflow/richardsnc/volumevariables.hh:74
typename Traits::SolidSystem SolidSystem
Export type of solid system.
Definition: porousmediumflow/richardsnc/volumevariables.hh:70
Scalar temperature() const
Returns the temperature.
Definition: porousmediumflow/richardsnc/volumevariables.hh:230
static constexpr int gasPhaseIdx
Definition: porousmediumflow/richardsnc/volumevariables.hh:75
FluidState fluidState_
the fluid state
Definition: porousmediumflow/richardsnc/volumevariables.hh:423
void update(const ElemSol &elemSol, const Problem &problem, const Element &element, const Scv &scv)
Updates all quantities for a given control volume.
Definition: porousmediumflow/richardsnc/volumevariables.hh:87
Scalar moleFraction(const int phaseIdx, const int compIdx) const
Returns the mole fraction of a component in the phase.
Definition: porousmediumflow/richardsnc/volumevariables.hh:381
Scalar molarity(const int phaseIdx, const int compIdx) const
Returns the concentration of a component in the phase.
Definition: porousmediumflow/richardsnc/volumevariables.hh:403
typename Traits::FluidSystem FluidSystem
Export type of the fluid system.
Definition: porousmediumflow/richardsnc/volumevariables.hh:64
Scalar pressureHead(const int phaseIdx=0) const
Returns the pressureHead of a given phase within the control volume.
Definition: porousmediumflow/richardsnc/volumevariables.hh:348
Scalar density(const int phaseIdx=0) const
Returns the average mass density of a given fluid phase within the control volume.
Definition: porousmediumflow/richardsnc/volumevariables.hh:267
typename Traits::SolidState SolidState
Export type of solid state.
Definition: porousmediumflow/richardsnc/volumevariables.hh:68
Scalar pressure(const int phaseIdx=0) const
Returns the effective pressure of a given phase within the control volume.
Definition: porousmediumflow/richardsnc/volumevariables.hh:281
const FluidState & fluidState() const
Returns the fluid configuration at the given primary variables.
Definition: porousmediumflow/richardsnc/volumevariables.hh:210
const SolidState & solidState() const
Returns the phase state for the control volume.
Definition: porousmediumflow/richardsnc/volumevariables.hh:216
Scalar diffusionCoefficient(int phaseIdx, int compIIdx, int compJIdx) const
Returns the binary diffusion coefficients for a phase in .
Definition: porousmediumflow/richardsnc/volumevariables.hh:409
Scalar mobility(const int phaseIdx=0) const
Returns the effective mobility of a given phase within the control volume.
Definition: porousmediumflow/richardsnc/volumevariables.hh:295
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/richardsnc/volumevariables.hh:150
const PermeabilityType & permeability() const
Returns the permeability within the control volume in .
Definition: porousmediumflow/richardsnc/volumevariables.hh:245
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
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.