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 <[email protected]> wrote:
On Fri, Dec 30, 2022 at 5:59 AM Berend van Wachem
<[email protected]> 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, §ionCopy);
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
> <[email protected] <mailto:[email protected]>>
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