Small Scientific Programs
Reservoir Balance
Combine Terms
Small scientific programs often combine starting state, inputs, outputs, and losses into one balance result.
Program
Play the program to choose the loss term and see the balance status update.
reservoir_balance.f90
Replay: real traced execution (multi-file project)
program reservoir_balance_demo
implicit none
integer :: start_level
integer :: inflow
integer :: outflow
integer :: loss
integer :: final_level
character(len=6) :: status
start_level = 20
inflow = 8
outflow = 5
loss = 1
final_level = start_level + inflow - outflow - loss
if (final_level >= 20) then
status = 'stable'
else
status = 'low'
end if
print '(A, 1X, I0)', trim(status), final_level
end program reservoir_balance_demo
program reservoir_balance_demo
implicit none
integer :: start_level
integer :: inflow
integer :: outflow
integer :: loss
integer :: final_level
character(len=6) :: status
start_level = 20
inflow = 8
outflow = 5
loss = 0
final_level = start_level + inflow - outflow - loss
if (final_level >= 20) then
status = 'stable'
else
status = 'low'
end if
print '(A, 1X, I0)', trim(status), final_level
end program reservoir_balance_demo
program reservoir_balance_demo
implicit none
integer :: start_level
integer :: inflow
integer :: outflow
integer :: loss
integer :: final_level
character(len=6) :: status
start_level = 20
inflow = 8
outflow = 5
loss = 4
final_level = start_level + inflow - outflow - loss
if (final_level >= 20) then
status = 'stable'
else
status = 'low'
end if
print '(A, 1X, I0)', trim(status), final_level
end program reservoir_balance_demo
start_level ← 20
10start_level = 2011inflow = 8values this step20start_levelinflow ← 8
10start_level = 2011inflow = 812outflow = 5values this step8inflowoutflow ← 5
11inflow = 812outflow = 513loss = 1values this step5outflowloss ← 1
12outflow = 513loss = 114final_level = start_level + inflow - outflow - lossvalues this step1lossfinal_level ← 22
13loss = 114final_level = start_level + inflow - outflow - loss15if (final_level >= 20) thenvalues this step22final_level20start_level8inflow5outflow1lossbalanced ← .true.
14final_level = start_level + inflow - outflow - loss15if (final_level >= 20) then16 status = 'stable'values this step.true.balanced22final_levelstatus ← stable
15if (final_level >= 20) then16 status = 'stable'17elsevalues this stepstablestatusprint '(A, 1X, I0)', trim(status), final_level
19 end if20 print '(A, 1X, I0)', trim(status), final_level21end program reservoir_balance_demooutputstable 22values this stepstablestatus22final_level
start_level ← 20
10start_level = 2011inflow = 8values this step20start_levelinflow ← 8
10start_level = 2011inflow = 812outflow = 5values this step8inflowoutflow ← 5
11inflow = 812outflow = 513loss = 0values this step5outflowloss ← 0
12outflow = 513loss = 014final_level = start_level + inflow - outflow - lossvalues this step0lossfinal_level ← 23
13loss = 014final_level = start_level + inflow - outflow - loss15if (final_level >= 20) thenvalues this step23final_level20start_level8inflow5outflow0lossbalanced ← .true.
14final_level = start_level + inflow - outflow - loss15if (final_level >= 20) then16 status = 'stable'values this step.true.balanced23final_levelstatus ← stable
15if (final_level >= 20) then16 status = 'stable'17elsevalues this stepstablestatusprint '(A, 1X, I0)', trim(status), final_level
19 end if20 print '(A, 1X, I0)', trim(status), final_level21end program reservoir_balance_demooutputstable 23values this stepstablestatus23final_level
start_level ← 20
10start_level = 2011inflow = 8values this step20start_levelinflow ← 8
10start_level = 2011inflow = 812outflow = 5values this step8inflowoutflow ← 5
11inflow = 812outflow = 513loss = 4values this step5outflowloss ← 4
12outflow = 513loss = 414final_level = start_level + inflow - outflow - lossvalues this step4lossfinal_level ← 19
13loss = 414final_level = start_level + inflow - outflow - loss15if (final_level >= 20) thenvalues this step19final_level20start_level8inflow5outflow4lossbalanced ← .false.
14final_level = start_level + inflow - outflow - loss15if (final_level >= 20) then16 status = 'stable'values this step.false.balanced19final_levelstatus ← low
17else18 status = 'low'19end ifvalues this steplowstatusprint '(A, 1X, I0)', trim(status), final_level
19 end if20 print '(A, 1X, I0)', trim(status), final_level21end program reservoir_balance_demooutputlow 19values this steplowstatus19final_level
balance equation
`start_level + inflow - outflow - loss` combines the model terms.
status branch
The final level drives a compact status label.
small program
The example combines initialization, calculation, branch, and report.