diff --git a/opm/simulators/flow/GenericOutputBlackoilModule.cpp b/opm/simulators/flow/GenericOutputBlackoilModule.cpp index 07b20ca51..e7bef59a8 100644 --- a/opm/simulators/flow/GenericOutputBlackoilModule.cpp +++ b/opm/simulators/flow/GenericOutputBlackoilModule.cpp @@ -27,9 +27,9 @@ #include +#include #include #include - #include #include @@ -55,7 +55,6 @@ #include #include #include -#include #include #include #include @@ -752,10 +751,7 @@ doAllocBuffers(const unsigned bufferSize, const bool substep, const bool log, const bool isRestart, - const bool vapparsActive, - const bool enablePCHysteresis, - const bool enableNonWettingHysteresis, - const bool enableWettingHysteresis, + const EclHysteresisConfig* hysteresisConfig, const unsigned numOutputNnc, std::map rstKeywords) { @@ -953,11 +949,13 @@ doAllocBuffers(const unsigned bufferSize, this->micpC_.allocate(bufferSize); } + const bool vapparsActive = schedule_[std::max(reportStepNum, 0u)].oilvap().getType() == + OilVaporizationProperties::OilVaporization::VAPPARS; if (vapparsActive) { soMax_.resize(bufferSize, 0.0); } - if (enableNonWettingHysteresis) { + if (hysteresisConfig && hysteresisConfig->enableNonWettingHysteresis()) { if (FluidSystem::phaseIsActive(oilPhaseIdx)){ if (FluidSystem::phaseIsActive(waterPhaseIdx)){ soMax_.resize(bufferSize, 0.0); @@ -969,7 +967,7 @@ doAllocBuffers(const unsigned bufferSize, //TODO add support for gas-water } } - if (enableWettingHysteresis) { + if (hysteresisConfig && hysteresisConfig->enableWettingHysteresis()) { if (FluidSystem::phaseIsActive(oilPhaseIdx)){ if (FluidSystem::phaseIsActive(waterPhaseIdx)){ swMax_.resize(bufferSize, 0.0); @@ -981,7 +979,7 @@ doAllocBuffers(const unsigned bufferSize, //TODO add support for gas-water } } - if (enablePCHysteresis) { + if (hysteresisConfig && hysteresisConfig->enablePCHysteresis()) { if (FluidSystem::phaseIsActive(oilPhaseIdx)){ if (FluidSystem::phaseIsActive(waterPhaseIdx)){ swmin_.resize(bufferSize, 0.0); diff --git a/opm/simulators/flow/GenericOutputBlackoilModule.hpp b/opm/simulators/flow/GenericOutputBlackoilModule.hpp index f8ac70fbf..b73cc4144 100644 --- a/opm/simulators/flow/GenericOutputBlackoilModule.hpp +++ b/opm/simulators/flow/GenericOutputBlackoilModule.hpp @@ -63,6 +63,7 @@ struct ForceDisableResvFluidInPlaceOutput { static constexpr bool value = false; namespace Opm { namespace data { class Solution; } +class EclHysteresisConfig; class EclipseState; class Schedule; class SummaryConfig; @@ -327,10 +328,7 @@ protected: const bool substep, const bool log, const bool isRestart, - const bool vapparsActive = false, - const bool enablePCHysteresis = false, - const bool enableNonWettingHysteresis = false, - const bool enableWettingHysteresis = false, + const EclHysteresisConfig* hysteresisConfig, unsigned numOutputNnc = 0, std::map rstKeywords = {}); diff --git a/opm/simulators/flow/OutputBlackoilModule.hpp b/opm/simulators/flow/OutputBlackoilModule.hpp index 44287fe71..a6fcc58f2 100644 --- a/opm/simulators/flow/OutputBlackoilModule.hpp +++ b/opm/simulators/flow/OutputBlackoilModule.hpp @@ -184,10 +184,7 @@ public: substep, log, isRestart, - problem.vapparsActive(std::max(simulator_.episodeIndex(), 0)), - problem.materialLawManager()->enablePCHysteresis(), - problem.materialLawManager()->enableNonWettingHysteresis(), - problem.materialLawManager()->enableWettingHysteresis(), + &problem.materialLawManager()->hysteresisConfig(), problem.eclWriter()->getOutputNnc().size()); } @@ -515,7 +512,7 @@ public: const auto& matLawManager = problem.materialLawManager(); if (matLawManager->enableHysteresis()) { - if (FluidSystem::phaseIsActive(oilPhaseIdx) + if (FluidSystem::phaseIsActive(oilPhaseIdx) && FluidSystem::phaseIsActive(waterPhaseIdx)) { Scalar somax; Scalar swmax; @@ -523,7 +520,7 @@ public: matLawManager->oilWaterHysteresisParams( somax, swmax, swmin, globalDofIdx); - + if (matLawManager->enableNonWettingHysteresis()) { if (!this->soMax_.empty()) { this->soMax_[globalDofIdx] = somax; @@ -541,14 +538,14 @@ public: } } - if (FluidSystem::phaseIsActive(oilPhaseIdx) + if (FluidSystem::phaseIsActive(oilPhaseIdx) && FluidSystem::phaseIsActive(gasPhaseIdx)) { Scalar sgmax; Scalar shmax; Scalar somin; matLawManager->gasOilHysteresisParams( sgmax, shmax, somin, globalDofIdx); - + if (matLawManager->enableNonWettingHysteresis()) { if (!this->sgmax_.empty()) { this->sgmax_[globalDofIdx] = sgmax; @@ -566,7 +563,7 @@ public: } } } else { - + if (!this->soMax_.empty()) this->soMax_[globalDofIdx] = std::max(getValue(fs.saturation(oilPhaseIdx)), problem.maxOilSaturation(globalDofIdx)); @@ -1163,7 +1160,7 @@ public: if (simulator.problem().materialLawManager()->enableHysteresis()) { auto matLawManager = simulator.problem().materialLawManager(); - if (FluidSystem::phaseIsActive(oilPhaseIdx) + if (FluidSystem::phaseIsActive(oilPhaseIdx) && FluidSystem::phaseIsActive(waterPhaseIdx)) { Scalar somax = 2.0; Scalar swmax = -2.0; @@ -1187,7 +1184,7 @@ public: matLawManager->setOilWaterHysteresisParams( somax, swmax, swmin, elemIdx); } - if (FluidSystem::phaseIsActive(oilPhaseIdx) + if (FluidSystem::phaseIsActive(oilPhaseIdx) && FluidSystem::phaseIsActive(gasPhaseIdx)) { Scalar sgmax = 2.0; Scalar shmax = -2.0; @@ -1525,7 +1522,7 @@ private: { this->updateCO2InGas(globalDofIdx, pv, intQuants); } - + if (this->fipC_.hasCo2InWater() && (FluidSystem::phaseIsActive(waterPhaseIdx) || FluidSystem::phaseIsActive(oilPhaseIdx))) diff --git a/opm/simulators/flow/OutputCompositionalModule.hpp b/opm/simulators/flow/OutputCompositionalModule.hpp index d0dd19727..97606d9d8 100644 --- a/opm/simulators/flow/OutputCompositionalModule.hpp +++ b/opm/simulators/flow/OutputCompositionalModule.hpp @@ -162,10 +162,7 @@ public: this->compC_.allocate(bufferSize, rstKeywords); this->doAllocBuffers(bufferSize, reportStepNum, substep, log, isRestart, - /* vapparsActive =*/ false, - /* enablePCHysteresis = */ false, - /* enableNonWettingHysteresis =*/ false, - /* enableWettingHysteresis =*/ false, + /* hysteresisConfig = */ nullptr, /* numOutputNnc =*/ 0, std::move(rstKeywords)); }