<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="">Wait, then why is my code working when I use the DOF routines?  The number of degrees of freedom per DA vertex is constant across the DA, but that value is not set until run time.  In other words, what’s wrong with the code:<div class=""><br class=""></div><div class=""><div class="">PetscOptionsGetInt(NULL,"-n_samples",&n_samples,NULL);</div><div class="">PetscOptionsGetInt(NULL,"-n_points",&n_points,NULL);</div></div><div class=""><br class=""></div><div class="">DMDACreate1d(PETSC_COMM_WORLD,DM_BOUNDARY_NONE, n_samples, n_points, 0, NULL, &da);</div><div class=""><br class=""></div><div class=""><div class=""><div class=""><div class="">
<span class="Apple-style-span" style="border-collapse: separate; border-spacing: 0px;">-gideon</span>

</div>
<br class=""><div><blockquote type="cite" class=""><div class="">On Feb 28, 2015, at 2:54 PM, 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 Sat, Feb 28, 2015 at 1:50 PM, 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="">Supposing that I do not have a priori information as to the number of degrees of freedom per DA vertex; I want the number of mesh points along each sample path to be variable.  Hence, I can’t really use a statically defined structure as you suggest.  In that case, are the DOF routines the only option?</div></blockquote><div class=""><br class=""></div><div class="">DMDA just plain does not support that. It is close, but everything is not hooked up right. If you have</div><div class="">variable numbers of unknowns per site, you can</div><div class=""><br class=""></div><div class="">  1) Fix DMDA with our help (demands programming)</div><div class=""><br class=""></div><div class="">  2) Use DMPlex (demands reading and maybe looking at code)</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=""><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 28, 2015, at 2:42 PM, 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 Sat, Feb 28, 2015 at 1:35 PM, 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:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">I’m having some trouble understanding what the difference between these two routines are, though I am finding that there certainly is a difference.  I have the following monte carlo problem.  I am generating n_sample paths each of length n_points, and storing them in a 1D DA:<br class="">
<br class="">
DMDACreate1d(PETSC_COMM_WORLD,DM_BOUNDARY_NONE, n_samples, n_points, 0, NULL, &da);<br class="">
DMCreateGlobalVector(da,&paths_vec);<br class="">
<br class="">
When I then go to access them,<br class="">
<br class="">
PetscScalar **u_array;<br class="">
<br class="">
I find that:<br class="">
<br class="">
DMDAVecGetArrayDOF(da, paths_vec, &u_array);<br class="">
<br class="">
works as exepected, in that u_array[i] is a pointer to the first index of the i-th sample path, but if I call:<br class="">
<br class="">
DMDAVecGetArray(da, paths_vec, &u_array);<br class="">
<br class="">
u_array[i] is something else, and my attempts to manipulate it result in segmentation faults, even though the code compiles and builds.</blockquote><div class=""><br class=""></div><div class="">Suppose that you have 4 PetscScalar values at each vertex of the 1D DMDA. If you use </div><div class=""><br class=""></div><div class="">  PetscScalar **u;</div><div class=""><br class=""></div><div class="">  DMDAVecGetArrayDOF(da, uVec, &u);</div><div class=""><br class=""></div><div class="">  u[i][2] /* refers to 3rd scalar on vertex i */</div><div class=""><br class=""></div><div class="">On the other hand you could use</div><div class=""><br class=""></div><div class="">typedef struct {</div><div class="">  PetscScalar a, b, c, d;</div><div class="">} Vals;</div><div class=""><br class=""></div><div class=""> Vals *u;</div><div class=""><br class=""></div><div class=""><div class=""> DMDAVecGetArray(da, uVec, &u);</div></div><div class=""><br class=""></div><div class=""> u[i].c /* refers to the same value as above */</div><div class=""><br class=""></div><div class="">Basically the DOF version gives you an extra level of indirection for the components.</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:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span class=""><font color="#888888" class=""><br class="">
-gideon<br class="">
<br class="">
</font></span></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></div></body></html>