<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Fri, May 4, 2018 at 3:54 PM, Y. Shidi <span dir="ltr"><<a href="mailto:ys453@cam.ac.uk" target="_blank">ys453@cam.ac.uk</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Dear Matt,<br>
<br>
Thank you very much for your reply!<br>
So what you mean is that I can just do the KSPSolve() every iteration<br>
once the MUMPS is set?<br></blockquote><div><br></div><div>Yes.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
That means inside the KSPSolve() the numerical factorization is<br>
performed. If that is the case, it seems that the ksp object is<br>
not changed when the values in the matrix are changed.<br></blockquote><div><br></div><div>Yes.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Or do I need to call both KSPSetOperators() and KSPSolve()?<br></blockquote><div><br></div><div>If you do SetOperators, it will redo the factorization. If you do not, it will look</div><div>at the Mat object, determine that the structure has not changed, and just redo</div><div>the numerical factorization.</div><div><br></div><div>  Thanks,</div><div><br></div><div>     Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
On 2018-05-04 14:44, Matthew Knepley wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
On Fri, May 4, 2018 at 9:40 AM, Y. Shidi <<a href="mailto:ys453@cam.ac.uk" target="_blank">ys453@cam.ac.uk</a>> wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Dear PETSc users,<br>
<br>
I am currently using MUMPS to solve linear systems directly.<br>
Generally, we use ICNTL(7) or ICNTL(29) to do the preprocessing<br>
step and then solve the system.<br>
<br>
In my code, the values in the matrix is changed in each iteration,<br>
but the structure of the matrix stays the same, which means the<br>
performance can be improved if symbolic factorisation is only<br>
performed once. Hence, it is necessary to split the symbolic<br>
and numeric factorisation. However, I cannot find a specific step<br>
(control parameter) to perform the numeric factorisation.<br>
I have used ICNTL(3) and ICNTL(4) to print the MUMPS information,<br>
it seems that the symbolic and numeric factorisation always perform<br>
together.<br>
</blockquote>
<br>
If you use KSPSolve instead, it will automatically preserve the<br>
symbolic<br>
factorization.<br>
<br>
  Thanks,<br>
<br>
     Matt<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
So I am wondering if anyone has an idea about it.<br>
<br>
Below is how I set up MUMPS solver:<br>
PC pc;<br>
PetscBool flg_mumps, flg_mumps_ch;<br>
flg_mumps = PETSC_FALSE;<br>
flg_mumps_ch = PETSC_FALSE;<br>
PetscOptionsGetBool(NULL, NULL, "-use_mumps_lu", &flg_mumps,<br>
NULL);<br>
PetscOptionsGetBool(NULL, NULL, "-use_mumps_ch", &flg_mumps_ch,<br>
NULL);<br>
if(flg_mumps ||flg_mumps_ch)<br>
{<br>
KSPSetType(_ksp, KSPPREONLY);<br>
PetscInt ival,icntl;<br>
PetscReal val;<br>
KSPGetPC(_ksp, &pc);<br>
/// Set preconditioner type<br>
if(flg_mumps)<br>
{<br>
PCSetType(pc, PCLU);<br>
}<br>
else if(flg_mumps_ch)<br>
{<br>
MatSetOption(A, MAT_SPD, PETSC_TRUE);<br>
PCSetType(pc, PCCHOLESKY);<br>
}<br>
PCFactorSetMatSolverPackage(pc<wbr>, MATSOLVERMUMPS);<br>
PCFactorSetUpMatSolverPackage(<wbr>pc);<br>
PCFactorGetMatrix(pc, &_F);<br>
icntl = 7; ival = 0;<br>
MatMumpsSetIcntl( _F, icntl, ival );<br>
MatMumpsSetIcntl(_F, 3, 6);<br>
MatMumpsSetIcntl(_F, 4, 2);<br>
}<br>
KSPSetUp(_ksp);<br>
<br>
Kind Regards,<br>
Shidi<br>
</blockquote>
<br>
--<br>
<br>
What most experimenters take for granted before they begin their<br>
experiments is infinitely more interesting than any results to which<br>
their experiments lead.<br>
-- Norbert Wiener<br>
<br>
<a href="https://www.cse.buffalo.edu/~knepley/" rel="noreferrer" target="_blank">https://www.cse.buffalo.edu/~k<wbr>nepley/</a> [1]<br>
<br>
<br>
Links:<br>
------<br>
[1] <a href="http://www.caam.rice.edu/~mk51/" rel="noreferrer" target="_blank">http://www.caam.rice.edu/~mk51<wbr>/</a><br>
</blockquote>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div>What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>-- Norbert Wiener</div><div><br></div><div><a href="http://www.caam.rice.edu/~mk51/" target="_blank">https://www.cse.buffalo.edu/~knepley/</a><br></div></div></div></div></div>
</div></div>