xref: /petsc/src/dm/impls/moab/dmmbio.cxx (revision b8ecf6d3a4a12224626b8691bd9ee97902152ab1)
1*b8ecf6d3SVijay Mahadevan #include <petsc-private/dmmbimpl.h> /*I  "petscdmmoab.h"   I*/
28cbae1a6SVijay Mahadevan #include <petscdmmoab.h>
38cbae1a6SVijay Mahadevan 
48cbae1a6SVijay Mahadevan #undef __FUNCT__
58cbae1a6SVijay Mahadevan #define __FUNCT__ "DMMoab_GetWriteOptions_Private"
6a1427eb0SVijay Mahadevan static PetscErrorCode DMMoab_GetWriteOptions_Private(PetscInt fsetid, PetscInt numproc, PetscInt dim, MoabWriteMode mode, PetscInt dbglevel, const char* extra_opts, const char** write_opts)
78cbae1a6SVijay Mahadevan {
88cbae1a6SVijay Mahadevan   std::ostringstream str;
98cbae1a6SVijay Mahadevan 
108cbae1a6SVijay Mahadevan   PetscFunctionBegin;
118cbae1a6SVijay Mahadevan 
128cbae1a6SVijay Mahadevan   // do parallel read unless only one processor
138cbae1a6SVijay Mahadevan   if (numproc > 1) {
148cbae1a6SVijay Mahadevan     str << "PARALLEL=" << mode << ";";
158cbae1a6SVijay Mahadevan     if (fsetid>=0) str << "PARALLEL_COMM=" << fsetid << ";";
168cbae1a6SVijay Mahadevan   }
178cbae1a6SVijay Mahadevan 
188cbae1a6SVijay Mahadevan   if (dbglevel)
198cbae1a6SVijay Mahadevan     str << "CPUTIME;DEBUG_IO=" << dbglevel << ";";
208cbae1a6SVijay Mahadevan 
218cbae1a6SVijay Mahadevan   if (extra_opts)
228cbae1a6SVijay Mahadevan     str << extra_opts ;
238cbae1a6SVijay Mahadevan 
248cbae1a6SVijay Mahadevan   *write_opts = str.str().c_str();
258cbae1a6SVijay Mahadevan   PetscFunctionReturn(0);
268cbae1a6SVijay Mahadevan }
278cbae1a6SVijay Mahadevan 
288cbae1a6SVijay Mahadevan 
298cbae1a6SVijay Mahadevan #undef __FUNCT__
308cbae1a6SVijay Mahadevan #define __FUNCT__ "DMMoabOutput"
31a1427eb0SVijay Mahadevan /*@C
32a1427eb0SVijay Mahadevan   DMMoabOutput - Output the solution vectors that are stored in the DMMoab object as tags
33a1427eb0SVijay Mahadevan   along with the complete mesh data structure in the native H5M format. This output file
34a1427eb0SVijay Mahadevan   can be visualized directly with Paraview (if compiled with appropriate plugin) or converted
35a1427eb0SVijay Mahadevan   with tools/mbconvert to a VTK or Exodus file.
36a1427eb0SVijay Mahadevan 
37a1427eb0SVijay Mahadevan   This routine can also be used for check-pointing purposes to store a complete history of
38a1427eb0SVijay Mahadevan   the solution along with any other necessary data to restart computations.
39a1427eb0SVijay Mahadevan 
40a1427eb0SVijay Mahadevan   Not Collective
41a1427eb0SVijay Mahadevan 
42a1427eb0SVijay Mahadevan   Input Parameters:
43a1427eb0SVijay Mahadevan + dm     - the discretization manager object containing solution in MOAB tags.
44a1427eb0SVijay Mahadevan .  filename - the name of the output file: e.g., poisson.h5m
45a1427eb0SVijay Mahadevan -  usrwriteopts - the parallel write options needed for serializing a MOAB mesh database. Can be NULL.
46a1427eb0SVijay Mahadevan    Reference (Parallel Mesh Initialization: http://www.mcs.anl.gov/~fathom/moab-docs/html/contents.html#fivetwo)
47a1427eb0SVijay Mahadevan 
48a1427eb0SVijay Mahadevan   Level: intermediate
49a1427eb0SVijay Mahadevan 
50a1427eb0SVijay Mahadevan .keywords: discretization manager, set, component solution
51a1427eb0SVijay Mahadevan 
52a1427eb0SVijay Mahadevan .seealso: DMMoabLoadFromFile(), DMMoabSetGlobalFieldVector()
53a1427eb0SVijay Mahadevan @*/
548cbae1a6SVijay Mahadevan PetscErrorCode DMMoabOutput(DM dm,const char* filename,const char* usrwriteopts)
558cbae1a6SVijay Mahadevan {
568cbae1a6SVijay Mahadevan   DM_Moab        *dmmoab;
578cbae1a6SVijay Mahadevan   PetscInt       dbglevel=0;
588cbae1a6SVijay Mahadevan   const char *writeopts;
598cbae1a6SVijay Mahadevan 
608cbae1a6SVijay Mahadevan   PetscErrorCode ierr;
618cbae1a6SVijay Mahadevan   moab::ErrorCode merr;
628cbae1a6SVijay Mahadevan 
638cbae1a6SVijay Mahadevan   PetscFunctionBegin;
648cbae1a6SVijay Mahadevan   PetscValidHeaderSpecific(dm,DM_CLASSID,1);
658cbae1a6SVijay Mahadevan   dmmoab = (DM_Moab*)(dm)->data;
668cbae1a6SVijay Mahadevan 
678cbae1a6SVijay Mahadevan   PetscBarrier((PetscObject)dm);
688cbae1a6SVijay Mahadevan 
698cbae1a6SVijay Mahadevan   /* TODO: Use command-line options to control by_rank, verbosity, MoabReadMode and extra options */
708cbae1a6SVijay Mahadevan   ierr  = PetscOptionsBegin(PETSC_COMM_WORLD, "", "Options for reading/writing MOAB based meshes from file", "DMMoab");
718cbae1a6SVijay Mahadevan   ierr  = PetscOptionsInt("-dmmb_rw_dbg", "The verbosity level for reading and writing MOAB meshes", "dmmbutil.cxx", dbglevel, &dbglevel, NULL);CHKERRQ(ierr);
728cbae1a6SVijay Mahadevan   ierr  = PetscOptionsEnd();
738cbae1a6SVijay Mahadevan 
748cbae1a6SVijay Mahadevan   /* add mesh loading options specific to the DM */
758cbae1a6SVijay Mahadevan   ierr = DMMoab_GetWriteOptions_Private(dmmoab->pcomm->get_id(), dmmoab->pcomm->size(), dmmoab->dim, MOAB_PARWOPTS_WRITE_PART, dbglevel, usrwriteopts, &writeopts);CHKERRQ(ierr);
768cbae1a6SVijay Mahadevan   PetscInfo2(dm, "Writing file %s with options: %s\n",filename,writeopts);
778cbae1a6SVijay Mahadevan 
788cbae1a6SVijay Mahadevan   /* output file, using parallel write */
798cbae1a6SVijay Mahadevan   merr = dmmoab->mbiface->write_file(filename, NULL, writeopts, &dmmoab->fileset, 1);MBERRVM(dmmoab->mbiface,"Writing output of DMMoab failed.",merr);
808cbae1a6SVijay Mahadevan   PetscFunctionReturn(0);
818cbae1a6SVijay Mahadevan }
828cbae1a6SVijay Mahadevan 
83