28#ifndef OPM_BLACKOIL_DIFFUSION_MODULE_HH
29#define OPM_BLACKOIL_DIFFUSION_MODULE_HH
31#include <dune/common/fvector.hh>
33#include <opm/common/utility/gpuDecorators.hpp>
35#include <opm/input/eclipse/EclipseState/EclipseState.hpp>
37#include <opm/material/common/Valgrind.hpp>
53template <
class TypeTag,
bool enableDiffusion>
56template <
class TypeTag,
bool enableDiffusion>
62template <
class TypeTag>
84 template <
class Context>
95template <
class TypeTag>
107 enum { numPhases = FluidSystem::numPhases };
108 enum { conti0EqIdx = Indices::conti0EqIdx };
110 enum { enableBioeffects = getPropValue<TypeTag, Properties::EnableBioeffects>() };
111 enum { enableMICP = Indices::enableMICP };
113 static constexpr unsigned contiMicrobialEqIdx = Indices::contiMicrobialEqIdx;
114 static constexpr unsigned contiOxygenEqIdx = Indices::contiOxygenEqIdx;
115 static constexpr unsigned waterPhaseIdx = FluidSystem::waterPhaseIdx;
116 static constexpr unsigned contiUreaEqIdx = Indices::contiUreaEqIdx;
118 using Toolbox = MathToolbox<Evaluation>;
129 #if OPM_IS_INSIDE_HOST_FUNCTION
130 use_mole_fraction_ = eclState.getTableManager().diffMoleFraction();
132 OPM_THROW(std::runtime_error,
"Diffusion module: Calling initFromState not expected on GPU.");
164 template <
class Context>
166 unsigned spaceIdx,
unsigned timeIdx)
169 if (!FluidSystem::enableDiffusion()) {
173 const auto& extQuants = context.extensiveQuantities(spaceIdx, timeIdx);
174 const auto& inIq = context.intensiveQuantities(extQuants.interiorIndex(), timeIdx);
175 const auto& exIq = context.intensiveQuantities(extQuants.exteriorIndex(), timeIdx);
176 const auto& diffusivity = extQuants.diffusivity();
177 const auto& effectiveDiffusionCoefficient = extQuants.effectiveDiffusionCoefficient();
178 addDiffusiveFlux(flux, inIq, exIq, diffusivity, effectiveDiffusionCoefficient);
179 if constexpr(enableBioeffects) {
180 const auto& effectiveBioDiffCoefficient = extQuants.effectiveBioDiffCoefficient();
181 addBioDiffFlux(flux, inIq, exIq, diffusivity, effectiveBioDiffCoefficient);
185 template<
class IntensiveQuantities,
class EvaluationArray,
class RateVectorT>
187 const IntensiveQuantities& inIq,
188 const IntensiveQuantities& exIq,
189 const Evaluation& diffusivity,
190 const EvaluationArray& effectiveDiffusionCoefficient)
192 const FluidSystem& fsys = inIq.getFluidSystem();
194 const auto& inFs = inIq.fluidState();
195 const auto& exFs = exIq.fluidState();
196 unsigned pvtRegionIndex = inFs.pvtRegionIndex();
197 Evaluation diffR = 0.0;
199 for (
unsigned phaseIdx = 0; phaseIdx < numPhases; ++phaseIdx) {
200 if (!fsys.phaseIsActive(phaseIdx)) {
205 if (!fsys.enableDissolvedGasInWater() && fsys.waterPhaseIdx == phaseIdx) {
210 if (fsys.gasPhaseIdx == phaseIdx && !fsys.phaseIsActive(fsys.oilPhaseIdx)) {
215 Evaluation bSAvg = inFs.saturation(phaseIdx) * inFs.invB(phaseIdx);
216 bSAvg += Toolbox::value(exFs.saturation(phaseIdx)) * Toolbox::value(exFs.invB(phaseIdx));
220 if (bSAvg < 1.0e-6) {
223 Evaluation convFactor = 1.0;
224 if (fsys.enableDissolvedGas() &&
225 fsys.phaseIsActive(fsys.gasPhaseIdx) &&
226 phaseIdx == fsys.oilPhaseIdx)
228 const Evaluation rsAvg = (inFs.Rs() + Toolbox::value(exFs.Rs())) / 2;
229 convFactor = 1.0 / (toFractionGasOil(pvtRegionIndex, fsys) + rsAvg);
230 diffR = inFs.Rs() - Toolbox::value(exFs.Rs());
232 if (fsys.enableVaporizedOil() &&
233 fsys.phaseIsActive(fsys.oilPhaseIdx) &&
234 phaseIdx == fsys.gasPhaseIdx)
236 const Evaluation rvAvg = (inFs.Rv() + Toolbox::value(exFs.Rv())) / 2;
237 convFactor = toFractionGasOil(pvtRegionIndex, fsys) /
238 (1.0 + rvAvg * toFractionGasOil(pvtRegionIndex, fsys));
239 diffR = inFs.Rv() - Toolbox::value(exFs.Rv());
241 if (fsys.enableDissolvedGasInWater() && phaseIdx == fsys.waterPhaseIdx) {
242 const Evaluation rsAvg = (inFs.Rsw() + Toolbox::value(exFs.Rsw())) / 2;
243 convFactor = 1.0 / (toFractionGasWater(pvtRegionIndex, fsys) + rsAvg);
244 diffR = inFs.Rsw() - Toolbox::value(exFs.Rsw());
246 if (fsys.enableVaporizedWater() && phaseIdx == fsys.gasPhaseIdx) {
247 const Evaluation rvAvg = (inFs.Rvw() + Toolbox::value(exFs.Rvw())) / 2;
248 convFactor = toFractionGasWater(pvtRegionIndex, fsys) /
249 (1.0 + rvAvg * toFractionGasWater(pvtRegionIndex, fsys));
250 diffR = inFs.Rvw() - Toolbox::value(exFs.Rvw());
254 const unsigned solventCompIdx = fsys.solventComponentIndex(phaseIdx);
255 const unsigned activeSolventCompIdx = fsys.canonicalToActiveCompIdx(solventCompIdx);
256 flux[conti0EqIdx + activeSolventCompIdx] +=
261 effectiveDiffusionCoefficient[phaseIdx][solventCompIdx];
264 const unsigned soluteCompIdx = fsys.soluteComponentIndex(phaseIdx);
265 const unsigned activeSoluteCompIdx = fsys.canonicalToActiveCompIdx(soluteCompIdx);
266 flux[conti0EqIdx + activeSoluteCompIdx] +=
271 effectiveDiffusionCoefficient[phaseIdx][soluteCompIdx];
275 template<
class IntensiveQuantities,
class EvaluationArray>
277 const IntensiveQuantities& inIq,
278 const IntensiveQuantities& exIq,
279 const Evaluation& diffusivity,
280 const EvaluationArray& effectiveBioDiffCoefficient)
282 const auto& inFs = inIq.fluidState();
283 const auto& exFs = exIq.fluidState();
284 Evaluation diffR = 0.0;
287 Evaluation bAvg = (inFs.saturation(waterPhaseIdx) * inFs.invB(waterPhaseIdx) +
288 Toolbox::value(exFs.saturation(waterPhaseIdx)) * Toolbox::value(exFs.invB(waterPhaseIdx))) / 2;
289 diffR = inIq.microbialConcentration() - Toolbox::value(exIq.microbialConcentration());
290 flux[contiMicrobialEqIdx] +=
294 effectiveBioDiffCoefficient[BioeffectsParams::micrDiffIdx];
295 if constexpr(enableMICP) {
296 diffR = inIq.oxygenConcentration() - Toolbox::value(exIq.oxygenConcentration());
297 flux[contiOxygenEqIdx] +=
301 effectiveBioDiffCoefficient[BioeffectsParams::oxygDiffIdx];
302 diffR = inIq.ureaConcentration() - Toolbox::value(exIq.ureaConcentration());
303 flux[contiUreaEqIdx] +=
307 effectiveBioDiffCoefficient[BioeffectsParams::ureaDiffIdx];
312 template<
class Flu
idSystemT>
313 OPM_HOST_DEVICE
static Scalar toFractionGasOil (
unsigned regionIdx,
const FluidSystemT& fsys)
315 const Scalar mMOil = use_mole_fraction_ ? fsys.molarMass(fsys.oilCompIdx, regionIdx) : 1;
316 const Scalar rhoO = fsys.referenceDensity(fsys.oilPhaseIdx, regionIdx);
317 const Scalar mMGas = use_mole_fraction_ ? fsys.molarMass(fsys.gasCompIdx, regionIdx) : 1;
318 const Scalar rhoG = fsys.referenceDensity(fsys.gasPhaseIdx, regionIdx);
319 return rhoO * mMGas / (rhoG * mMOil);
322 template<
class Flu
idSystemT>
323 OPM_HOST_DEVICE
static Scalar toFractionGasWater (
unsigned regionIdx,
const FluidSystemT& fsys)
325 const Scalar mMWater = use_mole_fraction_ ? fsys.molarMass(fsys.waterCompIdx, regionIdx) : 1;
326 const Scalar rhoW = fsys.referenceDensity(fsys.waterPhaseIdx, regionIdx);
327 const Scalar mMGas = use_mole_fraction_ ? fsys.molarMass(fsys.gasCompIdx, regionIdx) : 1;
328 const Scalar rhoG = fsys.referenceDensity(fsys.gasPhaseIdx, regionIdx);
329 return rhoW * mMGas / (rhoG * mMWater);
332 #if OPM_IS_INSIDE_DEVICE_FUNCTION
333 constexpr static bool use_mole_fraction_ =
false;
335 static bool use_mole_fraction_;
339#if OPM_IS_INSIDE_HOST_FUNCTION
340template <
typename TypeTag>
342BlackOilDiffusionModule<TypeTag, true>::use_mole_fraction_;
352template <
class TypeTag,
bool enableDiffusion>
358template <
class TypeTag>
371 throw std::logic_error(
"Method tortuosity() does not make sense "
372 "if diffusion is disabled");
381 throw std::logic_error(
"Method diffusionCoefficient() does not "
382 "make sense if diffusion is disabled");
391 throw std::logic_error(
"Method effectiveDiffusionCoefficient() "
392 "does not make sense if diffusion is disabled");
400 template <
class Flu
idState>
403 const ElementContext&,
412template <
class TypeTag>
423 enum { numPhases = FluidSystem::numPhases };
424 enum { numComponents = FluidSystem::numComponents };
425 enum { enableBioeffects = getPropValue<TypeTag, Properties::EnableBioeffects>() };
426 enum { enableMICP = Indices::enableMICP };
427 enum { numBioInWat = Indices::numBioInWat };
429 static constexpr unsigned waterPhaseIdx = FluidSystem::waterPhaseIdx;
439 const std::array<std::array<Evaluation, numComponents>, numPhases>& diffusionCoefficient)
440 : tortuosity_(tortuosity)
441 , diffusionCoefficient_(diffusionCoefficient)
451 if (FluidSystem::enableDiffusion()) {
452 tortuosity_ = rhs.tortuosity_;
453 diffusionCoefficient_ = rhs.diffusionCoefficient_;
463 {
return diffusionCoefficient_[phaseIdx][compIdx]; }
469 OPM_HOST_DEVICE Evaluation
tortuosity(
unsigned phaseIdx)
const
470 {
return tortuosity_[phaseIdx]; }
480 static constexpr bool enableTortuosity =
false;
481 if constexpr (enableTortuosity) {
482 return tortuosity_[phaseIdx] * diffusionCoefficient_[phaseIdx][compIdx];
484 return diffusionCoefficient_[phaseIdx][compIdx];
493 {
return bioDiffCoefficient_[compIdx]; }
502 static bool enableTortuosity =
false;
503 if (enableTortuosity)
504 return tortuosity_[waterPhaseIdx] * bioDiffCoefficient_[compIdx];
506 return bioDiffCoefficient_[compIdx];
514 template <
class Flu
idState>
516 const unsigned regionIdx,
517 const ElementContext& elemCtx,
522 if (!FluidSystem::enableDiffusion()) {
526 const auto& intQuants = elemCtx.intensiveQuantities(dofIdx, timeIdx);
527 update_(fluidState, regionIdx, intQuants);
530 template<
class Flu
idState>
532 const unsigned regionIdx,
533 const IntensiveQuantities& intQuants)
535 using Toolbox = MathToolbox<Evaluation>;
537 for (
unsigned phaseIdx = 0; phaseIdx < numPhases; ++phaseIdx) {
538 if (!FluidSystem::phaseIsActive(phaseIdx)) {
543 if (!FluidSystem::enableDissolvedGasInWater() && FluidSystem::waterPhaseIdx == phaseIdx) {
550 constexpr double myeps = 0.0001;
551 const Evaluation& base =
553 intQuants.porosity() *
554 intQuants.fluidState().saturation(phaseIdx));
555 tortuosity_[phaseIdx] =
556 1.0 / (intQuants.porosity() * intQuants.porosity()) *
557 Toolbox::pow(base, 10.0 / 3.0);
559 using PCache =
typename FluidSystem::template ParameterCache<Scalar>;
560 PCache pcache(regionIdx);
561 for (
unsigned compIdx = 0; compIdx < numComponents; ++compIdx) {
562 diffusionCoefficient_[phaseIdx][compIdx] =
563 FluidSystem::diffusionCoefficient(fluidState,
570 if constexpr(enableBioeffects) {
571 unsigned pvtRegionIndex = intQuants.pvtRegionIndex();
572 for (
unsigned compIdx = 0; compIdx < numBioInWat; ++compIdx) {
573 bioDiffCoefficient_[compIdx] =
574 BioeffectsModule::bioDiffCoefficient(pvtRegionIndex, compIdx);
580 std::array<Evaluation, numPhases> tortuosity_{};
581 std::array<std::array<Evaluation, numComponents>, numPhases> diffusionCoefficient_{};
582 std::array<Evaluation, numBioInWat> bioDiffCoefficient_{};
591template <
class TypeTag,
bool enableDiffusion>
592class BlackOilDiffusionExtensiveQuantities;
597template <
class TypeTag>
614 template <
class Context,
class Flu
idState>
628 throw std::logic_error(
"The method diffusivity() does not "
629 "make sense if diffusion is disabled.");
642 throw std::logic_error(
"The method effectiveDiffusionCoefficient() "
643 "does not make sense if diffusion is disabled.");
650template <
class TypeTag>
660 enum { numPhases = getPropValue<TypeTag, Properties::NumPhases>() };
661 enum { numComponents = getPropValue<TypeTag, Properties::NumComponents>() };
662 enum { enableBioeffects = getPropValue<TypeTag, Properties::EnableBioeffects>() };
663 enum { enableMICP = Indices::enableMICP };
664 enum { numBioInWat = Indices::numBioInWat };
674 void update_(
const ElementContext& elemCtx,
unsigned faceIdx,
unsigned timeIdx)
677 if (!FluidSystem::enableDiffusion()) {
681 const auto& stencil = elemCtx.stencil(timeIdx);
682 const auto& face = stencil.interiorFace(faceIdx);
683 const auto& extQuants = elemCtx.extensiveQuantities(faceIdx, timeIdx);
684 const auto& intQuantsInside = elemCtx.intensiveQuantities(extQuants.interiorIndex(), timeIdx);
685 const auto& intQuantsOutside = elemCtx.intensiveQuantities(extQuants.exteriorIndex(), timeIdx);
687 const Scalar diff = elemCtx.problem().diffusivity(elemCtx, face.interiorIndex(), face.exteriorIndex());
688 const Scalar faceArea = face.area();
689 diffusivity_ = diff / faceArea;
690 update(effectiveDiffusionCoefficient_, intQuantsInside, intQuantsOutside);
691 Valgrind::CheckDefined(diffusivity_);
692 if constexpr(enableBioeffects) {
693 updateBio(effectiveBioDiffCoefficient_, intQuantsInside, intQuantsOutside);
699 const IntensiveQuantities& intQuantsInside,
700 const IntensiveQuantities& intQuantsOutside)
702 const FluidSystem& fsys = intQuantsInside.getFluidSystem();
707 for (
unsigned phaseIdx = 0; phaseIdx < numPhases; ++phaseIdx) {
708 if (!fsys.phaseIsActive(phaseIdx)) {
712 if (!fsys.enableDissolvedGasInWater() && fsys.waterPhaseIdx == phaseIdx) {
715 for (
unsigned compIdx = 0; compIdx < numComponents; ++compIdx) {
716 effectiveDiffusionCoefficient[phaseIdx][compIdx] =
717 0.5 * (intQuantsInside.effectiveDiffusionCoefficient(phaseIdx, compIdx) +
718 intQuantsOutside.effectiveDiffusionCoefficient(phaseIdx, compIdx));
719 Valgrind::CheckDefined(effectiveDiffusionCoefficient[phaseIdx][compIdx]);
724 static void updateBio(std::array<Evaluation, numBioInWat>& effectiveBioDiffCoefficient,
725 const IntensiveQuantities& intQuantsInside,
726 const IntensiveQuantities& intQuantsOutside) {
728 for (
unsigned compIdx = 0; compIdx < numBioInWat; ++compIdx) {
729 effectiveBioDiffCoefficient[compIdx] =
730 0.5 * (intQuantsInside.effectiveBioDiffCoefficient(compIdx) +
731 intQuantsOutside.effectiveBioDiffCoefficient(compIdx));
732 Valgrind::CheckDefined(effectiveBioDiffCoefficient[compIdx]);
737 template <
class Context,
class Flu
idState>
743 throw std::runtime_error(
"Not implemented: Diffusion across boundary not implemented for blackoil");
754 {
return diffusivity_; }
764 {
return effectiveDiffusionCoefficient_[phaseIdx][compIdx]; }
767 {
return effectiveDiffusionCoefficient_; }
770 {
return effectiveBioDiffCoefficient_[compIdx]; }
773 return effectiveBioDiffCoefficient_;
778 EvaluationArray effectiveDiffusionCoefficient_;
779 std::array<Evaluation, numBioInWat> effectiveBioDiffCoefficient_;
Contains the classes required to extend the black-oil model by bioeffects.
Contains the high level supplements required to extend the black oil model by bioeffects.
Definition: blackoilbioeffectsmodules.hh:95
OPM_HOST_DEVICE const Evaluation & effectiveDiffusionCoefficient(unsigned, unsigned) const
The effective diffusion coeffcient of a component in a fluid phase at the face's integration point.
Definition: blackoildiffusionmodule.hh:639
OPM_HOST_DEVICE Scalar diffusivity() const
The diffusivity the face.
Definition: blackoildiffusionmodule.hh:626
void update_(const ElementContext &, unsigned, unsigned)
Update the quantities required to calculate the diffusive mass fluxes.
Definition: blackoildiffusionmodule.hh:609
void updateBoundary_(const Context &, unsigned, unsigned, const FluidState &)
Definition: blackoildiffusionmodule.hh:615
Provides the quantities required to calculate diffusive mass fluxes.
Definition: blackoildiffusionmodule.hh:652
static void update(EvaluationArray &effectiveDiffusionCoefficient, const IntensiveQuantities &intQuantsInside, const IntensiveQuantities &intQuantsOutside)
Definition: blackoildiffusionmodule.hh:698
OPM_HOST_DEVICE const Evaluation & effectiveBioDiffCoefficient(unsigned compIdx) const
Definition: blackoildiffusionmodule.hh:769
OPM_HOST_DEVICE const Evaluation & effectiveDiffusionCoefficient(unsigned phaseIdx, unsigned compIdx) const
The effective diffusion coefficient of a component in a fluid phase at the face's integration point.
Definition: blackoildiffusionmodule.hh:763
static void updateBio(std::array< Evaluation, numBioInWat > &effectiveBioDiffCoefficient, const IntensiveQuantities &intQuantsInside, const IntensiveQuantities &intQuantsOutside)
Definition: blackoildiffusionmodule.hh:724
std::array< std::array< Evaluation, numComponents >, numPhases > EvaluationArray
Definition: blackoildiffusionmodule.hh:667
OPM_HOST_DEVICE Scalar diffusivity() const
The diffusivity of the face.
Definition: blackoildiffusionmodule.hh:753
OPM_HOST_DEVICE const auto & effectiveDiffusionCoefficient() const
Definition: blackoildiffusionmodule.hh:766
void updateBoundary_(const Context &, unsigned, unsigned, const FluidState &)
Definition: blackoildiffusionmodule.hh:738
OPM_HOST_DEVICE const auto & effectiveBioDiffCoefficient() const
Definition: blackoildiffusionmodule.hh:772
void update_(const ElementContext &elemCtx, unsigned faceIdx, unsigned timeIdx)
Update the quantities required to calculate the diffusive mass fluxes.
Definition: blackoildiffusionmodule.hh:674
Provides the quantities required to calculate diffusive mass fluxes.
Definition: blackoildiffusionmodule.hh:57
void update_(FluidState &, const unsigned, const ElementContext &, unsigned, unsigned)
Update the quantities required to calculate diffusive mass fluxes.
Definition: blackoildiffusionmodule.hh:401
OPM_HOST_DEVICE Scalar tortuosity(unsigned) const
Returns the tortuousity of the sub-domain of a fluid phase in the porous medium.
Definition: blackoildiffusionmodule.hh:369
OPM_HOST_DEVICE Scalar effectiveDiffusionCoefficient(unsigned, unsigned) const
Returns the effective molecular diffusion coefficient of the porous medium for a component in a phase...
Definition: blackoildiffusionmodule.hh:389
OPM_HOST_DEVICE Scalar diffusionCoefficient(unsigned, unsigned) const
Returns the molecular diffusion coefficient for a component in a phase.
Definition: blackoildiffusionmodule.hh:379
BlackOilDiffusionIntensiveQuantities & operator=(const BlackOilDiffusionIntensiveQuantities &rhs)
Definition: blackoildiffusionmodule.hh:445
OPM_HOST_DEVICE Evaluation diffusionCoefficient(unsigned phaseIdx, unsigned compIdx) const
Returns the molecular diffusion coefficient for a component in a phase.
Definition: blackoildiffusionmodule.hh:462
OPM_HOST_DEVICE Evaluation effectiveDiffusionCoefficient(unsigned phaseIdx, unsigned compIdx) const
Returns the effective molecular diffusion coefficient of the porous medium for a component in a phase...
Definition: blackoildiffusionmodule.hh:476
BlackOilDiffusionIntensiveQuantities(BlackOilDiffusionIntensiveQuantities &&) noexcept=default
OPM_HOST_DEVICE Evaluation tortuosity(unsigned phaseIdx) const
Returns the tortuousity of the sub-domain of a fluid phase in the porous medium.
Definition: blackoildiffusionmodule.hh:469
BlackOilDiffusionIntensiveQuantities()=default
OPM_HOST_DEVICE Evaluation bioDiffCoefficient(unsigned compIdx) const
Returns the molecular diffusion coefficient for a biocomponent in the water phase.
Definition: blackoildiffusionmodule.hh:492
void update_(FluidState &fluidState, const unsigned regionIdx, const ElementContext &elemCtx, unsigned dofIdx, unsigned timeIdx)
Update the quantities required to calculate diffusive mass fluxes.
Definition: blackoildiffusionmodule.hh:515
OPM_HOST_DEVICE Evaluation effectiveBioDiffCoefficient(unsigned compIdx) const
Returns the effective molecular diffusion coefficient of the porous medium for a biocomponent in the ...
Definition: blackoildiffusionmodule.hh:499
void update_(FluidState &fluidState, const unsigned regionIdx, const IntensiveQuantities &intQuants)
Definition: blackoildiffusionmodule.hh:531
Provides the volumetric quantities required for the calculation of molecular diffusive fluxes.
Definition: blackoildiffusionmodule.hh:353
static OPM_HOST_DEVICE void addDiffusiveFlux(RateVector &, const Context &, unsigned, unsigned)
Adds the diffusive mass flux flux to the flux vector over a flux integration point.
Definition: blackoildiffusionmodule.hh:85
static void initFromState(const EclipseState &)
Initialize all internal data structures needed by the diffusion module.
Definition: blackoildiffusionmodule.hh:71
static void registerParameters()
Register all run-time parameters for the diffusion module.
Definition: blackoildiffusionmodule.hh:77
static OPM_HOST_DEVICE void addBioDiffFlux(RateVector &flux, const IntensiveQuantities &inIq, const IntensiveQuantities &exIq, const Evaluation &diffusivity, const EvaluationArray &effectiveBioDiffCoefficient)
Definition: blackoildiffusionmodule.hh:276
static OPM_HOST_DEVICE void addDiffusiveFlux(RateVector &flux, const Context &context, unsigned spaceIdx, unsigned timeIdx)
Adds the mass flux due to molecular diffusion to the flux vector over the integration point....
Definition: blackoildiffusionmodule.hh:165
static void initFromState(const EclipseState &eclState)
Initialize all internal data structures needed by the diffusion module.
Definition: blackoildiffusionmodule.hh:126
static void registerParameters()
Register all run-time parameters for the diffusion module.
Definition: blackoildiffusionmodule.hh:139
static OPM_HOST_DEVICE void addDiffusiveFlux(RateVectorT &flux, const IntensiveQuantities &inIq, const IntensiveQuantities &exIq, const Evaluation &diffusivity, const EvaluationArray &effectiveDiffusionCoefficient)
Definition: blackoildiffusionmodule.hh:186
Provides the auxiliary methods required for consideration of the diffusion equation.
Definition: blackoildiffusionmodule.hh:54
Declare the properties used by the infrastructure code of the finite volume discretizations.
Definition: blackoilbioeffectsmodules.hh:45
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:233
Struct holding the parameters for the BlackOilBioeffectsModule class.
Definition: blackoilbioeffectsparams.hpp:42