Thank you for your comments.
However, I have more questions.

1. Generally,  (KSPCreate, KSPSetOperators, KSPGetPC, PCSetType, PCFactorSetMatSolverType, KSPSetFromOptions )
above functions are should be called after  each "MatassemblyEnd??"

2.   Though reading the user guide, I don't fully understand under what circumstances the functions mentioned above should be called again. Can you explain when each function should be called?

Thanks,

Hyung Kim

2022년 11월 30일 (수) 오후 8:37, Mark Adams <mfadams@lbl.gov>님이 작성:


On Wed, Nov 30, 2022 at 5:08 AM 김성익 <ksi2443@gmail.com> wrote:

Hello,

 

I’m working on FEM using PETSc.

As everyone knows, it is necessary to repeatedly solve Ax=B.

Regarding this, I have 4 questions.

 

1.     There are many steps for preparing KSPSolve. For example KSPcreate, KSPSetOperators, KSPGetPC, PCSetType, PCFactorSetMatSolverType, KSPSetFromOptions…
In Nonlinear FEM, there are repeatedly kspsolve for getting answer vector. Is it correct to do all of the aforementioned processes (KSPcreate, KSPSetOperators ~~~) for each KSPSolve? Or should I declare it only once at the beginning and not call it again?


You just do these once at setup but for nonlinear problems KSPSetOperators tells the solver that you have a new matrix and so "matrix setup" work needs to be done.

 

2.     If the answer to question 1 is that it must be repeated every time, should this work be done right before kspsolve, that is, when the global matrix assembly is finished, or is it irrelevant to performance at any time?


KSPSetOperators should be set after the new matrix values are set but it might work before. It just sets a pointer to the matrix and flags it as not setup.
 

 

3.     When performing FEM, local matrices are often scattered in global matrices depending on connectivity. In this case, which is better in terms of performance: adding the values one by one with MatSetValue or adding them all at once with MatSetValues even if they are scattered?


You want to add one element matrix at a time, generally.
 

 

 

4.     I would like to measure the time of each section of the process. Which method is recommended?


PETSc methods are timed separateluy, but setup gets folded into KSPSolve unless you call SNESSetUp before the SNES[KSP]Solve.
You can add you own timers also https://petsc.org/release/docs/manualpages/Profiling/PetscLogEventRegister/

Mark

 

 

Thank you for your help.

 

Hyung Kim