14#ifndef DUMUX_RICHARDSNC_VOLUME_VARIABLES_HH
15#define DUMUX_RICHARDSNC_VOLUME_VARIABLES_HH
31template <
class Traits>
39 using Scalar =
typename Traits::PrimaryVariables::value_type;
40 using PermeabilityType =
typename Traits::PermeabilityType;
43 static constexpr bool useMoles = Traits::ModelTraits::useMoles();
45 using EffDiffModel =
typename Traits::EffectiveDiffusivityModel;
46 using DiffusionCoefficients =
typename Traits::DiffusionType::DiffusionCoefficientsContainer;
58 using Indices =
typename Traits::ModelTraits::Indices;
72 template<
class ElemSol,
class Problem,
class Element,
class Scv>
74 const Problem &problem,
75 const Element &element,
85 const auto fluidMatrixInteraction = problem.spatialParams().fluidMatrixInteraction(element, scv, elemSol);
86 relativePermeabilityWetting_ = fluidMatrixInteraction.krw(
fluidState_.saturation(0));
90 minPc_ = fluidMatrixInteraction.endPointPc();
91 pn_ = problem.nonwettingReferencePressure();
94 EnergyVolVars::updateSolidEnergyParams(elemSol, problem, element, scv, solidState_);
95 permeability_ = problem.spatialParams().permeability(element, scv, elemSol);
96 EnergyVolVars::updateEffectiveThermalConductivity();
101 typename FluidSystem::ParameterCache paramCache;
104 auto getEffectiveDiffusionCoefficient = [&](
int phaseIdx,
int compIIdx,
int compJIdx)
106 return EffDiffModel::effectiveDiffusionCoefficient(*
this, phaseIdx, compIIdx, compJIdx);
109 effectiveDiffCoeff_.update(getEffectiveDiffusionCoefficient);
112 EnergyVolVars::updateSolidEnergyParams(elemSol, problem, element, scv, solidState_);
113 permeability_ = problem.spatialParams().permeability(element, scv, elemSol);
114 EnergyVolVars::updateEffectiveThermalConductivity();
131 template<
class ElemSol,
class Problem,
class Element,
class Scv>
133 const Problem& problem,
134 const Element& element,
141 const auto fluidMatrixInteraction = problem.spatialParams().fluidMatrixInteraction(element, scv, elemSol);
143 const auto&
priVars = elemSol[scv.localDofIndex()];
152 const Scalar pc = max(fluidMatrixInteraction.endPointPc(),
153 problem.nonwettingReferencePressure() -
fluidState.pressure(0));
154 const Scalar sw = fluidMatrixInteraction.sw(pc);
160 Scalar sumSecondaryFractions = 0.0;
164 sumSecondaryFractions +=
priVars[compIdx];
166 fluidState.setMoleFraction(0, 0, 1.0 - sumSecondaryFractions);
175 typename FluidSystem::ParameterCache paramCache;
196 {
return solidState_; }
219 {
return solidState_.porosity(); }
225 {
return permeability_; }
247 {
return phaseIdx == 0 ?
fluidState_.density(phaseIdx) : 0.0; }
261 {
return phaseIdx == 0 ?
fluidState_.pressure(phaseIdx) : pn_; }
285 {
return phaseIdx == 0 ?
fluidState_.viscosity(0) : 0.0; }
294 {
return phaseIdx == 0 ? relativePermeabilityWetting_ : 1.0; }
342 {
return saturation(phaseIdx) * solidState_.porosity(); }
350 {
return phaseIdx == 0 ? this->
fluidState_.molarDensity(phaseIdx) : 0.0; }
361 {
return phaseIdx == 0 ? this->
fluidState_.moleFraction(phaseIdx, compIdx) : 0.0; }
372 {
return phaseIdx == 0 ? this->
fluidState_.massFraction(phaseIdx, compIdx) : 0.0; }
382 Scalar
molarity(
const int phaseIdx,
const int compIdx)
const
383 {
return phaseIdx == 0 ? this->
fluidState_.molarity(phaseIdx, compIdx) : 0.0; }
390 typename FluidSystem::ParameterCache paramCache;
392 return FluidSystem::binaryDiffusionCoefficient(
fluidState_, paramCache, phaseIdx, compIIdx, compJIdx);
399 {
return effectiveDiffCoeff_(phaseIdx, compIIdx, compJIdx); }
406 DiffusionCoefficients effectiveDiffCoeff_;
408 Scalar relativePermeabilityWetting_;
410 PermeabilityType permeability_;
Definition: porousmediumflow/nonisothermal/volumevariables.hh:63
The isothermal base class.
Definition: porousmediumflow/volumevariables.hh:28
static constexpr int numFluidComponents()
Return number of components considered by the model.
Definition: porousmediumflow/volumevariables.hh:40
const PrimaryVariables & priVars() const
Returns the vector of primary variables.
Definition: porousmediumflow/volumevariables.hh:64
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:52
Contains the quantities which are constant within a finite volume in the Richards,...
Definition: porousmediumflow/richardsnc/volumevariables.hh:35
Scalar molarDensity(const int phaseIdx=0) const
Returns the molar density the of the fluid phase.
Definition: porousmediumflow/richardsnc/volumevariables.hh:349
Scalar relativePermeability(const int phaseIdx=0) const
Returns relative permeability [-] of a given phase within the control volume.
Definition: porousmediumflow/richardsnc/volumevariables.hh:293
Scalar porosity() const
Returns the average porosity [] within the control volume.
Definition: porousmediumflow/richardsnc/volumevariables.hh:218
Scalar massFraction(const int phaseIdx, const int compIdx) const
Returns the mass fraction of a component in the phase.
Definition: porousmediumflow/richardsnc/volumevariables.hh:371
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:237
typename Traits::ModelTraits::Indices Indices
Export indices.
Definition: porousmediumflow/richardsnc/volumevariables.hh:58
Scalar effectiveDiffusionCoefficient(int phaseIdx, int compIIdx, int compJIdx) const
Returns the effective diffusion coefficients for a phase in .
Definition: porousmediumflow/richardsnc/volumevariables.hh:398
Scalar averageMolarMass(const int phaseIdx=0) const
Returns the average molar mass of the fluid phase.
Definition: porousmediumflow/richardsnc/volumevariables.hh:203
typename Traits::FluidState FluidState
Export type of the fluid state.
Definition: porousmediumflow/richardsnc/volumevariables.hh:52
Scalar viscosity(const int phaseIdx=0) const
Returns the dynamic viscosity of a given phase within the control volume.
Definition: porousmediumflow/richardsnc/volumevariables.hh:284
Scalar waterContent(const int phaseIdx=0) const
Returns the water content fluid phase within the finite volume.
Definition: porousmediumflow/richardsnc/volumevariables.hh:341
Scalar capillaryPressure() const
Returns the effective capillary pressure within the control volume.
Definition: porousmediumflow/richardsnc/volumevariables.hh:307
static constexpr int liquidPhaseIdx
Export phase access indices.
Definition: porousmediumflow/richardsnc/volumevariables.hh:60
typename Traits::SolidSystem SolidSystem
Export type of solid system.
Definition: porousmediumflow/richardsnc/volumevariables.hh:56
Scalar temperature() const
Returns the temperature.
Definition: porousmediumflow/richardsnc/volumevariables.hh:209
static constexpr int gasPhaseIdx
Definition: porousmediumflow/richardsnc/volumevariables.hh:61
FluidState fluidState_
the fluid state
Definition: porousmediumflow/richardsnc/volumevariables.hh:402
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:73
Scalar moleFraction(const int phaseIdx, const int compIdx) const
Returns the mole fraction of a component in the phase.
Definition: porousmediumflow/richardsnc/volumevariables.hh:360
Scalar molarity(const int phaseIdx, const int compIdx) const
Returns the concentration of a component in the phase.
Definition: porousmediumflow/richardsnc/volumevariables.hh:382
typename Traits::FluidSystem FluidSystem
Export type of the fluid system.
Definition: porousmediumflow/richardsnc/volumevariables.hh:50
Scalar pressureHead(const int phaseIdx=0) const
Returns the pressureHead of a given phase within the control volume.
Definition: porousmediumflow/richardsnc/volumevariables.hh:327
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:246
typename Traits::SolidState SolidState
Export type of solid state.
Definition: porousmediumflow/richardsnc/volumevariables.hh:54
Scalar pressure(const int phaseIdx=0) const
Returns the effective pressure of a given phase within the control volume.
Definition: porousmediumflow/richardsnc/volumevariables.hh:260
const FluidState & fluidState() const
Returns the fluid configuration at the given primary variables.
Definition: porousmediumflow/richardsnc/volumevariables.hh:189
const SolidState & solidState() const
Returns the phase state for the control volume.
Definition: porousmediumflow/richardsnc/volumevariables.hh:195
Scalar diffusionCoefficient(int phaseIdx, int compIIdx, int compJIdx) const
Returns the binary diffusion coefficients for a phase in .
Definition: porousmediumflow/richardsnc/volumevariables.hh:388
Scalar mobility(const int phaseIdx=0) const
Returns the effective mobility of a given phase within the control volume.
Definition: porousmediumflow/richardsnc/volumevariables.hh:274
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:132
const PermeabilityType & permeability() const
Returns the permeability within the control volume in .
Definition: porousmediumflow/richardsnc/volumevariables.hh:224
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:24
std::string viscosity(int phaseIdx) noexcept
I/O name of viscosity for multiphase systems.
Definition: name.hh:62
std::string molarDensity(int phaseIdx) noexcept
I/O name of molar density for multiphase systems.
Definition: name.hh:71
std::string density(int phaseIdx) noexcept
I/O name of density for multiphase systems.
Definition: name.hh:53
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.
Update the solid volume fractions (inert and reacitve) and set them in the solidstate.