static char help[] = "Tests DMGetCompatibility() with a 3D DMDA.\n\n"; #include #include #include int main(int argc,char **argv) { PetscInt M = 3,N = 5,P=3,s=1,w=2,i,m = PETSC_DECIDE,n = PETSC_DECIDE,p = PETSC_DECIDE; PetscInt *lx = NULL,*ly = NULL,*lz = NULL; PetscBool test_order = PETSC_FALSE; DM da; DMBoundaryType bx = DM_BOUNDARY_NONE,by = DM_BOUNDARY_NONE,bz = DM_BOUNDARY_NONE; DMDAStencilType stencil_type = DMDA_STENCIL_BOX; PetscBool flg = PETSC_FALSE,distribute = PETSC_FALSE; PetscFunctionBeginUser; PetscCall(PetscInitialize(&argc,&argv,(char*)0,help)); /* Read options */ PetscCall(PetscOptionsGetInt(NULL,NULL,"-NX",&M,NULL)); PetscCall(PetscOptionsGetInt(NULL,NULL,"-NY",&N,NULL)); PetscCall(PetscOptionsGetInt(NULL,NULL,"-NZ",&P,NULL)); PetscCall(PetscOptionsGetInt(NULL,NULL,"-m",&m,NULL)); PetscCall(PetscOptionsGetInt(NULL,NULL,"-n",&n,NULL)); PetscCall(PetscOptionsGetInt(NULL,NULL,"-p",&p,NULL)); PetscCall(PetscOptionsGetInt(NULL,NULL,"-s",&s,NULL)); PetscCall(PetscOptionsGetInt(NULL,NULL,"-w",&w,NULL)); flg = PETSC_FALSE; PetscCall(PetscOptionsGetBool(NULL,NULL,"-star",&flg,NULL)); if (flg) stencil_type = DMDA_STENCIL_STAR; flg = PETSC_FALSE; PetscCall(PetscOptionsGetBool(NULL,NULL,"-box",&flg,NULL)); if (flg) stencil_type = DMDA_STENCIL_BOX; flg = PETSC_FALSE; PetscCall(PetscOptionsGetBool(NULL,NULL,"-xperiodic",&flg,NULL)); if (flg) bx = DM_BOUNDARY_PERIODIC; flg = PETSC_FALSE; PetscCall(PetscOptionsGetBool(NULL,NULL,"-xghosted",&flg,NULL)); if (flg) bx = DM_BOUNDARY_GHOSTED; flg = PETSC_FALSE; PetscCall(PetscOptionsGetBool(NULL,NULL,"-xnonghosted",&flg,NULL)); flg = PETSC_FALSE; PetscCall(PetscOptionsGetBool(NULL,NULL,"-yperiodic",&flg,NULL)); if (flg) by = DM_BOUNDARY_PERIODIC; flg = PETSC_FALSE; PetscCall(PetscOptionsGetBool(NULL,NULL,"-yghosted",&flg,NULL)); if (flg) by = DM_BOUNDARY_GHOSTED; flg = PETSC_FALSE; PetscCall(PetscOptionsGetBool(NULL,NULL,"-ynonghosted",&flg,NULL)); flg = PETSC_FALSE; PetscCall(PetscOptionsGetBool(NULL,NULL,"-zperiodic",&flg,NULL)); if (flg) bz = DM_BOUNDARY_PERIODIC; flg = PETSC_FALSE; PetscCall(PetscOptionsGetBool(NULL,NULL,"-zghosted",&flg,NULL)); if (flg) bz = DM_BOUNDARY_GHOSTED; flg = PETSC_FALSE; PetscCall(PetscOptionsGetBool(NULL,NULL,"-znonghosted",&flg,NULL)); PetscCall(PetscOptionsGetBool(NULL,NULL,"-testorder",&test_order,NULL)); flg = PETSC_FALSE; PetscCall(PetscOptionsGetBool(NULL,NULL,"-distribute",&distribute,NULL)); if (distribute) { PetscCheck(m != PETSC_DECIDE,PETSC_COMM_WORLD,PETSC_ERR_USER_INPUT,"Must set -m option with -distribute option"); PetscCall(PetscMalloc1(m,&lx)); for (i=0; i 1) { /* Confirm incompatibility with different local size */ { DM da2; PetscBool compatible,set; PetscMPIInt rank; PetscInt *lz2; PetscCall(PetscMalloc1(p,&lz2)); for (i=0; i