Actual source code: ex22.c

  1: /*$Id: ex9.c,v 1.21 2001/06/21 21:19:28 bsmith Exp $*/
  2: 
  3: static char help[] = "Tests MatSetValuesBlockedStencil() in 3d.\n\n";

 5:  #include petscmat.h
 6:  #include petscda.h

 10: int main(int argc,char **argv)
 11: {
 12:   int            M = 3,N = 4,P = 2,s = 1,w = 2,i;
 13:   int            m = PETSC_DECIDE,n = PETSC_DECIDE,p = PETSC_DECIDE,ierr;
 14:   DA             da;
 15:   Mat            mat;
 16:   DAStencilType  stencil_type = DA_STENCIL_BOX;
 17:   PetscTruth     flg;
 18:   MatStencil     idx[2],idy[2];
 19:   PetscScalar    *values;

 21:   PetscInitialize(&argc,&argv,(char*)0,help);

 23:   /* Read options */
 24:   PetscOptionsGetInt(PETSC_NULL,"-M",&M,PETSC_NULL);
 25:   PetscOptionsGetInt(PETSC_NULL,"-N",&N,PETSC_NULL);
 26:   PetscOptionsGetInt(PETSC_NULL,"-P",&P,PETSC_NULL);
 27:   PetscOptionsGetInt(PETSC_NULL,"-m",&m,PETSC_NULL);
 28:   PetscOptionsGetInt(PETSC_NULL,"-n",&n,PETSC_NULL);
 29:   PetscOptionsGetInt(PETSC_NULL,"-p",&p,PETSC_NULL);
 30:   PetscOptionsGetInt(PETSC_NULL,"-s",&s,PETSC_NULL);
 31:   PetscOptionsGetInt(PETSC_NULL,"-w",&w,PETSC_NULL);
 32:   PetscOptionsHasName(PETSC_NULL,"-star",&flg);
 33:   if (flg) stencil_type =  DA_STENCIL_STAR;

 35:   /* Create distributed array and get vectors */
 36:   DACreate3d(PETSC_COMM_WORLD,DA_NONPERIODIC,stencil_type,M,N,P,m,n,p,w,s,
 37:                     0,0,0,&da);

 39:   DAGetMatrix(da,MATMPIBAIJ,&mat);

 41:   idx[0].i = 1;   idx[0].j = 1; idx[0].k = 0;
 42:   idx[1].i = 2;   idx[1].j = 1; idx[1].k = 0;
 43:   idy[0].i = 1;   idy[0].j = 2; idy[0].k = 0;
 44:   idy[1].i = 2;   idy[1].j = 2; idy[1].k = 0;
 45:   PetscMalloc(2*2*w*w*sizeof(PetscScalar),&values);
 46:   for ( i=0; i<2*2*w*w; i++ ) values[i] = i;
 47:   MatSetValuesBlockedStencil(mat,2,idx,2,idy,values,INSERT_VALUES);
 48:   MatAssemblyBegin(mat,MAT_FINAL_ASSEMBLY);
 49:   MatAssemblyEnd(mat,MAT_FINAL_ASSEMBLY);

 51:   /* Free memory */
 52:   PetscFree(values);
 53:   MatDestroy(mat);
 54:   DADestroy(da);
 55:   PetscFinalize();
 56:   return 0;
 57: }
 58: