Thanks Matt , Thanks Barry. I'll get back to you.

Thanks,
Praveen

On Fri, May 6, 2016 at 7:48 PM, Barry Smith <[email protected]> wrote:

>
> > On May 6, 2016, at 5:08 AM, praveen kumar <[email protected]>
> wrote:
> >
> > Hi,
> >
> > 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.
>
>    DMCreateGlobalVector(dm,gvector,ierr);
>    DMCreateLocalVector(dm,lvector,ierr);
>
>     /* full up gvector with initial guess or whatever */
>
>    DMGlobalToLocalBegin(dm,gvector,INSERT_VALUES,lvector,ierr)
>   DMGlobalToLocalEnd(dm,gvector,INSERT_VALUES,lvector,ierr)
>
>     Now the vector lvector has the ghost values you can use
>
>     DMDAVecGetArrayF90(dm,lvector,fortran_array_pointer_of_correct
> dimension for your problem (1,2,3d))
>
>     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.
>
>    Barry
>
>
>
> >
> > Thanks,
> > Praveen
> >
>
>

Reply via email to