int main (int argc,char ** argv) { DM dmBody,dmFS; DM dmBodyDist,dmFSDist; ALE::Obj<PETSC_MESH_TYPE> meshBody,meshBodyDist,meshFS,meshFSDist; PetscBool inflag,outflag; char infilename[PETSC_MAX_PATH_LEN+1],outfilename[PETSC_MAX_PATH_LEN+1]; PetscViewer viewer; int rank,numproc; PetscErrorCode ierr; ierr = PetscInitialize(&argc,&argv,(char *)0,help);CHKERRQ(ierr); ierr = PetscOptionsGetString(PETSC_NULL,"-i",infilename,PETSC_MAX_PATH_LEN,&inflag);CHKERRQ(ierr); ierr = MPI_Comm_size(PETSC_COMM_WORLD,&numproc); ierr = MPI_Comm_rank(PETSC_COMM_WORLD,&rank); if (inflag) { ierr = MyDMMeshCreateExodus(PETSC_COMM_WORLD,infilename,&dmBody,&dmFS);CHKERRQ(ierr); ierr = DMMeshGetMesh(dmBody,meshBody);CHKERRQ(ierr); meshBody->view("meshBody"); ierr = DMMeshGetMesh(dmFS,meshFS);CHKERRQ(ierr); meshFS->view("meshFS"); if (numproc > 1) { ierr = DMMeshDistribute(dmBody,PETSC_NULL,&dmBodyDist);CHKERRQ(ierr); //ierr = DMMeshDistribute(dmFS,PETSC_NULL,&dmFSDist);CHKERRQ(ierr); ierr = DMMeshGetMesh(dmBodyDist,meshBodyDist);CHKERRQ(ierr); meshBodyDist->view("meshBodyDist"); //ierr = DMMeshGetMesh(dmFSDist,meshFSDist);CHKERRQ(ierr); //meshFSDist->view("meshFS"); //ierr = DMDestroy(&dmBodyDist);CHKERRQ(ierr); //ierr = DMDestroy(&dmFSDist);CHKERRQ(ierr); } //ierr = DMDestroy(&dmBody);CHKERRQ(ierr); //ierr = DMDestroy(&dmFS);CHKERRQ(ierr); } else { ierr = PetscPrintf(PETSC_COMM_WORLD,"No file name given\n");CHKERRQ(ierr); } ierr = PetscFinalize(); return 0; }
PetscErrorCode CreateMesh(MPI_Comm comm, AppCtx *user, DM *dm) { PetscInt dim = user->dim; PetscBool interpolate = user->interpolate; PetscReal refinementLimit = user->refinementLimit; PetscErrorCode ierr; PetscFunctionBegin; ierr = PetscLogEventBegin(user->createMeshEvent,0,0,0,0); CHKERRQ(ierr); ierr = DMMeshCreateBoxMesh(comm, dim, interpolate, dm); CHKERRQ(ierr); { DM refinedMesh = NULL; DM distributedMesh = NULL; const char *partitioner = user->partitioner; /* Refine mesh using a volume constraint */ ierr = DMMeshRefine(*dm, refinementLimit, interpolate, &refinedMesh); CHKERRQ(ierr); if (refinedMesh) { ierr = DMDestroy(dm); CHKERRQ(ierr); *dm = refinedMesh; } /* Distribute mesh over processes */ ierr = DMMeshDistribute(*dm, partitioner, &distributedMesh); CHKERRQ(ierr); if (distributedMesh) { ierr = DMDestroy(dm); CHKERRQ(ierr); *dm = distributedMesh; } } ierr = DMSetFromOptions(*dm); CHKERRQ(ierr); ierr = PetscLogEventEnd(user->createMeshEvent,0,0,0,0); CHKERRQ(ierr); user->dm = *dm; PetscFunctionReturn(0); }