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