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