xref: /petsc/src/dm/tests/ex5.c (revision 40badf4fbc550ac1f60bd080eaff6de6d55b946d) !
1 /*
2   Test DMCreateMatrix() for structure_only
3 */
4 
5 #include <petscdmda.h>
6 
7 int main(int argc, char *argv[])
8 {
9   PetscErrorCode ierr;
10   PetscInt       nx=6,ny=6,nz=6,dim=1,dof=2;
11   DM             da;
12   Mat            A;
13   PetscBool      struct_only=PETSC_TRUE;
14 
15   ierr = PetscInitialize(&argc,&argv,NULL,NULL);if (ierr) return ierr;
16   CHKERRQ(PetscOptionsGetInt(NULL,NULL,"-dim",&dim,NULL));
17   CHKERRQ(PetscOptionsGetInt(NULL,NULL,"-dof",&dof,NULL));
18   switch (dim) {
19   case 1:
20     CHKERRQ(DMDACreate1d(PETSC_COMM_WORLD,DM_BOUNDARY_NONE,nx,dof,1,NULL,&da));
21     break;
22   case 2:
23     CHKERRQ(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     ierr = DMDACreate3d(PETSC_COMM_WORLD,DM_BOUNDARY_NONE,DM_BOUNDARY_NONE,DM_BOUNDARY_NONE,DMDA_STENCIL_BOX,nx,ny,nz,
27                       PETSC_DECIDE,PETSC_DECIDE,PETSC_DECIDE,dof,2,NULL,NULL,NULL,&da);CHKERRQ(ierr);
28   }
29 
30   CHKERRQ(DMSetFromOptions(da));
31   CHKERRQ(DMSetUp(da));
32   CHKERRQ(DMView(da,PETSC_VIEWER_STDOUT_WORLD));
33 
34   CHKERRQ(PetscOptionsGetBool(NULL,NULL,"-struct_only",&struct_only,NULL));
35   CHKERRQ(DMSetMatrixStructureOnly(da,struct_only));
36   CHKERRQ(DMCreateMatrix(da,&A));
37   /* Set da->structure_only to default PETSC_FALSE in case da is being used to create new matrices */
38   CHKERRQ(DMSetMatrixStructureOnly(da,PETSC_FALSE));
39 
40   CHKERRQ(MatView(A,PETSC_VIEWER_STDOUT_WORLD));
41   CHKERRQ(MatDestroy(&A));
42   CHKERRQ(DMDestroy(&da));
43   ierr = PetscFinalize();
44   return ierr;
45 }
46 
47 /*TEST
48 
49    test:
50 
51    test:
52       suffix: 2
53       args: -dm_mat_type baij -dim 2
54 
55 TEST*/
56