[petsc-users] Question About Assembly matrix and declaration of KSP & pc

Matthew Knepley knepley at gmail.com
Wed Nov 30 06:59:48 CST 2022


On Wed, Nov 30, 2022 at 7:51 AM 김성익 <ksi2443 at gmail.com> wrote:

> 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??"
>

KSPCreate is called once.

You do not need PCSetType, PCFactorSetMatSolverType, KSPSetFromOptions more
than once, unless you want to change the solver type.

KSPSetOperators is called if you want to change the system matrix.

KSPSolve is called when you want to change the rhs.

  Thanks,

     Matt


> 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 at lbl.gov>님이 작성:
>
>>
>>
>> On Wed, Nov 30, 2022 at 5:08 AM 김성익 <ksi2443 at 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
>>>
>>

-- 
What most experimenters take for granted before they begin their
experiments is infinitely more interesting than any results to which their
experiments lead.
-- Norbert Wiener

https://www.cse.buffalo.edu/~knepley/ <http://www.cse.buffalo.edu/~knepley/>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20221130/8a5012ac/attachment-0001.html>


More information about the petsc-users mailing list