在Fortran中混合整数类型

Ste*_*ein 1 fortran fortran90

我有一个代码,我在几个不同的集群上运行,它们都有不同的MPI和LAPACK组合.

这可能会导致问题.例如,我目前使用ifort的"-i8"选项,它可以正常使用LAPACK,但现在所有的MPI调用都被破坏了,因为它期望integer(4),而不是integer(8).

是否有一种优雅灵活的方式来根据本地MPI和LAPACK安装来调整整数类型?

硬编码每个特定呼叫的类型似乎只是非常麻烦和不灵活.

Vla*_*r F 6

MPI电话不期望,INTEGER(4)也不INTEGER(8)期望INTEGER.并且,一如既往,记住那些(4)并且(8)实际上意味着Fortran:整数*4对整数(4)对整数(种类= 4)

随着-i8你正在改变INTEGER它的意义,它对应于哪种方式.您可以这样做,但您必须使用相同的设置编译MPI库.图书馆可能准备也可能不准备以这种方式编制,但理论上它应该是可能的.

您也可以尝试传递integer(int32)而不是integerMPI.如果它是与MPI库的默认类型相对应的正确类型,则TKR检查并且所有其他检查应该通过OK.但不建议这样做.

要严格遵守Fortran标准,当您提升默认的整数类型时,还应该提升默认的实数和逻辑类型.

要保持可移植性,请使用与您使用的库的API相对应的整数,并确保该库适用于该特定编译器以及该特定编译器配置.

通常,为了便携性,不应该依赖于提升默认种类,而应该使用特定种类,这些种类适合代码的特定部分.