Помимо некоторых синтаксических ошибок (например, строки, которая говорит только t_start
, что не является допустимым Fortran) и некоторых других комментариев, присутствующих в других ответах и комментариях (отсутствие implicit none
, нестандартное объявление вида),есть проблема в логике ваших условных выражений.
Предположим, что цикл do
достиг итерации, в которой dt_start=1090
, что происходит потом?
! dtb = 100, so this branch is skipped
if (dt_start .lt. dtb) then
write(1,*) t, mdotb
! dtt = 200, so this branch is skipped
else if (dt_start .lt. dtt) then
write(1,*) t, nmdott
! dtt = 200, so this branch is skipped (and it's repeated, by the way)
else if (dt_start .lt. dtt) then
write(1,*) t, nmdott
! dtq = 1080, so this branch is skipped ALSO
else if (dt_start .lt. dtq) then
write(1,*) t, mdotq
! dtt = 200, so this branch is skipped (repeated, AGAIN!)
else if (dt_start .lt. dtt) then
write(1,*) t, mdott
endif
! nothing was done this iteration, continue to the next
Итак, ваш do
цикл действительно работает до n=2000000
, но ничего не делает после dt_start=1090
.Пожалуйста, не торопитесь, чтобы переосмыслить логику вашего кода, а также устранить недостатки, указанные здесь.