我正在使用较旧的 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
并且代码编译没有任何问题。
正如评论中提到的,默认编译选项不应该发生这种情况。您可能正在使用
-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
谢谢大家的回答。事实上,我使用了像 -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
并且代码编译没有任何问题。