<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br><div><div>On Aug 31, 2010, at 3:16 PM, Jeremy Roberts wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite">Ah, I understand now what you mean. I have u in a module used by all subroutines that need u, including the main program where it is an argument of SNESSolve and the subroutine jac_shell.&nbsp; I assumed having all routines use the same variable makes it the same everywhere at all times...maybe I'm just lucky with this particular problem.&nbsp; Putting it as you do, I see why the user might not want to assume what goes into solve is consistent with (points to?) what enters FOO at any given call.<br></blockquote><div><br></div>&nbsp;&nbsp; It does not neccessarily match, you should not depend on it.</div><div><br></div><div>&nbsp;&nbsp;Barry</div><div><br><blockquote type="cite">
<br>Thanks,<br>Jeremy<br><br>P.S.&nbsp; I've attached the working example, where "x" is the unknown vector.&nbsp; <br><br><div class="gmail_quote">On Tue, Aug 31, 2010 at 2:27 PM, Barry Smith <span dir="ltr">&lt;<a href="mailto:bsmith@mcs.anl.gov">bsmith@mcs.anl.gov</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><div style="word-wrap: break-word;"><br><div><div class="im"><div>On Aug 31, 2010, at 2:17 PM, Jeremy Roberts wrote:</div>
<br><blockquote type="cite">To implement the safe method---i.e. copying the unknown vector u within FOO---what is proper generic form of FOO?&nbsp; <br><br>I guess I'm not clear exactly how FOO and jac_shell (the J*x routine) are linked.&nbsp; It appears they aren't, given I can use an empty subroutine, but how then is a local copy of u within FOO used in for J(u) in J(U)*x of jac_shell?<br>
</blockquote><div><br></div></div>&nbsp;&nbsp;Don't ask me. You wrote the code, I have no idea how you are accessing u. &nbsp;But you need to compute J(u)*x so you need to use u.</div><div><br></div><div>&nbsp;&nbsp;subroutine yourfoo(snes,u,A,B,flg,ierr)</div>
<div>&nbsp;&nbsp;common /mycommonblock/ v&nbsp;</div><div><br></div><div>&nbsp;&nbsp;call veccopy(u,v,ierr)</div><div>&nbsp;&nbsp;return</div><div><br></div><div>&nbsp;&nbsp; and create the v upfront in your main program. Of course, you don't need to use common blocks but that is one way of maintaining this global variables.</div>
<div><br></div><font color="#888888"><div>&nbsp;&nbsp; Barry</div></font><div class="im"><div><br></div><div>&nbsp;&nbsp;&nbsp;</div><div><br><blockquote type="cite">
<br><br><div class="gmail_quote">On Tue, Aug 31, 2010 at 1:14 PM, Barry Smith <span dir="ltr">&lt;<a href="mailto:bsmith@mcs.anl.gov" target="_blank">bsmith@mcs.anl.gov</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">

<div><div></div><div><br>
On Aug 31, 2010, at 1:03 PM, Jeremy Roberts wrote:<br>
<br>
&gt;<br>
&gt; Hi Barry,<br>
&gt;<br>
&gt; Thanks for the quick response.<br>
&gt;<br>
&gt; I have the unknown vector u globally accessible and so forgo use of the user-defined context (I tried to get it to work---can it be used in Fortran?).<br>
&gt;<br>
&gt; I used<br>
&gt;<br>
&gt; call SNESSetJacobian( snes, Jshell, Jshell, FOO, PETSC_NULL_OBJECT, ierr )<br>
&gt;<br>
&gt; where FOO is an empty function having the correct argument types. &nbsp;It seems to work now, and I get the exact same answer using an explicit Jacobian matrix and the shell version. &nbsp;Is there a way to get around needing FOO at all?<br>


&gt;<br>
<br>
</div></div> &nbsp; If it works great. But I how you know what the "unknown vector u " that is "globally accessible" &nbsp;in SNES is? How do you know it is the same each time a new Jacobian is needed? The only save way is to copy the vector passed into the FOO funcion.<br>


<br>
 &nbsp; Barry<br>
<br>
<br>
<br>
&gt; Jeremy<br>
&gt;<br>
&gt;<br>
<br>
</blockquote></div><br>
</blockquote></div><br></div></div></blockquote></div><br>
<span>&lt;exJac.F&gt;</span><span>&lt;exJac_mod.F&gt;</span><span>&lt;exJac_mod2.F&gt;</span></blockquote></div><br></body></html>