将FORTRAN 77的Go-to语句转换为Fortran 90

时间:2015-07-24 18:01:17

标签: if-statement fortran fortran90 fortran77 do-loops

  

我正在处理一段传统的F77代码并尝试转换它   等效的F90代码。我遇到了下面的这些行,可能会有一些   一个人建议我的转换是否正确?

Fortran 77代码:

Subroutine area(x,y,z,d)
do 15 j=1,10
if (a.gt.b) go to 20
15 CONTINUE
20 Statement 1
   Statement 2
   Statement 3
end subroutine

我尝试将其转换为F90,如下所示:

Subroutine area(x,y,z,d)
  dloop: do j=1,10
    if (a>b) then 
      statement 1
      statement 2
      statement 3
    else
      write(*,*) 'Exiting dloop'
      exit dloop
    end if
  end do dloop
end subroutine

有人可以建议这种方法是否正确吗?在我的结果中,我没有得到我期望的结果。所以我的逻辑可能存在问题。

1 个答案:

答案 0 :(得分:4)

你的翻译有点错误......第一步是重建do循环,循环在15

Subroutine area(x,y,z,d)
do j=1,10
  if (a.gt.b) go to 20
enddo
20 Statement 1
   Statement 2
   Statement 3
end subroutine

现在你可以看到goto导致"跳出循环"。在此特定示例中,这相当于exit,代码可以写为

Subroutine area(x,y,z,d)
  do j=1,10
    if (a.gt.b) exit
  enddo
  Statement 1
  Statement 2
  Statement 3
end subroutine