mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
Only apply timestep after event at the beginning of an episode
This commit is contained in:
parent
f4efd464f4
commit
4b1544469d
@ -3072,10 +3072,6 @@ private:
|
|||||||
// first thing in the morning, limit the time step size to the maximum size
|
// first thing in the morning, limit the time step size to the maximum size
|
||||||
dtNext = std::min(dtNext, maxTimeStepSize_);
|
dtNext = std::min(dtNext, maxTimeStepSize_);
|
||||||
|
|
||||||
// use at least slightly more than half of the maximum time step size by default
|
|
||||||
if (dtNext < maxTimeStepSize_ && maxTimeStepSize_ < dtNext*2)
|
|
||||||
dtNext = 1.01 * maxTimeStepSize_/2.0;
|
|
||||||
|
|
||||||
Scalar remainingEpisodeTime =
|
Scalar remainingEpisodeTime =
|
||||||
simulator.episodeStartTime() + simulator.episodeLength()
|
simulator.episodeStartTime() + simulator.episodeLength()
|
||||||
- (simulator.startTime() + simulator.time());
|
- (simulator.startTime() + simulator.time());
|
||||||
@ -3088,6 +3084,7 @@ private:
|
|||||||
// necessary, but it should not hurt and is more fool-proof
|
// necessary, but it should not hurt and is more fool-proof
|
||||||
dtNext = std::min(maxTimeStepSize_, remainingEpisodeTime/2.0);
|
dtNext = std::min(maxTimeStepSize_, remainingEpisodeTime/2.0);
|
||||||
|
|
||||||
|
if (simulator.episodeStarts()) {
|
||||||
// if a well event occured, respect the limit for the maximum time step after
|
// if a well event occured, respect the limit for the maximum time step after
|
||||||
// that, too
|
// that, too
|
||||||
int reportStepIdx = std::max(episodeIdx, 0);
|
int reportStepIdx = std::max(episodeIdx, 0);
|
||||||
@ -3098,6 +3095,7 @@ private:
|
|||||||
|| events.hasEvent(Opm::ScheduleEvents::WELL_STATUS_CHANGE, reportStepIdx);
|
|| events.hasEvent(Opm::ScheduleEvents::WELL_STATUS_CHANGE, reportStepIdx);
|
||||||
if (episodeIdx >= 0 && wellEventOccured && maxTimeStepAfterWellEvent_ > 0)
|
if (episodeIdx >= 0 && wellEventOccured && maxTimeStepAfterWellEvent_ > 0)
|
||||||
dtNext = std::min(dtNext, maxTimeStepAfterWellEvent_);
|
dtNext = std::min(dtNext, maxTimeStepAfterWellEvent_);
|
||||||
|
}
|
||||||
|
|
||||||
return dtNext;
|
return dtNext;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user