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" 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; 9*6acfe860SVijay 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*6acfe860SVijay Mahadevan ierr = PetscMalloc(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) { 22*6acfe860SVijay Mahadevan ierr = PetscSNPrintf(wopts_par, PETSC_MAX_PATH_LEN, "PARALLEL=%s;",MoabWriteModes[mode]);CHKERRQ(ierr); 23f90c3b0eSVijay Mahadevan if (fsetid >= 0) { 24*6acfe860SVijay 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) { 29*6acfe860SVijay Mahadevan ierr = PetscSNPrintf(wopts_dbg, PETSC_MAX_PATH_LEN, "CPUTIME;DEBUG_IO=%d;",dbglevel);CHKERRQ(ierr); 30f90c3b0eSVijay Mahadevan } 318cbae1a6SVijay Mahadevan 32*6acfe860SVijay 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 42a1427eb0SVijay Mahadevan along with the complete mesh data structure in the native H5M format. This output file 43a1427eb0SVijay Mahadevan can be visualized directly with Paraview (if compiled with appropriate plugin) or converted 44a1427eb0SVijay Mahadevan with 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 49a1427eb0SVijay Mahadevan Not 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. 55a1427eb0SVijay Mahadevan Reference (Parallel Mesh Initialization: http://www.mcs.anl.gov/~fathom/moab-docs/html/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; 678cbae1a6SVijay Mahadevan PetscErrorCode ierr; 688cbae1a6SVijay Mahadevan moab::ErrorCode merr; 698cbae1a6SVijay Mahadevan 708cbae1a6SVijay Mahadevan PetscFunctionBegin; 718cbae1a6SVijay Mahadevan PetscValidHeaderSpecific(dm,DM_CLASSID,1); 728cbae1a6SVijay Mahadevan dmmoab = (DM_Moab*)(dm)->data; 738cbae1a6SVijay Mahadevan 748cbae1a6SVijay Mahadevan /* add mesh loading options specific to the DM */ 752e4e7c01SVijay Mahadevan ierr = DMMoab_GetWriteOptions_Private(dmmoab->pcomm->get_id(), dmmoab->pcomm->size(), dmmoab->dim, dmmoab->write_mode, 762e4e7c01SVijay Mahadevan dmmoab->rw_dbglevel, dmmoab->extra_write_options, usrwriteopts, &writeopts);CHKERRQ(ierr); 778cbae1a6SVijay Mahadevan PetscInfo2(dm, "Writing file %s with options: %s\n",filename,writeopts); 788cbae1a6SVijay Mahadevan 798cbae1a6SVijay Mahadevan /* output file, using parallel write */ 808cbae1a6SVijay Mahadevan merr = dmmoab->mbiface->write_file(filename, NULL, writeopts, &dmmoab->fileset, 1);MBERRVM(dmmoab->mbiface,"Writing output of DMMoab failed.",merr); 81*6acfe860SVijay Mahadevan ierr = PetscFree(writeopts);CHKERRQ(ierr); 828cbae1a6SVijay Mahadevan PetscFunctionReturn(0); 838cbae1a6SVijay Mahadevan } 848cbae1a6SVijay Mahadevan 85