Merge pull request #3133 from GitPaean/fixing_segmentation_fault_drsdt

only when both oil and gas exist, we handle drsdt and drvdt
This commit is contained in:
Bård Skaflestad 2021-03-25 12:03:28 +01:00 committed by GitHub
commit 498efe11a7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -2324,7 +2324,8 @@ private:
const auto& simulator = this->simulator(); const auto& simulator = this->simulator();
int episodeIdx = std::max(simulator.episodeIndex(), 0); int episodeIdx = std::max(simulator.episodeIndex(), 0);
const auto& oilVaporizationControl = simulator.vanguard().schedule()[episodeIdx].oilvap(); const auto& oilVaporizationControl = simulator.vanguard().schedule()[episodeIdx].oilvap();
return (oilVaporizationControl.drsdtActive()); const bool bothOilGasActive = FluidSystem::phaseIsActive(FluidSystem::oilPhaseIdx) && FluidSystem::phaseIsActive(FluidSystem::gasPhaseIdx);
return (oilVaporizationControl.drsdtActive() && bothOilGasActive);
} }
bool drvdtActive_() const bool drvdtActive_() const
@ -2332,7 +2333,8 @@ private:
const auto& simulator = this->simulator(); const auto& simulator = this->simulator();
int episodeIdx = std::max(simulator.episodeIndex(), 0); int episodeIdx = std::max(simulator.episodeIndex(), 0);
const auto& oilVaporizationControl = simulator.vanguard().schedule()[episodeIdx].oilvap(); const auto& oilVaporizationControl = simulator.vanguard().schedule()[episodeIdx].oilvap();
return (oilVaporizationControl.drvdtActive()); const bool bothOilGasActive = FluidSystem::phaseIsActive(FluidSystem::oilPhaseIdx) && FluidSystem::phaseIsActive(FluidSystem::gasPhaseIdx);
return (oilVaporizationControl.drvdtActive() && bothOilGasActive);
} }
@ -2341,7 +2343,8 @@ private:
const auto& simulator = this->simulator(); const auto& simulator = this->simulator();
int episodeIdx = std::max(simulator.episodeIndex(), 0); int episodeIdx = std::max(simulator.episodeIndex(), 0);
const auto& oilVaporizationControl = simulator.vanguard().schedule()[episodeIdx].oilvap(); const auto& oilVaporizationControl = simulator.vanguard().schedule()[episodeIdx].oilvap();
return (oilVaporizationControl.drsdtConvective()); const bool bothOilGasActive = FluidSystem::phaseIsActive(FluidSystem::oilPhaseIdx) && FluidSystem::phaseIsActive(FluidSystem::gasPhaseIdx);
return (oilVaporizationControl.drsdtConvective() && bothOilGasActive);
} }
@ -2351,8 +2354,6 @@ private:
// update the "last Rs" values for all elements, including the ones in the ghost // update the "last Rs" values for all elements, including the ones in the ghost
// and overlap regions // and overlap regions
const auto& simulator = this->simulator(); const auto& simulator = this->simulator();
int episodeIdx = std::max(simulator.episodeIndex(), 0);
const auto& oilVaporizationControl = simulator.vanguard().schedule()[episodeIdx].oilvap();
if (drsdtConvective_()) { if (drsdtConvective_()) {
// This implements the convective DRSDT as described in // This implements the convective DRSDT as described in
@ -2391,7 +2392,7 @@ private:
} }
} }
if (oilVaporizationControl.drsdtActive()) { if (this->drsdtActive_()) {
ElementContext elemCtx(simulator); ElementContext elemCtx(simulator);
const auto& vanguard = simulator.vanguard(); const auto& vanguard = simulator.vanguard();
auto elemIt = vanguard.gridView().template begin</*codim=*/0>(); auto elemIt = vanguard.gridView().template begin</*codim=*/0>();
@ -2409,6 +2410,8 @@ private:
typedef typename std::decay<decltype(fs)>::type FluidState; typedef typename std::decay<decltype(fs)>::type FluidState;
int pvtRegionIdx = pvtRegionIndex(compressedDofIdx); int pvtRegionIdx = pvtRegionIndex(compressedDofIdx);
int episodeIdx = std::max(simulator.episodeIndex(), 0);
const auto& oilVaporizationControl = simulator.vanguard().schedule()[episodeIdx].oilvap();
if (oilVaporizationControl.getOption(pvtRegionIdx) || fs.saturation(gasPhaseIdx) > freeGasMinSaturation_) if (oilVaporizationControl.getOption(pvtRegionIdx) || fs.saturation(gasPhaseIdx) > freeGasMinSaturation_)
lastRs_[compressedDofIdx] = lastRs_[compressedDofIdx] =
Opm::BlackOil::template getRs_<FluidSystem, Opm::BlackOil::template getRs_<FluidSystem,