mirror of
https://github.com/OPM/opm-simulators.git
synced 2026-10-25 23:20:12 -05:00
Merge pull request #6487 from daavid00/conc
Biofilm and Calcite set to volume fraction instead of concentration
This commit is contained in:
20 files changed
+112
-112
No files matched your search
@@ -115,8 +115,8 @@ class BlackOilBioeffectsModule
|
||||
static constexpr unsigned microbialConcentrationIdx = Indices::microbialConcentrationIdx;
|
||||
static constexpr unsigned oxygenConcentrationIdx = Indices::oxygenConcentrationIdx;
|
||||
static constexpr unsigned ureaConcentrationIdx = Indices::ureaConcentrationIdx;
|
||||
static constexpr unsigned biofilmConcentrationIdx = Indices::biofilmConcentrationIdx;
|
||||
static constexpr unsigned calciteConcentrationIdx = Indices::calciteConcentrationIdx;
|
||||
static constexpr unsigned biofilmVolumeFractionIdx = Indices::biofilmVolumeFractionIdx;
|
||||
static constexpr unsigned calciteVolumeFractionIdx = Indices::calciteVolumeFractionIdx;
|
||||
static constexpr unsigned contiMicrobialEqIdx = Indices::contiMicrobialEqIdx;
|
||||
static constexpr unsigned contiOxygenEqIdx = Indices::contiOxygenEqIdx;
|
||||
static constexpr unsigned contiUreaEqIdx = Indices::contiUreaEqIdx;
|
||||
@@ -191,7 +191,7 @@ public:
|
||||
const LhsEval accumulationMicrobes = surfaceVolumeWater * Toolbox::template decay<LhsEval>(intQuants.microbialConcentration());
|
||||
storage[contiMicrobialEqIdx] += accumulationMicrobes;
|
||||
// biofilm
|
||||
const LhsEval accumulationBiofilm = Toolbox::template decay<LhsEval>(intQuants.biofilmConcentration());
|
||||
const LhsEval accumulationBiofilm = Toolbox::template decay<LhsEval>(intQuants.biofilmVolumeFraction());
|
||||
storage[contiBiofilmEqIdx] += accumulationBiofilm;
|
||||
if constexpr (enableMICP) {
|
||||
// oxygen in water phase
|
||||
@@ -202,7 +202,7 @@ public:
|
||||
storage[contiUreaEqIdx] += accumulationUrea;
|
||||
storage[contiUreaEqIdx] *= getPropValue<TypeTag, Properties::BlackOilUreaScalingFactor>();
|
||||
// calcite
|
||||
const LhsEval accumulationCalcite = Toolbox::template decay<LhsEval>(intQuants.calciteConcentration());
|
||||
const LhsEval accumulationCalcite = Toolbox::template decay<LhsEval>(intQuants.calciteVolumeFraction());
|
||||
storage[contiCalciteEqIdx] += accumulationCalcite;
|
||||
}
|
||||
}
|
||||
@@ -318,20 +318,20 @@ public:
|
||||
// see https://doi.org/10.1016/j.ijggc.2021.103256 for the MICP processes in the model
|
||||
source[Indices::contiMicrobialEqIdx] += intQuants.microbialConcentration() * intQuants.porosity() *
|
||||
b * (Y * k_g - k_d - k_a) +
|
||||
rho_b * intQuants.biofilmConcentration() * k_str * pow(normVelocityCell / intQuants.porosity(), eta);
|
||||
rho_b * intQuants.biofilmVolumeFraction() * k_str * pow(normVelocityCell / intQuants.porosity(), eta);
|
||||
|
||||
source[Indices::contiOxygenEqIdx] -= (intQuants.microbialConcentration() * intQuants.porosity() *
|
||||
b + rho_b * intQuants.biofilmConcentration()) * F * k_g;
|
||||
b + rho_b * intQuants.biofilmVolumeFraction()) * F * k_g;
|
||||
|
||||
source[Indices::contiUreaEqIdx] -= rho_b * intQuants.biofilmConcentration() * k_c;
|
||||
source[Indices::contiUreaEqIdx] -= rho_b * intQuants.biofilmVolumeFraction() * k_c;
|
||||
|
||||
source[Indices::contiBiofilmEqIdx] += intQuants.biofilmConcentration() * (Y * k_g - k_d -
|
||||
source[Indices::contiBiofilmEqIdx] += intQuants.biofilmVolumeFraction() * (Y * k_g - k_d -
|
||||
k_str * pow(normVelocityCell / intQuants.porosity(), eta) - Y_uc * (rho_b / rho_c) *
|
||||
intQuants.biofilmConcentration() * k_c / (intQuants.porosity() +
|
||||
intQuants.biofilmConcentration())) + k_a * intQuants.microbialConcentration() *
|
||||
intQuants.biofilmVolumeFraction() * k_c / (intQuants.porosity() +
|
||||
intQuants.biofilmVolumeFraction())) + k_a * intQuants.microbialConcentration() *
|
||||
intQuants.porosity() * b / rho_b;
|
||||
|
||||
source[Indices::contiCalciteEqIdx] += (rho_b / rho_c) * intQuants.biofilmConcentration() * Y_uc * k_c;
|
||||
source[Indices::contiCalciteEqIdx] += (rho_b / rho_c) * intQuants.biofilmVolumeFraction() * Y_uc * k_c;
|
||||
|
||||
// since the urea concentration can be much larger than 1, then we apply a scaling factor
|
||||
source[Indices::contiUreaEqIdx] *= getPropValue<TypeTag, Properties::BlackOilUreaScalingFactor>();
|
||||
@@ -351,7 +351,7 @@ public:
|
||||
|
||||
const auto& xG = RswToMassFraction(pvtRegionIndex, Rsw);
|
||||
|
||||
// get porosity, biofilm concentration, and gas density for convenience
|
||||
// get the porosity and and gas density for convenience
|
||||
const Evaluation& poro = intQuants.porosity();
|
||||
Scalar rho_gRef = FluidSystem::referenceDensity(FluidSystem::gasPhaseIdx, pvtRegionIndex);
|
||||
|
||||
@@ -365,16 +365,16 @@ public:
|
||||
// decay, detachment, and attachment rate of suspended microbes
|
||||
source[contiMicrobialEqIdx] += Sw * intQuants.microbialConcentration() * intQuants.porosity() * b
|
||||
* (- k_a - k_d)
|
||||
+ intQuants.biofilmConcentration() * rho_b * k_str
|
||||
+ intQuants.biofilmVolumeFraction() * rho_b * k_str
|
||||
* pow(normVelocityCell / intQuants.porosity(), eta);
|
||||
// biofilm growth and decay rate
|
||||
source[contiBiofilmEqIdx] += (k_g - k_d - k_str * pow(normVelocityCell / intQuants.porosity(), eta))
|
||||
* intQuants.biofilmConcentration()
|
||||
* intQuants.biofilmVolumeFraction()
|
||||
+ k_a * Sw * intQuants.microbialConcentration() * intQuants.porosity() * b / rho_b;
|
||||
|
||||
// biofilm consumption of dissolved gas is proportional to biofilm growth rate
|
||||
unsigned activeGasCompIdx = FluidSystem::canonicalToActiveCompIdx(gasCompIdx);
|
||||
source[activeGasCompIdx] -= intQuants.biofilmConcentration() * rho_b * k_g / (Y * rho_gRef);
|
||||
source[activeGasCompIdx] -= intQuants.biofilmVolumeFraction() * rho_b * k_g / (Y * rho_gRef);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -531,8 +531,8 @@ class BlackOilBioeffectsIntensiveQuantities
|
||||
static constexpr int microbialConcentrationIdx = Indices::microbialConcentrationIdx;
|
||||
static constexpr int oxygenConcentrationIdx = Indices::oxygenConcentrationIdx;
|
||||
static constexpr int ureaConcentrationIdx = Indices::ureaConcentrationIdx;
|
||||
static constexpr int biofilmConcentrationIdx = Indices::biofilmConcentrationIdx;
|
||||
static constexpr int calciteConcentrationIdx = Indices::calciteConcentrationIdx;
|
||||
static constexpr int biofilmVolumeFractionIdx = Indices::biofilmVolumeFractionIdx;
|
||||
static constexpr int calciteVolumeFractionIdx = Indices::calciteVolumeFractionIdx;
|
||||
static constexpr int temperatureIdx = Indices::temperatureIdx;
|
||||
static constexpr int waterPhaseIdx = FluidSystem::waterPhaseIdx;
|
||||
static constexpr bool enableMICP = Indices::enableMICP;
|
||||
@@ -554,16 +554,16 @@ public:
|
||||
unsigned satnumRegionIdx = elemCtx.problem().satnumRegionIndex(elemCtx, dofIdx, timeIdx);
|
||||
|
||||
microbialConcentration_ = priVars.makeEvaluation(microbialConcentrationIdx, timeIdx, linearizationType);
|
||||
biofilmConcentration_ = priVars.makeEvaluation(biofilmConcentrationIdx, timeIdx, linearizationType);
|
||||
biofilmMass_ = biofilmConcentration_ * BioeffectsModule::densityBiofilm(satnumRegionIdx);
|
||||
calciteConcentration_ = 0.0;
|
||||
biofilmVolumeFraction_ = priVars.makeEvaluation(biofilmVolumeFractionIdx, timeIdx, linearizationType);
|
||||
biofilmMass_ = biofilmVolumeFraction_ * BioeffectsModule::densityBiofilm(satnumRegionIdx);
|
||||
calciteVolumeFraction_ = 0.0;
|
||||
if constexpr (enableMICP) {
|
||||
oxygenConcentration_ = priVars.makeEvaluation(oxygenConcentrationIdx, timeIdx, linearizationType);
|
||||
ureaConcentration_ = priVars.makeEvaluation(ureaConcentrationIdx, timeIdx, linearizationType);
|
||||
calciteConcentration_ = priVars.makeEvaluation(calciteConcentrationIdx, timeIdx, linearizationType);
|
||||
calciteMass_ = calciteConcentration_ * BioeffectsModule::densityCalcite(satnumRegionIdx);
|
||||
calciteVolumeFraction_ = priVars.makeEvaluation(calciteVolumeFractionIdx, timeIdx, linearizationType);
|
||||
calciteMass_ = calciteVolumeFraction_ * BioeffectsModule::densityCalcite(satnumRegionIdx);
|
||||
}
|
||||
const Evaluation poroFact = min(1.0 - (biofilmConcentration_ + calciteConcentration_) /
|
||||
const Evaluation poroFact = min(1.0 - (biofilmVolumeFraction_ + calciteVolumeFraction_) /
|
||||
(referencePorosity_), 1.0); //phi/phi_0
|
||||
|
||||
const auto& permfactTable = BioeffectsModule::permfactTable(satnumRegionIdx);
|
||||
@@ -579,11 +579,11 @@ public:
|
||||
const Evaluation& ureaConcentration() const
|
||||
{ return ureaConcentration_; }
|
||||
|
||||
const Evaluation& biofilmConcentration() const
|
||||
{ return biofilmConcentration_; }
|
||||
const Evaluation& biofilmVolumeFraction() const
|
||||
{ return biofilmVolumeFraction_; }
|
||||
|
||||
const Evaluation& calciteConcentration() const
|
||||
{ return calciteConcentration_; }
|
||||
const Evaluation& calciteVolumeFraction() const
|
||||
{ return calciteVolumeFraction_; }
|
||||
|
||||
const Evaluation biofilmMass() const
|
||||
{ return biofilmMass_; }
|
||||
@@ -598,8 +598,8 @@ protected:
|
||||
Evaluation microbialConcentration_;
|
||||
Evaluation oxygenConcentration_;
|
||||
Evaluation ureaConcentration_;
|
||||
Evaluation biofilmConcentration_;
|
||||
Evaluation calciteConcentration_;
|
||||
Evaluation biofilmVolumeFraction_;
|
||||
Evaluation calciteVolumeFraction_;
|
||||
Evaluation biofilmMass_;
|
||||
Evaluation calciteMass_;
|
||||
Evaluation permFactor_;
|
||||
@@ -629,11 +629,11 @@ public:
|
||||
const Evaluation& ureaConcentration() const
|
||||
{ throw std::logic_error("ureaConcentration() called but MICP is disabled"); }
|
||||
|
||||
const Evaluation& biofilmConcentration() const
|
||||
{ throw std::logic_error("biofilmConcentration() called but biofilm/MICP is disabled"); }
|
||||
const Evaluation& biofilmVolumeFraction() const
|
||||
{ throw std::logic_error("biofilmVolumeFraction() called but biofilm/MICP is disabled"); }
|
||||
|
||||
const Evaluation& calciteConcentration() const
|
||||
{ throw std::logic_error("calciteConcentration() called but MICP is disabled"); }
|
||||
const Evaluation& calciteVolumeFraction() const
|
||||
{ throw std::logic_error("calciteVolumeFraction() called but MICP is disabled"); }
|
||||
|
||||
const Evaluation& biofilmMass() const
|
||||
{ throw std::logic_error("biofilmMass() called but biofilm/MICP is disabled"); }
|
||||
|
||||
@@ -311,7 +311,7 @@ public:
|
||||
else if constexpr (enableBioeffects) {
|
||||
if (BioeffectsModule::hasPcfactTables() && referencePorosity_ > 0) {
|
||||
unsigned satnumRegionIdx = problem.satnumRegionIndex(globalSpaceIdx);
|
||||
const Evaluation Sb = priVars.makeEvaluation(Indices::biofilmConcentrationIdx, timeIdx);
|
||||
const Evaluation Sb = priVars.makeEvaluation(Indices::biofilmVolumeFractionIdx, timeIdx);
|
||||
const Evaluation porosityFactor = min(1.0 - Sb/referencePorosity_, 1.0); //phi/phi_0
|
||||
const auto& pcfactTable = BioeffectsModule::pcfactTable(satnumRegionIdx);
|
||||
const Evaluation pcFactor = pcfactTable.eval(porosityFactor, /*extrapolation=*/true);
|
||||
@@ -580,11 +580,11 @@ public:
|
||||
|
||||
// deal with bioeffects (minimum porosity of 1e-8 to prevent numerical issues)
|
||||
if constexpr (enableBioeffects) {
|
||||
const Evaluation biofilm_ = priVars.makeEvaluation(Indices::biofilmConcentrationIdx,
|
||||
const Evaluation biofilm_ = priVars.makeEvaluation(Indices::biofilmVolumeFractionIdx,
|
||||
timeIdx, linearizationType);
|
||||
Evaluation calcite_ = 0.0;
|
||||
if constexpr (enableMICP) {
|
||||
calcite_ = priVars.makeEvaluation(Indices::calciteConcentrationIdx, timeIdx, linearizationType);
|
||||
calcite_ = priVars.makeEvaluation(Indices::calciteVolumeFractionIdx, timeIdx, linearizationType);
|
||||
}
|
||||
porosity_ -= min(biofilm_ + calcite_, referencePorosity_ - 1e-8);
|
||||
}
|
||||
|
||||
@@ -211,7 +211,7 @@ protected:
|
||||
static constexpr bool enableEnergy = Indices::temperatureIdx >= 0;
|
||||
static constexpr bool enableFoam = Indices::foamConcentrationIdx >= 0;
|
||||
static constexpr bool enableBrine = Indices::saltConcentrationIdx >= 0;
|
||||
static constexpr bool enableBioeffects = Indices::biofilmConcentrationIdx >= 0;
|
||||
static constexpr bool enableBioeffects = Indices::biofilmVolumeFractionIdx >= 0;
|
||||
static constexpr bool enableMICP = Indices::enableMICP;
|
||||
|
||||
currentValue.checkDefined();
|
||||
@@ -397,7 +397,7 @@ protected:
|
||||
if (pvIdx == Indices::microbialConcentrationIdx) {
|
||||
nextValue[pvIdx] = std::max(nextValue[pvIdx], Scalar{0.0});
|
||||
}
|
||||
if (pvIdx == Indices::biofilmConcentrationIdx) {
|
||||
if (pvIdx == Indices::biofilmVolumeFractionIdx) {
|
||||
nextValue[pvIdx] = std::clamp(nextValue[pvIdx],
|
||||
Scalar{0.0},
|
||||
this->problem().referencePorosity(globalDofIdx, 0) - 1e-8);
|
||||
@@ -409,7 +409,7 @@ protected:
|
||||
if (pvIdx == Indices::ureaConcentrationIdx) {
|
||||
nextValue[pvIdx] = std::max(nextValue[pvIdx], Scalar{0.0});
|
||||
}
|
||||
if (pvIdx == Indices::calciteConcentrationIdx) {
|
||||
if (pvIdx == Indices::calciteVolumeFractionIdx) {
|
||||
nextValue[pvIdx] = std::clamp(nextValue[pvIdx], Scalar{0.0},
|
||||
this->problem().referencePorosity(globalDofIdx, 0) - 1e-8);
|
||||
}
|
||||
|
||||
@@ -163,12 +163,12 @@ struct BlackOilOnePhaseIndices
|
||||
numMICPs > 2 ? oxygenConcentrationIdx + 1 : -1000;
|
||||
|
||||
//! Index of the primary variable for the fourth MICP component
|
||||
static constexpr int biofilmConcentrationIdx =
|
||||
static constexpr int biofilmVolumeFractionIdx =
|
||||
numMICPs > 3 ? ureaConcentrationIdx + 1 : -1000;
|
||||
|
||||
//! Index of the primary variable for the fifth MICP component
|
||||
static constexpr int calciteConcentrationIdx =
|
||||
numMICPs > 4 ? biofilmConcentrationIdx + 1 : -1000;
|
||||
static constexpr int calciteVolumeFractionIdx =
|
||||
numMICPs > 4 ? biofilmVolumeFractionIdx + 1 : -1000;
|
||||
|
||||
//! Index of the primary variable for the foam
|
||||
static constexpr int foamConcentrationIdx =
|
||||
|
||||
@@ -601,7 +601,7 @@ public:
|
||||
else if constexpr (enableBioeffects) {
|
||||
if (BioeffectsModule::hasPcfactTables() && problem.referencePorosity(globalDofIdx, 0) > 0) {
|
||||
unsigned satnumRegionIdx = problem.satnumRegionIndex(globalDofIdx);
|
||||
Scalar Sb = biofilmConcentration_() /
|
||||
Scalar Sb = biofilmVolumeFraction_() /
|
||||
problem.referencePorosity(globalDofIdx, 0);
|
||||
Scalar porosityFactor = std::min(1.0 - Sb, 1.0); //phi/phi_0
|
||||
const auto& pcfactTable = BioeffectsModule::pcfactTable(satnumRegionIdx);
|
||||
@@ -987,10 +987,10 @@ private:
|
||||
}
|
||||
}
|
||||
|
||||
Scalar biofilmConcentration_() const
|
||||
Scalar biofilmVolumeFraction_() const
|
||||
{
|
||||
if constexpr (enableBioeffects)
|
||||
return (*this)[Indices::biofilmConcentrationIdx];
|
||||
return (*this)[Indices::biofilmVolumeFractionIdx];
|
||||
else
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
@@ -155,13 +155,13 @@ struct BlackOilTwoPhaseIndices
|
||||
enableBiofilm ? PVOffset + numPhases + numSolvents : -1000;
|
||||
|
||||
//! Index of the primary variable for the biofilm component
|
||||
static constexpr int biofilmConcentrationIdx =
|
||||
static constexpr int biofilmVolumeFractionIdx =
|
||||
enableBiofilm ? PVOffset + numPhases + numSolvents + 1 : -1000;
|
||||
|
||||
//! MICP only available for one phase indices
|
||||
static constexpr int oxygenConcentrationIdx = -1000;
|
||||
static constexpr int ureaConcentrationIdx = -1000;
|
||||
static constexpr int calciteConcentrationIdx = -1000;
|
||||
static constexpr int calciteVolumeFractionIdx = -1000;
|
||||
|
||||
//! Index of the primary variable for the foam
|
||||
static constexpr int foamConcentrationIdx =
|
||||
|
||||
@@ -142,8 +142,8 @@ struct BlackOilVariableAndEquationIndices
|
||||
static constexpr int microbialConcentrationIdx = -1000;
|
||||
static constexpr int oxygenConcentrationIdx = -1000;
|
||||
static constexpr int ureaConcentrationIdx = -1000;
|
||||
static constexpr int biofilmConcentrationIdx = -1000;
|
||||
static constexpr int calciteConcentrationIdx = -1000;
|
||||
static constexpr int biofilmVolumeFractionIdx = -1000;
|
||||
static constexpr int calciteVolumeFractionIdx = -1000;
|
||||
|
||||
//! Index of the primary variable for the foam
|
||||
static constexpr int foamConcentrationIdx =
|
||||
|
||||
@@ -103,8 +103,8 @@ public:
|
||||
if (params_.microbialConcentrationOutput_) {
|
||||
this->resizeScalarBuffer_(microbialConcentration_, BufferType::Dof);
|
||||
}
|
||||
if (params_.biofilmConcentrationOutput_) {
|
||||
this->resizeScalarBuffer_(biofilmConcentration_, BufferType::Dof);
|
||||
if (params_.biofilmVolumeFractionOutput_) {
|
||||
this->resizeScalarBuffer_(biofilmVolumeFraction_, BufferType::Dof);
|
||||
}
|
||||
if constexpr (enableMICP) {
|
||||
if (params_.oxygenConcentrationOutput_) {
|
||||
@@ -113,8 +113,8 @@ public:
|
||||
if (params_.ureaConcentrationOutput_) {
|
||||
this->resizeScalarBuffer_(ureaConcentration_, BufferType::Dof);
|
||||
}
|
||||
if (params_.calciteConcentrationOutput_) {
|
||||
this->resizeScalarBuffer_(calciteConcentration_, BufferType::Dof);
|
||||
if (params_.calciteVolumeFractionOutput_) {
|
||||
this->resizeScalarBuffer_(calciteVolumeFraction_, BufferType::Dof);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -139,9 +139,9 @@ public:
|
||||
microbialConcentration_[globalDofIdx] =
|
||||
scalarValue(intQuants.microbialConcentration());
|
||||
}
|
||||
if (params_.biofilmConcentrationOutput_) {
|
||||
biofilmConcentration_[globalDofIdx] =
|
||||
scalarValue(intQuants.biofilmConcentration());
|
||||
if (params_.biofilmVolumeFractionOutput_) {
|
||||
biofilmVolumeFraction_[globalDofIdx] =
|
||||
scalarValue(intQuants.biofilmVolumeFraction());
|
||||
}
|
||||
if constexpr (enableMICP) {
|
||||
if (params_.oxygenConcentrationOutput_) {
|
||||
@@ -152,9 +152,9 @@ public:
|
||||
ureaConcentration_[globalDofIdx] =
|
||||
scalarValue(intQuants.ureaConcentration());
|
||||
}
|
||||
if (params_.calciteConcentrationOutput_) {
|
||||
calciteConcentration_[globalDofIdx] =
|
||||
scalarValue(intQuants.calciteConcentration());
|
||||
if (params_.calciteVolumeFractionOutput_) {
|
||||
calciteVolumeFraction_[globalDofIdx] =
|
||||
scalarValue(intQuants.calciteVolumeFraction());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -175,9 +175,9 @@ public:
|
||||
this->commitScalarBuffer_(baseWriter, "microbial concentration",
|
||||
microbialConcentration_, BufferType::Dof);
|
||||
}
|
||||
if (params_.biofilmConcentrationOutput_) {
|
||||
this->commitScalarBuffer_(baseWriter, "biofilm fraction",
|
||||
biofilmConcentration_, BufferType::Dof);
|
||||
if (params_.biofilmVolumeFractionOutput_) {
|
||||
this->commitScalarBuffer_(baseWriter, "biofilm voulme fraction",
|
||||
biofilmVolumeFraction_, BufferType::Dof);
|
||||
}
|
||||
if constexpr (enableMICP) {
|
||||
if (params_.oxygenConcentrationOutput_) {
|
||||
@@ -188,9 +188,9 @@ public:
|
||||
this->commitScalarBuffer_(baseWriter, "urea concentration",
|
||||
ureaConcentration_, BufferType::Dof);
|
||||
}
|
||||
if (params_.calciteConcentrationOutput_) {
|
||||
this->commitScalarBuffer_(baseWriter, "calcite fraction",
|
||||
calciteConcentration_, BufferType::Dof);
|
||||
if (params_.calciteVolumeFractionOutput_) {
|
||||
this->commitScalarBuffer_(baseWriter, "calcite volume fraction",
|
||||
calciteVolumeFraction_, BufferType::Dof);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -201,8 +201,8 @@ private:
|
||||
ScalarBuffer microbialConcentration_{};
|
||||
ScalarBuffer oxygenConcentration_{};
|
||||
ScalarBuffer ureaConcentration_{};
|
||||
ScalarBuffer biofilmConcentration_{};
|
||||
ScalarBuffer calciteConcentration_{};
|
||||
ScalarBuffer biofilmVolumeFraction_{};
|
||||
ScalarBuffer calciteVolumeFraction_{};
|
||||
};
|
||||
|
||||
} // namespace Opm
|
||||
|
||||
@@ -33,7 +33,7 @@ void VtkBlackOilBioeffectsParams::registerParameters(const bool isMICP)
|
||||
Parameters::Register<Parameters::VtkWriteMicrobialConcentration>
|
||||
("Include the concentration of the microbial component in the water phase "
|
||||
"in the VTK output files");
|
||||
Parameters::Register<Parameters::VtkWriteBiofilmConcentration>
|
||||
Parameters::Register<Parameters::VtkWriteBiofilmVolumeFraction>
|
||||
("Include the biofilm volume fraction in the VTK output files");
|
||||
if (isMICP) {
|
||||
Parameters::Register<Parameters::VtkWriteOxygenConcentration>
|
||||
@@ -42,7 +42,7 @@ void VtkBlackOilBioeffectsParams::registerParameters(const bool isMICP)
|
||||
Parameters::Register<Parameters::VtkWriteUreaConcentration>
|
||||
("Include the concentration of the urea component in the water phase "
|
||||
"in the VTK output files");
|
||||
Parameters::Register<Parameters::VtkWriteCalciteConcentration>
|
||||
Parameters::Register<Parameters::VtkWriteCalciteVolumeFraction>
|
||||
("Include the calcite volume fraction in the VTK output files");
|
||||
}
|
||||
}
|
||||
@@ -50,11 +50,11 @@ void VtkBlackOilBioeffectsParams::registerParameters(const bool isMICP)
|
||||
void VtkBlackOilBioeffectsParams::read(const bool isMICP)
|
||||
{
|
||||
microbialConcentrationOutput_ = Parameters::Get<Parameters::VtkWriteMicrobialConcentration>();
|
||||
biofilmConcentrationOutput_ = Parameters::Get<Parameters::VtkWriteBiofilmConcentration>();
|
||||
biofilmVolumeFractionOutput_ = Parameters::Get<Parameters::VtkWriteBiofilmVolumeFraction>();
|
||||
if (isMICP) {
|
||||
oxygenConcentrationOutput_ = Parameters::Get<Parameters::VtkWriteOxygenConcentration>();
|
||||
ureaConcentrationOutput_ = Parameters::Get<Parameters::VtkWriteUreaConcentration>();
|
||||
calciteConcentrationOutput_ = Parameters::Get<Parameters::VtkWriteCalciteConcentration>();
|
||||
calciteVolumeFractionOutput_ = Parameters::Get<Parameters::VtkWriteCalciteVolumeFraction>();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -33,8 +33,8 @@ namespace Opm::Parameters {
|
||||
struct VtkWriteMicrobialConcentration { static constexpr bool value = true; };
|
||||
struct VtkWriteOxygenConcentration { static constexpr bool value = true; };
|
||||
struct VtkWriteUreaConcentration { static constexpr bool value = true; };
|
||||
struct VtkWriteBiofilmConcentration { static constexpr bool value = true; };
|
||||
struct VtkWriteCalciteConcentration { static constexpr bool value = true; };
|
||||
struct VtkWriteBiofilmVolumeFraction { static constexpr bool value = true; };
|
||||
struct VtkWriteCalciteVolumeFraction { static constexpr bool value = true; };
|
||||
|
||||
} // namespace Opm::Parameters
|
||||
|
||||
@@ -54,8 +54,8 @@ struct VtkBlackOilBioeffectsParams
|
||||
bool microbialConcentrationOutput_;
|
||||
bool oxygenConcentrationOutput_;
|
||||
bool ureaConcentrationOutput_;
|
||||
bool biofilmConcentrationOutput_;
|
||||
bool calciteConcentrationOutput_;
|
||||
bool biofilmVolumeFractionOutput_;
|
||||
bool calciteVolumeFractionOutput_;
|
||||
};
|
||||
|
||||
} // namespace Opm
|
||||
|
||||
@@ -55,21 +55,21 @@ void BioeffectsContainer<Scalar>::
|
||||
assign(const unsigned globalDofIdx,
|
||||
const Scalar oxygenConcentration,
|
||||
const Scalar ureaConcentration,
|
||||
const Scalar calciteConcentration)
|
||||
const Scalar calciteVolumeFraction)
|
||||
{
|
||||
cOxygen_[globalDofIdx] = oxygenConcentration;
|
||||
cUrea_[globalDofIdx] = ureaConcentration;
|
||||
cCalcite_[globalDofIdx] = calciteConcentration;
|
||||
cCalcite_[globalDofIdx] = calciteVolumeFraction;
|
||||
}
|
||||
|
||||
template<class Scalar>
|
||||
void BioeffectsContainer<Scalar>::
|
||||
assign(const unsigned globalDofIdx,
|
||||
const Scalar microbialConcentration,
|
||||
const Scalar biofilmConcentration)
|
||||
const Scalar biofilmVolumeFraction)
|
||||
{
|
||||
cMicrobes_[globalDofIdx] = microbialConcentration;
|
||||
cBiofilm_[globalDofIdx] = biofilmConcentration;
|
||||
cBiofilm_[globalDofIdx] = biofilmVolumeFraction;
|
||||
}
|
||||
|
||||
template<class Scalar>
|
||||
|
||||
@@ -44,11 +44,11 @@ public:
|
||||
void assign(const unsigned globalDofIdx,
|
||||
const Scalar oxygenConcentration,
|
||||
const Scalar ureaConcentration,
|
||||
const Scalar calciteConcentration);
|
||||
const Scalar calciteVolumeFraction);
|
||||
|
||||
void assign(const unsigned globalDofIdx,
|
||||
const Scalar microbialConcentration,
|
||||
const Scalar biofilmConcentration);
|
||||
const Scalar biofilmVolumeFraction);
|
||||
|
||||
BioeffectsSolutionContainer<Scalar> getSolution() const;
|
||||
|
||||
|
||||
@@ -98,8 +98,8 @@ public:
|
||||
static constexpr int microbialConcentrationIdx = Indices::microbialConcentrationIdx;
|
||||
static constexpr int oxygenConcentrationIdx = Indices::oxygenConcentrationIdx;
|
||||
static constexpr int ureaConcentrationIdx = Indices::ureaConcentrationIdx;
|
||||
static constexpr int biofilmConcentrationIdx = Indices::biofilmConcentrationIdx;
|
||||
static constexpr int calciteConcentrationIdx = Indices::calciteConcentrationIdx;
|
||||
static constexpr int biofilmVolumeFractionIdx = Indices::biofilmVolumeFractionIdx;
|
||||
static constexpr int calciteVolumeFractionIdx = Indices::calciteVolumeFractionIdx;
|
||||
|
||||
using VectorBlockType = Dune::FieldVector<Scalar, numEq>;
|
||||
using MatrixBlockType = typename SparseMatrixAdapter::MatrixBlock;
|
||||
|
||||
@@ -192,14 +192,14 @@ public:
|
||||
Scalar ureaConcentration(unsigned elemIdx) const;
|
||||
|
||||
/*!
|
||||
* \brief Returns the initial biofilm concentration for a given a cell index
|
||||
* \brief Returns the initial biofilm volume fraction for a given a cell index
|
||||
*/
|
||||
Scalar biofilmConcentration(unsigned elemIdx) const;
|
||||
Scalar biofilmVolumeFraction(unsigned elemIdx) const;
|
||||
|
||||
/*!
|
||||
* \brief Returns the initial calcite concentration for a given a cell index
|
||||
* \brief Returns the initial calcite volume fraction for a given a cell index
|
||||
*/
|
||||
Scalar calciteConcentration(unsigned elemIdx) const;
|
||||
Scalar calciteVolumeFraction(unsigned elemIdx) const;
|
||||
|
||||
/*!
|
||||
* \brief Returns the index the relevant PVT region given a cell index
|
||||
|
||||
@@ -528,9 +528,9 @@ readBlackoilExtentionsInitialConditions_(std::size_t numDof,
|
||||
bioeffects_.microbialConcentration.resize(numDof, 0.0);
|
||||
}
|
||||
if (eclState_.fieldProps().has_double("SBIOF")) {
|
||||
bioeffects_.biofilmConcentration = getArray(eclState_.fieldProps().get_double("SBIOF"));
|
||||
bioeffects_.biofilmVolumeFraction = getArray(eclState_.fieldProps().get_double("SBIOF"));
|
||||
} else {
|
||||
bioeffects_.biofilmConcentration.resize(numDof, 0.0);
|
||||
bioeffects_.biofilmVolumeFraction.resize(numDof, 0.0);
|
||||
}
|
||||
if (enableMICP) {
|
||||
if (eclState_.fieldProps().has_double("SOXYG")) {
|
||||
@@ -544,9 +544,9 @@ readBlackoilExtentionsInitialConditions_(std::size_t numDof,
|
||||
bioeffects_.ureaConcentration.resize(numDof, 0.0);
|
||||
}
|
||||
if (eclState_.fieldProps().has_double("SCALC")) {
|
||||
bioeffects_.calciteConcentration = getArray(eclState_.fieldProps().get_double("SCALC"));
|
||||
bioeffects_.calciteVolumeFraction = getArray(eclState_.fieldProps().get_double("SCALC"));
|
||||
} else {
|
||||
bioeffects_.calciteConcentration.resize(numDof, 0.0);
|
||||
bioeffects_.calciteVolumeFraction.resize(numDof, 0.0);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -672,25 +672,25 @@ ureaConcentration(unsigned elemIdx) const
|
||||
template<class GridView, class FluidSystem>
|
||||
typename FlowGenericProblem<GridView,FluidSystem>::Scalar
|
||||
FlowGenericProblem<GridView,FluidSystem>::
|
||||
biofilmConcentration(unsigned elemIdx) const
|
||||
biofilmVolumeFraction(unsigned elemIdx) const
|
||||
{
|
||||
if (bioeffects_.biofilmConcentration.empty()) {
|
||||
if (bioeffects_.biofilmVolumeFraction.empty()) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return bioeffects_.biofilmConcentration[elemIdx];
|
||||
return bioeffects_.biofilmVolumeFraction[elemIdx];
|
||||
}
|
||||
|
||||
template<class GridView, class FluidSystem>
|
||||
typename FlowGenericProblem<GridView,FluidSystem>::Scalar
|
||||
FlowGenericProblem<GridView,FluidSystem>::
|
||||
calciteConcentration(unsigned elemIdx) const
|
||||
calciteVolumeFraction(unsigned elemIdx) const
|
||||
{
|
||||
if (bioeffects_.calciteConcentration.empty()) {
|
||||
if (bioeffects_.calciteVolumeFraction.empty()) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return bioeffects_.calciteConcentration[elemIdx];
|
||||
return bioeffects_.calciteVolumeFraction[elemIdx];
|
||||
}
|
||||
|
||||
template<class GridView, class FluidSystem>
|
||||
|
||||
@@ -931,11 +931,11 @@ public:
|
||||
|
||||
if constexpr (enableBioeffects) {
|
||||
values[Indices::microbialConcentrationIdx] = this->bioeffects_.microbialConcentration[globalDofIdx];
|
||||
values[Indices::biofilmConcentrationIdx]= this->bioeffects_.biofilmConcentration[globalDofIdx];
|
||||
values[Indices::biofilmVolumeFractionIdx]= this->bioeffects_.biofilmVolumeFraction[globalDofIdx];
|
||||
if constexpr (enableMICP) {
|
||||
values[Indices::oxygenConcentrationIdx]= this->bioeffects_.oxygenConcentration[globalDofIdx];
|
||||
values[Indices::ureaConcentrationIdx]= this->bioeffects_.ureaConcentration[globalDofIdx];
|
||||
values[Indices::calciteConcentrationIdx]= this->bioeffects_.calciteConcentration[globalDofIdx];
|
||||
values[Indices::calciteVolumeFractionIdx]= this->bioeffects_.calciteVolumeFraction[globalDofIdx];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1590,12 +1590,12 @@ private:
|
||||
{
|
||||
bioeffectsC.assign(ectx.globalDofIdx,
|
||||
ectx.intQuants.microbialConcentration().value(),
|
||||
ectx.intQuants.biofilmConcentration().value());
|
||||
ectx.intQuants.biofilmVolumeFraction().value());
|
||||
if (Indices::enableMICP) {
|
||||
bioeffectsC.assign(ectx.globalDofIdx,
|
||||
ectx.intQuants.oxygenConcentration().value(),
|
||||
ectx.intQuants.ureaConcentration().value(),
|
||||
ectx.intQuants.calciteConcentration().value());
|
||||
ectx.intQuants.calciteVolumeFraction().value());
|
||||
}
|
||||
}, this->bioeffectsC_.allocated()
|
||||
},
|
||||
|
||||
@@ -65,8 +65,8 @@ void BioeffectsSolutionContainer<Scalar>::resize(const unsigned numElems)
|
||||
microbialConcentration.resize(numElems, 0.0);
|
||||
oxygenConcentration.resize(numElems, 0.0);
|
||||
ureaConcentration.resize(numElems, 0.0);
|
||||
biofilmConcentration.resize(numElems, 0.0);
|
||||
calciteConcentration.resize(numElems, 0.0);
|
||||
biofilmVolumeFraction.resize(numElems, 0.0);
|
||||
calciteVolumeFraction.resize(numElems, 0.0);
|
||||
}
|
||||
|
||||
template<class Scalar>
|
||||
@@ -76,8 +76,8 @@ operator==(const BioeffectsSolutionContainer<Scalar>& rhs) const
|
||||
return this->microbialConcentration == rhs.microbialConcentration &&
|
||||
this->oxygenConcentration == rhs.oxygenConcentration &&
|
||||
this->ureaConcentration == rhs.ureaConcentration &&
|
||||
this->biofilmConcentration == rhs.biofilmConcentration &&
|
||||
this->calciteConcentration == rhs.calciteConcentration;
|
||||
this->biofilmVolumeFraction == rhs.biofilmVolumeFraction &&
|
||||
this->calciteVolumeFraction == rhs.calciteVolumeFraction;
|
||||
}
|
||||
|
||||
#define INSTANTIATE_TYPE(T) \
|
||||
|
||||
@@ -58,8 +58,8 @@ struct BioeffectsSolutionContainer {
|
||||
std::vector<Scalar> microbialConcentration;
|
||||
std::vector<Scalar> oxygenConcentration;
|
||||
std::vector<Scalar> ureaConcentration;
|
||||
std::vector<Scalar> biofilmConcentration;
|
||||
std::vector<Scalar> calciteConcentration;
|
||||
std::vector<Scalar> biofilmVolumeFraction;
|
||||
std::vector<Scalar> calciteVolumeFraction;
|
||||
|
||||
static BioeffectsSolutionContainer serializationTestObject();
|
||||
|
||||
@@ -72,8 +72,8 @@ struct BioeffectsSolutionContainer {
|
||||
serializer(microbialConcentration);
|
||||
serializer(oxygenConcentration);
|
||||
serializer(ureaConcentration);
|
||||
serializer(biofilmConcentration);
|
||||
serializer(calciteConcentration);
|
||||
serializer(biofilmVolumeFraction);
|
||||
serializer(calciteVolumeFraction);
|
||||
}
|
||||
|
||||
bool operator==(const BioeffectsSolutionContainer& rhs) const;
|
||||
|
||||
@@ -81,13 +81,13 @@ ComponentName<FluidSystem,Indices>::ComponentName()
|
||||
names_[Indices::microbialConcentrationIdx] = "Microbes";
|
||||
names_[Indices::oxygenConcentrationIdx] = "Oxygen";
|
||||
names_[Indices::ureaConcentrationIdx] = "Urea";
|
||||
names_[Indices::biofilmConcentrationIdx] = "Biofilm";
|
||||
names_[Indices::calciteConcentrationIdx] = "Calcite";
|
||||
names_[Indices::biofilmVolumeFractionIdx] = "Biofilm";
|
||||
names_[Indices::calciteVolumeFractionIdx] = "Calcite";
|
||||
}
|
||||
|
||||
if constexpr (Indices::enableBiofilm) {
|
||||
names_[Indices::microbialConcentrationIdx] = "Microbes";
|
||||
names_[Indices::biofilmConcentrationIdx] = "Biofilm";
|
||||
names_[Indices::biofilmVolumeFractionIdx] = "Biofilm";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user