在 petsc 中使用 MUMPS 时如何重用符号分解?

计算科学 宠物
2021-11-29 06:43:33

我在使用 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 时如何重用符号分解?

谢谢你的时间。

1个回答