static char help[] = "Tests various 2-dimensional DMDA routines.\n\n"; #include #include int main(int argc,char **argv) { PetscMPIInt rank; PetscInt M = 10,N = 8,m = PETSC_DECIDE; PetscInt s =2,w=2,n = PETSC_DECIDE,nloc,l,i,j,kk; PetscInt Xs,Xm,Ys,Ym,iloc,*iglobal; const PetscInt *ltog; PetscInt *lx = NULL,*ly = NULL; PetscBool testorder = PETSC_FALSE,flg; DMBoundaryType bx = DM_BOUNDARY_NONE,by= DM_BOUNDARY_NONE; DM da; PetscViewer viewer; Vec local,global; PetscScalar value; DMDAStencilType st = DMDA_STENCIL_BOX; AO ao; PetscCall(PetscInitialize(&argc,&argv,(char*)0,help)); PetscCall(PetscViewerDrawOpen(PETSC_COMM_WORLD,0,"",300,0,400,400,&viewer)); /* Readoptions */ PetscCall(PetscOptionsGetInt(NULL,NULL,"-NX",&M,NULL)); PetscCall(PetscOptionsGetInt(NULL,NULL,"-NY",&N,NULL)); PetscCall(PetscOptionsGetInt(NULL,NULL,"-m",&m,NULL)); PetscCall(PetscOptionsGetInt(NULL,NULL,"-n",&n,NULL)); PetscCall(PetscOptionsGetInt(NULL,NULL,"-s",&s,NULL)); PetscCall(PetscOptionsGetInt(NULL,NULL,"-w",&w,NULL)); flg = PETSC_FALSE; PetscCall(PetscOptionsGetBool(NULL,NULL,"-xperiodic",&flg,NULL)); if (flg) bx = DM_BOUNDARY_PERIODIC; flg = PETSC_FALSE; PetscCall(PetscOptionsGetBool(NULL,NULL,"-yperiodic",&flg,NULL)); if (flg) by = 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,"-yghosted",&flg,NULL)); if (flg) by = DM_BOUNDARY_GHOSTED; flg = PETSC_FALSE; PetscCall(PetscOptionsGetBool(NULL,NULL,"-star",&flg,NULL)); if (flg) st = DMDA_STENCIL_STAR; flg = PETSC_FALSE; PetscCall(PetscOptionsGetBool(NULL,NULL,"-box",&flg,NULL)); if (flg) st = DMDA_STENCIL_BOX; flg = PETSC_FALSE; PetscCall(PetscOptionsGetBool(NULL,NULL,"-testorder",&testorder,NULL)); /* Test putting two nodes in x and y on each processor, exact last processor in x and y gets the rest. */ flg = PETSC_FALSE; PetscCall(PetscOptionsGetBool(NULL,NULL,"-distribute",&flg,NULL)); if (flg) { 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