97 const FluidState& fluidState)
99 ExtensiveQuantities extQuants;
100 extQuants.updateBoundary(context, bfIdx, timeIdx, fluidState);
101 const auto& insideIntQuants = context.intensiveQuantities(bfIdx, timeIdx);
102 const unsigned focusDofIdx = context.focusDofIndex();
103 const unsigned interiorDofIdx = context.interiorScvIndex(bfIdx, timeIdx);
109 for (
unsigned phaseIdx = 0; phaseIdx < numPhases; ++phaseIdx) {
110 if (!FluidSystem::phaseIsActive(phaseIdx)) {
113 const auto& pBoundary = fluidState.pressure(phaseIdx);
114 const Evaluation& pInside = insideIntQuants.fluidState().pressure(phaseIdx);
119 if (pBoundary < pInside) {
121 LocalResidual::template evalPhaseFluxes_<Evaluation>(tmp,
123 insideIntQuants.pvtRegionIndex(),
125 insideIntQuants.fluidState());
127 else if (pBoundary > pInside) {
128 using RhsEval = std::conditional_t<std::is_same_v<typename FluidState::Scalar, Evaluation>,
131 LocalResidual::template evalPhaseFluxes_<RhsEval>(tmp,
133 insideIntQuants.pvtRegionIndex(),
138 for (
unsigned i = 0; i < tmp.size(); ++i) {
139 (*this)[i] += tmp[i];
143 if constexpr (enableEnergy) {
145 Evaluation specificEnthalpy;
146 if (pBoundary > pInside) {
147 if (focusDofIdx == interiorDofIdx) {
148 density = fluidState.density(phaseIdx);
149 specificEnthalpy = fluidState.enthalpy(phaseIdx);
152 density = getValue(fluidState.density(phaseIdx));
153 specificEnthalpy = getValue(fluidState.enthalpy(phaseIdx));
156 else if (focusDofIdx == interiorDofIdx) {
157 density = insideIntQuants.fluidState().density(phaseIdx);
158 specificEnthalpy = insideIntQuants.fluidState().enthalpy(phaseIdx);
161 density = getValue(insideIntQuants.fluidState().density(phaseIdx));
162 specificEnthalpy = getValue(insideIntQuants.fluidState().enthalpy(phaseIdx));
165 const Evaluation enthalpyRate = density * extQuants.volumeFlux(phaseIdx) * specificEnthalpy;
166 EnergyModule::addToEnthalpyRate(*
this, enthalpyRate *
171 if constexpr (enableSolvent) {
172 (*this)[Indices::contiSolventEqIdx] = extQuants.solventVolumeFlux();
173 if (blackoilConserveSurfaceVolume) {
174 (*this)[Indices::contiSolventEqIdx] *= insideIntQuants.solventInverseFormationVolumeFactor();
177 (*this)[Indices::contiSolventEqIdx] *= insideIntQuants.solventDensity();
181 if constexpr (enablePolymer) {
182 (*this)[Indices::contiPolymerEqIdx] = extQuants.volumeFlux(FluidSystem::waterPhaseIdx) *
183 insideIntQuants.polymerConcentration();
186 if constexpr (enableMICP) {
187 (*this)[Indices::contiMicrobialEqIdx] = extQuants.volumeFlux(FluidSystem::waterPhaseIdx) *
188 insideIntQuants.microbialConcentration();
189 (*this)[Indices::contiOxygenEqIdx] = extQuants.volumeFlux(FluidSystem::waterPhaseIdx) *
190 insideIntQuants.oxygenConcentration();
191 (*this)[Indices::contiUreaEqIdx] = extQuants.volumeFlux(FluidSystem::waterPhaseIdx) *
192 insideIntQuants.ureaConcentration();
198 LocalResidual::adaptMassConservationQuantities_(*
this, insideIntQuants.pvtRegionIndex());
201 if constexpr (enableEnergy) {
202 EnergyModule::addToEnthalpyRate(*
this, extQuants.energyFlux() *
207 for (
unsigned i = 0; i < numEq; ++i) {
208 Valgrind::CheckDefined((*
this)[i]);
210 Valgrind::CheckDefined(*
this);