A fixed-step loop applies the same update rule for a known number of steps.

Program

Play the program to choose how many repeated updates advance the value.

step_count
fixed_step_loop.f90
Replay: real traced execution (multi-file project)
program fixed_step_loop_demo
    implicit none
    integer :: step
    integer :: step_count
    real :: dt
    real :: rate
    real :: value

    step_count = 3
    dt = 0.5
    rate = 2.0
    value = 10.0
    do step = 1, step_count
        value = value + rate * dt
    end do
    print '(I0, 1X, F0.1)', step_count, value
end program fixed_step_loop_demo
program fixed_step_loop_demo
    implicit none
    integer :: step
    integer :: step_count
    real :: dt
    real :: rate
    real :: value

    step_count = 2
    dt = 0.5
    rate = 2.0
    value = 10.0
    do step = 1, step_count
        value = value + rate * dt
    end do
    print '(I0, 1X, F0.1)', step_count, value
end program fixed_step_loop_demo
program fixed_step_loop_demo
    implicit none
    integer :: step
    integer :: step_count
    real :: dt
    real :: rate
    real :: value

    step_count = 4
    dt = 0.5
    rate = 2.0
    value = 10.0
    do step = 1, step_count
        value = value + rate * dt
    end do
    print '(I0, 1X, F0.1)', step_count, value
end program fixed_step_loop_demo
  1. step_count ← 3

    9step_count = 310dt = 0.5
    values this step3step_count
  2. dt ← 0.5

    9step_count = 310dt = 0.511rate = 2.0
    values this step0.5dt
  3. rate ← 2.0

    10dt = 0.511rate = 2.012value = 10.0
    values this step2.0rate
  4. value ← 10.0

    11rate = 2.012value = 10.013do step = 1, step_count
    values this step10.0value
  5. step ← 1

    12value = 10.013do step = 1, step_count14    value = value + rate * dt
    values this step1step
  6. value ← 11.0

    13do step = 1, step_count14    value = value + rate * dt15end do
    values this step10.0 11.0value1.0rate * dt
  7. step ← 2

    12value = 10.013do step = 1, step_count14    value = value + rate * dt
    values this step2step
  8. value ← 12.0

    13do step = 1, step_count14    value = value + rate * dt15end do
    values this step11.0 12.0value1.0rate * dt
  9. step ← 3

    12value = 10.013do step = 1, step_count14    value = value + rate * dt
    values this step3step
  10. value ← 13.0

    13do step = 1, step_count14    value = value + rate * dt15end do
    values this step12.0 13.0value1.0rate * dt
  11. print '(I0, 1X, F0.1)', step_count, value

    15    end do16    print '(I0, 1X, F0.1)', step_count, value17end program fixed_step_loop_demo
    output3 13.0
    values this step3step_count13.0value
  1. step_count ← 2

    9step_count = 210dt = 0.5
    values this step2step_count
  2. dt ← 0.5

    9step_count = 210dt = 0.511rate = 2.0
    values this step0.5dt
  3. rate ← 2.0

    10dt = 0.511rate = 2.012value = 10.0
    values this step2.0rate
  4. value ← 10.0

    11rate = 2.012value = 10.013do step = 1, step_count
    values this step10.0value
  5. step ← 1

    12value = 10.013do step = 1, step_count14    value = value + rate * dt
    values this step1step
  6. value ← 11.0

    13do step = 1, step_count14    value = value + rate * dt15end do
    values this step10.0 11.0value1.0rate * dt
  7. step ← 2

    12value = 10.013do step = 1, step_count14    value = value + rate * dt
    values this step2step
  8. value ← 12.0

    13do step = 1, step_count14    value = value + rate * dt15end do
    values this step11.0 12.0value1.0rate * dt
  9. print '(I0, 1X, F0.1)', step_count, value

    15    end do16    print '(I0, 1X, F0.1)', step_count, value17end program fixed_step_loop_demo
    output2 12.0
    values this step2step_count12.0value
  1. step_count ← 4

    9step_count = 410dt = 0.5
    values this step4step_count
  2. dt ← 0.5

    9step_count = 410dt = 0.511rate = 2.0
    values this step0.5dt
  3. rate ← 2.0

    10dt = 0.511rate = 2.012value = 10.0
    values this step2.0rate
  4. value ← 10.0

    11rate = 2.012value = 10.013do step = 1, step_count
    values this step10.0value
  5. step ← 1

    12value = 10.013do step = 1, step_count14    value = value + rate * dt
    values this step1step
  6. value ← 11.0

    13do step = 1, step_count14    value = value + rate * dt15end do
    values this step10.0 11.0value1.0rate * dt
  7. step ← 2

    12value = 10.013do step = 1, step_count14    value = value + rate * dt
    values this step2step
  8. value ← 12.0

    13do step = 1, step_count14    value = value + rate * dt15end do
    values this step11.0 12.0value1.0rate * dt
  9. step ← 3

    12value = 10.013do step = 1, step_count14    value = value + rate * dt
    values this step3step
  10. value ← 13.0

    13do step = 1, step_count14    value = value + rate * dt15end do
    values this step12.0 13.0value1.0rate * dt
  11. step ← 4

    12value = 10.013do step = 1, step_count14    value = value + rate * dt
    values this step4step
  12. value ← 14.0

    13do step = 1, step_count14    value = value + rate * dt15end do
    values this step13.0 14.0value1.0rate * dt
  13. print '(I0, 1X, F0.1)', step_count, value

    15    end do16    print '(I0, 1X, F0.1)', step_count, value17end program fixed_step_loop_demo
    output4 14.0
    values this step4step_count14.0value
fixed step A fixed-step model repeats the same update formula.
loop counter `step` records which update is currently being applied.
accumulated state `value` carries the result from one step into the next.