[petsc-users] save a vector value of multiple DOF to a file

Matthew Knepley knepley at gmail.com
Wed May 5 13:21:43 CDT 2010


On Wed, May 5, 2010 at 1:17 PM, Li, Zhisong (lizs) <lizs at mail.uc.edu> wrote:

> Hi,
>
> I temporarily remove all the file opening/writing operations and found that
> it's probably "DAVecGetArray()" that's causing the trouble when run on 2
> processors. It looks okay when in serial processing.
>
> I don't use VecView() at all, as X-display doesn't function well for
> parallel processing.
>

VecView() has nothing to do with X. It is the generic output function for
Vecs. Please consult the manual.


> I also tried to add these lines to first map the global vector xx to a
> newly created global vector x , before I scatter x to y:
>
>       DACreateNaturalVector(da, &x);
>       DAGlobalToNaturalBegin(da, xx,INSERT_VALUES, x);
>       DAGlobalToNaturalEnd(da, xx,INSERT_VALUES, x);
>
> But this doesn't help.
>
> The error message:
>
> [1]PETSC ERROR: --------------------- Error Message
> ------------------------------------
> [1]PETSC ERROR: Arguments are incompatible!
> [1]PETSC ERROR: Vector local size 0 is not compatible with DA local sizes
> 4284 4437
> !
>

This is your problem. The Vec you pass into DAVecGetArray() does not
actually come from
the DA at all, and in fact has size 0. You can get properly sized Vecs using
DAGetGlobalVector().
What Vec are you trying to access (since it obviously cannot have valid
values in it)?

   Matt


> [1]PETSC ERROR:
> ------------------------------------------------------------------------
> [1]PETSC ERROR: Petsc Release Version 3.1.0, Patch 1, Thu Apr  8 14:16:50
> CDT 2010
> [1]PETSC ERROR: See docs/changes/index.html for recent updates.
> [1]PETSC ERROR: See docs/faq.html for hints about trouble shooting.
> [1]PETSC ERROR: See docs/index.html for manual pages.
> [1]PETSC ERROR:
> ------------------------------------------------------------------------
> [1]PETSC ERROR: ./ex7 on a linux-gnu named custard by verhoff Wed May  5
> 14:13:17 2010
> [1]PETSC ERROR: Libraries linked from
> /home/verhoff/petsc/linux-gnu-c-debug/lib
> [1]PETSC ERROR: Configure run at Tue Apr 27 11:40:02 2010
> [1]PETSC ERROR: Configure options --download-c-blas-lapack=1 --with-cc=gcc
> --download-mpich=1
> [1]PETSC ERROR:
> ------------------------------------------------------------------------
> [1]PETSC ERROR: DAVecGetArray() line 53 in src/dm/da/src/dagetarray.c
> [1]PETSC ERROR: --------------------- Error Message
> ------------------------------------
> [1]PETSC ERROR: Arguments are incompatible!
> [1]PETSC ERROR: Vector local size 0 is not compatible with DA local sizes
> 4284 4437
> !
> [1]PETSC ERROR:
> ------------------------------------------------------------------------
> [1]PETSC ERROR: Petsc Release Version 3.1.0, Patch 1, Thu Apr  8 14:16:50
> CDT 2010
> [1]PETSC ERROR: See docs/changes/index.html for recent updates.
> [1]PETSC ERROR: See docs/faq.html for hints about trouble shooting.
> [1]PETSC ERROR: See docs/index.html for manual pages.
> [1]PETSC ERROR:
> ------------------------------------------------------------------------
> [1]PETSC ERROR: ./ex7 on a linux-gnu named custard by verhoff Wed May  5
> 14:13:17 2010
> [1]PETSC ERROR: Libraries linked from
> /home/verhoff/petsc/linux-gnu-c-debug/lib
> [1]PETSC ERROR: Configure run at Tue Apr 27 11:40:02 2010
> [1]PETSC ERROR: Configure options --download-c-blas-lapack=1 --with-cc=gcc
> --download-mpich=1
> [1]PETSC ERROR:
> ------------------------------------------------------------------------
> [1]PETSC ERROR: DAVecRestoreArray() line 108 in src/dm/da/src/dagetarray.c
> [0]PETSC ERROR: --------------------- Error Message
> ------------------------------------
> [0]PETSC ERROR: Arguments are incompatible!
> [0]PETSC ERROR: Vector local size 8721 is not compatible with DA local
> sizes 4437 4590
> !
> [0]PETSC ERROR:
> ------------------------------------------------------------------------
> [0]PETSC ERROR: Petsc Release Version 3.1.0, Patch 1, Thu Apr  8 14:16:50
> CDT 2010
> [0]PETSC ERROR: See docs/changes/index.html for recent updates.
> [0]PETSC ERROR: See docs/faq.html for hints about trouble shooting.
> [0]PETSC ERROR: See docs/index.html for manual pages.
> [0]PETSC ERROR:
> ------------------------------------------------------------------------
> [0]PETSC ERROR: ./ex7 on a linux-gnu named custard by verhoff Wed May  5
> 14:13:17 2010
> [0]PETSC ERROR: Libraries linked from
> /home/verhoff/petsc/linux-gnu-c-debug/lib
> [0]PETSC ERROR: Configure run at Tue Apr 27 11:40:02 2010
> [0]PETSC ERROR: Configure options --download-c-blas-lapack=1 --with-cc=gcc
> --download-mpich=1
> [0]PETSC ERROR:
> ------------------------------------------------------------------------
> [0]PETSC ERROR: DAVecGetArray() line 53 in src/dm/da/src/dagetarray.c
> [0]PETSC ERROR: --------------------- Error Message
> ------------------------------------
> [0]PETSC ERROR: Arguments are incompatible!
> [0]PETSC ERROR: Vector local size 8721 is not compatible with DA local
> sizes 4437 4590
> !
> [0]PETSC ERROR:
> ------------------------------------------------------------------------
> [0]PETSC ERROR: Petsc Release Version 3.1.0, Patch 1, Thu Apr  8 14:16:50
> CDT 2010
> [0]PETSC ERROR: See docs/changes/index.html for recent updates.
> [0]PETSC ERROR: See docs/faq.html for hints about trouble shooting.
> [0]PETSC ERROR: See docs/index.html for manual pages.
> [0]PETSC ERROR:
> ------------------------------------------------------------------------
> [0]PETSC ERROR: ./ex7 on a linux-gnu named custard by verhoff Wed May  5
> 14:13:17 2010
> [0]PETSC ERROR: Libraries linked from
> /home/verhoff/petsc/linux-gnu-c-debug/lib
> [0]PETSC ERROR: Configure run at Tue Apr 27 11:40:02 2010
> [0]PETSC ERROR: Configure options --download-c-blas-lapack=1 --with-cc=gcc
> --download-mpich=1
> [0]PETSC ERROR:
> ------------------------------------------------------------------------
> [0]PETSC ERROR: DAVecRestoreArray() line 108 in src/dm/da/src/dagetarray.c
>
>
> Thanks,
>
> Regards,
>
> Zhisong Li
>
>
>
>
>
>
>
>
> > Hi,
> >
> > I want to setup a function in the main function to save the data to a
> file.
> > For example suppose the vector x in ts/tutorials/ex7 consists of 3 DOF as
> >
> > typedef struct {
> >    PetscScalar u, v, p;
> >    } Field;
> >
> > I first followed the advised method to collect all values from a parallel
> > vector into a vector on the 0th processor:
> >
> >        VecScatterCreateToZero(x, &scatter, &y);
> >        VecScatterBegin(scatter,x,y,INSERT_VALUES,SCATTER_FORWARD);
> >        VecScatterEnd(scatter,x,y,INSERT_VALUES,SCATTER_FORWARD);
> >        VecScatterDestroy(scatter);
> >
> > and then use
> >        Field  **z;
> >        DAVecGetArray(da, y, &z);
> >
> > and
> >      PetscViewerASCIIOpen(comm,"./result.txt",&viewer);
> >      PetscViewerASCIIPrintf(viewer, "%G ", &z[j][i].u );
> >
> > to finish. But I always either meet error for the line "DAVecGetArray(da,
> > y, &z);" or save a file of all extremely small values(e.g. 8.652e-317),
> > which is obviously wrong. So what is the correct way to do this? Where
> can I
> > find a similar example to follow?
> >
>
> What error? This is correct way to do it, if you do not just use VecView().
>
>   Matt
>
>
> > I also wonder if "DAGetGlobalVector( )" will do an equal job to collect
> > parallel values?
> >
> >
> > Thank you.
> >
> >
> > Best Regards,
> >
> >
> > Zhisong Li
>
>
>
>


-- 
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/20100505/8f5a4d7f/attachment.htm>


More information about the petsc-users mailing list