Actual source code: ex114.c
2: static char help[] = "Tests MatGetRowMax(), MatGetRowMin(), MatGetRowMaxAbs()\n";
4: #include petscmat.h
6: #define M 5
7: #define N 6
11: int main(int argc,char **args)
12: {
13: Mat A;
14: Vec min,max,maxabs;
15: PetscInt m,n;
16: PetscInt imin[M],imax[M],imaxabs[M],indices[N],row;
17: PetscScalar values[N];
19: const MatType type;
20: PetscMPIInt size;
21: PetscTruth doTest=PETSC_TRUE;
23: PetscInitialize(&argc,&args,(char *)0,help);
24: MPI_Comm_size(PETSC_COMM_WORLD,&size);
26: MatCreate(PETSC_COMM_WORLD,&A);
27: MatSetSizes(A,PETSC_DECIDE,PETSC_DECIDE,M,N);
28: MatSetFromOptions(A);
29: row = 0;
30: indices[0] = 0; indices[1] = 1; indices[2] = 2; indices[3] = 3; indices[4] = 4; indices[5] = 5;
31: values[0] = -1.0; values[1] = 0.0; values[2] = 1.0; values[3] = 3.0; values[4] = 4.0; values[5] = -5.0;
32: MatSetValues(A,1,&row,6,indices,values,INSERT_VALUES);
33: row = 1;
34: MatSetValues(A,1,&row,3,indices,values,INSERT_VALUES);
35: row = 4;
36: MatSetValues(A,1,&row,1,indices+4,values+4,INSERT_VALUES);
37: row = 4;
38: MatSetValues(A,1,&row,2,indices+4,values+4,INSERT_VALUES);
39: MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY);
40: MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY);
41: MatView(A,PETSC_VIEWER_STDOUT_WORLD);
43: MatGetLocalSize(A, &m,&n);
44: VecCreate(PETSC_COMM_WORLD,&min);
45: VecSetSizes(min,m,PETSC_DECIDE);
46: VecSetFromOptions(min);
47: VecDuplicate(min,&max);
48: VecDuplicate(min,&maxabs);
50: /* Test MatGetRowMin, MatGetRowMax and MatGetRowMaxAbs */
51: if (size == 1) {
52: MatGetRowMin(A,min,imin);
53: MatGetRowMax(A,max,imax);
54: MatGetRowMaxAbs(A,maxabs,imaxabs);
56: PetscPrintf(PETSC_COMM_WORLD,"Row Minimums\n");
57: VecView(min,PETSC_VIEWER_STDOUT_WORLD);
58: PetscIntView(5,imin,PETSC_VIEWER_STDOUT_WORLD);
59: PetscPrintf(PETSC_COMM_WORLD,"Row Maximums\n");
60: VecView(max,PETSC_VIEWER_STDOUT_WORLD);
61: PetscIntView(5,imax,PETSC_VIEWER_STDOUT_WORLD);
62: PetscPrintf(PETSC_COMM_WORLD,"Row Maximum Absolute Values\n");
63: VecView(maxabs,PETSC_VIEWER_STDOUT_WORLD);
64: PetscIntView(5,imaxabs,PETSC_VIEWER_STDOUT_WORLD);
66: } else {
67: MatGetType(A,&type);
68: PetscPrintf(PETSC_COMM_WORLD,"\nMatrix type: %s\n",type);
69: /* AIJ */
70: PetscTypeCompare((PetscObject)A,MATMPIAIJ,&doTest);
71: if (doTest){
72: MatGetRowMaxAbs(A,maxabs,PETSC_NULL);
73: MatGetRowMaxAbs(A,maxabs,imaxabs);
74: PetscPrintf(PETSC_COMM_WORLD,"Row Maximum Absolute Values:\n");
75: VecView(maxabs,PETSC_VIEWER_STDOUT_WORLD);
76: }
77: /* BAIJ */
78: PetscTypeCompare((PetscObject)A,MATMPIBAIJ,&doTest);
79: if (doTest){
80: MatGetRowMaxAbs(A,maxabs,PETSC_NULL);
81: MatGetRowMaxAbs(A,maxabs,imaxabs);
82: PetscPrintf(PETSC_COMM_WORLD,"Row Maximum Absolute Values:\n");
83: VecView(maxabs,PETSC_VIEWER_STDOUT_WORLD);
84: }
85: }
87: if (size == 1) {
88: MatConvert(A,MATDENSE,MAT_REUSE_MATRIX,&A);
90: MatGetRowMin(A,min,imin);
91: MatGetRowMax(A,max,imax);
92: MatGetRowMaxAbs(A,maxabs,imaxabs);
94: MatView(A,PETSC_VIEWER_STDOUT_WORLD);
95: PetscPrintf(PETSC_COMM_WORLD,"Row Minimums\n");
96: VecView(min,PETSC_VIEWER_STDOUT_WORLD);
97: PetscIntView(5,imin,PETSC_VIEWER_STDOUT_WORLD);
98: PetscPrintf(PETSC_COMM_WORLD,"Row Maximums\n");
99: VecView(max,PETSC_VIEWER_STDOUT_WORLD);
100: PetscIntView(5,imax,PETSC_VIEWER_STDOUT_WORLD);
101: PetscPrintf(PETSC_COMM_WORLD,"Row Maximum Absolute Values\n");
102: VecView(maxabs,PETSC_VIEWER_STDOUT_WORLD);
103: PetscIntView(5,imaxabs,PETSC_VIEWER_STDOUT_WORLD);
104: }
106: VecDestroy(min);
107: VecDestroy(max);
108: VecDestroy(maxabs);
109: MatDestroy(A);
110: PetscFinalize();
111: return 0;
112: }