You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

mpifort -DMPI编译报错:mpi_status作实参 Intel Fortran可用GNU不行

问题根因

这个报错是不同MPI实现的语法兼容差异导致的:

  • Intel MPI(mpiifort对应实现)对旧式MPI调用写法做了兼容,允许直接将类型名mpi_status作为实参传入接口
  • GCC配套的Open MPI/MPICH严格遵循MPI标准:mpi_status是派生类型名,不能直接作为参数传递,要么传入type(mpi_status)类型的实例变量,要么传入预定义常量MPI_STATUS_IGNORE

解决方案

方案1:不需要读取IO操作状态(绝大多数场景适用)

直接修改wavefunction.F90第486行的调用语句,将mpi_status替换为标准常量MPI_STATUS_IGNORE即可:

call mpi_file_read_all(fh, neig, 1, mpi_integer, MPI_STATUS_IGNORE, ierr)

修改后重新编译即可正常通过。

方案2:需要获取IO操作的状态信息

首先在当前调用语句所在的子程序/函数的变量声明段新增状态变量声明:

type(mpi_status) :: stat

再将第486行的mpi_status替换为声明的变量名:

call mpi_file_read_all(fh, neig, 1, mpi_integer, stat, ierr)

后续可以通过stat变量的成员读取对应状态信息。

提示:如果代码其他位置也存在直接将mpi_status类型名作为参数传递的调用,需要按照相同逻辑统一修改。

内容的提问来源于stack exchange,提问作者Bobson Dugnut

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 12:45:05