Fortran Coder

查看: 63|回复: 2

[求助] 请教各位大神fortran编译是否影响结果以及一些语法问题

[复制链接]

19

帖子

4

主题

0

精华

入门

F 币
91 元
贡献
49 点

规矩勋章

发表于 2022-6-21 22:56:25 | 显示全部楼层 |阅读模式
小弟最近采用一个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.编译过程中忽略以上警告会不会导致我计算出现错误?

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

191

帖子

2

主题

0

精华

宗师

F 币
1457 元
贡献
761 点

规矩勋章

发表于 2022-6-22 08:13: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 不是整数,可以自己取整,不知道应该向上还是向下取整。

19

帖子

4

主题

0

精华

入门

F 币
91 元
贡献
49 点

规矩勋章

 楼主| 发表于 2022-6-22 17:54:17 | 显示全部楼层
非常感谢您的回复,目前问题已解决,虽然这些警告仍然存在,但计算错误可能主要是源码问题导致,可能之前获取的源程序有误,更换了一个源程序之后求得了相同的结果。不过编译问题仍然可能导致部分偏差,我会参照您的意见进行修改
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2022-7-5 21:37

Powered by Tencent X3.4

© 2013-2022 Tencent

快速回复 返回顶部 返回列表