xref: /petsc/src/dm/impls/moab/dmmbio.cxx (revision a1427eb044190bd5e852765ff1b7086e9e5e72ca)
18cbae1a6SVijay Mahadevan #include <petsc-private/dmmbimpl.h> /*I  "petscdm.h"   I*/
28cbae1a6SVijay Mahadevan #include <petscdmmoab.h>
38cbae1a6SVijay Mahadevan 
48cbae1a6SVijay Mahadevan #undef __FUNCT__
58cbae1a6SVijay Mahadevan #define __FUNCT__ "DMMoab_GetWriteOptions_Private"
6*a1427eb0SVijay 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"
31*a1427eb0SVijay Mahadevan /*@C
32*a1427eb0SVijay Mahadevan    DMMoabOutput - Output the solution vectors that are stored in the DMMoab object as tags
33*a1427eb0SVijay Mahadevan    along with the complete mesh data structure in the native H5M format. This output file
34*a1427eb0SVijay Mahadevan    can be visualized directly with Paraview (if compiled with appropriate plugin) or converted
35*a1427eb0SVijay Mahadevan    with tools/mbconvert to a VTK or Exodus file.
36*a1427eb0SVijay Mahadevan 
37*a1427eb0SVijay Mahadevan    This routine can also be used for check-pointing purposes to store a complete history of
38*a1427eb0SVijay Mahadevan    the solution along with any other necessary data to restart computations.
39*a1427eb0SVijay Mahadevan 
40*a1427eb0SVijay Mahadevan    Not Collective
41*a1427eb0SVijay Mahadevan 
42*a1427eb0SVijay Mahadevan    Input Parameters:
43*a1427eb0SVijay Mahadevan + dm     - the discretization manager object containing solution in MOAB tags.
44*a1427eb0SVijay Mahadevan .  filename - the name of the output file: e.g., poisson.h5m
45*a1427eb0SVijay Mahadevan -  usrwriteopts - the parallel write options needed for serializing a MOAB mesh database. Can be NULL.
46*a1427eb0SVijay Mahadevan    Reference (Parallel Mesh Initialization: http://www.mcs.anl.gov/~fathom/moab-docs/html/contents.html#fivetwo)
47*a1427eb0SVijay Mahadevan 
48*a1427eb0SVijay Mahadevan   Level: intermediate
49*a1427eb0SVijay Mahadevan 
50*a1427eb0SVijay Mahadevan .keywords: discretization manager, set, component solution
51*a1427eb0SVijay Mahadevan 
52*a1427eb0SVijay Mahadevan .seealso: DMMoabLoadFromFile(), DMMoabSetGlobalFieldVector()
53*a1427eb0SVijay 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