You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

PETSc-MUMPS无法识别命令行选项-mat_mumps_icntl_14的求助

问题描述

在MacOS 15.6.1(M2芯片)环境下安装PETSc和MUMPS后,小规模求解任务可正常执行,但扩大系统规模后,PETSc抛出错误:

[1;31m[0]PETSC ERROR: --------------------- Error Message------------------------------------------------------------- [0;39m[0;49m[0]PETSC ERROR: Error in external library [0]PETSC ERROR: MUMPS error in numerical factorization: INFOG(1)=-9, INFO(2)=1180436(see users manual https://mumps-solver.org/index.php?page=doc "Error and warning diagnostics")

根据MUMPS手册,INFOG(1)=-9表示内部实/复工作数组S过小,需增大ICNTL(14)的值。按PETSc文档,该参数对应命令行选项-mat_mumps_icntl_14 <new_value>,但执行./mypetscapp -mat_mumps_icntl_14 100时,PETSc提示选项未被使用:

WARNING! There are options you set that were not used! WARNING! could be spelling mistake, etc! There is one unused database option. It is: Option left: name:-mat_mumps_icntl_14 value: 100 source: command line

需要解决PETSc无法识别该选项的问题,以扩大工作空间修复错误。

解决方案

以下是几种可行的修复方法:

方法1:显式激活MUMPS求解器

PETSc默认可能未启用MUMPS作为分解器,需在命令行中强制指定使用MUMPS,此时-mat_mumps_icntl_14选项才会被识别:

./mypetscapp -mat_type aij -pc_type lu -pc_factor_mat_solver_type mumps -mat_mumps_icntl_14 100

方法2:在代码中直接配置参数

如果命令行选项仍不生效,可在代码初始化求解器后直接设置MUMPS参数:

// 假设已创建Mat对象A和KSP对象ksp
PC pc;
KSPGetPC(ksp, &pc);
PCFactorSetMatSolverType(pc, MATSOLVERMUMPS);

// 设置ICNTL(14),值可按需调整(示例设为200,对应2倍工作空间)
MatMumpsSetIcntl(A, 14, 200);

编译运行时无需额外命令行参数,代码内的设置会直接生效。

方法3:验证PETSc与MUMPS的编译集成

确认PETSc编译时已启用MUMPS支持:

petsc-config --options | grep mumps

若输出无--with-mumps相关内容,说明PETSc未集成MUMPS,需重新编译PETSc并添加--with-mumps=yes(或指定MUMPS安装路径)。

方法4:调整ICNTL(14)的合理值

ICNTL(14)为工作数组扩容因子,命令行输入的数值对应倍数(如100=1.0倍,200=2.0倍)。若100仍无法解决问题,可逐步增大到200、300等,直到错误消失。

内容的提问来源于stack exchange,提问作者Stuart Barth

火山引擎 最新活动