<div dir="ltr"><div><div>I didn't frame the question properly. Suppose we have grid on vertices numbered 1 to N and we break it into 
two pieces (1,N/2) and (N/2+1,N). As it is FVM code, <span style="font-size:12.8px">DMboundary type is  </span>DM_BOUNDARY_GHOSTED. nodes 0 and N+1 are to the left and right of nodes 1 and N at a distance of dx/2 respectively.  Let me call 0 and N+1 as virtual nodes where boundary conditions are 
applied. As you know virtual nodes don't take part in computation and are different from what we call ghost nodes in parallel computing terminology. In serial 
code problem is solved by CALL TDMA(0,N+1).<br>I've decomposed the domain using PETSc, and I've replaced indices in serial code DO Loops with the information from DMDAGetCorners .<br>if I want to solve the problem using TDMA on process0, it is not possible as process0 doesn't contain virtual node at it's right boundary i.e CALL TDMA(0,X) where X should be at a distance of dx/2 from N/2 but it is not there. Similarly for process1 there is no virtual node at it's left boundary. So, how can I create these virtual nodes at the processes boundary. I want to set the variable value at X as previous time-step/iteration value. I'm not sure whether my methodology is correct or not. If you think it is very cumbersome, please suggest something else.<br><br></div>Thanks,<br></div>Praveen<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, May 6, 2016 at 8:00 PM, praveen kumar <span dir="ltr"><<a href="mailto:praveenpetsc@gmail.com" target="_blank">praveenpetsc@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Thanks Matt , Thanks Barry. I'll get back to you.<div><br></div><div>Thanks,</div><div>Praveen</div></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">On Fri, May 6, 2016 at 7:48 PM, Barry Smith <span dir="ltr"><<a href="mailto:bsmith@mcs.anl.gov" target="_blank">bsmith@mcs.anl.gov</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span><br>
> On May 6, 2016, at 5:08 AM, praveen kumar <<a href="mailto:praveenpetsc@gmail.com" target="_blank">praveenpetsc@gmail.com</a>> wrote:<br>
><br>
> Hi,<br>
><br>
> I am trying to implement Petsc for DD in a serial fortran FVM code.  I want to use solver from serial code itself. Solver consists of gauss seidel + TDMA. BCs are given along with the solver at boundary virtual nodes. For Ex: CALL TDMA(0,nx+1), where BCs are given at 0 and nx+1 which are virtual nodes (which don't take part in computation). I partitioned the domain using DMDACreate and got the ghost nodes information using DMDAGetcorners. But how to create the virtual nodes at the processes boundary where BCs are to be given. Please suggest all the possibilities to fix this other than using PETSc for solver parallelization.<br>
<br>
</span>   DMCreateGlobalVector(dm,gvector,ierr);<br>
   DMCreateLocalVector(dm,lvector,ierr);<br>
<br>
    /* full up gvector with initial guess or whatever */<br>
<br>
   DMGlobalToLocalBegin(dm,gvector,INSERT_VALUES,lvector,ierr)<br>
  DMGlobalToLocalEnd(dm,gvector,INSERT_VALUES,lvector,ierr)<br>
<br>
    Now the vector lvector has the ghost values you can use<br>
<br>
    DMDAVecGetArrayF90(dm,lvector,fortran_array_pointer_of_correct dimension for your problem (1,2,3d))<br>
<br>
    Note that the indexing into the fortran_array_pointer uses the global indexing, not the local indexing. You can use DMDAGetCorners() to get the start and end indices for each process.<br>
<br>
   Barry<br>
<br>
<br>
<br>
><br>
> Thanks,<br>
> Praveen<br>
><br>
<br>
</blockquote></div><br></div>
</div></div></blockquote></div><br></div>