[petsc-users] Write/read a DMForest to/from a file

David Salac davidsal at buffalo.edu
Fri Dec 30 18:10:20 CST 2022


Matt and I had a student who was working with Forest that had this 
issue. The problem is that once you convert the refined Forest to Plex 
and save it to a file you lose all of the hierarchical information when 
you load it again. When you load it the mesh basically becomes the base 
mesh, with no information about the coarser levels. It wasn't a huge 
deal for us so we basically saved the original base PLEX and refined 
down to what we needed during a restart. Since we were working with a 
mesh that wasn't time-evolving this wasn't an issue, but obviously this 
isn't generalizable.



Dave Salac

On 12/30/22 17:46, Mark Adams wrote:
> Oh, right, you need to convert to a Plex and then write.
>
> I've never read a Forest but you will read in a Plex and I would think 
> just convert to a Forest.
>
> Mark
>
> On Fri, Dec 30, 2022 at 9:29 AM Matthew Knepley <knepley at gmail.com> wrote:
>
>     On Fri, Dec 30, 2022 at 5:59 AM Berend van Wachem
>     <berend.vanwachem at ovgu.de> wrote:
>
>         Dear Mark,
>
>         Yes, I have tried that. That will only work if I convert the
>         DMForest to
>         a DMPlex first, and then write the DMPlex to file. But then, I
>         cannot
>         read in a DMForest when I want to continue the calculations
>         later on.
>
>         Below is the code I use to write a DMPlex to file. When I call
>         this
>         routine with a DMForest, I get the error:
>
>
>     This is true. I am going to have to look at this with Toby. I will
>     get back to you.
>
>       THanks,
>
>          Matt
>
>         [0]PETSC ERROR: Invalid argument
>         [0]PETSC ERROR: Wrong type of object: Parameter # 1
>         [0]PETSC ERROR: See https://petsc.org/release/faq/ for trouble
>         shooting.
>         [0]PETSC ERROR: Petsc Release Version 3.18.2, Nov 28, 2022
>         [0]PETSC ERROR: ./bin/write_periodic on a linux-gcc-dev named
>         multiflow.multiflow.org <http://multiflow.multiflow.org> by
>         berend Fri Dec 30 11:54:51 2022
>         [0]PETSC ERROR: Configure options --with-clean
>         --download-metis=yes
>         --download-parmetis=yes --download-hdf5 --download-p4est
>         --download-triangle --download-tetgen
>         --with-zlib-lib=/usr/lib64/libz.a
>         --with-zlib-include=/usr/include --with-mpi=yes
>         --with-mpi-dir=/usr
>         --with-mpiexec=/usr/bin/mpiexec --download-slepc=yes
>         --download-fftw=yes
>         [0]PETSC ERROR: #1 PetscSectionGetChart() at
>         /usr/local/petsc-3.18.2/src/vec/is/section/interface/section.c:592
>         [0]PETSC ERROR: #2 DMPlexGetChart() at
>         /usr/local/petsc-3.18.2/src/dm/impls/plex/plex.c:2702
>         [0]PETSC ERROR: #3 DMPlexGetDepthStratum() at
>         /usr/local/petsc-3.18.2/src/dm/impls/plex/plex.c:4882
>         [0]PETSC ERROR: #4 DMPlexCreatePointNumbering() at
>         /usr/local/petsc-3.18.2/src/dm/impls/plex/plex.c:8303
>         [0]PETSC ERROR: #5 DMPlexTopologyView() at
>         /usr/local/petsc-3.18.2/src/dm/impls/plex/plex.c:1854
>         [0]PETSC ERROR: #6 WriteDMAndVectortoHDF5File() at
>         /home/berend/git/Code/petsc-dmplex-restart-test/src/createandwrite.c:176
>         [0]PETSC ERROR: #7 main() at
>         /home/berend/git/Code/petsc-dmplex-restart-test/src/createandwrite.c:555
>
>         The code I use to write is:
>
>         PetscErrorCode WriteDMAndVectortoHDF5File(DM dm, Vec
>         *DataVector, const
>         char *HDF5file)
>         {
>            PetscViewer H5Viewer;
>            PetscErrorCode ierr;
>            DM dmCopy;
>            PetscSection sectionCopy;
>            PetscInt i;
>            PetscScalar *xVecArray;
>            PetscInt numPoints, numPointsCopy;
>            Vec vectorCopy;
>            PetscScalar *array;
>
>            PetscFunctionBegin;
>            ierr = PetscViewerHDF5Open(PETSC_COMM_WORLD, HDF5file,
>         FILE_MODE_WRITE, &H5Viewer);
>            CHKERRQ(ierr);
>            ierr = PetscObjectSetName((PetscObject) dm, "DM");
>            CHKERRQ(ierr);
>            ierr = PetscViewerPushFormat(H5Viewer,
>         PETSC_VIEWER_HDF5_PETSC);
>            CHKERRQ(ierr);
>            ierr = DMPlexTopologyView(dm, H5Viewer);
>            CHKERRQ(ierr);
>            ierr = DMPlexLabelsView(dm, H5Viewer);
>            CHKERRQ(ierr);
>            ierr = DMPlexCoordinatesView(dm, H5Viewer);
>            CHKERRQ(ierr);
>            ierr = PetscViewerPopFormat(H5Viewer);
>            CHKERRQ(ierr);
>
>            ierr = DMClone(dm, &dmCopy);
>            CHKERRQ(ierr);
>            ierr = PetscObjectSetName((PetscObject) dmCopy, "DM");
>            CHKERRQ(ierr);
>            ierr = DMGetLocalSection(dm, &sectionCopy);
>            CHKERRQ(ierr);
>            ierr = DMSetLocalSection(dmCopy, sectionCopy);
>            CHKERRQ(ierr);
>
>            /* Write the section to the file */
>            ierr = DMPlexSectionView(dm, H5Viewer, dmCopy);
>            CHKERRQ(ierr);
>
>            ierr = DMGetGlobalVector(dmCopy, &vectorCopy);
>            CHKERRQ(ierr);
>
>            /*** We have to copy the vector into the new vector ... ***/
>            ierr = VecGetArray(vectorCopy, &array);
>            CHKERRQ(ierr);
>            ierr = VecGetLocalSize(*DataVector, &numPoints);
>            CHKERRQ(ierr);
>            ierr = VecGetLocalSize(vectorCopy, &numPointsCopy);
>            CHKERRQ(ierr);
>            assert(numPoints == numPointsCopy);
>            ierr = VecGetArray(*DataVector, &xVecArray);
>            CHKERRQ(ierr);
>
>            for (i = 0; i < numPoints; i++) /* Loop over all internal
>         cells */
>            {
>              array[i] = xVecArray[i];
>            }
>
>            ierr = VecRestoreArray(vectorCopy, &array);
>            CHKERRQ(ierr);
>            ierr = VecRestoreArray(*DataVector, &xVecArray);
>            CHKERRQ(ierr);
>
>            ierr = PetscObjectSetName((PetscObject) vectorCopy,
>         "DataVector");
>            CHKERRQ(ierr);
>
>            /* Write the vector to the file */
>            ierr = DMPlexGlobalVectorView(dm, H5Viewer, dmCopy,
>         vectorCopy);
>            CHKERRQ(ierr);
>
>            /* Close the file */
>            ierr = PetscViewerDestroy(&H5Viewer);
>            CHKERRQ(ierr);
>
>            ierr = DMDestroy(&dmCopy);
>            CHKERRQ(ierr);
>            /*** End of writing ****/
>            PetscFunctionReturn(0);
>         }
>
>
>
>
>
>         On 29/12/2022 21:54, Mark Adams wrote:
>         > Have you tried using the DMForest as you would use a DMPLex?
>         > That should work. Forst has extra stuff but it just makes a
>         Plex and the
>         > end of the day.
>         >
>         > On Tue, Dec 27, 2022 at 5:21 AM Berend van Wachem
>         > <berend.vanwachem at ovgu.de <mailto:berend.vanwachem at ovgu.de>>
>         wrote:
>         >
>         >     Dear Petsc-team/users,
>         >
>         >     I am trying to save a DMForest which has been used for a
>         calculation
>         >     (so
>         >     refined/coarsened in places) to a file and later read it
>         from the file
>         >     to continue a calculation with.
>         >     My question is: how do I do this? I've tried a few
>         things, such as
>         >     using
>         >     DMView and DMLoad, and saving the BaseDM, but that
>         doesn't seem to save
>         >     the refining/coarsening which has taken place in the initial
>         >     calculation.
>         >     I haven't been able to find any example or documentation
>         for this. Any
>         >     pointers or examples would be very much appreciated!
>         >
>         >     Best regards, Berend.
>         >
>
>
>
>     -- 
>     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
>
>     https://www.cse.buffalo.edu/~knepley/
>     <http://www.cse.buffalo.edu/~knepley/>
>

-- 
David Salac
Associate Professor
Director of Graduate Studies
Mechanical and Aerospace Engineering
University at Buffalo
www.buffalo.edu/~davidsal
(716)645-1460
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20221230/9f0e09a9/attachment.html>


More information about the petsc-users mailing list