1b8ecf6d3SVijay Mahadevan #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" 6*2e4e7c01SVijay 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 { 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) { 14*2e4e7c01SVijay Mahadevan str << "PARALLEL=" << MoabWriteModes[mode] << ";"; 158cbae1a6SVijay Mahadevan if (fsetid>=0) str << "PARALLEL_COMM=" << fsetid << ";"; 168cbae1a6SVijay Mahadevan } 178cbae1a6SVijay Mahadevan 18*2e4e7c01SVijay Mahadevan if (strlen(dm_opts)) { 19*2e4e7c01SVijay Mahadevan str << dm_opts << ";"; 20*2e4e7c01SVijay Mahadevan } 21*2e4e7c01SVijay Mahadevan 228cbae1a6SVijay Mahadevan if (dbglevel) 238cbae1a6SVijay Mahadevan str << "CPUTIME;DEBUG_IO=" << dbglevel << ";"; 248cbae1a6SVijay Mahadevan 258cbae1a6SVijay Mahadevan if (extra_opts) 268cbae1a6SVijay Mahadevan str << extra_opts ; 278cbae1a6SVijay Mahadevan 288cbae1a6SVijay Mahadevan *write_opts = str.str().c_str(); 298cbae1a6SVijay Mahadevan PetscFunctionReturn(0); 308cbae1a6SVijay Mahadevan } 318cbae1a6SVijay Mahadevan 328cbae1a6SVijay Mahadevan 338cbae1a6SVijay Mahadevan #undef __FUNCT__ 348cbae1a6SVijay Mahadevan #define __FUNCT__ "DMMoabOutput" 35a1427eb0SVijay Mahadevan /*@C 36a1427eb0SVijay Mahadevan DMMoabOutput - Output the solution vectors that are stored in the DMMoab object as tags 37a1427eb0SVijay Mahadevan along with the complete mesh data structure in the native H5M format. This output file 38a1427eb0SVijay Mahadevan can be visualized directly with Paraview (if compiled with appropriate plugin) or converted 39a1427eb0SVijay Mahadevan with tools/mbconvert to a VTK or Exodus file. 40a1427eb0SVijay Mahadevan 41a1427eb0SVijay Mahadevan This routine can also be used for check-pointing purposes to store a complete history of 42a1427eb0SVijay Mahadevan the solution along with any other necessary data to restart computations. 43a1427eb0SVijay Mahadevan 44a1427eb0SVijay Mahadevan Not Collective 45a1427eb0SVijay Mahadevan 46a1427eb0SVijay Mahadevan Input Parameters: 47a1427eb0SVijay Mahadevan + dm - the discretization manager object containing solution in MOAB tags. 48a1427eb0SVijay Mahadevan . filename - the name of the output file: e.g., poisson.h5m 49a1427eb0SVijay Mahadevan - usrwriteopts - the parallel write options needed for serializing a MOAB mesh database. Can be NULL. 50a1427eb0SVijay Mahadevan Reference (Parallel Mesh Initialization: http://www.mcs.anl.gov/~fathom/moab-docs/html/contents.html#fivetwo) 51a1427eb0SVijay Mahadevan 52a1427eb0SVijay Mahadevan Level: intermediate 53a1427eb0SVijay Mahadevan 54a1427eb0SVijay Mahadevan .keywords: discretization manager, set, component solution 55a1427eb0SVijay Mahadevan 56a1427eb0SVijay Mahadevan .seealso: DMMoabLoadFromFile(), DMMoabSetGlobalFieldVector() 57a1427eb0SVijay Mahadevan @*/ 588cbae1a6SVijay Mahadevan PetscErrorCode DMMoabOutput(DM dm,const char* filename,const char* usrwriteopts) 598cbae1a6SVijay Mahadevan { 608cbae1a6SVijay Mahadevan DM_Moab *dmmoab; 618cbae1a6SVijay Mahadevan const char *writeopts; 628cbae1a6SVijay Mahadevan PetscErrorCode ierr; 638cbae1a6SVijay Mahadevan moab::ErrorCode merr; 648cbae1a6SVijay Mahadevan 658cbae1a6SVijay Mahadevan PetscFunctionBegin; 668cbae1a6SVijay Mahadevan PetscValidHeaderSpecific(dm,DM_CLASSID,1); 678cbae1a6SVijay Mahadevan dmmoab = (DM_Moab*)(dm)->data; 688cbae1a6SVijay Mahadevan 698cbae1a6SVijay Mahadevan /* add mesh loading options specific to the DM */ 70*2e4e7c01SVijay Mahadevan ierr = DMMoab_GetWriteOptions_Private(dmmoab->pcomm->get_id(), dmmoab->pcomm->size(), dmmoab->dim, dmmoab->write_mode, 71*2e4e7c01SVijay Mahadevan dmmoab->rw_dbglevel, dmmoab->extra_write_options, usrwriteopts, &writeopts);CHKERRQ(ierr); 728cbae1a6SVijay Mahadevan PetscInfo2(dm, "Writing file %s with options: %s\n",filename,writeopts); 738cbae1a6SVijay Mahadevan 748cbae1a6SVijay Mahadevan /* output file, using parallel write */ 758cbae1a6SVijay Mahadevan merr = dmmoab->mbiface->write_file(filename, NULL, writeopts, &dmmoab->fileset, 1);MBERRVM(dmmoab->mbiface,"Writing output of DMMoab failed.",merr); 768cbae1a6SVijay Mahadevan PetscFunctionReturn(0); 778cbae1a6SVijay Mahadevan } 788cbae1a6SVijay Mahadevan 79