<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body text="#000000" bgcolor="#FFFFFF">
<p>First of all, thank you for elaboration.</p>
<p>The problem is, I want to generate J myself, using FD, for the
following reason.<br>
</p>
<p>I have a WORLD matrix M that I feed into F(u) using user defined
context pointer *ctx. And I call collective functions on that
matrix. <br>
</p>
<p>I call a for loop inside CreateJacobian function to perturb the
F() entries one by one. But since I have collective calls on a
WORLD matrix M inside F, I have to do this virtually
sequentially(not "truly" sequential, but other processes must wait
while one is calling F()). I cannot have two different processes
perturb the u vector at different locations, this confuses the
collective calls on that matrix (or so I have observed, maybe
there was another bug in my code.).</p>
<p>Here, what I want to do is to have a SELF copy of the u vector
and the input matrix M to F() on every process, so every process
can independently work the data. So, I need a way to copy the
WORLD matrix into SELF. My current idea is to write the WORLD
matrix as a binary file, and read it into a SELF matrix. <br>
</p>
<p>I am aware that what I want to do should be done using coloring,
much memory and time effective. But, I am working on adaptive grid
finite differences so there is not an easy way to create coloring
on my grid. If there is a Petsc function that generates the
coloring for me, I can also try it. <br>
</p>
<p>My apologies, even the simple form got this long :)</p>
<br>
<div class="moz-cite-prefix">On 20-03-2018 16:47, Matthew Knepley
wrote:<br>
</div>
<blockquote type="cite"
cite="mid:CAMYG4G=qy42Cb0Qmd_8XF4Q9Jfee6N_3Dh=9GhtqxypR2g63uw@mail.gmail.com">
<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"
moz-do-not-send="true">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" moz-do-not-send="true">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/%7Emk51/"
target="_blank" moz-do-not-send="true">https://www.cse.buffalo.edu/~knepley/</a><br>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
<br>
</body>
</html>