<div dir="ltr"><span class="GingerNoCheckStart"></span>Thank you this works perfectly.<span class="GingerNoCheckEnd"></span></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Mar 14, 2013 at 4:20 PM, Hong Zhang <span dir="ltr"><<a href="mailto:hzhang@mcs.anl.gov" target="_blank">hzhang@mcs.anl.gov</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">On Thu, Mar 14, 2013 at 2:52 PM, Thibault Faney <<a href="mailto:tibo@berkeley.edu">tibo@berkeley.edu</a>> wrote:<br>

> Hong:<br>
><br>
> thank you for your answer.<br>
> I can replace DIFFERENT_NONZERO_PATTERN by SAME_NONZERO_PATTERN, however<br>
> this will give me the wrong answer as the zero pattern changes from a time<br>
> step to another (e.g. the matrix A at time step 1 has more zeros than at<br>
> time step 2) . What I can precompute is the maximal non-zero pattern. Do you<br>
> mean I should compute the facorization for the maximal zero pattern before<br>
> time iterations and then use SAME_NONZERO_PATTERN during the iterations ?<br>
<br>
</div>Yes.<br>
<span class="HOEnZb"><font color="#888888">Hong<br>
</font></span><div class="HOEnZb"><div class="h5">><br>
><br>
> On Thu, Mar 14, 2013 at 3:29 PM, Hong Zhang <<a href="mailto:hzhang@mcs.anl.gov">hzhang@mcs.anl.gov</a>> wrote:<br>
>><br>
>> Tibo:<br>
>><br>
>> Replace<br>
>> call KSPSetOperators(KSP_A, A, A, DIFFERENT_NONZERO_PATTERN, ierr)<br>
>> with<br>
>> call KSPSetOperators(KSP_A, A, A, SAME_NONZERO_PATTERN, ierr)<br>
>><br>
>> Run your code with option '-log_summary' to see the number of calling<br>
>> MatLUSymbolic() and MatLUNumeric().<br>
>><br>
>> Hong<br>
>><br>
>> ><br>
>> > I am using the cray-petsc implementation on the NERSC system.<br>
>> > Specifically,<br>
>> > I have implemented a runge kutta solver, and I need to solve a linear<br>
>> > system<br>
>> > Ax = b several times per time step. I am using PETSC to interface with<br>
>> > the<br>
>> > MUMPS solver for direct factorization.<br>
>> ><br>
>> > The matrix A is constant over a whole time step, but changes at each<br>
>> > time<br>
>> > step. What I do now is that at the beginning of each time step, I<br>
>> > compute<br>
>> > the matrix A, use the MUMPS solver to compute a LU factorization of A,<br>
>> > and<br>
>> > then use KSPSolve to solve each linear system during the same time step.<br>
>> > Here is an example of the succession of calls (inspired from example<br>
>> > ex52.c):<br>
>> ><br>
>> > Once per time step:<br>
>> > call KSPSetOperators(KSP_A, A, A, DIFFERENT_NONZERO_PATTERN, ierr)<br>
>> > call KSPSetType(KSP_A, KSPPREONLY, ierr);<br>
>> > call KSPGetPC(KSP_A, PC_A, ierr)<br>
>> > call KSPSetTolerances(KSP_A, 1.d-20, PETSC_DEFAULT_DOUBLE_PRECISION,<br>
>> > PETSC_DEFAULT_DOUBLE_PRECISION, PETSC_DEFAULT_INTEGER, ierr)<br>
>> > call PCSetType(PC_A, PCLU, ierr)<br>
>> > call PCFactorSetMatSolverPackage(PC_A, MATSOLVERMUMPS, ierr)<br>
>> > call PCFactorSetUpMatSolverPackage(PC_A, ierr)<br>
>> > call PCFactorGetMatrix(PC_A, PC_A, ierr)<br>
>> > call MatMumpsSetIcntl(PC_A, 7, 5, ierr)<br>
>> > call PCSetup(PC_A, ierr)<br>
>> > call KSPSetUp(KSP_A, ierr)<br>
>> ><br>
>> > Then several times per time step:<br>
>> > call KSPSolve( KSP_A, b, x, ierr)<br>
>> ><br>
>> > This works fine.<br>
>> > However, I am able to precompute the maximal sparsity pattern of A<br>
>> > before<br>
>> > the time iterations. Therefore, I would like to use this information by<br>
>> > precomputing the symbolic factorization before the time iterations<br>
>> > start,<br>
>> > and only compute the numerical factorization at each time step. Is there<br>
>> > a<br>
>> > way to use MUMPS in PETSC to do this ? I would appreciate any<br>
>> > help/reference<br>
>> > on this topic.<br>
>> ><br>
>> > Thank you,<br>
>> ><br>
>> > Tibo<br>
><br>
><br>
</div></div></blockquote></div><br></div>