1c4762a1bSJed Brown static const char help[] = "Test DMDAGetOwnershipRanges()\n";
2c4762a1bSJed Brown
3c4762a1bSJed Brown #include <petscdm.h>
4c4762a1bSJed Brown #include <petscdmda.h>
5c4762a1bSJed Brown
main(int argc,char * argv[])6*d71ae5a4SJacob Faibussowitsch int main(int argc, char *argv[])
7*d71ae5a4SJacob Faibussowitsch {
8c4762a1bSJed Brown DM da;
9c4762a1bSJed Brown PetscViewer vw;
10c4762a1bSJed Brown PetscInt dim = 2, m, n, p;
11c4762a1bSJed Brown const PetscInt *lx, *ly, *lz;
12c4762a1bSJed Brown PetscMPIInt rank;
13c4762a1bSJed Brown
14327415f7SBarry Smith PetscFunctionBeginUser;
159566063dSJacob Faibussowitsch PetscCall(PetscInitialize(&argc, &argv, 0, help));
169566063dSJacob Faibussowitsch PetscCall(PetscOptionsGetInt(NULL, 0, "-dim", &dim, 0));
17c4762a1bSJed Brown switch (dim) {
18*d71ae5a4SJacob Faibussowitsch case 2:
19*d71ae5a4SJacob Faibussowitsch PetscCall(DMDACreate2d(PETSC_COMM_WORLD, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE, DMDA_STENCIL_STAR, 3, 5, PETSC_DECIDE, PETSC_DECIDE, 2, 1, NULL, NULL, &da));
20*d71ae5a4SJacob Faibussowitsch break;
21*d71ae5a4SJacob Faibussowitsch case 3:
22*d71ae5a4SJacob Faibussowitsch PetscCall(DMDACreate3d(PETSC_COMM_WORLD, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE, DMDA_STENCIL_STAR, 3, 5, 7, PETSC_DECIDE, PETSC_DECIDE, PETSC_DECIDE, 2, 1, NULL, NULL, NULL, &da));
23*d71ae5a4SJacob Faibussowitsch break;
24*d71ae5a4SJacob Faibussowitsch default:
25*d71ae5a4SJacob Faibussowitsch SETERRQ(PETSC_COMM_WORLD, PETSC_ERR_SUP, "No support for %" PetscInt_FMT " dimensions", dim);
26c4762a1bSJed Brown }
279566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(da));
289566063dSJacob Faibussowitsch PetscCall(DMSetUp(da));
299566063dSJacob Faibussowitsch PetscCall(DMDAGetInfo(da, 0, 0, 0, 0, &m, &n, &p, 0, 0, 0, 0, 0, 0));
309566063dSJacob Faibussowitsch PetscCall(DMDAGetOwnershipRanges(da, &lx, &ly, &lz));
319566063dSJacob Faibussowitsch PetscCallMPI(MPI_Comm_rank(PETSC_COMM_WORLD, &rank));
32c4762a1bSJed Brown
339566063dSJacob Faibussowitsch PetscCall(PetscViewerGetSubViewer(PETSC_VIEWER_STDOUT_WORLD, PETSC_COMM_SELF, &vw));
349566063dSJacob Faibussowitsch PetscCall(PetscViewerASCIIPrintf(vw, "[%d] lx ly%s\n", rank, dim > 2 ? " lz" : ""));
359566063dSJacob Faibussowitsch PetscCall(PetscIntView(m, lx, vw));
369566063dSJacob Faibussowitsch PetscCall(PetscIntView(n, ly, vw));
379566063dSJacob Faibussowitsch if (dim > 2) PetscCall(PetscIntView(n, lz, vw));
389566063dSJacob Faibussowitsch PetscCall(PetscViewerRestoreSubViewer(PETSC_VIEWER_STDOUT_WORLD, PETSC_COMM_SELF, &vw));
399566063dSJacob Faibussowitsch PetscCall(DMDestroy(&da));
409566063dSJacob Faibussowitsch PetscCall(PetscFinalize());
41b122ec5aSJacob Faibussowitsch return 0;
42c4762a1bSJed Brown }
43c4762a1bSJed Brown
44c4762a1bSJed Brown /*TEST
45c4762a1bSJed Brown
46c4762a1bSJed Brown test:
47c4762a1bSJed Brown nsize: 12
48c4762a1bSJed Brown args: -dm_view -dim 3 -da_grid_x 11 -da_grid_y 5 -da_grid_z 7
49c4762a1bSJed Brown
50c4762a1bSJed Brown TEST*/
51