在 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
或重构您的代码。
或者嵌套在主循环中的另一个循环可能会更好,但这可能算作上述重组。取决于条件是什么,如何更改 step
和 i
以及公差如何取决于 step
和 i
。
我正在尝试编写一个 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
或重构您的代码。
或者嵌套在主循环中的另一个循环可能会更好,但这可能算作上述重组。取决于条件是什么,如何更改 step
和 i
以及公差如何取决于 step
和 i
。