[petsc-users] reading and writing periodic DMPlex to file
Berend van Wachem
berend.vanwachem at ovgu.de
Tue Jan 24 09:39:55 CST 2023
Dear Matt,
I have been working on this now with Petsc-3.18.3
1) I can confirm that enforcing periodicity works for a single core
simulation.
2) However, when using multiple cores, the code still hangs. Is there
something I should do to fix this? Or should this be fixed in the next
Petsc version?
3) This is strange, as it works fine for me.
Thanks, best, Berend.
On 12/15/22 18:56, Matthew Knepley wrote:
> On Wed, Dec 14, 2022 at 3:58 AM Berend van Wachem
> <berend.vanwachem at ovgu.de <mailto:berend.vanwachem at ovgu.de>> wrote:
>
>
> Dear PETSc team and users,
>
> I have asked a few times about this before, but we haven't really
> gotten
> this to work yet.
>
> In our code, we use the DMPlex framework and are also interested in
> periodic geometries.
>
> As our simulations typically require many time-steps, we would like to
> be able to save the DM to file and to read it again to resume the
> simulation (a restart).
>
> Although this works for a non-periodic DM, we haven't been able to get
> this to work for a periodic one. To illustrate this, I have made a
> working example, consisting of 2 files, createandwrite.c and
> readandcreate.c. I have attached these 2 working examples. We are using
> Petsc-3.18.2.
>
> In the first file (createandwrite.c) a DMPlex is created and written to
> a file. Periodicity is activated on lines 52-55 of the code.
>
> In the second file (readandcreate.c) a DMPlex is read from the file.
> When a periodic DM is read, this does not work. Also, trying to
> 'enforce' periodicity, lines 55 - 66, does not work if the number of
> processes is larger than 1 - the code "hangs" without producing an
> error.
>
> Could you indicate what I am missing? I have really tried many
> different
> options, without finding a solution.
>
>
> Hi Berend,
>
> There are several problems. I will eventually fix all of them, but I
> think we can get this working quickly.
>
> 1) Periodicity information is not saved. I will fix this, but forcing it
> should work.
>
> 2) You were getting a hang because the blocksize on the local
> coordinates was not set correctly after loading
> since the vector had zero length. This does not happen in any test
> because HDF5 loads a global vector, but
> most other things create local coordinates. I have a fix for this,
> which I will get in an MR, Also, I moved DMLocalizeCoordinates()
> after distribution, since this is where it belongs.
>
> knepley/fix-plex-periodic-faces *$:/PETSc3/petsc/petsc-dev$ git diff
> diff --git a/src/dm/interface/dmcoordinates.c
> b/src/dm/interface/dmcoordinates.c
> index a922348f95b..6437e9f7259 100644
> --- a/src/dm/interface/dmcoordinates.c
> +++ b/src/dm/interface/dmcoordinates.c
> @@ -551,10 +551,14 @@ PetscErrorCode DMGetCoordinatesLocalSetUp(DM dm)
> PetscFunctionBegin;
> PetscValidHeaderSpecific(dm, DM_CLASSID, 1);
> if (!dm->coordinates[0].xl && dm->coordinates[0].x) {
> - DM cdm = NULL;
> + DM cdm = NULL;
> + PetscInt bs;
>
> PetscCall(DMGetCoordinateDM(dm, &cdm));
> PetscCall(DMCreateLocalVector(cdm, &dm->coordinates[0].xl));
> + // If the size of the vector is 0, it will not get the right block size
> + PetscCall(VecGetBlockSize(dm->coordinates[0].x, &bs));
> + PetscCall(VecSetBlockSize(dm->coordinates[0].xl, bs));
> PetscCall(PetscObjectSetName((PetscObject)dm->coordinates[0].xl,
> "coordinates"));
> PetscCall(DMGlobalToLocalBegin(cdm, dm->coordinates[0].x,
> INSERT_VALUES, dm->coordinates[0].xl));
> PetscCall(DMGlobalToLocalEnd(cdm, dm->coordinates[0].x,
> INSERT_VALUES, dm->coordinates[0].xl));
>
> 3) If I comment out forcing the periodicity, your example does not run
> for me. I will try to figure it out
>
> [0]PETSC ERROR: --------------------- Error Message
> --------------------------------------------------------------
> [0]PETSC ERROR: Nonconforming object sizes
> [0]PETSC ERROR: SF roots 4400 < pEnd 6000
> [1]PETSC ERROR: --------------------- Error Message
> --------------------------------------------------------------
> [0]PETSC ERROR: WARNING! There are option(s) set that were not used!
> Could be the program crashed before they were used or a spelling
> mistake, etc!
> [1]PETSC ERROR: Nonconforming object sizes
> [0]PETSC ERROR: Option left: name:-start_in_debugger_no (no value)
> source: command line
> [1]PETSC ERROR: SF roots 4400 < pEnd 6000
> [0]PETSC ERROR: See https://petsc.org/release/faq/
> <https://petsc.org/release/faq/> for trouble shooting.
> [0]PETSC ERROR: Petsc Development GIT revision: v3.18.1-494-g16200351da0
> GIT Date: 2022-12-12 23:42:20 +0000
> [1]PETSC ERROR: WARNING! There are option(s) set that were not used!
> Could be the program crashed before they were used or a spelling
> mistake, etc!
> [1]PETSC ERROR: Option left: name:-start_in_debugger_no (no value)
> source: command line
> [0]PETSC ERROR: ./readandcreate on a arch-master-debug named
> MacBook-Pro.cable.rcn.com <http://MacBook-Pro.cable.rcn.com> by knepley
> Thu Dec 15 12:50:26 2022
> [1]PETSC ERROR: See https://petsc.org/release/faq/
> <https://petsc.org/release/faq/> for trouble shooting.
> [0]PETSC ERROR: Configure options --PETSC_ARCH=arch-master-debug
> --download-bamg --download-bison --download-chaco --download-ctetgen
> --download-egads --download-eigen --download-exodusii --download-fftw
> --download-hpddm --download-ks --download-libceed --download-libpng
> --download-metis --download-ml --download-mumps --download-muparser
> --download-netcdf --download-opencascade --download-p4est
> --download-parmetis --download-pnetcdf --download-pragmatic
> --download-ptscotch --download-scalapack --download-slepc
> --download-suitesparse --download-superlu_dist --download-tetgen
> --download-triangle --with-cmake-exec=/PETSc3/petsc/apple/bin/cmake
> --with-ctest-exec=/PETSc3/petsc/apple/bin/ctest
> --with-hdf5-dir=/PETSc3/petsc/apple --with-mpi-dir=/PETSc3/petsc/apple
> --with-petsc4py=1 --with-shared-libraries --with-slepc --with-zlib
> [1]PETSC ERROR: Petsc Development GIT revision: v3.18.1-494-g16200351da0
> GIT Date: 2022-12-12 23:42:20 +0000
> [0]PETSC ERROR: #1 PetscSectionCreateGlobalSection() at
> /PETSc3/petsc/petsc-dev/src/vec/is/section/interface/section.c:1322
> [1]PETSC ERROR: ./readandcreate on a arch-master-debug named
> MacBook-Pro.cable.rcn.com <http://MacBook-Pro.cable.rcn.com> by knepley
> Thu Dec 15 12:50:26 2022
> [0]PETSC ERROR: #2 DMGetGlobalSection() at
> /PETSc3/petsc/petsc-dev/src/dm/interface/dm.c:4527
> [1]PETSC ERROR: Configure options --PETSC_ARCH=arch-master-debug
> --download-bamg --download-bison --download-chaco --download-ctetgen
> --download-egads --download-eigen --download-exodusii --download-fftw
> --download-hpddm --download-ks --download-libceed --download-libpng
> --download-metis --download-ml --download-mumps --download-muparser
> --download-netcdf --download-opencascade --download-p4est
> --download-parmetis --download-pnetcdf --download-pragmatic
> --download-ptscotch --download-scalapack --download-slepc
> --download-suitesparse --download-superlu_dist --download-tetgen
> --download-triangle --with-cmake-exec=/PETSc3/petsc/apple/bin/cmake
> --with-ctest-exec=/PETSc3/petsc/apple/bin/ctest
> --with-hdf5-dir=/PETSc3/petsc/apple --with-mpi-dir=/PETSc3/petsc/apple
> --with-petsc4py=1 --with-shared-libraries --with-slepc --with-zlib
> [0]PETSC ERROR: #3 DMPlexSectionLoad_HDF5_Internal() at
> /PETSc3/petsc/petsc-dev/src/dm/impls/plex/plexhdf5.c:2750
> [1]PETSC ERROR: #1 PetscSectionCreateGlobalSection() at
> /PETSc3/petsc/petsc-dev/src/vec/is/section/interface/section.c:1322
> [0]PETSC ERROR: #4 DMPlexSectionLoad() at
> /PETSc3/petsc/petsc-dev/src/dm/impls/plex/plex.c:2364
> [1]PETSC ERROR: #2 DMGetGlobalSection() at
> /PETSc3/petsc/petsc-dev/src/dm/interface/dm.c:4527
> [0]PETSC ERROR: #5 main() at
> /Users/knepley/Downloads/tmp/Berend/readandcreate.c:85
> [1]PETSC ERROR: #3 DMPlexSectionLoad_HDF5_Internal() at
> /PETSc3/petsc/petsc-dev/src/dm/impls/plex/plexhdf5.c:2750
> [0]PETSC ERROR: PETSc Option Table entries:
> [0]PETSC ERROR: -malloc_debug (source: environment)
> [1]PETSC ERROR: #4 DMPlexSectionLoad() at
> /PETSc3/petsc/petsc-dev/src/dm/impls/plex/plex.c:2364
> [1]PETSC ERROR: #5 main() at
> /Users/knepley/Downloads/tmp/Berend/readandcreate.c:85
> [0]PETSC ERROR: -start_in_debugger_no (source: command line)
> [1]PETSC ERROR: PETSc Option Table entries:
> [0]PETSC ERROR: ----------------End of Error Message -------send entire
> error message to petsc-maint at mcs.anl.gov----------
> [1]PETSC ERROR: -malloc_debug (source: environment)
> application called MPI_Abort(MPI_COMM_SELF, 60) - process 0
> [1]PETSC ERROR: -start_in_debugger_no (source: command line)
> [1]PETSC ERROR: ----------------End of Error Message -------send entire
> error message to petsc-maint at mcs.anl.gov----------
> application called MPI_Abort(MPI_COMM_SELF, 60) - process 0
> 4) We now have parallel HDF5 loading, so you should not have to manually
> distribute. I will change your example to use it
> and send it back when I am done.
>
> Thanks!
>
> Matt
>
> Many thanks and kind 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/>
More information about the petsc-users
mailing list