xref: /petsc/src/dm/tests/ex5.c (revision bef158480efac06de457f7a665168877ab3c2fd7) !
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   ierr = PetscOptionsGetInt(NULL,NULL,"-dim",&dim,NULL);CHKERRQ(ierr);
17   ierr = PetscOptionsGetInt(NULL,NULL,"-dof",&dof,NULL);CHKERRQ(ierr);
18   switch (dim) {
19   case 1:
20     ierr = DMDACreate1d(PETSC_COMM_WORLD,DM_BOUNDARY_NONE,nx,dof,1,NULL,&da);CHKERRQ(ierr);
21     break;
22   case 2:
23     ierr = DMDACreate2d(PETSC_COMM_WORLD,DM_BOUNDARY_NONE,DM_BOUNDARY_NONE,DMDA_STENCIL_STAR,nx,ny,PETSC_DECIDE,PETSC_DECIDE,dof,1,NULL,NULL,&da);CHKERRQ(ierr);
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   ierr = DMSetFromOptions(da);CHKERRQ(ierr);
31   ierr = DMSetUp(da);CHKERRQ(ierr);
32   ierr = DMView(da,PETSC_VIEWER_STDOUT_WORLD);CHKERRQ(ierr);
33 
34   ierr = PetscOptionsGetBool(NULL,NULL,"-struct_only",&struct_only,NULL);CHKERRQ(ierr);
35   ierr = DMSetMatrixStructureOnly(da,struct_only);CHKERRQ(ierr);
36   ierr = DMCreateMatrix(da,&A);CHKERRQ(ierr);
37   /* Set da->structure_only to default PETSC_FALSE in case da is being used to create new matrices */
38   ierr = DMSetMatrixStructureOnly(da,PETSC_FALSE);CHKERRQ(ierr);
39 
40   ierr = MatView(A,PETSC_VIEWER_STDOUT_WORLD);CHKERRQ(ierr);
41   ierr = MatDestroy(&A);CHKERRQ(ierr);
42   ierr = DMDestroy(&da);CHKERRQ(ierr);
43   ierr = PetscFinalize();
44   return ierr;
45 }
46 
47 
48 /*TEST
49 
50    test:
51 
52    test:
53       suffix: 2
54       args: -dm_mat_type baij -dim 2
55 
56 TEST*/
57