Time Step Models
Threshold Time Steps
Exit Condition
A step loop can leave early when a modeled state reaches a threshold.
Program
Play the program to change the inflow and see when the threshold is reached.
threshold_time_steps.f90
Replay: real traced execution (multi-file project)
program threshold_time_steps_demo
implicit none
integer :: step
integer :: max_steps
real :: level
real :: inflow
real :: limit
max_steps = 5
level = 0.0
inflow = 3.0
limit = 10.0
do step = 1, max_steps
level = level + inflow
if (level >= limit) exit
end do
print '(I0, 1X, F0.1)', step, level
end program threshold_time_steps_demo
program threshold_time_steps_demo
implicit none
integer :: step
integer :: max_steps
real :: level
real :: inflow
real :: limit
max_steps = 5
level = 0.0
inflow = 2.0
limit = 10.0
do step = 1, max_steps
level = level + inflow
if (level >= limit) exit
end do
print '(I0, 1X, F0.1)', step, level
end program threshold_time_steps_demo
program threshold_time_steps_demo
implicit none
integer :: step
integer :: max_steps
real :: level
real :: inflow
real :: limit
max_steps = 5
level = 0.0
inflow = 4.0
limit = 10.0
do step = 1, max_steps
level = level + inflow
if (level >= limit) exit
end do
print '(I0, 1X, F0.1)', step, level
end program threshold_time_steps_demo
max_steps ← 5
9max_steps = 510level = 0.0values this step5max_stepslevel ← 0.0
9max_steps = 510level = 0.011inflow = 3.0values this step0.0levelinflow ← 3.0
10level = 0.011inflow = 3.012limit = 10.0values this step3.0inflowlimit ← 10.0
11inflow = 3.012limit = 10.013do step = 1, max_stepsvalues this step10.0limitstep ← 1
12limit = 10.013do step = 1, max_steps14 level = level + inflowvalues this step1steplevel ← 3.0
13do step = 1, max_steps14 level = level + inflow15 if (level >= limit) exitvalues this step0.0 → 3.0level3.0inflowif (level >= limit) exit
14 level = level + inflow15 if (level >= limit) exit16end dovalues this step.false.level >= limitstep ← 2
12limit = 10.013do step = 1, max_steps14 level = level + inflowvalues this step2steplevel ← 6.0
13do step = 1, max_steps14 level = level + inflow15 if (level >= limit) exitvalues this step3.0 → 6.0level3.0inflowif (level >= limit) exit
14 level = level + inflow15 if (level >= limit) exit16end dovalues this step.false.level >= limitstep ← 3
12limit = 10.013do step = 1, max_steps14 level = level + inflowvalues this step3steplevel ← 9.0
13do step = 1, max_steps14 level = level + inflow15 if (level >= limit) exitvalues this step6.0 → 9.0level3.0inflowif (level >= limit) exit
14 level = level + inflow15 if (level >= limit) exit16end dovalues this step.false.level >= limitstep ← 4
12limit = 10.013do step = 1, max_steps14 level = level + inflowvalues this step4steplevel ← 12.0
13do step = 1, max_steps14 level = level + inflow15 if (level >= limit) exitvalues this step9.0 → 12.0level3.0inflowexit ← step loop
14 level = level + inflow15 if (level >= limit) exit16end dovalues this stepstep loopexit.true.level >= limitprint '(I0, 1X, F0.1)', step, level
16 end do17 print '(I0, 1X, F0.1)', step, level18end program threshold_time_steps_demooutput4 12.0values this step4step12.0level
max_steps ← 5
9max_steps = 510level = 0.0values this step5max_stepslevel ← 0.0
9max_steps = 510level = 0.011inflow = 2.0values this step0.0levelinflow ← 2.0
10level = 0.011inflow = 2.012limit = 10.0values this step2.0inflowlimit ← 10.0
11inflow = 2.012limit = 10.013do step = 1, max_stepsvalues this step10.0limitstep ← 1
12limit = 10.013do step = 1, max_steps14 level = level + inflowvalues this step1steplevel ← 2.0
13do step = 1, max_steps14 level = level + inflow15 if (level >= limit) exitvalues this step0.0 → 2.0level2.0inflowif (level >= limit) exit
14 level = level + inflow15 if (level >= limit) exit16end dovalues this step.false.level >= limitstep ← 2
12limit = 10.013do step = 1, max_steps14 level = level + inflowvalues this step2steplevel ← 4.0
13do step = 1, max_steps14 level = level + inflow15 if (level >= limit) exitvalues this step2.0 → 4.0level2.0inflowif (level >= limit) exit
14 level = level + inflow15 if (level >= limit) exit16end dovalues this step.false.level >= limitstep ← 3
12limit = 10.013do step = 1, max_steps14 level = level + inflowvalues this step3steplevel ← 6.0
13do step = 1, max_steps14 level = level + inflow15 if (level >= limit) exitvalues this step4.0 → 6.0level2.0inflowif (level >= limit) exit
14 level = level + inflow15 if (level >= limit) exit16end dovalues this step.false.level >= limitstep ← 4
12limit = 10.013do step = 1, max_steps14 level = level + inflowvalues this step4steplevel ← 8.0
13do step = 1, max_steps14 level = level + inflow15 if (level >= limit) exitvalues this step6.0 → 8.0level2.0inflowif (level >= limit) exit
14 level = level + inflow15 if (level >= limit) exit16end dovalues this step.false.level >= limitstep ← 5
12limit = 10.013do step = 1, max_steps14 level = level + inflowvalues this step5steplevel ← 10.0
13do step = 1, max_steps14 level = level + inflow15 if (level >= limit) exitvalues this step8.0 → 10.0level2.0inflowexit ← step loop
14 level = level + inflow15 if (level >= limit) exit16end dovalues this stepstep loopexit.true.level >= limitprint '(I0, 1X, F0.1)', step, level
16 end do17 print '(I0, 1X, F0.1)', step, level18end program threshold_time_steps_demooutput5 10.0values this step5step10.0level
max_steps ← 5
9max_steps = 510level = 0.0values this step5max_stepslevel ← 0.0
9max_steps = 510level = 0.011inflow = 4.0values this step0.0levelinflow ← 4.0
10level = 0.011inflow = 4.012limit = 10.0values this step4.0inflowlimit ← 10.0
11inflow = 4.012limit = 10.013do step = 1, max_stepsvalues this step10.0limitstep ← 1
12limit = 10.013do step = 1, max_steps14 level = level + inflowvalues this step1steplevel ← 4.0
13do step = 1, max_steps14 level = level + inflow15 if (level >= limit) exitvalues this step0.0 → 4.0level4.0inflowif (level >= limit) exit
14 level = level + inflow15 if (level >= limit) exit16end dovalues this step.false.level >= limitstep ← 2
12limit = 10.013do step = 1, max_steps14 level = level + inflowvalues this step2steplevel ← 8.0
13do step = 1, max_steps14 level = level + inflow15 if (level >= limit) exitvalues this step4.0 → 8.0level4.0inflowif (level >= limit) exit
14 level = level + inflow15 if (level >= limit) exit16end dovalues this step.false.level >= limitstep ← 3
12limit = 10.013do step = 1, max_steps14 level = level + inflowvalues this step3steplevel ← 12.0
13do step = 1, max_steps14 level = level + inflow15 if (level >= limit) exitvalues this step8.0 → 12.0level4.0inflowexit ← step loop
14 level = level + inflow15 if (level >= limit) exit16end dovalues this stepstep loopexit.true.level >= limitprint '(I0, 1X, F0.1)', step, level
16 end do17 print '(I0, 1X, F0.1)', step, level18end program threshold_time_steps_demooutput3 12.0values this step3step12.0level
exit
`exit` leaves the nearest loop immediately.
threshold
`level >= limit` decides whether enough state has accumulated.
maximum steps
`max_steps` bounds the loop even if the threshold is not reached early.