Actual source code: ex42.c
1: static char help[] = "Test DMCreateFieldDecomposition_Stag()\n\n";
3: #include <petscdm.h>
4: #include <petscdmstag.h>
6: int main(int argc, char **argv)
7: {
8: DM dm;
9: DM *sub_dms;
10: PetscInt dim, n_fields;
11: IS *fields;
12: char **field_names;
14: PetscFunctionBeginUser;
15: PetscCall(PetscInitialize(&argc, &argv, (char *)0, help));
16: dim = 2;
17: PetscCall(PetscOptionsGetInt(NULL, NULL, "-dim", &dim, NULL));
19: switch (dim) {
20: case 1:
21: PetscCall(DMStagCreate1d(PETSC_COMM_WORLD, DM_BOUNDARY_NONE, 3, 1, 1, DMSTAG_STENCIL_BOX, 1, NULL, &dm));
22: break;
23: case 2:
24: PetscCall(DMStagCreate2d(PETSC_COMM_WORLD, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE, 3, 2, PETSC_DECIDE, PETSC_DECIDE, 1, 1, 1, DMSTAG_STENCIL_BOX, 1, NULL, NULL, &dm));
25: break;
26: case 3:
27: PetscCall(DMStagCreate3d(PETSC_COMM_WORLD, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE, 3, 2, 4, PETSC_DECIDE, PETSC_DECIDE, PETSC_DECIDE, 1, 1, 1, 1, DMSTAG_STENCIL_BOX, 1, NULL, NULL, NULL, &dm));
28: break;
29: default:
30: SETERRQ(PETSC_COMM_WORLD, PETSC_ERR_SUP, "No support for dimension %" PetscInt_FMT, dim);
31: }
33: PetscCall(DMSetFromOptions(dm));
34: PetscCall(DMSetUp(dm));
35: PetscCall(DMView(dm, PETSC_VIEWER_STDOUT_WORLD));
37: PetscCall(DMCreateFieldDecomposition(dm, &n_fields, &field_names, &fields, &sub_dms));
38: for (PetscInt i = 0; i < n_fields; ++i) {
39: PetscCall(PetscPrintf(PETSC_COMM_WORLD, "%" PetscInt_FMT " %s\n", i, field_names[i]));
40: PetscCall(ISView(fields[i], PETSC_VIEWER_STDOUT_WORLD));
41: PetscCall(DMView(sub_dms[i], PETSC_VIEWER_STDOUT_WORLD));
42: }
44: for (PetscInt i = 0; i < n_fields; ++i) {
45: PetscCall(PetscFree(field_names[i]));
46: PetscCall(ISDestroy(&fields[i]));
47: PetscCall(DMDestroy(&sub_dms[i]));
48: }
49: PetscCall(PetscFree(fields));
50: PetscCall(PetscFree(field_names));
51: PetscCall(PetscFree(sub_dms));
52: PetscCall(DMDestroy(&dm));
53: PetscCall(PetscFinalize());
54: return 0;
55: }
57: /*TEST
59: test:
60: nsize: 2
61: args: -dim {{1 2 3}separate output}
63: TEST*/