18cbae1a6SVijay Mahadevan #include <petsc-private/dmmbimpl.h> /*I "petscdm.h" I*/ 28cbae1a6SVijay Mahadevan #include <petscdmmoab.h> 38cbae1a6SVijay Mahadevan 48cbae1a6SVijay Mahadevan #undef __FUNCT__ 58cbae1a6SVijay Mahadevan #define __FUNCT__ "DMMoab_GetWriteOptions_Private" 6*a1427eb0SVijay Mahadevan static PetscErrorCode DMMoab_GetWriteOptions_Private(PetscInt fsetid, PetscInt numproc, PetscInt dim, MoabWriteMode mode, PetscInt dbglevel, const char* extra_opts, const char** write_opts) 78cbae1a6SVijay Mahadevan { 88cbae1a6SVijay Mahadevan std::ostringstream str; 98cbae1a6SVijay Mahadevan 108cbae1a6SVijay Mahadevan PetscFunctionBegin; 118cbae1a6SVijay Mahadevan 128cbae1a6SVijay Mahadevan // do parallel read unless only one processor 138cbae1a6SVijay Mahadevan if (numproc > 1) { 148cbae1a6SVijay Mahadevan str << "PARALLEL=" << mode << ";"; 158cbae1a6SVijay Mahadevan if (fsetid>=0) str << "PARALLEL_COMM=" << fsetid << ";"; 168cbae1a6SVijay Mahadevan } 178cbae1a6SVijay Mahadevan 188cbae1a6SVijay Mahadevan if (dbglevel) 198cbae1a6SVijay Mahadevan str << "CPUTIME;DEBUG_IO=" << dbglevel << ";"; 208cbae1a6SVijay Mahadevan 218cbae1a6SVijay Mahadevan if (extra_opts) 228cbae1a6SVijay Mahadevan str << extra_opts ; 238cbae1a6SVijay Mahadevan 248cbae1a6SVijay Mahadevan *write_opts = str.str().c_str(); 258cbae1a6SVijay Mahadevan PetscFunctionReturn(0); 268cbae1a6SVijay Mahadevan } 278cbae1a6SVijay Mahadevan 288cbae1a6SVijay Mahadevan 298cbae1a6SVijay Mahadevan #undef __FUNCT__ 308cbae1a6SVijay Mahadevan #define __FUNCT__ "DMMoabOutput" 31*a1427eb0SVijay Mahadevan /*@C 32*a1427eb0SVijay Mahadevan DMMoabOutput - Output the solution vectors that are stored in the DMMoab object as tags 33*a1427eb0SVijay Mahadevan along with the complete mesh data structure in the native H5M format. This output file 34*a1427eb0SVijay Mahadevan can be visualized directly with Paraview (if compiled with appropriate plugin) or converted 35*a1427eb0SVijay Mahadevan with tools/mbconvert to a VTK or Exodus file. 36*a1427eb0SVijay Mahadevan 37*a1427eb0SVijay Mahadevan This routine can also be used for check-pointing purposes to store a complete history of 38*a1427eb0SVijay Mahadevan the solution along with any other necessary data to restart computations. 39*a1427eb0SVijay Mahadevan 40*a1427eb0SVijay Mahadevan Not Collective 41*a1427eb0SVijay Mahadevan 42*a1427eb0SVijay Mahadevan Input Parameters: 43*a1427eb0SVijay Mahadevan + dm - the discretization manager object containing solution in MOAB tags. 44*a1427eb0SVijay Mahadevan . filename - the name of the output file: e.g., poisson.h5m 45*a1427eb0SVijay Mahadevan - usrwriteopts - the parallel write options needed for serializing a MOAB mesh database. Can be NULL. 46*a1427eb0SVijay Mahadevan Reference (Parallel Mesh Initialization: http://www.mcs.anl.gov/~fathom/moab-docs/html/contents.html#fivetwo) 47*a1427eb0SVijay Mahadevan 48*a1427eb0SVijay Mahadevan Level: intermediate 49*a1427eb0SVijay Mahadevan 50*a1427eb0SVijay Mahadevan .keywords: discretization manager, set, component solution 51*a1427eb0SVijay Mahadevan 52*a1427eb0SVijay Mahadevan .seealso: DMMoabLoadFromFile(), DMMoabSetGlobalFieldVector() 53*a1427eb0SVijay Mahadevan @*/ 548cbae1a6SVijay Mahadevan PetscErrorCode DMMoabOutput(DM dm,const char* filename,const char* usrwriteopts) 558cbae1a6SVijay Mahadevan { 568cbae1a6SVijay Mahadevan DM_Moab *dmmoab; 578cbae1a6SVijay Mahadevan PetscInt dbglevel=0; 588cbae1a6SVijay Mahadevan const char *writeopts; 598cbae1a6SVijay Mahadevan 608cbae1a6SVijay Mahadevan PetscErrorCode ierr; 618cbae1a6SVijay Mahadevan moab::ErrorCode merr; 628cbae1a6SVijay Mahadevan 638cbae1a6SVijay Mahadevan PetscFunctionBegin; 648cbae1a6SVijay Mahadevan PetscValidHeaderSpecific(dm,DM_CLASSID,1); 658cbae1a6SVijay Mahadevan dmmoab = (DM_Moab*)(dm)->data; 668cbae1a6SVijay Mahadevan 678cbae1a6SVijay Mahadevan PetscBarrier((PetscObject)dm); 688cbae1a6SVijay Mahadevan 698cbae1a6SVijay Mahadevan /* TODO: Use command-line options to control by_rank, verbosity, MoabReadMode and extra options */ 708cbae1a6SVijay Mahadevan ierr = PetscOptionsBegin(PETSC_COMM_WORLD, "", "Options for reading/writing MOAB based meshes from file", "DMMoab"); 718cbae1a6SVijay Mahadevan ierr = PetscOptionsInt("-dmmb_rw_dbg", "The verbosity level for reading and writing MOAB meshes", "dmmbutil.cxx", dbglevel, &dbglevel, NULL);CHKERRQ(ierr); 728cbae1a6SVijay Mahadevan ierr = PetscOptionsEnd(); 738cbae1a6SVijay Mahadevan 748cbae1a6SVijay Mahadevan /* add mesh loading options specific to the DM */ 758cbae1a6SVijay Mahadevan ierr = DMMoab_GetWriteOptions_Private(dmmoab->pcomm->get_id(), dmmoab->pcomm->size(), dmmoab->dim, MOAB_PARWOPTS_WRITE_PART, dbglevel, 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