我在使用 petsc 时遇到问题。
我想解决一系列线性方程。
A1 x1=b1, A2 x2=b2, A3*x3=b3 ...
A1,A2,A3 具有相同的稀疏模式。
我想用 MUMPS 来解决系统问题。为了提高性能,我想重用符号分解。
这里我解决单个线性系统的代码是
Mat A, P, F;
PC pc;
Vec rhs_vec, result_vec;
KSPSetOperators(ksp, A, A);
KSPSetType(ksp, KSPPREONLY);
KSPGetPC(ksp, &pc);
PCSetType(pc, PCLU);
PCFactorSetMatSolverType(pc, MATSOLVERMUMPS);
PCFactorSetUpMatSolverType(pc);
PCFactorGetMatrix(pc, &F);
MatMumpsSetIcntl(F, 7, 5); // configure mumps.
KSPSolve(ksp, rhs_vec, result_vec);
我不知道如何重用符号分解。
我从互联网上看到了信息。petsc 开发人员建议使用:
KSPSetOperators(KSP_A, A, A, DIFFERENT_NONZERO_PATTERN)
KSPSetOperators(KSP_A, A, A, SAME_NONZERO_PATTERN)
请参阅https://lists.mcs.anl.gov/pipermail/petsc-users/2013-March/016646.html 但是,此 API 似乎已被弃用。
我已经看到存在 API: MatLUFactorSymbolic
, MatLUFactorNumeric()
. 但我不知道怎么称呼它。
在 petsc 中使用 MUMPS 时如何重用符号分解?
谢谢你的时间。