26#ifndef DUMUX_3P2CNI_LOCAL_RESIDUAL_HH
27#define DUMUX_3P2CNI_LOCAL_RESIDUAL_HH
38template<
class TypeTag>
53 using Element =
typename GridView::template Codim<0>::Entity;
75 static constexpr bool useMoles = getPropValue<TypeTag, Properties::UseMoles>();
77 using ParentType::ParentType;
96 const auto massOrMoleDensity = [](
const auto& volVars,
const int phaseIdx)
97 {
return useMoles ? volVars.molarDensity(phaseIdx) : volVars.density(phaseIdx); };
99 const auto massOrMoleFraction= [](
const auto& volVars,
const int phaseIdx,
const int compIdx)
100 {
return useMoles ? volVars.moleFraction(phaseIdx, compIdx) : volVars.massFraction(phaseIdx, compIdx); };
103 for (
int phaseIdx = 0; phaseIdx <
numPhases; ++phaseIdx)
108 storage[eqIdx] += volVars.porosity()
109 * volVars.saturation(phaseIdx)
110 * massOrMoleDensity(volVars, phaseIdx)
115 EnergyLocalResidual::fluidPhaseStorage(storage, scv, volVars, phaseIdx);
119 EnergyLocalResidual::solidPhaseStorage(storage, scv, volVars);
143 fluxVars.init(problem, element, fvGeometry, elemVolVars, scvf, elemFluxVarsCache);
148 const auto massOrMoleDensity = [](
const auto& volVars,
const int phaseIdx)
149 {
return useMoles ? volVars.molarDensity(phaseIdx) : volVars.density(phaseIdx); };
151 const auto massOrMoleFraction= [](
const auto& volVars,
const int phaseIdx,
const int compIdx)
152 {
return useMoles ? volVars.moleFraction(phaseIdx, compIdx) : volVars.massFraction(phaseIdx, compIdx); };
155 for (
int phaseIdx = 0; phaseIdx <
numPhases; ++phaseIdx)
159 const auto upwindTerm = [&massOrMoleDensity, &
massOrMoleFraction, phaseIdx, compIdx] (
const auto& volVars)
160 {
return massOrMoleDensity(volVars, phaseIdx)*
massOrMoleFraction(volVars, phaseIdx, compIdx)*volVars.mobility(phaseIdx); };
164 flux[eqIdx] += fluxVars.advectiveFlux(phaseIdx, upwindTerm);
168 EnergyLocalResidual::heatConvectionFlux(flux, fluxVars, phaseIdx);
172 EnergyLocalResidual::heatConductionFlux(flux, fluxVars);
175 static constexpr auto referenceSystemFormulation = FluxVariables::MolecularDiffusionType::referenceSystemFormulation();
176 const auto diffusionFluxesWPhase = fluxVars.molecularDiffusionFlux(
wPhaseIdx);
182 jNW /= FluidSystem::molarMass(
nCompIdx);
183 jWW /= FluidSystem::molarMass(
wCompIdx);
186 const auto diffusionFluxesGPhase = fluxVars.molecularDiffusionFlux(
gPhaseIdx);
192 jWG /= FluidSystem::molarMass(
wCompIdx);
193 jNG /= FluidSystem::molarMass(
nCompIdx);
196 const auto diffusionFluxesNPhase = fluxVars.molecularDiffusionFlux(
nPhaseIdx);
202 jWN /= FluidSystem::molarMass(
wCompIdx);
203 jNN /= FluidSystem::molarMass(
nCompIdx);
The reference frameworks and formulations available for splitting total fluxes into a advective and d...
VolumeVariables::PrimaryVariables::value_type massOrMoleFraction(const VolumeVariables &volVars, ReferenceSystemFormulation referenceSys, const int phaseIdx, const int compIdx)
returns the mass or mole fraction to be used in Fick's law based on the reference system
Definition: referencesystemformulation.hh:66
typename Properties::Detail::GetPropImpl< TypeTag, Property >::type::type GetPropType
get the type alias defined in the property (equivalent to old macro GET_PROP_TYPE(....
Definition: propertysystem.hh:149
Element-wise calculation of the local residual for problems using the ThreePWaterOil fully implicit m...
Definition: porousmediumflow/3pwateroil/localresidual.hh:40
typename GetPropType< TypeTag, Properties::GridGeometry >::LocalView FVElementGeometry
Definition: porousmediumflow/3pwateroil/localresidual.hh:45
GetPropType< TypeTag, Properties::NumEqVector > NumEqVector
Definition: porousmediumflow/3pwateroil/localresidual.hh:48
NumEqVector computeFlux(const Problem &problem, const Element &element, const FVElementGeometry &fvGeometry, const ElementVolumeVariables &elemVolVars, const SubControlVolumeFace &scvf, const ElementFluxVariablesCache &elemFluxVarsCache) const
Evaluates the total flux of all conservation quantities over a face of a sub-control volume.
Definition: porousmediumflow/3pwateroil/localresidual.hh:135
typename GetPropType< TypeTag, Properties::GridFluxVariablesCache >::LocalView ElementFluxVariablesCache
Definition: porousmediumflow/3pwateroil/localresidual.hh:50
GetPropType< TypeTag, Properties::VolumeVariables > VolumeVariables
Definition: porousmediumflow/3pwateroil/localresidual.hh:55
NumEqVector computeStorage(const Problem &problem, const SubControlVolume &scv, const VolumeVariables &volVars) const
Evaluates the amount of all conservation quantities (e.g. phase mass) within a sub-control volume.
Definition: porousmediumflow/3pwateroil/localresidual.hh:90
typename GetPropType< TypeTag, Properties::GridGeometry >::GridView GridView
Definition: porousmediumflow/3pwateroil/localresidual.hh:52
@ numComponents
Definition: porousmediumflow/3pwateroil/localresidual.hh:61
@ conti0EqIdx
Index of the mass conservation equation for the water component.
Definition: porousmediumflow/3pwateroil/localresidual.hh:63
@ nPhaseIdx
Definition: porousmediumflow/3pwateroil/localresidual.hh:67
@ gPhaseIdx
Definition: porousmediumflow/3pwateroil/localresidual.hh:68
@ conti1EqIdx
Index of the mass conservation equation for the contaminant component.
Definition: porousmediumflow/3pwateroil/localresidual.hh:64
@ wPhaseIdx
Definition: porousmediumflow/3pwateroil/localresidual.hh:66
@ nCompIdx
Definition: porousmediumflow/3pwateroil/localresidual.hh:71
@ numPhases
Definition: porousmediumflow/3pwateroil/localresidual.hh:60
@ wCompIdx
Definition: porousmediumflow/3pwateroil/localresidual.hh:70
typename GridView::template Codim< 0 >::Entity Element
Definition: porousmediumflow/3pwateroil/localresidual.hh:53
GetPropType< TypeTag, Properties::Problem > Problem
Definition: porousmediumflow/3pwateroil/localresidual.hh:43
typename GetPropType< TypeTag, Properties::ModelTraits >::Indices Indices
Definition: porousmediumflow/3pwateroil/localresidual.hh:51
typename GetPropType< TypeTag, Properties::GridVolumeVariables >::LocalView ElementVolumeVariables
Definition: porousmediumflow/3pwateroil/localresidual.hh:54
GetPropType< TypeTag, Properties::FluxVariables > FluxVariables
Definition: porousmediumflow/3pwateroil/localresidual.hh:49
GetPropType< TypeTag, Properties::BaseLocalResidual > ParentType
Definition: porousmediumflow/3pwateroil/localresidual.hh:42
GetPropType< TypeTag, Properties::FluidSystem > FluidSystem
Definition: porousmediumflow/3pwateroil/localresidual.hh:57
typename FVElementGeometry::SubControlVolumeFace SubControlVolumeFace
Definition: porousmediumflow/3pwateroil/localresidual.hh:47
GetPropType< TypeTag, Properties::EnergyLocalResidual > EnergyLocalResidual
Definition: porousmediumflow/3pwateroil/localresidual.hh:56
static constexpr bool useMoles
Property that defines whether mole or mass fractions are used.
Definition: porousmediumflow/3pwateroil/localresidual.hh:75
typename FVElementGeometry::SubControlVolume SubControlVolume
Definition: porousmediumflow/3pwateroil/localresidual.hh:46
GetPropType< TypeTag, Properties::Scalar > Scalar
Definition: porousmediumflow/3pwateroil/localresidual.hh:44
Declares all properties used in Dumux.