xref: /petsc/src/dm/impls/moab/dmmbio.cxx (revision 95dccacacae8a8fc0b691f9b4fba69a249b61188)
1af0996ceSBarry Smith #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 {
8f90c3b0eSVijay Mahadevan   PetscErrorCode ierr;
96acfe860SVijay Mahadevan   char           *wopts;
1061eb6e27SVijay Mahadevan   char           wopts_par[PETSC_MAX_PATH_LEN];
1161eb6e27SVijay Mahadevan   char           wopts_parid[PETSC_MAX_PATH_LEN];
1261eb6e27SVijay Mahadevan   char           wopts_dbg[PETSC_MAX_PATH_LEN];
138cbae1a6SVijay Mahadevan   PetscFunctionBegin;
148cbae1a6SVijay Mahadevan 
15*95dccacaSBarry Smith   ierr = PetscMalloc1(PETSC_MAX_PATH_LEN,&wopts);CHKERRQ(ierr);
1661eb6e27SVijay Mahadevan   ierr = PetscMemzero(&wopts_par,PETSC_MAX_PATH_LEN);CHKERRQ(ierr);
1761eb6e27SVijay Mahadevan   ierr = PetscMemzero(&wopts_parid,PETSC_MAX_PATH_LEN);CHKERRQ(ierr);
1861eb6e27SVijay Mahadevan   ierr = PetscMemzero(&wopts_dbg,PETSC_MAX_PATH_LEN);CHKERRQ(ierr);
1961eb6e27SVijay Mahadevan 
208cbae1a6SVijay Mahadevan   // do parallel read unless only one processor
218cbae1a6SVijay Mahadevan   if (numproc > 1) {
226acfe860SVijay Mahadevan     ierr = PetscSNPrintf(wopts_par, PETSC_MAX_PATH_LEN, "PARALLEL=%s;",MoabWriteModes[mode]);CHKERRQ(ierr);
23f90c3b0eSVijay Mahadevan     if (fsetid >= 0) {
246acfe860SVijay Mahadevan       ierr = PetscSNPrintf(wopts_parid, PETSC_MAX_PATH_LEN, "PARALLEL_COMM=%d;",fsetid);CHKERRQ(ierr);
25f90c3b0eSVijay Mahadevan     }
268cbae1a6SVijay Mahadevan   }
278cbae1a6SVijay Mahadevan 
28f90c3b0eSVijay Mahadevan   if (dbglevel) {
296acfe860SVijay Mahadevan     ierr = PetscSNPrintf(wopts_dbg, PETSC_MAX_PATH_LEN, "CPUTIME;DEBUG_IO=%d;",dbglevel);CHKERRQ(ierr);
30f90c3b0eSVijay Mahadevan   }
318cbae1a6SVijay Mahadevan 
326acfe860SVijay 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);
33f90c3b0eSVijay Mahadevan   *write_opts=wopts;
348cbae1a6SVijay Mahadevan   PetscFunctionReturn(0);
358cbae1a6SVijay Mahadevan }
368cbae1a6SVijay Mahadevan 
378cbae1a6SVijay Mahadevan 
388cbae1a6SVijay Mahadevan #undef __FUNCT__
398cbae1a6SVijay Mahadevan #define __FUNCT__ "DMMoabOutput"
40a1427eb0SVijay Mahadevan /*@C
41a1427eb0SVijay Mahadevan   DMMoabOutput - Output the solution vectors that are stored in the DMMoab object as tags
4263aba298SVijay Mahadevan   along with the complete mesh data structure in the native H5M or VTK format. The H5M output file
43a1427eb0SVijay Mahadevan   can be visualized directly with Paraview (if compiled with appropriate plugin) or converted
4463aba298SVijay Mahadevan   with MOAB/tools/mbconvert to a VTK or Exodus file.
45a1427eb0SVijay Mahadevan 
46a1427eb0SVijay Mahadevan   This routine can also be used for check-pointing purposes to store a complete history of
47a1427eb0SVijay Mahadevan   the solution along with any other necessary data to restart computations.
48a1427eb0SVijay Mahadevan 
4963aba298SVijay Mahadevan   Collective
50a1427eb0SVijay Mahadevan 
51a1427eb0SVijay Mahadevan   Input Parameters:
52a1427eb0SVijay Mahadevan + dm     - the discretization manager object containing solution in MOAB tags.
53a1427eb0SVijay Mahadevan .  filename - the name of the output file: e.g., poisson.h5m
54a1427eb0SVijay Mahadevan -  usrwriteopts - the parallel write options needed for serializing a MOAB mesh database. Can be NULL.
5563aba298SVijay Mahadevan    Reference (Parallel Mesh Initialization: http://ftp.mcs.anl.gov/pub/fathom/moab-docs/contents.html#fivetwo)
56a1427eb0SVijay Mahadevan 
57a1427eb0SVijay Mahadevan   Level: intermediate
58a1427eb0SVijay Mahadevan 
59a1427eb0SVijay Mahadevan .keywords: discretization manager, set, component solution
60a1427eb0SVijay Mahadevan 
61a1427eb0SVijay Mahadevan .seealso: DMMoabLoadFromFile(), DMMoabSetGlobalFieldVector()
62a1427eb0SVijay Mahadevan @*/
638cbae1a6SVijay Mahadevan PetscErrorCode DMMoabOutput(DM dm,const char* filename,const char* usrwriteopts)
648cbae1a6SVijay Mahadevan {
658cbae1a6SVijay Mahadevan   DM_Moab         *dmmoab;
668cbae1a6SVijay Mahadevan   const char      *writeopts;
6763aba298SVijay Mahadevan   PetscBool       isftype;
688cbae1a6SVijay Mahadevan   PetscErrorCode  ierr;
698cbae1a6SVijay Mahadevan   moab::ErrorCode merr;
708cbae1a6SVijay Mahadevan 
718cbae1a6SVijay Mahadevan   PetscFunctionBegin;
728cbae1a6SVijay Mahadevan   PetscValidHeaderSpecific(dm,DM_CLASSID,1);
738cbae1a6SVijay Mahadevan   dmmoab = (DM_Moab*)(dm)->data;
748cbae1a6SVijay Mahadevan 
7563aba298SVijay Mahadevan   ierr = PetscStrendswith(filename,"h5m",&isftype);CHKERRQ(ierr);
7663aba298SVijay Mahadevan 
778cbae1a6SVijay Mahadevan   /* add mesh loading options specific to the DM */
7863aba298SVijay Mahadevan   if (isftype) {
792e4e7c01SVijay Mahadevan     ierr = DMMoab_GetWriteOptions_Private(dmmoab->pcomm->get_id(), dmmoab->pcomm->size(), dmmoab->dim, dmmoab->write_mode,
802e4e7c01SVijay Mahadevan                                           dmmoab->rw_dbglevel, dmmoab->extra_write_options, usrwriteopts, &writeopts);CHKERRQ(ierr);
818cbae1a6SVijay Mahadevan     PetscInfo2(dm, "Writing file %s with options: %s\n",filename,writeopts);
8263aba298SVijay Mahadevan   }
8363aba298SVijay Mahadevan   else {
8463aba298SVijay Mahadevan     writeopts=NULL;
8563aba298SVijay Mahadevan   }
868cbae1a6SVijay Mahadevan 
878cbae1a6SVijay Mahadevan   /* output file, using parallel write */
888cbae1a6SVijay Mahadevan   merr = dmmoab->mbiface->write_file(filename, NULL, writeopts, &dmmoab->fileset, 1);MBERRVM(dmmoab->mbiface,"Writing output of DMMoab failed.",merr);
896acfe860SVijay Mahadevan   ierr = PetscFree(writeopts);CHKERRQ(ierr);
908cbae1a6SVijay Mahadevan   PetscFunctionReturn(0);
918cbae1a6SVijay Mahadevan }
928cbae1a6SVijay Mahadevan 
93