Посмотрите на себя с этой точки зрения:
integer t = 0
integer t_start = 0
integer dt = 10
integer dtb = 100
integer n = 2000000
integer mdotb = 1
! (...)
do i = 1, n
t = t + dt
dt_start = t-t_start ! <- (*)
! (...)
if (dt_start .le. dtb) then ! <- condition (A)
if (dt_start .eq. dtb) then ! <- condition (A.1)
t_start = I*dtb. ! <- (**)
endif
write(1,*) t, mdotb ! <- output for branch (A)
else if ! <- other conditions
! (...)
end if
end do
Для первых итераций i = 1, 9
у вас есть условие (A)
true и (A.1)
false, затем вывод для ветви (A)
выполняется, и код печатает t = 10, 90
в первом столбце и mdotb = 1
во втором столбце.
Для итерации i = 10
у вас наконец есть dt_start == dtb
, поэтому условие (A)
выполняется, а (A.1)
также выполняется. Внутри ветви (A.1)
вы получаете назначение t_start = 1000
в строке, помеченной как (**)
. Затем вывод для ветви (A)
выполняется снова, и код печатает t = 100
в первом столбце и mdotb = 1
во втором.
Для следующих итераций i = 11, 109
, помните, что t_start == 1000
сейчас, поэтому в строке, помеченной как (*)
, у вас будет dt_start = -890
, dt_start = -880
... до dt_start = 90
, где все время условия (A)
верно, (A.1)
ложно, и вы продолжаете печатать t
и mdotb
все время.
Достигнув итерации i = 110
, наконец, снова dt_start = 100
, тогда оба условия (A)
и (A.1)
снова верны, затем снова выполняется строка (**)
, затем t_start = 11000
и вывод для ветвь (A)
выполняется снова, снова печатая t
и mdotb
.
Для следующих итераций i = 111, 1109
вы повторяете цикл, в котором dt_start
имеет отрицательные / низкие значения, все еще делая условие (A)
всегда верным, печатая всегда один и тот же вывод ...
Затем i = 1110
снова делает dt_start = 100
, затем t_start = 111000
сейчас, тот же вывод ...
И этот шаблон повторяется снова и снова, в то время как ваш вывод для ветви (A)
всегда выполняется, а остальные условия никогда не будут достигнуты.
Очевидно, что логика вашей программы несовершенна (ну, технически она находится в диапазоне 0,001 ~ 1, как всегда 1 ... но вам это не нравится). Но я не знаю, что вы пытаетесь напечатать во втором столбце вывода. Я точно знаю, что если вы хотите от 1 до 2000000 в первом столбце, вы должны напечатать I
вместо t
.