我有一些执行模拟的Fortran代码。所用时间存储在et
中,时间步存储在dt
中。两者都被定义为真实类型。还有一个实际变量tot
,它保存了模拟应该运行的最长时间。 i
是整数类型的计数变量。我第一次尝试是这样的:使用Fortran进行循环内计数
real, intent(in) :: dt
real, intent(in) :: tot
real :: et
integer :: i
et = 0.0
i = 0
do
i = i+1
et = real(i)*dt
if (et > tot) exit
! main code here
end do
我想摆脱i
,因为它是在一个地方只用,但是,当我尝试这样做,程序时的总时间是大挂起:
real, intent(in) :: dt
real, intent(in) :: tot
real :: et
et = 0.0
do
et = et + dt
if (et > tot) exit
! main code here
end do
导致程序响应如此不同的两个代码示例有什么不同?我的编译器是g77。
编辑:我已经将声明和初始化添加到上面的代码示例。
编辑2:传递给子程序的初始值是dt = 1e-6
和tot = 100.
程序如何挂起?错误?无限循环(即'等'永远不会达到'tot')? –
@Anders:我假设一个无限循环,因为程序运行10分钟以上而不停止(使用代码的第一个版本,大约1.5分钟后停止)。 – astay13
我猜'et'会在主代码里面重新定义。您是否尝试过打印这些值以检查其行为是否符合您的期望? –