mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
BlackOilBrineModules: use if constexpr
This commit is contained in:
parent
368a2414c3
commit
0a182d51f6
@ -130,7 +130,7 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (enableSaltPrecipitation) {
|
if constexpr (enableSaltPrecipitation) {
|
||||||
const TableContainer& permfactTables = tableManager.getPermfactTables();
|
const TableContainer& permfactTables = tableManager.getPermfactTables();
|
||||||
permfactTable_.resize(numPvtRegions);
|
permfactTable_.resize(numPvtRegions);
|
||||||
for (size_t i = 0; i < permfactTables.size(); ++i) {
|
for (size_t i = 0; i < permfactTables.size(); ++i) {
|
||||||
@ -156,18 +156,14 @@ public:
|
|||||||
*/
|
*/
|
||||||
static void registerParameters()
|
static void registerParameters()
|
||||||
{
|
{
|
||||||
if (!enableBrine)
|
|
||||||
// brine have been disabled at compile time
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool primaryVarApplies(unsigned pvIdx)
|
static bool primaryVarApplies(unsigned pvIdx)
|
||||||
{
|
{
|
||||||
if (!enableBrine)
|
if constexpr (enableBrine)
|
||||||
// brine have been disabled at compile time
|
return pvIdx == saltConcentrationIdx;
|
||||||
|
else
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return pvIdx == saltConcentrationIdx;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@ -177,10 +173,8 @@ public:
|
|||||||
static void assignPrimaryVars(PrimaryVariables& priVars,
|
static void assignPrimaryVars(PrimaryVariables& priVars,
|
||||||
const FluidState& fluidState)
|
const FluidState& fluidState)
|
||||||
{
|
{
|
||||||
if (!enableBrine)
|
if constexpr (enableBrine)
|
||||||
return;
|
priVars[saltConcentrationIdx] = fluidState.saltConcentration();
|
||||||
|
|
||||||
priVars[saltConcentrationIdx] = fluidState.saltConcentration();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static std::string primaryVarName([[maybe_unused]] unsigned pvIdx)
|
static std::string primaryVarName([[maybe_unused]] unsigned pvIdx)
|
||||||
@ -200,10 +194,10 @@ public:
|
|||||||
|
|
||||||
static bool eqApplies(unsigned eqIdx)
|
static bool eqApplies(unsigned eqIdx)
|
||||||
{
|
{
|
||||||
if (!enableBrine)
|
if constexpr (enableBrine)
|
||||||
|
return eqIdx == contiBrineEqIdx;
|
||||||
|
else
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
return eqIdx == contiBrineEqIdx;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static std::string eqName([[maybe_unused]] unsigned eqIdx)
|
static std::string eqName([[maybe_unused]] unsigned eqIdx)
|
||||||
@ -226,61 +220,59 @@ public:
|
|||||||
static void addStorage(Dune::FieldVector<LhsEval, numEq>& storage,
|
static void addStorage(Dune::FieldVector<LhsEval, numEq>& storage,
|
||||||
const IntensiveQuantities& intQuants)
|
const IntensiveQuantities& intQuants)
|
||||||
{
|
{
|
||||||
if (!enableBrine)
|
if constexpr (enableBrine) {
|
||||||
return;
|
const auto& fs = intQuants.fluidState();
|
||||||
|
|
||||||
const auto& fs = intQuants.fluidState();
|
LhsEval surfaceVolumeWater =
|
||||||
|
Toolbox::template decay<LhsEval>(fs.saturation(waterPhaseIdx))
|
||||||
|
* Toolbox::template decay<LhsEval>(fs.invB(waterPhaseIdx))
|
||||||
|
* Toolbox::template decay<LhsEval>(intQuants.porosity());
|
||||||
|
|
||||||
LhsEval surfaceVolumeWater =
|
// avoid singular matrix if no water is present.
|
||||||
Toolbox::template decay<LhsEval>(fs.saturation(waterPhaseIdx))
|
surfaceVolumeWater = max(surfaceVolumeWater, 1e-10);
|
||||||
* Toolbox::template decay<LhsEval>(fs.invB(waterPhaseIdx))
|
|
||||||
* Toolbox::template decay<LhsEval>(intQuants.porosity());
|
|
||||||
|
|
||||||
// avoid singular matrix if no water is present.
|
// Brine in water phase
|
||||||
surfaceVolumeWater = max(surfaceVolumeWater, 1e-10);
|
const LhsEval massBrine = surfaceVolumeWater
|
||||||
|
* Toolbox::template decay<LhsEval>(fs.saltConcentration());
|
||||||
|
|
||||||
// Brine in water phase
|
if (enableSaltPrecipitation){
|
||||||
const LhsEval massBrine = surfaceVolumeWater
|
double saltDensity = 2170; // Solid salt density kg/m3
|
||||||
* Toolbox::template decay<LhsEval>(fs.saltConcentration());
|
const LhsEval solidSalt =
|
||||||
|
Toolbox::template decay<LhsEval>(intQuants.porosity())
|
||||||
|
* saltDensity
|
||||||
|
* Toolbox::template decay<LhsEval>(intQuants.saltSaturation());
|
||||||
|
|
||||||
if (enableSaltPrecipitation){
|
storage[contiBrineEqIdx] += massBrine + solidSalt;
|
||||||
double saltDensity = 2170; // Solid salt density kg/m3
|
}
|
||||||
const LhsEval solidSalt =
|
else { storage[contiBrineEqIdx] += massBrine;}
|
||||||
Toolbox::template decay<LhsEval>(intQuants.porosity())
|
|
||||||
* saltDensity
|
|
||||||
* Toolbox::template decay<LhsEval>(intQuants.saltSaturation());
|
|
||||||
|
|
||||||
storage[contiBrineEqIdx] += massBrine + solidSalt;
|
|
||||||
}
|
}
|
||||||
else { storage[contiBrineEqIdx] += massBrine;}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void computeFlux(RateVector& flux,
|
static void computeFlux([[maybe_unused]] RateVector& flux,
|
||||||
const ElementContext& elemCtx,
|
[[maybe_unused]] const ElementContext& elemCtx,
|
||||||
unsigned scvfIdx,
|
[[maybe_unused]] unsigned scvfIdx,
|
||||||
unsigned timeIdx)
|
[[maybe_unused]] unsigned timeIdx)
|
||||||
|
|
||||||
{
|
{
|
||||||
if (!enableBrine)
|
if constexpr (enableBrine) {
|
||||||
return;
|
const auto& extQuants = elemCtx.extensiveQuantities(scvfIdx, timeIdx);
|
||||||
|
|
||||||
const auto& extQuants = elemCtx.extensiveQuantities(scvfIdx, timeIdx);
|
const unsigned upIdx = extQuants.upstreamIndex(FluidSystem::waterPhaseIdx);
|
||||||
|
const unsigned inIdx = extQuants.interiorIndex();
|
||||||
|
const auto& up = elemCtx.intensiveQuantities(upIdx, timeIdx);
|
||||||
|
|
||||||
const unsigned upIdx = extQuants.upstreamIndex(FluidSystem::waterPhaseIdx);
|
if (upIdx == inIdx) {
|
||||||
const unsigned inIdx = extQuants.interiorIndex();
|
flux[contiBrineEqIdx] =
|
||||||
const auto& up = elemCtx.intensiveQuantities(upIdx, timeIdx);
|
extQuants.volumeFlux(waterPhaseIdx)
|
||||||
|
*up.fluidState().invB(waterPhaseIdx)
|
||||||
if (upIdx == inIdx) {
|
*up.fluidState().saltConcentration();
|
||||||
flux[contiBrineEqIdx] =
|
}
|
||||||
extQuants.volumeFlux(waterPhaseIdx)
|
else {
|
||||||
*up.fluidState().invB(waterPhaseIdx)
|
flux[contiBrineEqIdx] =
|
||||||
*up.fluidState().saltConcentration();
|
extQuants.volumeFlux(waterPhaseIdx)
|
||||||
}
|
*decay<Scalar>(up.fluidState().invB(waterPhaseIdx))
|
||||||
else {
|
*decay<Scalar>(up.fluidState().saltConcentration());
|
||||||
flux[contiBrineEqIdx] =
|
}
|
||||||
extQuants.volumeFlux(waterPhaseIdx)
|
|
||||||
*decay<Scalar>(up.fluidState().invB(waterPhaseIdx))
|
|
||||||
*decay<Scalar>(up.fluidState().saltConcentration());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -299,28 +291,26 @@ public:
|
|||||||
template <class DofEntity>
|
template <class DofEntity>
|
||||||
static void serializeEntity(const Model& model, std::ostream& outstream, const DofEntity& dof)
|
static void serializeEntity(const Model& model, std::ostream& outstream, const DofEntity& dof)
|
||||||
{
|
{
|
||||||
if (!enableBrine)
|
if constexpr (enableBrine) {
|
||||||
return;
|
unsigned dofIdx = model.dofMapper().index(dof);
|
||||||
|
const PrimaryVariables& priVars = model.solution(/*timeIdx=*/0)[dofIdx];
|
||||||
unsigned dofIdx = model.dofMapper().index(dof);
|
outstream << priVars[saltConcentrationIdx];
|
||||||
const PrimaryVariables& priVars = model.solution(/*timeIdx=*/0)[dofIdx];
|
}
|
||||||
outstream << priVars[saltConcentrationIdx];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class DofEntity>
|
template <class DofEntity>
|
||||||
static void deserializeEntity(Model& model, std::istream& instream, const DofEntity& dof)
|
static void deserializeEntity(Model& model, std::istream& instream, const DofEntity& dof)
|
||||||
{
|
{
|
||||||
if (!enableBrine)
|
if constexpr (enableBrine) {
|
||||||
return;
|
unsigned dofIdx = model.dofMapper().index(dof);
|
||||||
|
PrimaryVariables& priVars0 = model.solution(/*timeIdx=*/0)[dofIdx];
|
||||||
|
PrimaryVariables& priVars1 = model.solution(/*timeIdx=*/1)[dofIdx];
|
||||||
|
|
||||||
unsigned dofIdx = model.dofMapper().index(dof);
|
instream >> priVars0[saltConcentrationIdx];
|
||||||
PrimaryVariables& priVars0 = model.solution(/*timeIdx=*/0)[dofIdx];
|
|
||||||
PrimaryVariables& priVars1 = model.solution(/*timeIdx=*/1)[dofIdx];
|
|
||||||
|
|
||||||
instream >> priVars0[saltConcentrationIdx];
|
// set the primary variables for the beginning of the current time step.
|
||||||
|
priVars1[saltConcentrationIdx] = priVars0[saltConcentrationIdx];
|
||||||
// set the primary variables for the beginning of the current time step.
|
}
|
||||||
priVars1[saltConcentrationIdx] = priVars0[saltConcentrationIdx];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static const Scalar& referencePressure(const ElementContext& elemCtx,
|
static const Scalar& referencePressure(const ElementContext& elemCtx,
|
||||||
@ -440,7 +430,7 @@ public:
|
|||||||
|
|
||||||
auto& fs = asImp_().fluidState_;
|
auto& fs = asImp_().fluidState_;
|
||||||
|
|
||||||
if (enableSaltPrecipitation) {
|
if constexpr (enableSaltPrecipitation) {
|
||||||
const auto& saltsolTable = BrineModule::saltsolTable(elemCtx, dofIdx, timeIdx);
|
const auto& saltsolTable = BrineModule::saltsolTable(elemCtx, dofIdx, timeIdx);
|
||||||
saltSolubility_ = saltsolTable;
|
saltSolubility_ = saltsolTable;
|
||||||
|
|
||||||
@ -460,11 +450,11 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void saltPropertiesUpdate_(const ElementContext& elemCtx,
|
void saltPropertiesUpdate_([[maybe_unused]] const ElementContext& elemCtx,
|
||||||
unsigned dofIdx,
|
[[maybe_unused]] unsigned dofIdx,
|
||||||
unsigned timeIdx)
|
[[maybe_unused]] unsigned timeIdx)
|
||||||
{
|
{
|
||||||
if (enableSaltPrecipitation) {
|
if constexpr (enableSaltPrecipitation) {
|
||||||
const Evaluation porosityFactor = min(1.0 - saltSaturation(), 1.0); //phi/phi_0
|
const Evaluation porosityFactor = min(1.0 - saltSaturation(), 1.0); //phi/phi_0
|
||||||
|
|
||||||
const auto& permfactTable = BrineModule::permfactTable(elemCtx, dofIdx, timeIdx);
|
const auto& permfactTable = BrineModule::permfactTable(elemCtx, dofIdx, timeIdx);
|
||||||
|
Loading…
Reference in New Issue
Block a user