[petsc-users] Question about DMDA local vector and global vector

Matthew Knepley knepley at gmail.com
Tue May 20 14:25:43 CDT 2014


On Tue, May 20, 2014 at 1:31 PM, Danyang Su <danyang.su at gmail.com> wrote:

>  Hi All,
>
> I use DMDA for a flow problem and found the local vector and global vector
> does not match for 2D and 3D problem when dof >1.
>
> For example, the mesh is as follows:
>
> |proc 1|   proc 2 |   proc 3  |
> |7  8  9|16 17 18|25 26 27|
> |4  5  6|13 14 15|22 23 24|
> |1  2  3|10 11 12|19 20 21|
>
> *The following functions are used to create DMDA object, global vector and
> local vector.*
>
> call DMDACreate2d(Petsc_Comm_World,DMDA_BOUNDARY_NONE,     &
>                      DMDA_BOUNDARY_NONE, DMDA_STENCIL_BOX,             &
>                      nvxgbl,nvzgbl,PETSC_DECIDE,PETSC_DECIDE,          &
>                      dmda_flow%dof, dmda_flow%swidth,                  &
>                      PETSC_NULL_INTEGER,PETSC_NULL_INTEGER,            &
>                      dmda_flow%da,ierr)
> call DMCreateGlobalVector(dmda_flow%da,x_flow,ierr)
> call VecDuplicate(x_flow,b_flow,ierr)
> call DMCreateLocalVector(dmda_flow%da,x_flow_loc,ierr)
> call VecDuplicate(x_flow_loc,b_flow_loc,ierr)
>
> *The following functions are used to compute the function (b_flow_loc)*
>
> call VecGetArrayF90(b_flow_loc, vecpointer, ierr)
> vecpointer = (compute the values here...)
> call VecRestoreArrayF90(b_flow_loc,vecpointer,ierr)
> call DMLocalToGlobalBegin(dmda_flow%,b_flow_loc,INSERT_VALUES,        &
>                           b_flow,ierr)
> call DMLocalToGlobalEnd(dmda_flow%,b_flow_loc,INSERT_VALUES,          &
>                           b_flow,ierr)
>
>
> *The data of local vector b_flow_loc for proc1, proc2 and proc3 are as
> follows (just an example, without ghost value)*
> proc 1  proc 2   proc 3
>   1        10        19
>   2        11        20
>   3        12        21
>   4        13        22
>   5        14        23
>   6        15        24
>   ...      ...       ...
>
> *But the global vector b_flow from Vecview shows that the data is stored
> as follows (left column). I thought the global vector b_flow is like the
> right column. Is anything wrong here?*
>

On output, the global vectors are automatically permuted to the natural
ordering.

   Matt


>
> Process [0]            Process [0]
> 1                              1
> 2                              2
> 3                              3
> 10                            4
> 11                            5
> 12                            6
> ...                              ...
> Process [1]            Process [1]
> 4                              10
> 5                              11
> 6                              12
> 13                            13
> 14                            14
> 15                            15
> ...                              ...
> Process [2]            Process [2]
> ...                            ...
>
> Though the data distribution is different from what I thought before, the
> code works well for 1D problem and most of the 2D and 3D problem, but
> failed in newton iteration for some 2D problem with dof > 1. I use KSP
> solver, not SNES solver at present.
>
> Thanks and regards,
>
> Danyang
>
>
>


-- 
What most experimenters take for granted before they begin their
experiments is infinitely more interesting than any results to which their
experiments lead.
-- Norbert Wiener
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20140520/e2805c2f/attachment.html>


More information about the petsc-users mailing list