xref: /petsc/src/dm/tests/ex5.c (revision 061e922f3926be00487707c73b78dd3d40309129)
1c4762a1bSJed Brown /*
2c4762a1bSJed Brown   Test DMCreateMatrix() for structure_only
3c4762a1bSJed Brown */
4c4762a1bSJed Brown 
5c4762a1bSJed Brown #include <petscdmda.h>
6c4762a1bSJed Brown 
main(int argc,char * argv[])7*d71ae5a4SJacob Faibussowitsch int main(int argc, char *argv[])
8*d71ae5a4SJacob Faibussowitsch {
9c4762a1bSJed Brown   PetscInt  nx = 6, ny = 6, nz = 6, dim = 1, dof = 2;
10c4762a1bSJed Brown   DM        da;
11c4762a1bSJed Brown   Mat       A;
12c4762a1bSJed Brown   PetscBool struct_only = PETSC_TRUE;
13c4762a1bSJed Brown 
14327415f7SBarry Smith   PetscFunctionBeginUser;
159566063dSJacob Faibussowitsch   PetscCall(PetscInitialize(&argc, &argv, NULL, NULL));
169566063dSJacob Faibussowitsch   PetscCall(PetscOptionsGetInt(NULL, NULL, "-dim", &dim, NULL));
179566063dSJacob Faibussowitsch   PetscCall(PetscOptionsGetInt(NULL, NULL, "-dof", &dof, NULL));
18c4762a1bSJed Brown   switch (dim) {
19*d71ae5a4SJacob Faibussowitsch   case 1:
20*d71ae5a4SJacob Faibussowitsch     PetscCall(DMDACreate1d(PETSC_COMM_WORLD, DM_BOUNDARY_NONE, nx, dof, 1, NULL, &da));
21*d71ae5a4SJacob Faibussowitsch     break;
22*d71ae5a4SJacob Faibussowitsch   case 2:
23*d71ae5a4SJacob Faibussowitsch     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*d71ae5a4SJacob Faibussowitsch     break;
25*d71ae5a4SJacob Faibussowitsch   default:
26*d71ae5a4SJacob Faibussowitsch     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));
27c4762a1bSJed Brown   }
28c4762a1bSJed Brown 
299566063dSJacob Faibussowitsch   PetscCall(DMSetFromOptions(da));
309566063dSJacob Faibussowitsch   PetscCall(DMSetUp(da));
319566063dSJacob Faibussowitsch   PetscCall(DMView(da, PETSC_VIEWER_STDOUT_WORLD));
32c4762a1bSJed Brown 
339566063dSJacob Faibussowitsch   PetscCall(PetscOptionsGetBool(NULL, NULL, "-struct_only", &struct_only, NULL));
349566063dSJacob Faibussowitsch   PetscCall(DMSetMatrixStructureOnly(da, struct_only));
359566063dSJacob Faibussowitsch   PetscCall(DMCreateMatrix(da, &A));
36c4762a1bSJed Brown   /* Set da->structure_only to default PETSC_FALSE in case da is being used to create new matrices */
379566063dSJacob Faibussowitsch   PetscCall(DMSetMatrixStructureOnly(da, PETSC_FALSE));
38c4762a1bSJed Brown 
399566063dSJacob Faibussowitsch   PetscCall(MatView(A, PETSC_VIEWER_STDOUT_WORLD));
409566063dSJacob Faibussowitsch   PetscCall(MatDestroy(&A));
419566063dSJacob Faibussowitsch   PetscCall(DMDestroy(&da));
429566063dSJacob Faibussowitsch   PetscCall(PetscFinalize());
43b122ec5aSJacob Faibussowitsch   return 0;
44c4762a1bSJed Brown }
45c4762a1bSJed Brown 
46c4762a1bSJed Brown /*TEST
47c4762a1bSJed Brown 
48c4762a1bSJed Brown    test:
49c4762a1bSJed Brown 
50c4762a1bSJed Brown    test:
51c4762a1bSJed Brown       suffix: 2
52c4762a1bSJed Brown       args: -dm_mat_type baij -dim 2
53c4762a1bSJed Brown 
54c4762a1bSJed Brown TEST*/
55