<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Tue, Mar 20, 2018 at 9:31 AM, Ali Berk Kahraman <span dir="ltr"><<a href="mailto:aliberkkahraman@yahoo.com" target="_blank">aliberkkahraman@yahoo.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Thank your for the reply.<br>
<br>
I have tried it, but could not get it to work. For it to work, I have to know at which vector entry the epsilon in the FD approximation is to be added. It is an input for my inexpensive function, and I could not find a way to pass it in using MFFD context.<br></blockquote><div><br></div><div>MFFD has it in the context as current_u. There is no accessor, but we can easily write one. However, that is not how MFFD works. Here is the idea:</div><div><br></div><div>  You give us a function F, your inexpensive function. We get to call F however we want to call it, and produce the action of the matrix. So for instance,</div><div>  we could do this</div><div><br></div><div>    F(x + h u) - F(x)</div><div>    ---------------------</div><div>             h ||u||</div><div><br></div><div>  but we do not have to do that. You should not worry about how we perturb the function, you just return the value of the function when we call it.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I have been trying to get it working with PETSC_COMM_WORLD too with no luck. My guess is that my FormRHSFunction becomes a collective function on WORLD, so I cannot generate many separate copies each doing its own thing. For this reason I am trying to move it to SELF, but I cannot do that if I cannot find a way to represent my WORLD matrix input fully on each process.<br></blockquote><div><br></div><div>I think things have gotten too confused here for us to help. Lets step back and simplify. Can you tell us briefly exactly what you want to accomplish? I will start by</div><div>explaining SNES. We are essentially doing Newton's method. This means calculating a step du, based on an initial solution u, using this equation</div><div><br></div><div>  J(u) du = -F(u)</div><div><br></div><div>so we need a function to form the residual F, and maybe the Jacobian J but we can also form it using calls to F.</div><div><br></div><div>It sounds like you want to do something inside F, but I cannot figure out what yet.</div><div><br></div><div>  Thanks,</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">
Sorry I am stuck in the same question, but any ideas on how to move a matrix from WORLD to SELF, similar to the way it is possible with vectors using VecScatter?<br>
<br>
<br>
<br>
On 19-03-2018 21:08, Smith, Barry F. wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
On Mar 19, 2018, at 12:00 PM, Ali Berk Kahraman <<a href="mailto:aliberkkahraman@yahoo.com" target="_blank">aliberkkahraman@yahoo.com</a>> wrote:<br>
<br>
Dear All,<br>
<br>
I have to create my Jacobian numerically using an FD function I have written, but the problem is that the function evaluation FormRHSFunction creates PETSC_COMM_WORLD objects in it, and takes 1 PETSC_COMM_WORLD matrix as an input.  So I cannot work it on parallel (every processor calculating its own portion of Jacobian), I tried but the machine gets confused.<br>
</blockquote>
    Huh. It is fine to have the function work on PETSC_COMM_WORLD, and it can be in parallel.<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
My initial idea was to create the objects in PETSC_COMM_SELF type within the RHS function, but the input COMM_WORLD matrix standed where it was. So my question is, is there a way to get a complete copy of a distributed matrix on all the processors as seq matrices?<br>
<br>
I cannot use the Petsc's version FD function because the FormRHSFunction I call to create the Jacobian is slightly different than the original FormRHSFunction. The original function is too expensive, so I only calculate the relevant parts of it in the Jacobian function.<br>
</blockquote>
    You can do this with MatCreateMFFD() and set your inexpensive function as the function.<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Best Regards,<br>
<br>
Ali Berk Kahraman<br>
M.Sc. Student, Mechanical Engineering<br>
Bogazici Uni. Istanbul, Turkey<br>
<br>
</blockquote></blockquote>
<br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div>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><br></div><div><a href="http://www.caam.rice.edu/~mk51/" target="_blank">https://www.cse.buffalo.edu/~knepley/</a><br></div></div></div></div></div>
</div></div>