1af0996ceSBarry Smith #include <petsc/private/dmmbimpl.h> /*I "petscdmmoab.h" I*/ 28cbae1a6SVijay Mahadevan #include <petscdmmoab.h> 38cbae1a6SVijay Mahadevan 42e4e7c01SVijay 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) 58cbae1a6SVijay Mahadevan { 6f90c3b0eSVijay Mahadevan PetscErrorCode ierr; 76acfe860SVijay Mahadevan char *wopts; 861eb6e27SVijay Mahadevan char wopts_par[PETSC_MAX_PATH_LEN]; 961eb6e27SVijay Mahadevan char wopts_parid[PETSC_MAX_PATH_LEN]; 1061eb6e27SVijay Mahadevan char wopts_dbg[PETSC_MAX_PATH_LEN]; 118cbae1a6SVijay Mahadevan PetscFunctionBegin; 128cbae1a6SVijay Mahadevan 1395dccacaSBarry Smith ierr = PetscMalloc1(PETSC_MAX_PATH_LEN,&wopts);CHKERRQ(ierr); 1461eb6e27SVijay Mahadevan ierr = PetscMemzero(&wopts_par,PETSC_MAX_PATH_LEN);CHKERRQ(ierr); 1561eb6e27SVijay Mahadevan ierr = PetscMemzero(&wopts_parid,PETSC_MAX_PATH_LEN);CHKERRQ(ierr); 1661eb6e27SVijay Mahadevan ierr = PetscMemzero(&wopts_dbg,PETSC_MAX_PATH_LEN);CHKERRQ(ierr); 1761eb6e27SVijay Mahadevan 188cbae1a6SVijay Mahadevan // do parallel read unless only one processor 198cbae1a6SVijay Mahadevan if (numproc > 1) { 206acfe860SVijay Mahadevan ierr = PetscSNPrintf(wopts_par, PETSC_MAX_PATH_LEN, "PARALLEL=%s;",MoabWriteModes[mode]);CHKERRQ(ierr); 21f90c3b0eSVijay Mahadevan if (fsetid >= 0) { 226acfe860SVijay Mahadevan ierr = PetscSNPrintf(wopts_parid, PETSC_MAX_PATH_LEN, "PARALLEL_COMM=%d;",fsetid);CHKERRQ(ierr); 23f90c3b0eSVijay Mahadevan } 248cbae1a6SVijay Mahadevan } 258cbae1a6SVijay Mahadevan 26f90c3b0eSVijay Mahadevan if (dbglevel) { 276acfe860SVijay Mahadevan ierr = PetscSNPrintf(wopts_dbg, PETSC_MAX_PATH_LEN, "CPUTIME;DEBUG_IO=%d;",dbglevel);CHKERRQ(ierr); 28f90c3b0eSVijay Mahadevan } 298cbae1a6SVijay Mahadevan 306acfe860SVijay 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); 31f90c3b0eSVijay Mahadevan *write_opts=wopts; 328cbae1a6SVijay Mahadevan PetscFunctionReturn(0); 338cbae1a6SVijay Mahadevan } 348cbae1a6SVijay Mahadevan 358cbae1a6SVijay Mahadevan 36a1427eb0SVijay Mahadevan /*@C 37a1427eb0SVijay Mahadevan DMMoabOutput - Output the solution vectors that are stored in the DMMoab object as tags 3863aba298SVijay Mahadevan along with the complete mesh data structure in the native H5M or VTK format. The H5M output file 39a1427eb0SVijay Mahadevan can be visualized directly with Paraview (if compiled with appropriate plugin) or converted 4063aba298SVijay Mahadevan with MOAB/tools/mbconvert to a VTK or Exodus file. 41a1427eb0SVijay Mahadevan 42a1427eb0SVijay Mahadevan This routine can also be used for check-pointing purposes to store a complete history of 43a1427eb0SVijay Mahadevan the solution along with any other necessary data to restart computations. 44a1427eb0SVijay Mahadevan 4563aba298SVijay Mahadevan Collective 46a1427eb0SVijay Mahadevan 47a1427eb0SVijay Mahadevan Input Parameters: 48a1427eb0SVijay Mahadevan + dm - the discretization manager object containing solution in MOAB tags. 49a1427eb0SVijay Mahadevan . filename - the name of the output file: e.g., poisson.h5m 50a1427eb0SVijay Mahadevan - usrwriteopts - the parallel write options needed for serializing a MOAB mesh database. Can be NULL. 5163aba298SVijay Mahadevan Reference (Parallel Mesh Initialization: http://ftp.mcs.anl.gov/pub/fathom/moab-docs/contents.html#fivetwo) 52a1427eb0SVijay Mahadevan 53a1427eb0SVijay Mahadevan Level: intermediate 54a1427eb0SVijay Mahadevan 55a1427eb0SVijay Mahadevan .keywords: discretization manager, set, component solution 56a1427eb0SVijay Mahadevan 57a1427eb0SVijay Mahadevan .seealso: DMMoabLoadFromFile(), DMMoabSetGlobalFieldVector() 58a1427eb0SVijay Mahadevan @*/ 598cbae1a6SVijay Mahadevan PetscErrorCode DMMoabOutput(DM dm,const char* filename,const char* usrwriteopts) 608cbae1a6SVijay Mahadevan { 618cbae1a6SVijay Mahadevan DM_Moab *dmmoab; 628cbae1a6SVijay Mahadevan const char *writeopts; 6363aba298SVijay Mahadevan PetscBool isftype; 648cbae1a6SVijay Mahadevan PetscErrorCode ierr; 658cbae1a6SVijay Mahadevan moab::ErrorCode merr; 668cbae1a6SVijay Mahadevan 678cbae1a6SVijay Mahadevan PetscFunctionBegin; 688cbae1a6SVijay Mahadevan PetscValidHeaderSpecific(dm,DM_CLASSID,1); 698cbae1a6SVijay Mahadevan dmmoab = (DM_Moab*)(dm)->data; 708cbae1a6SVijay Mahadevan 7163aba298SVijay Mahadevan ierr = PetscStrendswith(filename,"h5m",&isftype);CHKERRQ(ierr); 7263aba298SVijay Mahadevan 738cbae1a6SVijay Mahadevan /* add mesh loading options specific to the DM */ 7463aba298SVijay Mahadevan if (isftype) { 75*9daf19fdSVijay Mahadevan #ifdef MOAB_HAVE_MPI 762e4e7c01SVijay Mahadevan ierr = DMMoab_GetWriteOptions_Private(dmmoab->pcomm->get_id(), dmmoab->pcomm->size(), dmmoab->dim, dmmoab->write_mode, 772e4e7c01SVijay Mahadevan dmmoab->rw_dbglevel, dmmoab->extra_write_options, usrwriteopts, &writeopts);CHKERRQ(ierr); 78*9daf19fdSVijay Mahadevan #else 79*9daf19fdSVijay Mahadevan ierr = DMMoab_GetWriteOptions_Private(0, 1, dmmoab->dim, dmmoab->write_mode, 80*9daf19fdSVijay Mahadevan dmmoab->rw_dbglevel, dmmoab->extra_write_options, usrwriteopts, &writeopts);CHKERRQ(ierr); 81*9daf19fdSVijay Mahadevan #endif 828cbae1a6SVijay Mahadevan PetscInfo2(dm, "Writing file %s with options: %s\n",filename,writeopts); 8363aba298SVijay Mahadevan } 8463aba298SVijay Mahadevan else { 8563aba298SVijay Mahadevan writeopts=NULL; 8663aba298SVijay Mahadevan } 878cbae1a6SVijay Mahadevan 888cbae1a6SVijay Mahadevan /* output file, using parallel write */ 898cbae1a6SVijay Mahadevan merr = dmmoab->mbiface->write_file(filename, NULL, writeopts, &dmmoab->fileset, 1);MBERRVM(dmmoab->mbiface,"Writing output of DMMoab failed.",merr); 906acfe860SVijay Mahadevan ierr = PetscFree(writeopts);CHKERRQ(ierr); 918cbae1a6SVijay Mahadevan PetscFunctionReturn(0); 928cbae1a6SVijay Mahadevan } 938cbae1a6SVijay Mahadevan 94