xref: /petsc/src/dm/impls/moab/dmmbio.cxx (revision 2e4e7c01f2fc776e49aa0e3bac11897d06784bfb)
1b8ecf6d3SVijay 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"
6*2e4e7c01SVijay Mahadevan static PetscErrorCode DMMoab_GetWriteOptions_Private(PetscInt fsetid, PetscInt numproc, PetscInt dim, MoabWriteMode mode, PetscInt dbglevel, const char* dm_opts, 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) {
14*2e4e7c01SVijay Mahadevan     str << "PARALLEL=" << MoabWriteModes[mode] << ";";
158cbae1a6SVijay Mahadevan     if (fsetid>=0) str << "PARALLEL_COMM=" << fsetid << ";";
168cbae1a6SVijay Mahadevan   }
178cbae1a6SVijay Mahadevan 
18*2e4e7c01SVijay Mahadevan   if (strlen(dm_opts)) {
19*2e4e7c01SVijay Mahadevan     str << dm_opts << ";";
20*2e4e7c01SVijay Mahadevan   }
21*2e4e7c01SVijay Mahadevan 
228cbae1a6SVijay Mahadevan   if (dbglevel)
238cbae1a6SVijay Mahadevan     str << "CPUTIME;DEBUG_IO=" << dbglevel << ";";
248cbae1a6SVijay Mahadevan 
258cbae1a6SVijay Mahadevan   if (extra_opts)
268cbae1a6SVijay Mahadevan     str << extra_opts ;
278cbae1a6SVijay Mahadevan 
288cbae1a6SVijay Mahadevan   *write_opts = str.str().c_str();
298cbae1a6SVijay Mahadevan   PetscFunctionReturn(0);
308cbae1a6SVijay Mahadevan }
318cbae1a6SVijay Mahadevan 
328cbae1a6SVijay Mahadevan 
338cbae1a6SVijay Mahadevan #undef __FUNCT__
348cbae1a6SVijay Mahadevan #define __FUNCT__ "DMMoabOutput"
35a1427eb0SVijay Mahadevan /*@C
36a1427eb0SVijay Mahadevan   DMMoabOutput - Output the solution vectors that are stored in the DMMoab object as tags
37a1427eb0SVijay Mahadevan   along with the complete mesh data structure in the native H5M format. This output file
38a1427eb0SVijay Mahadevan   can be visualized directly with Paraview (if compiled with appropriate plugin) or converted
39a1427eb0SVijay Mahadevan   with tools/mbconvert to a VTK or Exodus file.
40a1427eb0SVijay Mahadevan 
41a1427eb0SVijay Mahadevan   This routine can also be used for check-pointing purposes to store a complete history of
42a1427eb0SVijay Mahadevan   the solution along with any other necessary data to restart computations.
43a1427eb0SVijay Mahadevan 
44a1427eb0SVijay Mahadevan   Not Collective
45a1427eb0SVijay Mahadevan 
46a1427eb0SVijay Mahadevan   Input Parameters:
47a1427eb0SVijay Mahadevan + dm     - the discretization manager object containing solution in MOAB tags.
48a1427eb0SVijay Mahadevan .  filename - the name of the output file: e.g., poisson.h5m
49a1427eb0SVijay Mahadevan -  usrwriteopts - the parallel write options needed for serializing a MOAB mesh database. Can be NULL.
50a1427eb0SVijay Mahadevan    Reference (Parallel Mesh Initialization: http://www.mcs.anl.gov/~fathom/moab-docs/html/contents.html#fivetwo)
51a1427eb0SVijay Mahadevan 
52a1427eb0SVijay Mahadevan   Level: intermediate
53a1427eb0SVijay Mahadevan 
54a1427eb0SVijay Mahadevan .keywords: discretization manager, set, component solution
55a1427eb0SVijay Mahadevan 
56a1427eb0SVijay Mahadevan .seealso: DMMoabLoadFromFile(), DMMoabSetGlobalFieldVector()
57a1427eb0SVijay Mahadevan @*/
588cbae1a6SVijay Mahadevan PetscErrorCode DMMoabOutput(DM dm,const char* filename,const char* usrwriteopts)
598cbae1a6SVijay Mahadevan {
608cbae1a6SVijay Mahadevan   DM_Moab         *dmmoab;
618cbae1a6SVijay Mahadevan   const char      *writeopts;
628cbae1a6SVijay Mahadevan   PetscErrorCode  ierr;
638cbae1a6SVijay Mahadevan   moab::ErrorCode merr;
648cbae1a6SVijay Mahadevan 
658cbae1a6SVijay Mahadevan   PetscFunctionBegin;
668cbae1a6SVijay Mahadevan   PetscValidHeaderSpecific(dm,DM_CLASSID,1);
678cbae1a6SVijay Mahadevan   dmmoab = (DM_Moab*)(dm)->data;
688cbae1a6SVijay Mahadevan 
698cbae1a6SVijay Mahadevan   /* add mesh loading options specific to the DM */
70*2e4e7c01SVijay Mahadevan   ierr = DMMoab_GetWriteOptions_Private(dmmoab->pcomm->get_id(), dmmoab->pcomm->size(), dmmoab->dim, dmmoab->write_mode,
71*2e4e7c01SVijay Mahadevan                                           dmmoab->rw_dbglevel, dmmoab->extra_write_options, usrwriteopts, &writeopts);CHKERRQ(ierr);
728cbae1a6SVijay Mahadevan   PetscInfo2(dm, "Writing file %s with options: %s\n",filename,writeopts);
738cbae1a6SVijay Mahadevan 
748cbae1a6SVijay Mahadevan   /* output file, using parallel write */
758cbae1a6SVijay Mahadevan   merr = dmmoab->mbiface->write_file(filename, NULL, writeopts, &dmmoab->fileset, 1);MBERRVM(dmmoab->mbiface,"Writing output of DMMoab failed.",merr);
768cbae1a6SVijay Mahadevan   PetscFunctionReturn(0);
778cbae1a6SVijay Mahadevan }
788cbae1a6SVijay Mahadevan 
79