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: }