<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">This warrants a deeper description.  I was thinking about trying to use petsc to solve a 1D PDE problem using the equidistribution principle for adaptive meshing.  Briefly, the idea is that given a function u(x), where x is the physical coordinate, a monitor function, w[u(x)]>0, is introduced such that <div class=""><br class=""></div><div class="">y(x) = \int_{0}^x w[u(s)] ds /\int_{0}^{xmax} w[u(s)] ds </div><div class=""><br class=""></div><div class="">where C is a constant, and y is the computational coordinate in [0,1].  essentially, you want to pick the physical mesh points, x_i such that</div><div class=""><br class=""><div class="">\int_{x_i}^{x_{i+1}} w[u(s)] ds =  constant</div><div class=""><br class=""></div><div class="">then the computational mesh points are uniformly spaced.  Solving this can be posed as a nonlinear elliptic equation, in general dimension, though it simplifies further in 1D.  In a paper by Gavish and Ditkowski, for the 1D problem, they came up with the idea that you could do the following:</div><div class=""><br class=""></div><div class="">Given a starting guess on where the physical coordinates should be, let</div><div class=""><br class=""></div><div class=""> F_i = \int_0^{x_i} w[u(s)]ds/\int_0^{x_N} w[u(s)]ds</div><div class=""><br class=""></div><div class="">Then 0= F_0 < F_1 <… <F_N=1.  Rather than try to solve the nonlinear system for the x_i such that the successive differences of F_{i+1} - F_i are uniformly spaced, they propose to do:</div><div class=""><br class=""></div><div class="">interpolate (F_i, x_i) onto the uniform mesh for y, and the interpolated x_i’s should approximately satisfy the equidistribution principle.  This can be iterated, to improve the equidistribution.  </div><div class=""><br class=""></div><div class="">Doing the quadrature with distributed vectors is not too hard.  The question then becomes how to do the interpolation in parallel.  As I was suggesting in the earlier example, if y_i = i * h, is the uniform mesh, it may be that y_i could be on proc 0, but the values of {F_j} that this lies between are on proc 1.  There is monotonicity at work here, but I’m not sure I can really say, when defining ghost points, how things will spread out.</div><div class=""><br class=""></div><div class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Feb 17, 2015, at 10:11 AM, Matthew Knepley <<a href="mailto:knepley@gmail.com" class="">knepley@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class=""><div class="gmail_extra"><div class="gmail_quote">On Tue, Feb 17, 2015 at 8:15 AM, Gideon Simpson <span dir="ltr" class=""><<a href="mailto:gideon.simpson@gmail.com" target="_blank" class="">gideon.simpson@gmail.com</a>></span> wrote:<br class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word" class="">I’m gathering from your suggestions that I would need, a priori, knowledge of how many ghost points I would need, is that right?</div></blockquote><div class=""><br class=""></div><div class="">We have to be more precise about a priori. You can certainly create a VecScatter on the fly every time</div><div class="">if your communication pattern is changing. However, how will you know what needs to be communicated.</div><div class=""><br class=""></div><div class="">   Matt</div><div class=""> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word" class=""><div class=""><div class="">
<span style="border-collapse: separate; font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;" class="">-gideon</span>

</div>
<br class=""><div class=""><blockquote type="cite" class=""><div class="">On Feb 17, 2015, at 9:10 AM, Matthew Knepley <<a href="mailto:knepley@gmail.com" target="_blank" class="">knepley@gmail.com</a>> wrote:</div><br class=""><div class=""><div dir="ltr" class=""><div class="gmail_extra"><div class="gmail_quote">On Tue, Feb 17, 2015 at 7:46 AM, Gideon Simpson <span dir="ltr" class=""><<a href="mailto:gideon.simpson@gmail.com" target="_blank" class="">gideon.simpson@gmail.com</a>></span> wrote:<br class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word" class="">Suppose I have data in Vec x and Vec y, and I want to interpolate this onto Vec xx, storing the values in Vec yy.  All vectors have the same layout.  The problem is that, for example, some of the values in xx on processor 0 may need the values of x and y on processor 1, and so on.  Aside from just using sequential vectors, so that everything is local, is there a reasonable way to make this computation?</div></blockquote><div class=""><br class=""></div><div class="">At the most basic linear algebra level, you would construct a VecScatter which mapped the pieces you need from other processes into a local vector along with the local portion, and you would use that to calculate values, which you then put back into your owned portion of a global vector. Thus local vectors have halos and global vectors do not.</div><div class=""><br class=""></div><div class="">If you halo regions (values you need from other processes) have a common topology, then we have simpler</div><div class="">support that will make the VecScatter for you. For example, if your values lie on a Cartesian grid and you</div><div class="">just need neighbors within distance k, you can use a DMDA to express this and automatically make the</div><div class="">VecScatter. Likewise, if you values lie on an unstructured mesh and you need a distance k adjacency,</div><div class="">DMPlex can create the scatter for you.</div><div class=""><br class=""></div><div class="">If you are creating the VecScatter yourself, it might be easier to use the new PetscSF instead since it only needs one-sided information, and performs the same job. This is what DMPlex uses to do the communication.</div><div class=""><br class=""></div><div class="">  Thanks,</div><div class=""><br class=""></div><div class="">     Matt</div><div class=""> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word" class=""><span class=""><font color="#888888" class="">
-gideon


<br class=""></font></span></div></blockquote></div><br class=""><br clear="all" class=""><span class="HOEnZb"><font color="#888888" class=""><div class=""><br class=""></div>-- <br class=""><div class="">What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br class="">-- Norbert Wiener</div>
</font></span></div></div>
</div></blockquote></div><br class=""></div></div></blockquote></div><br class=""><br clear="all" class=""><div class=""><br class=""></div>-- <br class=""><div class="gmail_signature">What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br class="">-- Norbert Wiener</div>
</div></div>
</div></blockquote></div><br class=""></div></div></body></html>