xref: /petsc/src/dm/impls/moab/dmmbio.cxx (revision 9daf19fd0d22011a060902ed53673b48ac0c4e7d)
1af0996ceSBarry Smith #include <petsc/private/dmmbimpl.h> /*I  "petscdmmoab.h"   I*/
28cbae1a6SVijay Mahadevan #include <petscdmmoab.h>
38cbae1a6SVijay Mahadevan 
42e4e7c01SVijay 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)
58cbae1a6SVijay Mahadevan {
6f90c3b0eSVijay Mahadevan   PetscErrorCode ierr;
76acfe860SVijay Mahadevan   char           *wopts;
861eb6e27SVijay Mahadevan   char           wopts_par[PETSC_MAX_PATH_LEN];
961eb6e27SVijay Mahadevan   char           wopts_parid[PETSC_MAX_PATH_LEN];
1061eb6e27SVijay Mahadevan   char           wopts_dbg[PETSC_MAX_PATH_LEN];
118cbae1a6SVijay Mahadevan   PetscFunctionBegin;
128cbae1a6SVijay Mahadevan 
1395dccacaSBarry Smith   ierr = PetscMalloc1(PETSC_MAX_PATH_LEN,&wopts);CHKERRQ(ierr);
1461eb6e27SVijay Mahadevan   ierr = PetscMemzero(&wopts_par,PETSC_MAX_PATH_LEN);CHKERRQ(ierr);
1561eb6e27SVijay Mahadevan   ierr = PetscMemzero(&wopts_parid,PETSC_MAX_PATH_LEN);CHKERRQ(ierr);
1661eb6e27SVijay Mahadevan   ierr = PetscMemzero(&wopts_dbg,PETSC_MAX_PATH_LEN);CHKERRQ(ierr);
1761eb6e27SVijay Mahadevan 
188cbae1a6SVijay Mahadevan   // do parallel read unless only one processor
198cbae1a6SVijay Mahadevan   if (numproc > 1) {
206acfe860SVijay Mahadevan     ierr = PetscSNPrintf(wopts_par, PETSC_MAX_PATH_LEN, "PARALLEL=%s;",MoabWriteModes[mode]);CHKERRQ(ierr);
21f90c3b0eSVijay Mahadevan     if (fsetid >= 0) {
226acfe860SVijay Mahadevan       ierr = PetscSNPrintf(wopts_parid, PETSC_MAX_PATH_LEN, "PARALLEL_COMM=%d;",fsetid);CHKERRQ(ierr);
23f90c3b0eSVijay Mahadevan     }
248cbae1a6SVijay Mahadevan   }
258cbae1a6SVijay Mahadevan 
26f90c3b0eSVijay Mahadevan   if (dbglevel) {
276acfe860SVijay Mahadevan     ierr = PetscSNPrintf(wopts_dbg, PETSC_MAX_PATH_LEN, "CPUTIME;DEBUG_IO=%d;",dbglevel);CHKERRQ(ierr);
28f90c3b0eSVijay Mahadevan   }
298cbae1a6SVijay Mahadevan 
306acfe860SVijay Mahadevan   ierr = PetscSNPrintf(wopts, PETSC_MAX_PATH_LEN, "%s%s%s%s%s",wopts_par,wopts_parid,wopts_dbg,(extra_opts?extra_opts:""),(dm_opts?dm_opts:""));CHKERRQ(ierr);
31f90c3b0eSVijay Mahadevan   *write_opts=wopts;
328cbae1a6SVijay Mahadevan   PetscFunctionReturn(0);
338cbae1a6SVijay Mahadevan }
348cbae1a6SVijay Mahadevan 
358cbae1a6SVijay Mahadevan 
36a1427eb0SVijay Mahadevan /*@C
37a1427eb0SVijay Mahadevan   DMMoabOutput - Output the solution vectors that are stored in the DMMoab object as tags
3863aba298SVijay Mahadevan   along with the complete mesh data structure in the native H5M or VTK format. The H5M output file
39a1427eb0SVijay Mahadevan   can be visualized directly with Paraview (if compiled with appropriate plugin) or converted
4063aba298SVijay Mahadevan   with MOAB/tools/mbconvert to a VTK or Exodus file.
41a1427eb0SVijay Mahadevan 
42a1427eb0SVijay Mahadevan   This routine can also be used for check-pointing purposes to store a complete history of
43a1427eb0SVijay Mahadevan   the solution along with any other necessary data to restart computations.
44a1427eb0SVijay Mahadevan 
4563aba298SVijay Mahadevan   Collective
46a1427eb0SVijay Mahadevan 
47a1427eb0SVijay Mahadevan   Input Parameters:
48a1427eb0SVijay Mahadevan + dm     - the discretization manager object containing solution in MOAB tags.
49a1427eb0SVijay Mahadevan .  filename - the name of the output file: e.g., poisson.h5m
50a1427eb0SVijay Mahadevan -  usrwriteopts - the parallel write options needed for serializing a MOAB mesh database. Can be NULL.
5163aba298SVijay Mahadevan    Reference (Parallel Mesh Initialization: http://ftp.mcs.anl.gov/pub/fathom/moab-docs/contents.html#fivetwo)
52a1427eb0SVijay Mahadevan 
53a1427eb0SVijay Mahadevan   Level: intermediate
54a1427eb0SVijay Mahadevan 
55a1427eb0SVijay Mahadevan .keywords: discretization manager, set, component solution
56a1427eb0SVijay Mahadevan 
57a1427eb0SVijay Mahadevan .seealso: DMMoabLoadFromFile(), DMMoabSetGlobalFieldVector()
58a1427eb0SVijay Mahadevan @*/
598cbae1a6SVijay Mahadevan PetscErrorCode DMMoabOutput(DM dm,const char* filename,const char* usrwriteopts)
608cbae1a6SVijay Mahadevan {
618cbae1a6SVijay Mahadevan   DM_Moab         *dmmoab;
628cbae1a6SVijay Mahadevan   const char      *writeopts;
6363aba298SVijay Mahadevan   PetscBool       isftype;
648cbae1a6SVijay Mahadevan   PetscErrorCode  ierr;
658cbae1a6SVijay Mahadevan   moab::ErrorCode merr;
668cbae1a6SVijay Mahadevan 
678cbae1a6SVijay Mahadevan   PetscFunctionBegin;
688cbae1a6SVijay Mahadevan   PetscValidHeaderSpecific(dm,DM_CLASSID,1);
698cbae1a6SVijay Mahadevan   dmmoab = (DM_Moab*)(dm)->data;
708cbae1a6SVijay Mahadevan 
7163aba298SVijay Mahadevan   ierr = PetscStrendswith(filename,"h5m",&isftype);CHKERRQ(ierr);
7263aba298SVijay Mahadevan 
738cbae1a6SVijay Mahadevan   /* add mesh loading options specific to the DM */
7463aba298SVijay Mahadevan   if (isftype) {
75*9daf19fdSVijay Mahadevan #ifdef MOAB_HAVE_MPI
762e4e7c01SVijay Mahadevan     ierr = DMMoab_GetWriteOptions_Private(dmmoab->pcomm->get_id(), dmmoab->pcomm->size(), dmmoab->dim, dmmoab->write_mode,
772e4e7c01SVijay Mahadevan                                           dmmoab->rw_dbglevel, dmmoab->extra_write_options, usrwriteopts, &writeopts);CHKERRQ(ierr);
78*9daf19fdSVijay Mahadevan #else
79*9daf19fdSVijay Mahadevan     ierr = DMMoab_GetWriteOptions_Private(0, 1, dmmoab->dim, dmmoab->write_mode,
80*9daf19fdSVijay Mahadevan                                           dmmoab->rw_dbglevel, dmmoab->extra_write_options, usrwriteopts, &writeopts);CHKERRQ(ierr);
81*9daf19fdSVijay Mahadevan #endif
828cbae1a6SVijay Mahadevan     PetscInfo2(dm, "Writing file %s with options: %s\n",filename,writeopts);
8363aba298SVijay Mahadevan   }
8463aba298SVijay Mahadevan   else {
8563aba298SVijay Mahadevan     writeopts=NULL;
8663aba298SVijay Mahadevan   }
878cbae1a6SVijay Mahadevan 
888cbae1a6SVijay Mahadevan   /* output file, using parallel write */
898cbae1a6SVijay Mahadevan   merr = dmmoab->mbiface->write_file(filename, NULL, writeopts, &dmmoab->fileset, 1);MBERRVM(dmmoab->mbiface,"Writing output of DMMoab failed.",merr);
906acfe860SVijay Mahadevan   ierr = PetscFree(writeopts);CHKERRQ(ierr);
918cbae1a6SVijay Mahadevan   PetscFunctionReturn(0);
928cbae1a6SVijay Mahadevan }
938cbae1a6SVijay Mahadevan 
94