xref: /petsc/src/dm/impls/moab/dmmbio.cxx (revision 8cbae1a6863352a3367a16c5066e48972aa35a03)
1*8cbae1a6SVijay Mahadevan #include <petsc-private/dmmbimpl.h> /*I  "petscdm.h"   I*/
2*8cbae1a6SVijay Mahadevan #include <petscdmmoab.h>
3*8cbae1a6SVijay Mahadevan 
4*8cbae1a6SVijay Mahadevan #undef __FUNCT__
5*8cbae1a6SVijay Mahadevan #define __FUNCT__ "DMMoab_GetWriteOptions_Private"
6*8cbae1a6SVijay Mahadevan PetscErrorCode DMMoab_GetWriteOptions_Private(PetscInt fsetid, PetscInt numproc, PetscInt dim, MoabWriteMode mode, PetscInt dbglevel, const char* extra_opts, const char** write_opts)
7*8cbae1a6SVijay Mahadevan {
8*8cbae1a6SVijay Mahadevan   std::ostringstream str;
9*8cbae1a6SVijay Mahadevan 
10*8cbae1a6SVijay Mahadevan   PetscFunctionBegin;
11*8cbae1a6SVijay Mahadevan 
12*8cbae1a6SVijay Mahadevan   // do parallel read unless only one processor
13*8cbae1a6SVijay Mahadevan   if (numproc > 1) {
14*8cbae1a6SVijay Mahadevan     str << "PARALLEL=" << mode << ";";
15*8cbae1a6SVijay Mahadevan     if (fsetid>=0) str << "PARALLEL_COMM=" << fsetid << ";";
16*8cbae1a6SVijay Mahadevan   }
17*8cbae1a6SVijay Mahadevan 
18*8cbae1a6SVijay Mahadevan   if (dbglevel)
19*8cbae1a6SVijay Mahadevan     str << "CPUTIME;DEBUG_IO=" << dbglevel << ";";
20*8cbae1a6SVijay Mahadevan 
21*8cbae1a6SVijay Mahadevan   if (extra_opts)
22*8cbae1a6SVijay Mahadevan     str << extra_opts ;
23*8cbae1a6SVijay Mahadevan 
24*8cbae1a6SVijay Mahadevan   *write_opts = str.str().c_str();
25*8cbae1a6SVijay Mahadevan   PetscFunctionReturn(0);
26*8cbae1a6SVijay Mahadevan }
27*8cbae1a6SVijay Mahadevan 
28*8cbae1a6SVijay Mahadevan 
29*8cbae1a6SVijay Mahadevan #undef __FUNCT__
30*8cbae1a6SVijay Mahadevan #define __FUNCT__ "DMMoabOutput"
31*8cbae1a6SVijay Mahadevan PetscErrorCode DMMoabOutput(DM dm,const char* filename,const char* usrwriteopts)
32*8cbae1a6SVijay Mahadevan {
33*8cbae1a6SVijay Mahadevan   DM_Moab        *dmmoab;
34*8cbae1a6SVijay Mahadevan   PetscInt       dbglevel=0;
35*8cbae1a6SVijay Mahadevan   const char *writeopts;
36*8cbae1a6SVijay Mahadevan 
37*8cbae1a6SVijay Mahadevan   PetscErrorCode ierr;
38*8cbae1a6SVijay Mahadevan   moab::ErrorCode merr;
39*8cbae1a6SVijay Mahadevan 
40*8cbae1a6SVijay Mahadevan   PetscFunctionBegin;
41*8cbae1a6SVijay Mahadevan   PetscValidHeaderSpecific(dm,DM_CLASSID,1);
42*8cbae1a6SVijay Mahadevan   dmmoab = (DM_Moab*)(dm)->data;
43*8cbae1a6SVijay Mahadevan 
44*8cbae1a6SVijay Mahadevan   PetscBarrier((PetscObject)dm);
45*8cbae1a6SVijay Mahadevan 
46*8cbae1a6SVijay Mahadevan   /* TODO: Use command-line options to control by_rank, verbosity, MoabReadMode and extra options */
47*8cbae1a6SVijay Mahadevan   ierr  = PetscOptionsBegin(PETSC_COMM_WORLD, "", "Options for reading/writing MOAB based meshes from file", "DMMoab");
48*8cbae1a6SVijay Mahadevan   ierr  = PetscOptionsInt("-dmmb_rw_dbg", "The verbosity level for reading and writing MOAB meshes", "dmmbutil.cxx", dbglevel, &dbglevel, NULL);CHKERRQ(ierr);
49*8cbae1a6SVijay Mahadevan   ierr  = PetscOptionsEnd();
50*8cbae1a6SVijay Mahadevan 
51*8cbae1a6SVijay Mahadevan   /* add mesh loading options specific to the DM */
52*8cbae1a6SVijay Mahadevan   ierr = DMMoab_GetWriteOptions_Private(dmmoab->pcomm->get_id(), dmmoab->pcomm->size(), dmmoab->dim, MOAB_PARWOPTS_WRITE_PART, dbglevel, usrwriteopts, &writeopts);CHKERRQ(ierr);
53*8cbae1a6SVijay Mahadevan   PetscInfo2(dm, "Writing file %s with options: %s\n",filename,writeopts);
54*8cbae1a6SVijay Mahadevan 
55*8cbae1a6SVijay Mahadevan   /* output file, using parallel write */
56*8cbae1a6SVijay Mahadevan   merr = dmmoab->mbiface->write_file(filename, NULL, writeopts, &dmmoab->fileset, 1);MBERRVM(dmmoab->mbiface,"Writing output of DMMoab failed.",merr);
57*8cbae1a6SVijay Mahadevan   PetscFunctionReturn(0);
58*8cbae1a6SVijay Mahadevan }
59*8cbae1a6SVijay Mahadevan 
60