在 Fortran 循环中重复一个步骤

Repeating a step in a Fortran loop

我正在尝试编写一个 Fortran 90 程序来执行 Euler 的方法来使用自适应时间步求解 ode。

我在 do while 循环中有一个 if 语句,我在其中检查代码每次迭代的错误是否小于某个公差。但是,如果不小于一定的公差,我必须改变一定的值(步长)重新计算,得到一个新的误差来与公差进行比较。

它看起来像(请原谅我这是我第一次使用这个网站):

do while (some condition)
  (Get an approximation to the ODE with various subroutine calls)
  (Calculate the error)
if (error < tol)
  step = step/2
else
   step = 2*step
(Something that will return to the top of my do while loop)
end if
end do

比如说,我有do while (i < 4),其中i从1开始,我的误差不小于我的容忍度,我将不得不重新计算i=1 使用新的步长。

我希望这对阅读本文的人有意义。如果您需要任何说明,请告诉我。

因为 do while 循环中没有明确的计数器,这与正常的 do i=1,... 循环不同。您可以只使用 cycle 开始新的迭代。这将与重复当前迭代相同。但条件将被再次评估。如果不应对其进行评估,您将不得不使用 go to 或重构您的代码。

或者嵌套在主循环中的另一个循环可能会更好,但这可能算作上述重组。取决于条件是什么,如何更改 stepi 以及公差如何取决于 stepi