On Tue, Jun 7, 2011 at 10:44 AM, Danesh Daroui <span dir="ltr">&lt;<a href="mailto:danesh.daroui@ltu.se">danesh.daroui@ltu.se</a>&gt;</span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<br>
So, it is not implemented? That&#39;s too bad! ILU with drop threshold is<br>
very useful so I am wondering why it is not implemented yet? Do you have<br>
any plan to implement it?<br></blockquote><div><br></div><div>It is not very scalable, so it is only really useful in a serial code. We tend to focus</div><div>on parallel algorithms which are scalable. We don&#39;t have any plans to implement it,</div>
<div>but we do take code submissions.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Setting levels did work OK for me. I have another question. If I want to<br>
calculate the preconditioner once, and use it later to solve other<br>
equations, since I know that the preconditioner would be OK because I<br>
solve several equations in several iterations and I know that my<br>
coefficient matrix will not change that much so calculating the<br>
preconditioner at once would be OK. What routines should I call once and<br>
how can I apply the pre-calculated preconditioner each time I want to<br>
solve the equation?<br></blockquote><div><br></div><div>You would use KSPSetOperators() with SAME_PRECONDITIONER.</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;">

<br>
Thanks,<br>
<br>
D.<br>
<br>
<br>
<br>
On Tue, 2011-06-07 at 10:28 -0500, Barry Smith wrote:<br>
&gt; Sorry for the confusion, it is our fault. We don&#39;t have a drop tolerance ILU hence PCFactorSetDropTolerance() isn&#39;t doing anything.<br>
&gt;<br>
&gt;   You can run with -pc_factor_levels  M   or call PCFactorSetLevels(pc,M) in the code  where M is the size of the matrix.<br>
&gt;<br>
&gt;    Barry<br>
&gt;<br>
&gt; On Jun 7, 2011, at 10:20 AM, Danesh Daroui wrote:<br>
&gt;<br>
&gt; &gt;<br>
&gt; &gt; Hi,<br>
&gt; &gt;<br>
&gt; &gt; I want to use incomplete LU preconditioner. My code works OK when I use<br>
&gt; &gt; no preconditioner and direct solver for test:<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; ierr=KSPCreate(PETSC_COMM_WORLD, &amp;ksp);<br>
&gt; &gt; ierr=KSPSetOperators(ksp, Mp, Mp, DIFFERENT_NONZERO_PATTERN);<br>
&gt; &gt; ierr=KSPSetTolerances(ksp, 1.e-2/Msize, 1.e-50, PETSC_DEFAULT,<br>
&gt; &gt; PETSC_DEFAULT);<br>
&gt; &gt;<br>
&gt; &gt; // GMRES iterative solver is used<br>
&gt; &gt; ierr=KSPSetType(ksp, KSPGMRES);<br>
&gt; &gt;<br>
&gt; &gt; // no PETSc preconditioner is used<br>
&gt; &gt; ierr=KSPGetPC(ksp, &amp;prec);<br>
&gt; &gt; ierr=PCSetType(prec, PCLU);<br>
&gt; &gt;<br>
&gt; &gt; // set up the solver according to the options<br>
&gt; &gt; ierr=KSPSetFromOptions(ksp);<br>
&gt; &gt;<br>
&gt; &gt; ierr=KSPSetUp(ksp);<br>
&gt; &gt;<br>
&gt; &gt; // solve the equation using an iterative solver<br>
&gt; &gt; ierr=KSPSolve(ksp, bp, xp);<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; Again for some tests, at the first step, I want to use ILU but create<br>
&gt; &gt; the exact LU and then change the parameters to tune the preconditioner<br>
&gt; &gt; and I almost know what values to set according to my tests in MATLAB. I<br>
&gt; &gt; use the code below to create the get exact LU, using ILU preconditioner:<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; ierr=KSPCreate(PETSC_COMM_WORLD, &amp;ksp);<br>
&gt; &gt; ierr=KSPSetOperators(ksp, Mp, Mp, DIFFERENT_NONZERO_PATTERN);<br>
&gt; &gt; ierr=KSPSetTolerances(ksp, 1.e-2/Msize, 1.e-50, PETSC_DEFAULT,<br>
&gt; &gt; PETSC_DEFAULT);<br>
&gt; &gt;<br>
&gt; &gt; // GMRES iterative solver is used<br>
&gt; &gt; ierr=KSPSetType(ksp, KSPGMRES);<br>
&gt; &gt;<br>
&gt; &gt; // no PETSc preconditioner is used<br>
&gt; &gt; ierr=KSPGetPC(ksp, &amp;prec);<br>
&gt; &gt; ierr=PCSetType(prec, PCILU);<br>
&gt; &gt;<br>
&gt; &gt; PetscReal dt=1e-10;<br>
&gt; &gt; PetscReal dtcol=0.1;<br>
&gt; &gt; PetscInt maxrowcount=M;<br>
&gt; &gt; PCFactorSetDropTolerance(prec, dt, dtcol, maxrowcount);<br>
&gt; &gt;<br>
&gt; &gt; // set up the solver according to the options<br>
&gt; &gt; ierr=KSPSetFromOptions(ksp);<br>
&gt; &gt;<br>
&gt; &gt; ierr=KSPSetUp(ksp);<br>
&gt; &gt;<br>
&gt; &gt; // solve the equation using an iterative solver<br>
&gt; &gt; ierr=KSPSolve(ksp, bp, xp);<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; and my coefficient matrix is a square &quot;MxM&quot; matrix and I pass &quot;M&quot; as<br>
&gt; &gt; &quot;maxrowcount&quot;. Using this code, the solver never converges while it<br>
&gt; &gt; solved the equation using previous code (direct solver). Can anybody let<br>
&gt; &gt; me know how can I get exact LU using ILU and what parameters should I<br>
&gt; &gt; change in the above code?<br>
&gt; &gt;<br>
&gt; &gt; Regards,<br>
&gt; &gt;<br>
&gt; &gt; D.<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt;<br>
&gt;<br>
<br>
<br>
</blockquote></div><br><br clear="all"><br>-- <br>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<br>