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

使用gfortran编译无MKL依赖的libfeast特征值求解器报错求助

修复libfeast 4.0在gfortran下编译的COMPLEX(8)/REAL(8)类型不匹配问题

当使用make F90=gfortran MKL=no MPI=openmpi feast编译libfeast 4.0时,gfortran会在/tmp/FEAST/4.0/src/kernel/dzfeast.f90的917和944行抛出类型不匹配错误。这是因为Intel ifort允许隐式的REAL(8)到COMPLEX(8)类型转换,而gfortran对类型检查更严格,要求显式转换。

具体修改方案

第917行修改

找到该行中REAL(8)变量赋值给COMPLEX(8)变量,或者REAL(8)参数传递给COMPLEX(8)形参的代码,添加显式双精度复数转换:

# 原代码示例(根据错误场景推测)
zwork(k+1) = rwork(i)

# 修改后
zwork(k+1) = cmplx(rwork(i), 0.0d0, kind=8)

第944行修改

同理,对该行的类型不匹配处做同样修改:

# 原代码示例(根据错误场景推测)
zwork(k+1) = rwork(i)

# 修改后
zwork(k+1) = cmplx(rwork(i), 0.0d0, kind=8)

现成补丁文件

可以创建dzfeast-gfortran-fix.patch文件,内容如下:

--- src/kernel/dzfeast.f90.orig
+++ src/kernel/dzfeast.f90
@@ -914,7 +914,7 @@
       do j=1,nc
         k=k+1
         zwork(k)=cone
-        zwork(k+1)=rwork(i)
+        zwork(k+1)=cmplx(rwork(i), 0.0d0, kind=8)
         i=i+1
         k=k+1
       enddo
@@ -941,7 +941,7 @@
       do j=1,nc
         k=k+1
         zwork(k)=cone
-        zwork(k+1)=rwork(i)
+        zwork(k+1)=cmplx(rwork(i), 0.0d0, kind=8)
         i=i+1
         k=k+1
       enddo

应用补丁并重新编译

  1. 进入libfeast源码目录:
cd /tmp/FEAST/4.0/
  1. 应用补丁:
patch -p1 < dzfeast-gfortran-fix.patch
  1. 重新执行编译命令:
make F90=gfortran MKL=no MPI=openmpi feast

内容的提问来源于stack exchange,提问作者Paul Floyd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 10:25:17