<div dir="ltr">Mark,<br><br>Right now, Mehrdad and I are just passing the constant 
vector. The problem is that the null space is extremely expensive to 
compute. Something like 5-20 times the cost of solving the Poisson 
equation itself depending on the problem size. What we have tried in the
 past is to find a single solution to Atrans*n = 0 and pass this as the 
nullspace. It's had success at making the true residual drop in unison 
with the preconditioned residual. However, because we are working with 
moving boundary problems, the null space is changing each time step. In 
order to get around this, we have decided to try to avoid giving the 
null space, and see if we get an accurate answer, and we do get pretty 
much the same answer when we only require preconditioned residual 
convergence. This is obviously less than robust, but we've yet to find a
 way to get the null space in an efficient manner. I tried programming 
up a GASM type algorithm where BiCG/ILU is used near the interface where
 the solution is not smooth, and GAMG is used far away where the changes
 in the null vector are very very small, but that didn't have much 
success. </div><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Mar 20, 2013 at 4:47 PM, John Mousel <span dir="ltr"><<a href="mailto:elafint.john@gmail.com" target="_blank">elafint.john@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>Mark,<br><br>Right now, Mehrdad and I are just passing the constant vector. The problem is that the null space is extremely expensive to compute. Something like 5-20 times the cost of solving the Poisson equation itself depending on the problem size. What we have tried in the past is to find a single solution to Atrans*n = 0 and pass this as the nullspace. It's had success at making the true residual drop in unison with the preconditioned residual. However, because we are working with moving boundary problems, the null space is changing each time step. In order to get around this, we have decided to try to avoid giving the null space, and see if we get an accurate answer, and we do get pretty much the same answer when we only require preconditioned residual convergence. This is obviously less than robust, but we've yet to find a way to get the null space in an efficient manner. I tried programming up a GASM type algorithm where BiCG/ILU is used near the interface where the solution is not smooth, and GAMG is used far away where the changes in the null vector are very very small, but that didn't have much success. <br>
<span class="HOEnZb"><font color="#888888">
<br></font></span></div><span class="HOEnZb"><font color="#888888">John<br></font></span></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Mar 20, 2013 at 4:37 PM, Mark F. Adams <span dir="ltr"><<a href="mailto:mark.adams@columbia.edu" target="_blank">mark.adams@columbia.edu</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><br><div><div><div>On Mar 20, 2013, at 4:13 PM, Mehrdad H Farahani <<a href="mailto:mh.farahani@gmail.com" target="_blank">mh.farahani@gmail.com</a>> wrote:</div>

<br><blockquote type="cite">I am solving a Poisson equation with Neumann boundary conditions applied along an arbitrary curve using a ghost fluid treatment. The matrix is non-symmetric and the null space contains more than the constant vector. I have implemented a solve for the null space itself and have previously supplied it using MatSetNullSpace. Unfortunately the null space solve is extremely expensive and does not play well with GAMG or ML. We've checked that the answers we get without supplying this null space are very close to the answers</blockquote>

<div><br></div></div><div>If you set the null space in GAMG and (I'm sure) ML you need to give us he _whole_ null space.  For 3D elasticity GAMG will take coordinates and -- just for user convenience and to annoy Jed -- we create the 6 rigid body modes.  How many null space vectors are you giving us?</div>

<div><br><blockquote type="cite"> we get when we do include it. The matrix for the two solves in the previous attachment are identical. The problem also seems to be converging and then suddenly diverges. Is this common behavior for a singular preconditioner?<br>



<br>Thanks,<br><br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><br><div class="gmail_quote"><br>From: <b class="gmail_sendername">Jed Brown</b> <span dir="ltr"><<a href="mailto:jedbrown@mcs.anl.gov" target="_blank">jedbrown@mcs.anl.gov</a>></span><br>




Date: Wed, Mar 20, 2013 at 2:03 PM<br>Subject: Re: [petsc-users] KSP convergence problem<br>To: PETSc users list <<a href="mailto:petsc-users@mcs.anl.gov" target="_blank">petsc-users@mcs.anl.gov</a>><br><br><br><div dir="ltr">



<div>
<div>On Wed, Mar 20, 2013 at 2:00 PM, Mark F. Adams <span dir="ltr"><<a href="mailto:mark.adams@columbia.edu" target="_blank">mark.adams@columbia.edu</a>></span> wrote:<br></div></div><div class="gmail_extra">
<div class="gmail_quote"><div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div><br>
On Mar 20, 2013, at 2:12 PM, Mehrdad H Farahani <<a href="mailto:mh.farahani@gmail.com" target="_blank">mh.farahani@gmail.com</a>> wrote:<br>
<br>
> I'm experience a weird convergence problem with bcgsl with both ILU and GAMG preconditioning. The problem converges normally (at least in the preconditioned norm), but then kicks out with converged reason = -4. I've attached the convergence history of the previous time-step which worked and the timestep which shows problems. Could someone give me an idea on how to proceed?<br>






><br>
<br>
</div>Did you run with -ksp_converged_reason ?<br>
<br>
I don't know were this -4 comes from.  Could this be from your code?<br></blockquote><div><br></div></div><div>Some people call KSPGetConvergedReason(), but then don't compare to the enums and don't convert to a string using KSPConvergedReasons[reason].</div>





<div><br></div><div><a href="http://www.mcs.anl.gov/petsc/petsc-dev/docs/manualpages/KSP/KSP_DIVERGED_DTOL.html" target="_blank">http://www.mcs.anl.gov/petsc/petsc-dev/docs/manualpages/KSP/KSP_DIVERGED_DTOL.html</a><br></div>





<div><br></div><div>The problem is likely that your preconditioner is singular. What sort of problem are you solving?</div></div></div></div>
</div><br></div>
</blockquote></div><br><br clear="all"><br>-- <br>Mehrdad <br>
</blockquote></div></div><br></div></blockquote></div><br></div>
</div></div></blockquote></div><br></div>