Actual source code: ex5.c
1: /*
2: Test DMCreateMatrix() for structure_only
3: */
5: #include <petscdmda.h>
7: int main(int argc, char *argv[])
8: {
9: PetscInt nx = 6, ny = 6, nz = 6, dim = 1, dof = 2;
10: DM da;
11: Mat A;
12: PetscBool struct_only = PETSC_TRUE;
14: PetscFunctionBeginUser;
15: PetscCall(PetscInitialize(&argc, &argv, NULL, NULL));
16: PetscCall(PetscOptionsGetInt(NULL, NULL, "-dim", &dim, NULL));
17: PetscCall(PetscOptionsGetInt(NULL, NULL, "-dof", &dof, NULL));
18: switch (dim) {
19: case 1:
20: PetscCall(DMDACreate1d(PETSC_COMM_WORLD, DM_BOUNDARY_NONE, nx, dof, 1, NULL, &da));
21: break;
22: case 2:
23: PetscCall(DMDACreate2d(PETSC_COMM_WORLD, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE, DMDA_STENCIL_STAR, nx, ny, PETSC_DECIDE, PETSC_DECIDE, dof, 1, NULL, NULL, &da));
24: break;
25: default:
26: PetscCall(DMDACreate3d(PETSC_COMM_WORLD, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE, DM_BOUNDARY_NONE, DMDA_STENCIL_BOX, nx, ny, nz, PETSC_DECIDE, PETSC_DECIDE, PETSC_DECIDE, dof, 2, NULL, NULL, NULL, &da));
27: }
29: PetscCall(DMSetFromOptions(da));
30: PetscCall(DMSetUp(da));
31: PetscCall(DMView(da, PETSC_VIEWER_STDOUT_WORLD));
33: PetscCall(PetscOptionsGetBool(NULL, NULL, "-struct_only", &struct_only, NULL));
34: PetscCall(DMSetMatrixStructureOnly(da, struct_only));
35: PetscCall(DMCreateMatrix(da, &A));
36: /* Set da->structure_only to default PETSC_FALSE in case da is being used to create new matrices */
37: PetscCall(DMSetMatrixStructureOnly(da, PETSC_FALSE));
39: PetscCall(MatView(A, PETSC_VIEWER_STDOUT_WORLD));
40: PetscCall(MatDestroy(&A));
41: PetscCall(DMDestroy(&da));
42: PetscCall(PetscFinalize());
43: return 0;
44: }
46: /*TEST
48: test:
50: test:
51: suffix: 2
52: args: -dm_mat_type baij -dim 2
54: TEST*/