mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
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:
commit
498efe11a7
@ -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,
|
||||||
|
Loading…
Reference in New Issue
Block a user