重复Fortran循环中的一个步骤

时间:2017-02-07 21:39:33

标签: fortran fortran90 ode

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

我在if循环内部有一个do while语句,我在其中检查代码每次迭代时的错误是否小于某个容差。但是,如果它不小于某个公差,我必须更改某个值(步长)并再次执行计算以获得新的误差以与公差进行比较。

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

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的计算一个新的步长。

我希望这对读过这篇文章的人有意义。如果您需要任何澄清,请告诉我。

1 个答案:

答案 0 :(得分:1)

因为do while循环中没有明确的计数器,与普通的do i=1,...循环不同。你可以使用cycle开始一个新的迭代。它与重复当前迭代相同。但是这个条件将再次被评估。如果不对其进行评估,则必须使用go to或重新构建代码。

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