Actual source code: ex114.c

  2: static char help[] = "Tests MatGetRowMax(), MatGetRowMin(), MatGetRowMaxAbs()\n";

 4:  #include petscmat.h

  8: int main(int argc,char **args)
  9: {
 10:   Mat            A;
 11:   Vec            min,max,maxabs;
 12:   PetscInt       M=5,N=6,m,n;
 13:   PetscInt       imin[M],imax[M],imaxabs[M],indices[N],row;
 14:   PetscScalar    values[N];
 16:   const MatType  type;
 17:   PetscMPIInt    size;
 18:   PetscTruth     doTest=PETSC_TRUE;

 20:   PetscInitialize(&argc,&args,(char *)0,help);
 21:   MPI_Comm_size(PETSC_COMM_WORLD,&size);

 23:   MatCreate(PETSC_COMM_WORLD,&A);
 24:   MatSetSizes(A,PETSC_DECIDE,PETSC_DECIDE,M,N);
 25:   MatSetFromOptions(A);
 26:   row  = 0;
 27:   indices[0] = 0; indices[1] = 1; indices[2] = 2; indices[3] = 3; indices[4] = 4; indices[5] = 5;
 28:   values[0] = -1.0; values[1] = 0.0; values[2] = 1.0; values[3] = 3.0; values[4] = 4.0; values[5] = -5.0;
 29:   MatSetValues(A,1,&row,6,indices,values,INSERT_VALUES);
 30:   row = 1;
 31:   MatSetValues(A,1,&row,3,indices,values,INSERT_VALUES);
 32:   row = 4;
 33:   MatSetValues(A,1,&row,1,indices+4,values+4,INSERT_VALUES);
 34:   row = 4;
 35:   MatSetValues(A,1,&row,2,indices+4,values+4,INSERT_VALUES);
 36:   MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY);
 37:   MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY);
 38:   MatView(A,PETSC_VIEWER_STDOUT_WORLD);

 40:   MatGetLocalSize(A, &m,&n);
 41:   VecCreate(PETSC_COMM_WORLD,&min);
 42:   VecSetSizes(min,m,PETSC_DECIDE);
 43:   VecSetFromOptions(min);
 44:   VecDuplicate(min,&max);
 45:   VecDuplicate(min,&maxabs);

 47:   /* Test MatGetRowMin, MatGetRowMax and MatGetRowMaxAbs */
 48:   if (size == 1) {
 49:     MatGetRowMin(A,min,imin);
 50:     MatGetRowMax(A,max,imax);
 51:     MatGetRowMaxAbs(A,maxabs,imaxabs);

 53:     PetscPrintf(PETSC_COMM_WORLD,"Row Minimums\n");
 54:     VecView(min,PETSC_VIEWER_STDOUT_WORLD);
 55:     PetscIntView(5,imin,PETSC_VIEWER_STDOUT_WORLD);
 56:     PetscPrintf(PETSC_COMM_WORLD,"Row Maximums\n");
 57:     VecView(max,PETSC_VIEWER_STDOUT_WORLD);
 58:     PetscIntView(5,imax,PETSC_VIEWER_STDOUT_WORLD);
 59:     PetscPrintf(PETSC_COMM_WORLD,"Row Maximum Absolute Values\n");
 60:     VecView(maxabs,PETSC_VIEWER_STDOUT_WORLD);
 61:     PetscIntView(5,imaxabs,PETSC_VIEWER_STDOUT_WORLD);

 63:   } else {
 64:     MatGetType(A,&type);
 65:     PetscPrintf(PETSC_COMM_WORLD,"\nMatrix type: %s\n",type);
 66:     /* AIJ */
 67:     PetscTypeCompare((PetscObject)A,MATMPIAIJ,&doTest);
 68:     if (doTest){
 69:       MatGetRowMaxAbs(A,maxabs,PETSC_NULL);
 70:       MatGetRowMaxAbs(A,maxabs,imaxabs);
 71:       PetscPrintf(PETSC_COMM_WORLD,"Row Maximum Absolute Values:\n");
 72:       VecView(maxabs,PETSC_VIEWER_STDOUT_WORLD);
 73:     }
 74:     /* BAIJ */
 75:     PetscTypeCompare((PetscObject)A,MATMPIBAIJ,&doTest);
 76:     if (doTest){
 77:       MatGetRowMaxAbs(A,maxabs,PETSC_NULL);
 78:       MatGetRowMaxAbs(A,maxabs,imaxabs);
 79:       PetscPrintf(PETSC_COMM_WORLD,"Row Maximum Absolute Values:\n");
 80:       VecView(maxabs,PETSC_VIEWER_STDOUT_WORLD);
 81:     }
 82:   }

 84:   if (size == 1) {
 85:     MatConvert(A,MATDENSE,MAT_REUSE_MATRIX,&A);

 87:     MatGetRowMin(A,min,imin);
 88:     MatGetRowMax(A,max,imax);
 89:     MatGetRowMaxAbs(A,maxabs,imaxabs);

 91:     MatView(A,PETSC_VIEWER_STDOUT_WORLD);
 92:     PetscPrintf(PETSC_COMM_WORLD,"Row Minimums\n");
 93:     VecView(min,PETSC_VIEWER_STDOUT_WORLD);
 94:     PetscIntView(5,imin,PETSC_VIEWER_STDOUT_WORLD);
 95:     PetscPrintf(PETSC_COMM_WORLD,"Row Maximums\n");
 96:     VecView(max,PETSC_VIEWER_STDOUT_WORLD);
 97:     PetscIntView(5,imax,PETSC_VIEWER_STDOUT_WORLD);
 98:     PetscPrintf(PETSC_COMM_WORLD,"Row Maximum Absolute Values\n");
 99:     VecView(maxabs,PETSC_VIEWER_STDOUT_WORLD);
100:     PetscIntView(5,imaxabs,PETSC_VIEWER_STDOUT_WORLD);
101:   }

103:   VecDestroy(min);
104:   VecDestroy(max);
105:   VecDestroy(maxabs);
106:   MatDestroy(A);
107:   PetscFinalize();
108:   return 0;
109: }