Since version 3.5, KSPSetOperators() will check if the passed matrix has the 
same sparse pattern as the previously set one, so you don't have to do anything.

The list of changes in version 3.5 has this note:
"KSPSetOperators() no longer has the MatStructure argument. The Mat objects now 
track that information themselves. Use KSP/PCSetReusePreconditioner() to 
prevent the recomputation of the preconditioner if the operator changed in the 
way that SAME_PRECONDITIONER did with KSPSetOperators()."

You don't call MatLUFactorSymbolic() yourself, it is called internally. You can 
check with -log_view if the number of calls to MatLUFactorSymbolic() is as 
expected.

Jose



> El 17 feb 2022, a las 9:42, 459543524 via petsc-users 
> <petsc-users@mcs.anl.gov> escribió:
> 
> Sir, I have a problem when using petsc.
> 
> I want to solve a series of linear equations.
> 
> A1*x1=b1, A2*x2=b2, A3*x3=b3 ...
> 
> The A1,A2,A3 have the same sparstiy pattern.
> 
> I want to use MUMPS to solve the system.
> In order to enhance performance, I want to reuse the symbolic factorization.
> 
> Here my code for solve a single linear system is
> -----------------------------------------------------
> 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);
> -----------------------------------------------------
> 
> 
> I have no idea how to reuse symbolic factorization when using MUMPS.
> 
> I have see the information from interent. The petsc developper have suggested 
> that using:
> KSPSetOperators(KSP_A, A, A, DIFFERENT_NONZERO_PATTERN)
> KSPSetOperators(KSP_A, A, A, SAME_NONZERO_PATTERN)
> However, this API seems depreacted.
> see https://lists.mcs.anl.gov/pipermail/petsc-users/2013-March/016646.html
> 
> I have see there exist API: MatLUFactorSymbolic,  MatLUFactorNumeric(). but I 
> have no idea how to call it.
> 
> Could you please give me an example how to reuse the symbolic factorization 
> when using MUMPS in petsc?
> 
> Thanks for your time.
> 
> Xu Hui
> 
> 
>  

Reply via email to