static char help[] = "Test DMView and MeshLoad\n\n"; #include #include #include "petsc.h" #undef __FUNCT__ #define __FUNCT__ "main" int main (int argc, char ** argv) { int ierr; char prefix[PETSC_MAX_PATH_LEN]; char filename[PETSC_MAX_PATH_LEN]; DM smesh,dmesh; PetscViewer viewer; PetscInt mode=0; int rank,numproc; ierr = PetscInitialize(&argc,&argv,(char *)0,help); ierr = PetscOptionsGetString(PETSC_NULL,"-p",prefix,PETSC_MAX_PATH_LEN-1,PETSC_NULL);CHKERRQ(ierr); ierr = PetscOptionsGetInt(PETSC_NULL,"-mode",&mode,PETSC_NULL);CHKERRQ(ierr); ierr = MPI_Comm_size(PETSC_COMM_WORLD,&numproc); ierr = MPI_Comm_rank(PETSC_COMM_WORLD,&rank); if (mode == 0) { #ifdef PETSC_HAVE_EXODUSII ierr = PetscSNPrintf(filename,FILENAME_MAX,"%s.gen",prefix);CHKERRQ(ierr); ierr = PetscPrintf(PETSC_COMM_WORLD,"Reading %s\n",filename);CHKERRQ(ierr); ierr = DMMeshCreateExodus(PETSC_COMM_WORLD,filename,&smesh);CHKERRQ(ierr); ierr = DMView(smesh,PETSC_VIEWER_STDOUT_WORLD);CHKERRQ(ierr); ierr = PetscSNPrintf(filename,FILENAME_MAX,"%s_s.dat",prefix);CHKERRQ(ierr); ierr = PetscPrintf(PETSC_COMM_WORLD,"Writing %s\n",filename);CHKERRQ(ierr); ierr = PetscViewerBinaryOpen(PETSC_COMM_WORLD,filename,FILE_MODE_WRITE,&viewer);CHKERRQ(ierr); ierr = DMView(smesh,viewer);CHKERRQ(ierr); ierr = PetscViewerDestroy(&viewer);CHKERRQ(ierr); ierr = DMMeshDistribute(smesh,PETSC_NULL,&dmesh);CHKERRQ(ierr); ierr = DMView(dmesh,PETSC_VIEWER_STDOUT_WORLD);CHKERRQ(ierr); ierr = PetscSNPrintf(filename,FILENAME_MAX,"%s_d.dat",prefix);CHKERRQ(ierr); ierr = PetscPrintf(PETSC_COMM_WORLD,"Writing %s\n",filename);CHKERRQ(ierr); ierr = PetscViewerBinaryOpen(PETSC_COMM_WORLD,filename,FILE_MODE_WRITE,&viewer);CHKERRQ(ierr); ierr = DMView(dmesh,viewer);CHKERRQ(ierr); ierr = PetscViewerDestroy(&viewer);CHKERRQ(ierr); ierr = DMDestroy(&dmesh);CHKERRQ(ierr); ierr = DMDestroy(&smesh);CHKERRQ(ierr); #else SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,"Reading EXO mesh requires EXODUS II support in PETSc",ierr) #endif } else { ierr = DMMeshCreate(PETSC_COMM_WORLD,&smesh);CHKERRQ(ierr); ierr = DMMeshCreate(PETSC_COMM_WORLD,&dmesh);CHKERRQ(ierr); if (numproc == 1) { ierr = PetscSNPrintf(filename,FILENAME_MAX,"%s_s.dat",prefix);CHKERRQ(ierr); ierr = PetscPrintf(PETSC_COMM_WORLD,"Reading %s\n",filename);CHKERRQ(ierr); ierr = PetscViewerBinaryOpen(PETSC_COMM_WORLD,filename,FILE_MODE_READ,&viewer);CHKERRQ(ierr); ierr = DMMeshLoad(viewer,smesh);CHKERRQ(ierr); ierr = PetscViewerDestroy(&viewer);CHKERRQ(ierr); ierr = DMView(smesh,PETSC_VIEWER_STDOUT_WORLD);CHKERRQ(ierr); ierr = DMDestroy(&smesh);CHKERRQ(ierr); } else { ierr = PetscSNPrintf(filename,FILENAME_MAX,"%s_d.dat",prefix);CHKERRQ(ierr); ierr = PetscPrintf(PETSC_COMM_WORLD,"Reading %s\n",filename);CHKERRQ(ierr); ierr = PetscViewerBinaryOpen(PETSC_COMM_WORLD,filename,FILE_MODE_READ,&viewer);CHKERRQ(ierr); ierr = DMMeshLoad(viewer,dmesh);CHKERRQ(ierr); ierr = PetscViewerDestroy(&viewer);CHKERRQ(ierr); ierr = DMView(dmesh,PETSC_VIEWER_STDOUT_WORLD);CHKERRQ(ierr); ierr = DMDestroy(&dmesh);CHKERRQ(ierr); } } PetscFinalize(); return 0; }