158 unsigned spaceIdx,
unsigned timeIdx)
161 if (!context.simulator().vanguard().eclState().getSimulationConfig().rock_config().dispersion()) {
164 const auto& extQuants = context.extensiveQuantities(spaceIdx, timeIdx);
165 const auto& inIq = context.intensiveQuantities(extQuants.interiorIndex(), timeIdx);
166 const auto& exIq = context.intensiveQuantities(extQuants.exteriorIndex(), timeIdx);
167 const auto& dispersivity = extQuants.dispersivity();
168 const auto& normVelocityAvg = extQuants.normVelocityAvg();
194 const IntensiveQuantities& inIq,
195 const IntensiveQuantities& exIq,
196 const Evaluation& dispersivity,
197 const Scalar& normVelocityAvg)
199 const auto& inFs = inIq.fluidState();
200 const auto& exFs = exIq.fluidState();
201 Evaluation diffR = 0.0;
202 if constexpr(enableBioeffects) {
204 const Evaluation bAvg = (inFs.invB(waterPhaseIdx) + Toolbox::value(exFs.invB(waterPhaseIdx))) / 2;
205 diffR = inIq.microbialConcentration() - Toolbox::value(exIq.microbialConcentration());
206 flux[contiMicrobialEqIdx] +=
208 normVelocityAvg[waterPhaseIdx] *
211 if constexpr(enableMICP) {
212 diffR = inIq.oxygenConcentration() - Toolbox::value(exIq.oxygenConcentration());
213 flux[contiOxygenEqIdx] +=
215 normVelocityAvg[waterPhaseIdx] *
218 diffR = inIq.ureaConcentration() - Toolbox::value(exIq.ureaConcentration());
219 flux[contiUreaEqIdx] +=
221 normVelocityAvg[waterPhaseIdx] *
228 unsigned pvtRegionIndex = inFs.pvtRegionIndex();
229 for (
unsigned phaseIdx = 0; phaseIdx < numPhases; ++phaseIdx) {
230 if (!FluidSystem::phaseIsActive(phaseIdx)) {
235 if (!FluidSystem::enableDissolvedGasInWater() && FluidSystem::waterPhaseIdx == phaseIdx) {
242 if (FluidSystem::gasPhaseIdx == phaseIdx) {
247 Evaluation bAvg = inFs.invB(phaseIdx);
248 bAvg += Toolbox::value(exFs.invB(phaseIdx));
251 Evaluation convFactor = 1.0;
252 if (FluidSystem::enableDissolvedGas() &&
253 FluidSystem::phaseIsActive(FluidSystem::gasPhaseIdx) &&
254 phaseIdx == FluidSystem::oilPhaseIdx)
256 const Evaluation rsAvg = (inFs.Rs() + Toolbox::value(exFs.Rs())) / 2;
257 convFactor = 1.0 / (toMassFractionGasOil(pvtRegionIndex) + rsAvg);
258 diffR = inFs.Rs() - Toolbox::value(exFs.Rs());
260 if (FluidSystem::enableVaporizedOil() &&
261 FluidSystem::phaseIsActive(FluidSystem::oilPhaseIdx) &&
262 phaseIdx == FluidSystem::gasPhaseIdx)
264 const Evaluation rvAvg = (inFs.Rv() + Toolbox::value(exFs.Rv())) / 2;
265 convFactor = toMassFractionGasOil(pvtRegionIndex) /
266 (1.0 + rvAvg * toMassFractionGasOil(pvtRegionIndex));
267 diffR = inFs.Rv() - Toolbox::value(exFs.Rv());
269 if (FluidSystem::enableDissolvedGasInWater() && phaseIdx == FluidSystem::waterPhaseIdx) {
270 const Evaluation rsAvg = (inFs.Rsw() + Toolbox::value(exFs.Rsw())) / 2;
271 convFactor = 1.0 / (toMassFractionGasWater(pvtRegionIndex) + rsAvg);
272 diffR = inFs.Rsw() - Toolbox::value(exFs.Rsw());
274 if (FluidSystem::enableVaporizedWater() && phaseIdx == FluidSystem::gasPhaseIdx) {
275 const Evaluation rvAvg = (inFs.Rvw() + Toolbox::value(exFs.Rvw())) / 2;
276 convFactor = toMassFractionGasWater(pvtRegionIndex) /
277 (1.0 + rvAvg * toMassFractionGasWater(pvtRegionIndex));
278 diffR = inFs.Rvw() - Toolbox::value(exFs.Rvw());
282 const unsigned solventCompIdx = FluidSystem::solventComponentIndex(phaseIdx);
283 const unsigned activeSolventCompIdx = FluidSystem::canonicalToActiveCompIdx(solventCompIdx);
284 flux[conti0EqIdx + activeSolventCompIdx] +=
286 normVelocityAvg[phaseIdx] *
292 const unsigned soluteCompIdx = FluidSystem::soluteComponentIndex(phaseIdx);
293 const unsigned activeSoluteCompIdx = FluidSystem::canonicalToActiveCompIdx(soluteCompIdx);
294 flux[conti0EqIdx + activeSoluteCompIdx] +=
296 normVelocityAvg[phaseIdx] *