<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Fri, Nov 22, 2013 at 6:25 PM, Geoffrey Irving <span dir="ltr"><<a href="mailto:irving@naml.us" target="_blank">irving@naml.us</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 Fri, Nov 22, 2013 at 4:17 PM, Jed Brown <<a href="mailto:jedbrown@mcs.anl.gov">jedbrown@mcs.anl.gov</a>> wrote:<br>

> Geoffrey Irving <<a href="mailto:irving@naml.us">irving@naml.us</a>> writes:<br>
>> Here are results with -ksp_monitor_true_residual -pc_type none:<br>
>><br>
>>     <a href="http://naml.us/random/laplace-rtol.txt" target="_blank">http://naml.us/random/laplace-rtol.txt</a> # with -ksp_rtol 1e-5<br>
>>     <a href="http://naml.us/random/laplace-atol.txt" target="_blank">http://naml.us/random/laplace-atol.txt</a> # with -ksp_atol 1e-5<br>
><br>
> Looks like the preconditioner is singular.<br>
<br>
</div>The preconditioner is none: -pc_type none.<br>
<div class="im"><br>
>> Both versions converge in 3 iterations for the first SNES iteration,<br>
>> but the relative one starts to churn after that since the residual<br>
>> starts very small.  The true residual goes down to 4/3 and stagnates.<br>
>> Is there a convenient way to print out the RHS to see whether it has a<br>
>> component in the nullspace (which seems likely given the true residual<br>
>> stagnation)?<br>
><br>
> -snes_monitor_residual will plot the solution.  (This option should be<br>
>  upgraded to support arbitrary output formats.)  You can also call<br>
>  VecView from your residual function.<br>
><br>
>> I suppose I already do print the result of SNESComputeFunction on the<br>
>> zero vec, which is<br>
>><br>
>>     RHS = [  6.66666667e-01   1.33333333e+00   6.66666667e-01   1.11022302e-16]<br>
><br>
> Looks like you need to project out the null space.<br>
<br>
</div>Yep, I was hallucinating that analytically consistent implies<br>
discretely consistent.<br>
<br>
Is there a standard way to do this in the context of an SNES, where<br>
I'm not computing the residual directly myself?  Should I write a<br>
wrapper around DMPlexComputeResidualFEM and pass the wrapper to<br>
DMSNESSetFunctionLocal, or is there a way to tell SNES about the<br>
nullspace directly?  Is such a projection happening somewhere in snes<br>
ex12?<br></blockquote><div><br></div><div>SNES will do it automatically. You can just call MatNullSpaceRemove().</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">

Thanks,<br>
Geoffrey<br>
</blockquote></div><br><br clear="all"><div><br></div>-- <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
</div></div>