BlackOilSolventModules: use if constexpr

This commit is contained in:
Arne Morten Kvarving 2022-08-09 09:08:02 +02:00
parent 04c8d8f232
commit 45b2898c6e

View File

@ -469,11 +469,8 @@ public:
*/ */
static void registerParameters() static void registerParameters()
{ {
if (!enableSolvent) if constexpr (enableSolvent)
// solvents have disabled at compile time VtkBlackOilSolventModule<TypeTag>::registerParameters();
return;
VtkBlackOilSolventModule<TypeTag>::registerParameters();
} }
/*! /*!
@ -482,20 +479,16 @@ public:
static void registerOutputModules(Model& model, static void registerOutputModules(Model& model,
Simulator& simulator) Simulator& simulator)
{ {
if (!enableSolvent) if constexpr (enableSolvent)
// solvents have disabled at compile time model.addOutputModule(new VtkBlackOilSolventModule<TypeTag>(simulator));
return;
model.addOutputModule(new VtkBlackOilSolventModule<TypeTag>(simulator));
} }
static bool primaryVarApplies(unsigned pvIdx) static bool primaryVarApplies(unsigned pvIdx)
{ {
if (!enableSolvent) if constexpr (enableSolvent)
// solvents have disabled at compile time return pvIdx == solventSaturationIdx;
else
return false; return false;
return pvIdx == solventSaturationIdx;
} }
static std::string primaryVarName([[maybe_unused]] unsigned pvIdx) static std::string primaryVarName([[maybe_unused]] unsigned pvIdx)
@ -515,10 +508,10 @@ public:
static bool eqApplies(unsigned eqIdx) static bool eqApplies(unsigned eqIdx)
{ {
if (!enableSolvent) if constexpr (enableSolvent)
return eqIdx == contiSolventEqIdx;
else
return false; return false;
return eqIdx == contiSolventEqIdx;
} }
static std::string eqName([[maybe_unused]] unsigned eqIdx) static std::string eqName([[maybe_unused]] unsigned eqIdx)
@ -540,57 +533,55 @@ public:
static void addStorage(Dune::FieldVector<LhsEval, numEq>& storage, static void addStorage(Dune::FieldVector<LhsEval, numEq>& storage,
const IntensiveQuantities& intQuants) const IntensiveQuantities& intQuants)
{ {
if (!enableSolvent) if constexpr (enableSolvent) {
return; if constexpr (blackoilConserveSurfaceVolume) {
storage[contiSolventEqIdx] +=
if (blackoilConserveSurfaceVolume) { Toolbox::template decay<LhsEval>(intQuants.porosity())
storage[contiSolventEqIdx] += * Toolbox::template decay<LhsEval>(intQuants.solventSaturation())
Toolbox::template decay<LhsEval>(intQuants.porosity()) * Toolbox::template decay<LhsEval>(intQuants.solventInverseFormationVolumeFactor());
* Toolbox::template decay<LhsEval>(intQuants.solventSaturation()) }
* Toolbox::template decay<LhsEval>(intQuants.solventInverseFormationVolumeFactor()); else {
} storage[contiSolventEqIdx] +=
else { Toolbox::template decay<LhsEval>(intQuants.porosity())
storage[contiSolventEqIdx] += * Toolbox::template decay<LhsEval>(intQuants.solventSaturation())
Toolbox::template decay<LhsEval>(intQuants.porosity()) * Toolbox::template decay<LhsEval>(intQuants.solventDensity());
* Toolbox::template decay<LhsEval>(intQuants.solventSaturation()) }
* Toolbox::template decay<LhsEval>(intQuants.solventDensity());
} }
} }
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 (!enableSolvent) if constexpr (enableSolvent) {
return; const auto& extQuants = elemCtx.extensiveQuantities(scvfIdx, timeIdx);
const auto& extQuants = elemCtx.extensiveQuantities(scvfIdx, timeIdx); unsigned upIdx = extQuants.solventUpstreamIndex();
unsigned inIdx = extQuants.interiorIndex();
const auto& up = elemCtx.intensiveQuantities(upIdx, timeIdx);
unsigned upIdx = extQuants.solventUpstreamIndex(); if constexpr (blackoilConserveSurfaceVolume) {
unsigned inIdx = extQuants.interiorIndex(); if (upIdx == inIdx)
const auto& up = elemCtx.intensiveQuantities(upIdx, timeIdx); flux[contiSolventEqIdx] =
extQuants.solventVolumeFlux()
if (blackoilConserveSurfaceVolume) { *up.solventInverseFormationVolumeFactor();
if (upIdx == inIdx) else
flux[contiSolventEqIdx] = flux[contiSolventEqIdx] =
extQuants.solventVolumeFlux() extQuants.solventVolumeFlux()
*up.solventInverseFormationVolumeFactor(); *decay<Scalar>(up.solventInverseFormationVolumeFactor());
else }
flux[contiSolventEqIdx] = else {
extQuants.solventVolumeFlux() if (upIdx == inIdx)
*decay<Scalar>(up.solventInverseFormationVolumeFactor()); flux[contiSolventEqIdx] =
} extQuants.solventVolumeFlux()
else { *up.solventDensity();
if (upIdx == inIdx) else
flux[contiSolventEqIdx] = flux[contiSolventEqIdx] =
extQuants.solventVolumeFlux() extQuants.solventVolumeFlux()
*up.solventDensity(); *decay<Scalar>(up.solventDensity());
else }
flux[contiSolventEqIdx] =
extQuants.solventVolumeFlux()
*decay<Scalar>(up.solventDensity());
} }
} }
@ -600,10 +591,8 @@ public:
static void assignPrimaryVars(PrimaryVariables& priVars, static void assignPrimaryVars(PrimaryVariables& priVars,
Scalar solventSaturation) Scalar solventSaturation)
{ {
if (!enableSolvent) if constexpr (enableSolvent)
return; priVars[solventSaturationIdx] = solventSaturation;
priVars[solventSaturationIdx] = solventSaturation;
} }
/*! /*!
@ -613,11 +602,9 @@ public:
const PrimaryVariables& oldPv, const PrimaryVariables& oldPv,
const EqVector& delta) const EqVector& delta)
{ {
if (!enableSolvent) if constexpr (enableSolvent)
return; // do a plain unchopped Newton update
newPv[solventSaturationIdx] = oldPv[solventSaturationIdx] - delta[solventSaturationIdx];
// do a plain unchopped Newton update
newPv[solventSaturationIdx] = oldPv[solventSaturationIdx] - delta[solventSaturationIdx];
} }
/*! /*!
@ -644,30 +631,28 @@ 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 (!enableSolvent) if constexpr (enableSolvent) {
return; unsigned dofIdx = model.dofMapper().index(dof);
unsigned dofIdx = model.dofMapper().index(dof); const PrimaryVariables& priVars = model.solution(/*timeIdx=*/0)[dofIdx];
outstream << priVars[solventSaturationIdx];
const PrimaryVariables& priVars = model.solution(/*timeIdx=*/0)[dofIdx]; }
outstream << priVars[solventSaturationIdx];
} }
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 (!enableSolvent) if constexpr (enableSolvent) {
return; unsigned dofIdx = model.dofMapper().index(dof);
unsigned dofIdx = model.dofMapper().index(dof); PrimaryVariables& priVars0 = model.solution(/*timeIdx=*/0)[dofIdx];
PrimaryVariables& priVars1 = model.solution(/*timeIdx=*/1)[dofIdx];
PrimaryVariables& priVars0 = model.solution(/*timeIdx=*/0)[dofIdx]; instream >> priVars0[solventSaturationIdx];
PrimaryVariables& priVars1 = model.solution(/*timeIdx=*/1)[dofIdx];
instream >> priVars0[solventSaturationIdx]; // set the primary variables for the beginning of the current time step.
priVars1 = priVars0[solventSaturationIdx];
// set the primary variables for the beginning of the current time step. }
priVars1 = priVars0[solventSaturationIdx];
} }
static const SolventPvt& solventPvt() static const SolventPvt& solventPvt()