xref: /petsc/src/dm/impls/moab/dmmbio.cxx (revision f90c3b0ec3be50a4444e969004467b0996ab0efe)
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"
62e4e7c01SVijay 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 {
8*f90c3b0eSVijay Mahadevan   PetscErrorCode ierr;
9*f90c3b0eSVijay Mahadevan   char wopts[PETSC_MAX_PATH_LEN];
108cbae1a6SVijay Mahadevan 
118cbae1a6SVijay Mahadevan   PetscFunctionBegin;
128cbae1a6SVijay Mahadevan 
138cbae1a6SVijay Mahadevan   // do parallel read unless only one processor
148cbae1a6SVijay Mahadevan   if (numproc > 1) {
15*f90c3b0eSVijay Mahadevan     ierr = PetscSNPrintf(wopts, sizeof(wopts), "PARALLEL=%s;",MoabWriteModes[mode]);CHKERRQ(ierr);
16*f90c3b0eSVijay Mahadevan     if (fsetid>=0) {
17*f90c3b0eSVijay Mahadevan       ierr = PetscSNPrintf(wopts, sizeof(wopts), "%sPARALLEL_COMM=%d;",wopts,fsetid);CHKERRQ(ierr);
18*f90c3b0eSVijay Mahadevan     }
198cbae1a6SVijay Mahadevan   }
208cbae1a6SVijay Mahadevan 
212e4e7c01SVijay Mahadevan   if (strlen(dm_opts)) {
22*f90c3b0eSVijay Mahadevan     ierr = PetscSNPrintf(wopts, sizeof(wopts), "%s%s;",wopts,dm_opts);CHKERRQ(ierr);
232e4e7c01SVijay Mahadevan   }
242e4e7c01SVijay Mahadevan 
25*f90c3b0eSVijay Mahadevan   if (dbglevel) {
26*f90c3b0eSVijay Mahadevan     ierr = PetscSNPrintf(wopts, sizeof(wopts), "%sCPUTIME;DEBUG_IO=%d;",wopts,dbglevel);CHKERRQ(ierr);
27*f90c3b0eSVijay Mahadevan   }
288cbae1a6SVijay Mahadevan 
29*f90c3b0eSVijay Mahadevan   if (extra_opts) {
30*f90c3b0eSVijay Mahadevan     ierr = PetscSNPrintf(wopts, sizeof(wopts), "%s%s;",wopts,extra_opts);CHKERRQ(ierr);
31*f90c3b0eSVijay Mahadevan   }
32*f90c3b0eSVijay Mahadevan   *write_opts=wopts;
338cbae1a6SVijay Mahadevan   PetscFunctionReturn(0);
348cbae1a6SVijay Mahadevan }
358cbae1a6SVijay Mahadevan 
368cbae1a6SVijay Mahadevan 
378cbae1a6SVijay Mahadevan #undef __FUNCT__
388cbae1a6SVijay Mahadevan #define __FUNCT__ "DMMoabOutput"
39a1427eb0SVijay Mahadevan /*@C
40a1427eb0SVijay Mahadevan   DMMoabOutput - Output the solution vectors that are stored in the DMMoab object as tags
41a1427eb0SVijay Mahadevan   along with the complete mesh data structure in the native H5M format. This output file
42a1427eb0SVijay Mahadevan   can be visualized directly with Paraview (if compiled with appropriate plugin) or converted
43a1427eb0SVijay Mahadevan   with tools/mbconvert to a VTK or Exodus file.
44a1427eb0SVijay Mahadevan 
45a1427eb0SVijay Mahadevan   This routine can also be used for check-pointing purposes to store a complete history of
46a1427eb0SVijay Mahadevan   the solution along with any other necessary data to restart computations.
47a1427eb0SVijay Mahadevan 
48a1427eb0SVijay Mahadevan   Not Collective
49a1427eb0SVijay Mahadevan 
50a1427eb0SVijay Mahadevan   Input Parameters:
51a1427eb0SVijay Mahadevan + dm     - the discretization manager object containing solution in MOAB tags.
52a1427eb0SVijay Mahadevan .  filename - the name of the output file: e.g., poisson.h5m
53a1427eb0SVijay Mahadevan -  usrwriteopts - the parallel write options needed for serializing a MOAB mesh database. Can be NULL.
54a1427eb0SVijay Mahadevan    Reference (Parallel Mesh Initialization: http://www.mcs.anl.gov/~fathom/moab-docs/html/contents.html#fivetwo)
55a1427eb0SVijay Mahadevan 
56a1427eb0SVijay Mahadevan   Level: intermediate
57a1427eb0SVijay Mahadevan 
58a1427eb0SVijay Mahadevan .keywords: discretization manager, set, component solution
59a1427eb0SVijay Mahadevan 
60a1427eb0SVijay Mahadevan .seealso: DMMoabLoadFromFile(), DMMoabSetGlobalFieldVector()
61a1427eb0SVijay Mahadevan @*/
628cbae1a6SVijay Mahadevan PetscErrorCode DMMoabOutput(DM dm,const char* filename,const char* usrwriteopts)
638cbae1a6SVijay Mahadevan {
648cbae1a6SVijay Mahadevan   DM_Moab         *dmmoab;
658cbae1a6SVijay Mahadevan   const char      *writeopts;
668cbae1a6SVijay Mahadevan   PetscErrorCode  ierr;
678cbae1a6SVijay Mahadevan   moab::ErrorCode merr;
688cbae1a6SVijay Mahadevan 
698cbae1a6SVijay Mahadevan   PetscFunctionBegin;
708cbae1a6SVijay Mahadevan   PetscValidHeaderSpecific(dm,DM_CLASSID,1);
718cbae1a6SVijay Mahadevan   dmmoab = (DM_Moab*)(dm)->data;
728cbae1a6SVijay Mahadevan 
738cbae1a6SVijay Mahadevan   /* add mesh loading options specific to the DM */
742e4e7c01SVijay Mahadevan   ierr = DMMoab_GetWriteOptions_Private(dmmoab->pcomm->get_id(), dmmoab->pcomm->size(), dmmoab->dim, dmmoab->write_mode,
752e4e7c01SVijay Mahadevan                                           dmmoab->rw_dbglevel, dmmoab->extra_write_options, 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