编译旧fortran代码时出现错误消息

时间:2014-01-16 23:52:52

标签: compilation fortran

我正在尝试编译一个没有考虑到最新标准的代码。我正在使用 gfortran 编译器并得到一些我无法纠正的错误。

我的合作伙伴在MS Visual Studio中使用英特尔Visual Fortran编译器,并且没有任何错误。以下是代码的相关部分及其错误。深入了解这些中的任何一个都将非常感激。

错误1:

flow.for:63.63:

 3      *gjmh_old(j)*abs(gjmh_old(j))/2.0d0/dens_fjmh(j)  )         
                                                           1
Error: Expected a right parenthesis in expression at (1)

对应代码:

sum_dpjmh_old= 1.0/2.0*(dens_jmh(j)+dens_old(j))*grav*(dzc(j)/2.0d0) !!!!
 1    + ( gavg_old(j)*gavg_old(j)/dens_mom(j)
 1       -gjmh_old(j)*gjmh_old(j)/dmom_jmh(j)     )
 3    + 1.0/2.0*
 3     ( fric(j)*dzc(j)/2.0/dhyd(j)
 3      *gavg_old(j)*abs(gavg_old(j))/2.0d0/dens_fric(j)
 3      +fjmh(j)*dzc(j)/2.0/dhyd(j)
 3      *gjmh_old(j)*abs(gjmh_old(j))/2.0d0/dens_fjmh(j)  )

错误2:

flow.for:78.13:

 1    + ( gavg(j)*gavg(j)/dens_momn(j)                              
         1
Error: Missing exponent in real number at (1)

对应代码:

sum_dpjmh = 1.0/2.0*(dens_jmhn(j)+dens_ch(j))*grav*(dzc(j)/2.0d0) !!!!
 1    + ( gavg(j)*gavg(j)/dens_momn(j)
 1       -gjmh(j)*gjmh(j)/dmom_jmhn(j)     )
 3    + 1.0/2.0*
 3     ( fric(j)*(dzc(j)/2.0)/dhyd(j)
 3      *gavg(j)*abs(gavg(j))/2.0d0/dens_ch(j)
 3      + fjmh(j)*(dzc(j)/2.0)/dhyd(j)
 3      *gjmh(j)*abs(gjmh(j))/2.0d0/dens_jmhn(j)  )

错误3:

flow.for:684.72:

 3           /dens_fjmh(j) )                                        
                                                                    1
Error: Syntax error in argument list at (1)

对应代码:

gjmh(j) = gjmh_old(j) + dt/dzc(j)*(
 1           phi*2.0d0*(pjmh(j)-p(j))
 1         + (1.0-phi)*2.0d0*(pjmh_old(j)-p_old(j))
 1         - 2.0d0*( gavg_old(j)*gavg_old(j)/dens_mom(j)
 1          -gjmh_old(j)*gjmh_old(j)/dmom_jmh(j) )
 4         - dens_jmh(j)*grav*dzc(j)
 3         - fjmh(j)*dzc(j)/2.0d0/dhyd(j)*gjmh_old(j)*abs(gjmh_old(j))
 3           /dens_fjmh(j) )   

1 个答案:

答案 0 :(得分:1)

您的代码似乎格式不正确。如果您尝试使用固定格式,则应遵循固定格式的请求,如http://nf.nci.org.au/training/FortranBasic/slides/slides.005.html。 或按照http://en.wikipedia.org/wiki/Fortran#Fixed_layout_and_punched_cards中的说明进行操作:

  

第1列包含* ,!或C代表评论。

     

第6栏继续。

另一种方法是将固定格式转换为自由格式,但由于您的代码格式不正确,大多数转换器可能无法正常工作。