如何重写iand以符合新版本的gfortran

问题描述 投票:0回答:2

解决了

我正在使用较旧的 Fortran 代码,在编译过程中我收到许多不同的错误消息,其中一些格式如下:

if(iand(n_jz2_max,1).eq.0) then
                        1
Error: Arguments of ‘iand’ have different kind type parameters at (1)

其中

n_jz2_max
integer*4

我知道

iand
不再支持不同种类的参数,但我不知道如何更改代码才能编译。

我尝试使用旧版本的 gfortran 编译代码,但这对我来说不是一个选择。我安装的 Ubuntu 版本不允许我安装旧版本的 gfortran。另一个解决方案是安装较旧的 Ubuntu 版本,但我更喜欢尝试更改代码。


更新:

谢谢大家的回答。事实上,我使用了像 -fdefault-integer-8 这样的编译器选项,这导致了错误。这就是我编译代码的方式:(添加了 include 选项,因为代码依赖于名为“include”的文件夹内的文件。)

$ mpif90 -f90=gfortran -c -w -I 包括 -O2 -fdefault-integer-8 -o build/mm_1.16.o 源/mm_1.16.f90

经过多次不成功的尝试,我最终从笔记本电脑中删除了所有 mpich 版本并安装了最新版本。我将编译选项更改为

$ mpif90 -c -w -I 包括 -O2 -o build/mm_1.16.o 源/mm_1.16.f90

并且代码编译没有任何问题。

compiler-errors fortran gfortran
2个回答
1
投票

正如评论中提到的,默认编译选项不应该发生这种情况。您可能正在使用

-fdefault-integer-8
或类似的东西。

您可以采取哪些措施来确保文字

1
0
的类型与
n_jz2_max
的类型匹配,可能是这样的

integer, parameter :: q = kind(n_jz2_max)
...
if(iand(n_jz2_max, 1_q) .eq. 0_q) then

0
投票

谢谢大家的回答。事实上,我使用了像 -fdefault-integer-8 这样的编译器选项,这导致了错误。这就是我编译代码的方式:(添加了 include 选项,因为代码依赖于名为“include”的文件夹内的文件。)

$ mpif90 -f90=gfortran -c -w -I 包括 -O2 -fdefault-integer-8 -o build/mm_1.16.o 源/mm_1.16.f90

经过多次不成功的尝试,我最终从笔记本电脑中删除了所有 mpich 版本并安装了最新版本。我将编译选项更改为

$ mpif90 -c -w -I 包括 -O2 -o build/mm_1.16.o 源/mm_1.16.f90

并且代码编译没有任何问题。

© www.soinside.com 2019 - 2024. All rights reserved.