[petsc-dev] getting data out of a PetscFE simulation
Dharmendar Reddy
dharmareddy84 at gmail.com
Wed Jan 29 13:50:27 CST 2014
In my code, I apply boundary conditions to the local vector before it
is used for assembling the residual and jacobian.
I use VecSetValuesSection with mode= INSERT_BC_VALUES
I also do the boundary condition's insert on the local vector before
it is used for vecview.
On Wed, Jan 29, 2014 at 12:00 PM, Geoffrey Irving <irving at naml.us> wrote:
> On Tue, Jan 28, 2014 at 8:57 PM, Geoffrey Irving <irving at naml.us> wrote:
>> On Tue, Jan 28, 2014 at 8:24 PM, Jed Brown <jed at jedbrown.org> wrote:
>>> Matthew Knepley <knepley at gmail.com> writes:
>>>
>>>> On Tue, Jan 28, 2014 at 9:41 PM, Jed Brown <jed at jedbrown.org> wrote:
>>>>
>>>>> Matthew Knepley <knepley at gmail.com> writes:
>>>>> > In ex62:
>>>>> >
>>>>> > if (user.runType == RUN_FULL) {
>>>>> > PetscViewer viewer;
>>>>> > Vec uLocal;
>>>>> > const char *name;
>>>>> >
>>>>> > ierr = PetscViewerCreate(PETSC_COMM_WORLD, &viewer);CHKERRQ(ierr);
>>>>> > ierr = PetscViewerSetType(viewer, PETSCVIEWERVTK);CHKERRQ(ierr);
>>>>> > ierr = PetscViewerSetFormat(viewer,
>>>>> > PETSC_VIEWER_ASCII_VTK);CHKERRQ(ierr);
>>>>> > ierr = PetscViewerFileSetName(viewer, "ex62_sol.vtk");CHKERRQ(ierr);
>>>>>
>>>>> Please don't do this. Just set the type to PETSCVIEWERVTK, set the file
>>>>> name to some *.vtu; the VTK viewer will infer output format from
>>>>> extension and write the VTU XML format with binary-appended data in a
>>>>> fairly fast and memory-scalable way. Then
>>>>>
>>>>> VecView(u,viewer);
>>>>
>>>> I think Jed is wrong here. You need to be using local vectors since
>>>> they have BC and constraints in them. Please explain how your VTU
>>>> format will magically put them in.
>>>
>>> We made this work when I threw a temper tantrum while we were writing TS
>>> ex11.c (late 2012).
>>>
>>> PetscErrorCode VecView_Plex(Vec v, PetscViewer viewer)
>>> {
>>> DM dm;
>>> PetscBool isvtk;
>>> PetscErrorCode ierr;
>>>
>>> PetscFunctionBegin;
>>> ierr = VecGetDM(v, &dm);CHKERRQ(ierr);
>>> if (!dm) SETERRQ(PetscObjectComm((PetscObject)v), PETSC_ERR_ARG_WRONG, "Vector not generated from a DM");
>>> ierr = PetscObjectTypeCompare((PetscObject) viewer, PETSCVIEWERVTK, &isvtk);CHKERRQ(ierr);
>>> if (isvtk) {
>>> Vec locv;
>>> const char *name;
>>>
>>> ierr = DMGetLocalVector(dm, &locv);CHKERRQ(ierr);
>>> ierr = PetscObjectGetName((PetscObject) v, &name);CHKERRQ(ierr);
>>> ierr = PetscObjectSetName((PetscObject) locv, name);CHKERRQ(ierr);
>>> ierr = DMGlobalToLocalBegin(dm, v, INSERT_VALUES, locv);CHKERRQ(ierr);
>>> ierr = DMGlobalToLocalEnd(dm, v, INSERT_VALUES, locv);CHKERRQ(ierr);
>>> ierr = VecView_Plex_Local(locv, viewer);CHKERRQ(ierr);
>>> ierr = DMRestoreLocalVector(dm, &locv);CHKERRQ(ierr);
>>
>> Which of those lines adds the correct boundary condition values?
>
> It looks like one of the following is true:
>
> 1. VecView on a DMPlex global vector does not insert correct boundary
> conditions.
> 2. Scalar, residual, and jacobian integration are all performing an
> extra boundary condition enforcement step.
>
> I'm guessing it's (1). If so, does that mean I have to do it Matt's
> more verbose way?
>
> Geoffrey
More information about the petsc-dev
mailing list