PetscErrorCode DMPlexCreateHexBoxMesh(MPI_Comm comm, PetscInt dim, const PetscInt cells[], DM *dm) { PetscErrorCode ierr; PetscFunctionBegin; PetscValidPointer(dm, 4); ierr = DMCreate(comm, dm);CHKERRQ(ierr); PetscValidLogicalCollectiveInt(*dm,dim,2); ierr = DMSetType(*dm, DMPLEX);CHKERRQ(ierr); ierr = DMPlexSetDimension(*dm, dim);CHKERRQ(ierr); switch (dim) { case 2: { PetscReal lower[2] = {0.0, 0.0}; PetscReal upper[2] = {1.0, 1.0}; ierr = DMPlexCreateSquareMesh(*dm, lower, upper, cells);CHKERRQ(ierr); break; } #if 0 case 3: { PetscReal lower[3] = {0.0, 0.0, 0.0}; PetscReal upper[3] = {1.0, 1.0, 1.0}; ierr = DMPlexCreateCubeMesh(boundary, lower, upper, cells);CHKERRQ(ierr); break; } #endif default: SETERRQ1(comm, PETSC_ERR_SUP, "Dimension not supported: %d", dim); } PetscFunctionReturn(0); }
PETSC_EXTERN void PETSC_STDCALL dmplexcreatesquaremesh_(DM dm, PetscReal lower[], PetscReal upper[], PetscInt edges[],DMBoundaryType *bdX,DMBoundaryType *bdY, int *__ierr ){ *__ierr = DMPlexCreateSquareMesh( (DM)PetscToPointer((dm) ),lower,upper,edges,*bdX,*bdY); }