<div class="gmail_quote">On Sat, Aug 27, 2011 at 15:39, Likun Tan <span dir="ltr">&lt;<a href="mailto:likunt@andrew.cmu.edu">likunt@andrew.cmu.edu</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<br>
I made s simple test,<br>
<br>
if i assign S[j][i]=temp[2][1][1] for all j, i; it is no problem.<br>
<br>
while, when assign S[j][i]=temp[2][3][3] for all j, i, it gives me error.<br></blockquote><div><br></div><div>What are m,n,p the first time you call it and what are those values the second time?</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

<br>
Your last statement means that i should use temp[j][i][k] if i want to sum<br>
over k?<br></blockquote><div><br></div><div>You can&#39;t just change the meaning of the indices when you index. Once you fix this problem, feel confident that you understand why, and want to make the memory access better for performance, you can look at the calls to DMDACreate3d() and the compatible DMDACreate2d() in src/snes/examples/tutorials/ex48.c. Also look at the calls to DMDAGetCorners() which changes the meaning of x,y,z relative to what PETSc uses internally.</div>
<div><br></div><div>Unfortunately this can be somewhat error-prone, so you should understand why things work the way they do, otherwise it&#39;s too easy to get confused.</div></div>