Fortran Coder

标题: 请教各位大神fortran编译是否影响结果以及一些语法问题 [打印本页]

作者: 落月黎明    时间: 2022-6-21 22:56
标题: 请教各位大神fortran编译是否影响结果以及一些语法问题
小弟最近采用一个fortran语言的代码进行计算,遇到一些困难,请教各位大神。
采用VMware 15.5+CentOS7.6构建的linux虚拟机,采用Intel fortran(最新的2022)以及Openmpi4.1.4进行编译和并行计算。
由于代码比较老,预计是F77,虽然后缀是.f90。
根据代码作者的说明,首先采用makefile对多个文件进行编译,但出现了部分编译错误和警告。
如:
1.应该是由于单行代码过长,超出识别范围,故而在makefile文件中加入-ffree-line-length-none解决了该问题。
2.由于版本问题,无法编译 if(LSOLVE(4).OR.LSOLVE(5).OR.LSOLVE(6).EQ.1) then,应该是由于逻辑关系问题,故改为if((LSOLVE(4).EQ.1).OR.(LSOLVE(5).EQ.1).OR.(LSOLVE(6).EQ.1)) then  ,不知道这里的更改是否正确?
3.出现如下警告
cklib.f:11106.41:

      CALL CKRATX (NII, NKK, MXSP, MXTB, T, RCKWRK(NcK1),               
                                         1
Warning: Rank mismatch in argument 't' at (1) (scalar and rank-1)


CoFlame_v1_7_1.f90:3030.3:

          'slopePC',7x,'slopeA5',7x,'time',7x,'TimeAvg',7x,'TimeBal')
   1
Warning: Extension: Tab character in format at (1)
CoFlame_v1_7_1.f90:737.19:

            DO J=3,YEXPANDSTART
                   1
Warning: Deleted feature: End expression in DO loop at (1) must be integer

由于不敢乱改代码,故而忽略。我也百度查阅了这几个警告的原因,主要是老版本代码不严谨,新编译器更严格所导致。

最终,我采用编译好的代码进行了案例测试计算,得到了和作者不一样的结果。
我的问题是:1.我对于代码的改动(第2点)是否有误?从而影响计算结果。
2.编译过程中忽略以上警告会不会导致我计算出现错误?

主要是原作者没有回我的信息,我也不知道是测试例子有误还是我编译或者改动的问题,恳请各位大神指教,非常感谢!

作者: necrohan    时间: 2022-6-22 08:13
看下LSOLVE(4)这个函数,应该返回true或false,直接用1判断可能有问题。
CALL CKRATX (NII, NKK, MXSP, MXTB, T, RCKWRK(NcK1),  这里是说传入的参数t和子程序需要的数组大小不一致。
Warning: Extension: Tab character in format at (1) 是Tab字符错误,我没遇到过,可以试试替换成空格。
DO J=3,YEXPANDSTART 这里的警告是 YEXPANDSTART 不是整数,可以自己取整,不知道应该向上还是向下取整。
作者: 落月黎明    时间: 2022-6-22 17:54
非常感谢您的回复,目前问题已解决,虽然这些警告仍然存在,但计算错误可能主要是源码问题导致,可能之前获取的源程序有误,更换了一个源程序之后求得了相同的结果。不过编译问题仍然可能导致部分偏差,我会参照您的意见进行修改




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2