[petsc-users] DM and HDF5 Viewer
Barry Smith
bsmith at mcs.anl.gov
Thu Jul 16 13:51:22 CDT 2015
Then the documentation needs to make it very clear what it does (which is not much) and how it is VERY different than getting the vector from the DM.
> On Jul 16, 2015, at 1:35 PM, Matthew Knepley <knepley at gmail.com> wrote:
>
> On Thu, Jul 16, 2015 at 1:31 PM, Barry Smith <bsmith at mcs.anl.gov> wrote:
>
> > On Jul 16, 2015, at 11:14 AM, Jed Brown <jed at jedbrown.org> wrote:
> >
> > Gianluca Meneghello <gianmail at gmail.com> writes:
> >
> >> Hi again,
> >>
> >> I am now trying to write a vector to an HDF5, this time using a DM
> >> structure to impose the vector layout.
> >>
> >> Creating the vector with (as in src/dm/examples/tutorials/ex10.c)
> >>
> >> DMCreateGlobalVector(da2D,&gauss);
> >>
> >> every works fine, i.e. the hdf5 file has the correct layout given by the
> >> dimension of the DM. On the other side, if I use:
> >>
> >> VecCreate(PETSC_COMM_WORLD,&gauss);
> >> VecSetSizes(gauss,PETSC_DECIDE,Nx*Ny);
> >> VecSetDM(gauss,da2D);
> >
> > VecSetDM only associates a DM with the Vec. It does not interpose
> > itself into VecView.
> >
> > Should we change this so that creating a Vec of the correct size/block
> > size/layout and associating a DM is equivalent? Perhaps, but it's more
> > nuanced than it might seem.
>
> Yikes. VecSetDM() seems a very dangerous and odd thing. Should it exist? If it exists it seems it should be exactly equivalent to creating the vector from the DM.
>
> I tend to disagree. It is used to set a member variable which is not exposed:
>
> find src -name "*.c" | xargs grep VecSetDM
> src/dm/impls/composite/pack.c: ierr = VecSetDM(*gvec, dm);CHKERRQ(ierr);
> src/dm/impls/composite/pack.c: ierr = VecSetDM(*lvec, dm);CHKERRQ(ierr);
> src/dm/impls/da/dadist.c: ierr = VecSetDM(*g, da);CHKERRQ(ierr);
> src/dm/impls/da/dalocal.c: ierr = VecSetDM(*g, da);CHKERRQ(ierr);
> src/dm/impls/network/networkcreate.c: ierr = VecSetDM(*vec,dm);CHKERRQ(ierr);
> src/dm/impls/network/networkcreate.c: ierr = VecSetDM(*vec,dm);CHKERRQ(ierr);
> src/dm/impls/redundant/dmredundant.c: ierr = VecSetDM(*gvec,dm);CHKERRQ(ierr);
> src/dm/impls/redundant/dmredundant.c: ierr = VecSetDM(*lvec,dm);CHKERRQ(ierr);
> src/dm/impls/shell/dmshell.c: ierr = VecSetDM(*gvec,dm);CHKERRQ(ierr);
> src/dm/impls/shell/dmshell.c: ierr = VecSetDM(*gvec,dm);CHKERRQ(ierr);
> src/dm/impls/sliced/sliced.c: ierr = VecSetDM(*gvec,dm);CHKERRQ(ierr);
> src/dm/interface/dmi.c: ierr = VecSetDM(*vec, dm);CHKERRQ(ierr);
> src/dm/interface/dmi.c: ierr = VecSetDM(*vec, dm);CHKERRQ(ierr);
> src/dm/interface/ftn-auto/dmf.c:*__ierr = VecSetDM(
>
> I don't like putting in a bunch of side-effects. Those come from actually being created from a DM, which is correct.
>
> Matt
>
> >
> > Why don't you want to just call DMCreateGlobalVector()?
>
>
>
>
> --
> 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
More information about the petsc-users
mailing list