xref: /petsc/src/mat/tests/ex2.c (revision 732aec7a18f2199fb53bb9a2f3aef439a834ce31)
1c4762a1bSJed Brown static char help[] = "Tests MatTranspose(), MatNorm(), MatAXPY() and MatAYPX().\n\n";
2c4762a1bSJed Brown 
3c4762a1bSJed Brown #include <petscmat.h>
4c4762a1bSJed Brown 
TransposeAXPY(Mat C,PetscScalar alpha,Mat mat,PetscErrorCode (* f)(Mat,Mat *))5d71ae5a4SJacob Faibussowitsch static PetscErrorCode TransposeAXPY(Mat C, PetscScalar alpha, Mat mat, PetscErrorCode (*f)(Mat, Mat *))
6d71ae5a4SJacob Faibussowitsch {
7c4762a1bSJed Brown   Mat     D, E, F, G;
88e160fb9SStefano Zampini   MatType mtype;
9c4762a1bSJed Brown 
10c4762a1bSJed Brown   PetscFunctionBegin;
119566063dSJacob Faibussowitsch   PetscCall(MatGetType(mat, &mtype));
12c4762a1bSJed Brown   if (f == MatCreateTranspose) {
139566063dSJacob Faibussowitsch     PetscCall(PetscPrintf(PETSC_COMM_WORLD, "\nMatAXPY:  (C^T)^T = (C^T)^T + alpha * A, C=A, SAME_NONZERO_PATTERN\n"));
14c4762a1bSJed Brown   } else {
159566063dSJacob Faibussowitsch     PetscCall(PetscPrintf(PETSC_COMM_WORLD, "\nMatAXPY:  (C^H)^H = (C^H)^H + alpha * A, C=A, SAME_NONZERO_PATTERN\n"));
16c4762a1bSJed Brown   }
179566063dSJacob Faibussowitsch   PetscCall(MatDuplicate(mat, MAT_COPY_VALUES, &C));
189566063dSJacob Faibussowitsch   PetscCall(f(C, &D));
199566063dSJacob Faibussowitsch   PetscCall(f(D, &E));
209566063dSJacob Faibussowitsch   PetscCall(MatAXPY(E, alpha, mat, SAME_NONZERO_PATTERN));
219566063dSJacob Faibussowitsch   PetscCall(MatConvert(E, mtype, MAT_INPLACE_MATRIX, &E));
229566063dSJacob Faibussowitsch   PetscCall(MatView(E, PETSC_VIEWER_STDOUT_WORLD));
239566063dSJacob Faibussowitsch   PetscCall(MatDestroy(&E));
249566063dSJacob Faibussowitsch   PetscCall(MatDestroy(&D));
259566063dSJacob Faibussowitsch   PetscCall(MatDestroy(&C));
26c4762a1bSJed Brown   if (f == MatCreateTranspose) {
279566063dSJacob Faibussowitsch     PetscCall(PetscPrintf(PETSC_COMM_WORLD, "MatAXPY:  C = C + alpha * (A^T)^T, C=A, SAME_NONZERO_PATTERN\n"));
28c4762a1bSJed Brown   } else {
299566063dSJacob Faibussowitsch     PetscCall(PetscPrintf(PETSC_COMM_WORLD, "MatAXPY:  C = C + alpha * (A^H)^H, C=A, SAME_NONZERO_PATTERN\n"));
30c4762a1bSJed Brown   }
31c4762a1bSJed Brown   if (f == MatCreateTranspose) {
329566063dSJacob Faibussowitsch     PetscCall(MatTranspose(mat, MAT_INITIAL_MATRIX, &D));
33c4762a1bSJed Brown   } else {
349566063dSJacob Faibussowitsch     PetscCall(MatHermitianTranspose(mat, MAT_INITIAL_MATRIX, &D));
35c4762a1bSJed Brown   }
369566063dSJacob Faibussowitsch   PetscCall(f(D, &E));
379566063dSJacob Faibussowitsch   PetscCall(MatDuplicate(mat, MAT_COPY_VALUES, &C));
389566063dSJacob Faibussowitsch   PetscCall(MatAXPY(C, alpha, E, SAME_NONZERO_PATTERN));
399566063dSJacob Faibussowitsch   PetscCall(MatView(C, PETSC_VIEWER_STDOUT_WORLD));
409566063dSJacob Faibussowitsch   PetscCall(MatDestroy(&E));
419566063dSJacob Faibussowitsch   PetscCall(MatDestroy(&D));
429566063dSJacob Faibussowitsch   PetscCall(MatDestroy(&C));
43c4762a1bSJed Brown   if (f == MatCreateTranspose) {
449566063dSJacob Faibussowitsch     PetscCall(PetscPrintf(PETSC_COMM_WORLD, "MatAXPY:  (C^T)^T = (C^T)^T + alpha * (A^T)^T, C=A, SAME_NONZERO_PATTERN\n"));
45c4762a1bSJed Brown   } else {
469566063dSJacob Faibussowitsch     PetscCall(PetscPrintf(PETSC_COMM_WORLD, "MatAXPY:  (C^H)^H = (C^H)^H + alpha * (A^H)^H, C=A, SAME_NONZERO_PATTERN\n"));
47c4762a1bSJed Brown   }
489566063dSJacob Faibussowitsch   PetscCall(MatDuplicate(mat, MAT_COPY_VALUES, &C));
499566063dSJacob Faibussowitsch   PetscCall(f(C, &D));
509566063dSJacob Faibussowitsch   PetscCall(f(D, &E));
519566063dSJacob Faibussowitsch   PetscCall(f(mat, &F));
529566063dSJacob Faibussowitsch   PetscCall(f(F, &G));
539566063dSJacob Faibussowitsch   PetscCall(MatAXPY(E, alpha, G, SAME_NONZERO_PATTERN));
549566063dSJacob Faibussowitsch   PetscCall(MatConvert(E, mtype, MAT_INPLACE_MATRIX, &E));
559566063dSJacob Faibussowitsch   PetscCall(MatView(E, PETSC_VIEWER_STDOUT_WORLD));
569566063dSJacob Faibussowitsch   PetscCall(MatDestroy(&G));
579566063dSJacob Faibussowitsch   PetscCall(MatDestroy(&F));
589566063dSJacob Faibussowitsch   PetscCall(MatDestroy(&E));
599566063dSJacob Faibussowitsch   PetscCall(MatDestroy(&D));
609566063dSJacob Faibussowitsch   PetscCall(MatDestroy(&C));
618e160fb9SStefano Zampini 
628e160fb9SStefano Zampini   /* Call f on a matrix that does not implement the transposition */
639566063dSJacob Faibussowitsch   PetscCall(PetscPrintf(PETSC_COMM_WORLD, "MatAXPY:  Now without the transposition operation\n"));
649566063dSJacob Faibussowitsch   PetscCall(MatConvert(mat, MATSHELL, MAT_INITIAL_MATRIX, &C));
659566063dSJacob Faibussowitsch   PetscCall(f(C, &D));
669566063dSJacob Faibussowitsch   PetscCall(f(D, &E));
678e160fb9SStefano Zampini   /* XXX cannot use MAT_INPLACE_MATRIX, it leaks mat */
689566063dSJacob Faibussowitsch   PetscCall(MatConvert(E, mtype, MAT_INITIAL_MATRIX, &F));
699566063dSJacob Faibussowitsch   PetscCall(MatAXPY(F, alpha, mat, SAME_NONZERO_PATTERN));
709566063dSJacob Faibussowitsch   PetscCall(MatView(F, PETSC_VIEWER_STDOUT_WORLD));
719566063dSJacob Faibussowitsch   PetscCall(MatDestroy(&F));
729566063dSJacob Faibussowitsch   PetscCall(MatDestroy(&E));
739566063dSJacob Faibussowitsch   PetscCall(MatDestroy(&D));
749566063dSJacob Faibussowitsch   PetscCall(MatDestroy(&C));
753ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
76c4762a1bSJed Brown }
77c4762a1bSJed Brown 
main(int argc,char ** argv)78d71ae5a4SJacob Faibussowitsch int main(int argc, char **argv)
79d71ae5a4SJacob Faibussowitsch {
80c4762a1bSJed Brown   Mat         mat, tmat = 0;
81c4762a1bSJed Brown   PetscInt    m = 7, n, i, j, rstart, rend, rect = 0;
82c4762a1bSJed Brown   PetscMPIInt size, rank;
83c4762a1bSJed Brown   PetscBool   flg;
84c4762a1bSJed Brown   PetscScalar v, alpha;
85c4762a1bSJed Brown   PetscReal   normf, normi, norm1;
86c4762a1bSJed Brown 
87327415f7SBarry Smith   PetscFunctionBeginUser;
88*c8025a54SPierre Jolivet   PetscCall(PetscInitialize(&argc, &argv, NULL, help));
899566063dSJacob Faibussowitsch   PetscCall(PetscViewerPushFormat(PETSC_VIEWER_STDOUT_WORLD, PETSC_VIEWER_ASCII_COMMON));
909566063dSJacob Faibussowitsch   PetscCall(PetscOptionsGetInt(NULL, NULL, "-m", &m, NULL));
919566063dSJacob Faibussowitsch   PetscCallMPI(MPI_Comm_rank(PETSC_COMM_WORLD, &rank));
929566063dSJacob Faibussowitsch   PetscCallMPI(MPI_Comm_size(PETSC_COMM_WORLD, &size));
93c4762a1bSJed Brown   n = m;
949566063dSJacob Faibussowitsch   PetscCall(PetscOptionsHasName(NULL, NULL, "-rectA", &flg));
959371c9d4SSatish Balay   if (flg) {
969371c9d4SSatish Balay     n += 2;
979371c9d4SSatish Balay     rect = 1;
989371c9d4SSatish Balay   }
999566063dSJacob Faibussowitsch   PetscCall(PetscOptionsHasName(NULL, NULL, "-rectB", &flg));
1009371c9d4SSatish Balay   if (flg) {
1019371c9d4SSatish Balay     n -= 2;
1029371c9d4SSatish Balay     rect = 1;
1039371c9d4SSatish Balay   }
104c4762a1bSJed Brown 
105a5225ed3SStefano Zampini   /* ------- Assemble matrix --------- */
1069566063dSJacob Faibussowitsch   PetscCall(MatCreate(PETSC_COMM_WORLD, &mat));
1079566063dSJacob Faibussowitsch   PetscCall(MatSetSizes(mat, PETSC_DECIDE, PETSC_DECIDE, m, n));
1089566063dSJacob Faibussowitsch   PetscCall(MatSetFromOptions(mat));
1099566063dSJacob Faibussowitsch   PetscCall(MatSetUp(mat));
1109566063dSJacob Faibussowitsch   PetscCall(MatGetOwnershipRange(mat, &rstart, &rend));
111c4762a1bSJed Brown   for (i = rstart; i < rend; i++) {
112c4762a1bSJed Brown     for (j = 0; j < n; j++) {
1138e160fb9SStefano Zampini       v = 10.0 * i + j + 1.0;
1149566063dSJacob Faibussowitsch       PetscCall(MatSetValues(mat, 1, &i, 1, &j, &v, INSERT_VALUES));
115c4762a1bSJed Brown     }
116c4762a1bSJed Brown   }
1179566063dSJacob Faibussowitsch   PetscCall(MatAssemblyBegin(mat, MAT_FINAL_ASSEMBLY));
1189566063dSJacob Faibussowitsch   PetscCall(MatAssemblyEnd(mat, MAT_FINAL_ASSEMBLY));
119c4762a1bSJed Brown 
120c4762a1bSJed Brown   /* ----------------- Test MatNorm()  ----------------- */
1219566063dSJacob Faibussowitsch   PetscCall(MatNorm(mat, NORM_FROBENIUS, &normf));
1229566063dSJacob Faibussowitsch   PetscCall(MatNorm(mat, NORM_1, &norm1));
1239566063dSJacob Faibussowitsch   PetscCall(MatNorm(mat, NORM_INFINITY, &normi));
1242db2b1b2SPierre Jolivet   PetscCall(PetscPrintf(PETSC_COMM_WORLD, "original A: Frobenius norm = %g, one norm = %g, infinity norm = %g\n", (double)normf, (double)norm1, (double)normi));
1259566063dSJacob Faibussowitsch   PetscCall(MatView(mat, PETSC_VIEWER_STDOUT_WORLD));
126c4762a1bSJed Brown 
127c4762a1bSJed Brown   /* --------------- Test MatTranspose()  -------------- */
1289566063dSJacob Faibussowitsch   PetscCall(PetscOptionsHasName(NULL, NULL, "-in_place", &flg));
129c4762a1bSJed Brown   if (!rect && flg) {
1309566063dSJacob Faibussowitsch     PetscCall(MatTranspose(mat, MAT_REUSE_MATRIX, &mat)); /* in-place transpose */
1318e160fb9SStefano Zampini     tmat = mat;
1328e160fb9SStefano Zampini     mat  = NULL;
133c4762a1bSJed Brown   } else { /* out-of-place transpose */
1349566063dSJacob Faibussowitsch     PetscCall(MatTranspose(mat, MAT_INITIAL_MATRIX, &tmat));
135c4762a1bSJed Brown   }
136c4762a1bSJed Brown 
137c4762a1bSJed Brown   /* ----------------- Test MatNorm()  ----------------- */
138c4762a1bSJed Brown   /* Print info about transpose matrix */
1399566063dSJacob Faibussowitsch   PetscCall(MatNorm(tmat, NORM_FROBENIUS, &normf));
1409566063dSJacob Faibussowitsch   PetscCall(MatNorm(tmat, NORM_1, &norm1));
1419566063dSJacob Faibussowitsch   PetscCall(MatNorm(tmat, NORM_INFINITY, &normi));
1422db2b1b2SPierre Jolivet   PetscCall(PetscPrintf(PETSC_COMM_WORLD, "B = A^T: Frobenius norm = %g, one norm = %g, infinity norm = %g\n", (double)normf, (double)norm1, (double)normi));
1439566063dSJacob Faibussowitsch   PetscCall(MatView(tmat, PETSC_VIEWER_STDOUT_WORLD));
144c4762a1bSJed Brown 
145c4762a1bSJed Brown   /* ----------------- Test MatAXPY(), MatAYPX()  ----------------- */
146c4762a1bSJed Brown   if (mat && !rect) {
147c4762a1bSJed Brown     alpha = 1.0;
1489566063dSJacob Faibussowitsch     PetscCall(PetscOptionsGetScalar(NULL, NULL, "-alpha", &alpha, NULL));
1499566063dSJacob Faibussowitsch     PetscCall(PetscPrintf(PETSC_COMM_WORLD, "MatAXPY:  B = B + alpha * A\n"));
1509566063dSJacob Faibussowitsch     PetscCall(MatAXPY(tmat, alpha, mat, DIFFERENT_NONZERO_PATTERN));
1519566063dSJacob Faibussowitsch     PetscCall(MatView(tmat, PETSC_VIEWER_STDOUT_WORLD));
152c4762a1bSJed Brown 
1539566063dSJacob Faibussowitsch     PetscCall(PetscPrintf(PETSC_COMM_WORLD, "MatAYPX:  B = alpha*B + A\n"));
1549566063dSJacob Faibussowitsch     PetscCall(MatAYPX(tmat, alpha, mat, DIFFERENT_NONZERO_PATTERN));
1559566063dSJacob Faibussowitsch     PetscCall(MatView(tmat, PETSC_VIEWER_STDOUT_WORLD));
156c4762a1bSJed Brown   }
157c4762a1bSJed Brown 
158c4762a1bSJed Brown   {
159c4762a1bSJed Brown     Mat C;
160c4762a1bSJed Brown     alpha = 1.0;
1619566063dSJacob Faibussowitsch     PetscCall(PetscPrintf(PETSC_COMM_WORLD, "MatAXPY:  C = C + alpha * A, C=A, SAME_NONZERO_PATTERN\n"));
1629566063dSJacob Faibussowitsch     PetscCall(MatDuplicate(mat, MAT_COPY_VALUES, &C));
1639566063dSJacob Faibussowitsch     PetscCall(MatAXPY(C, alpha, mat, SAME_NONZERO_PATTERN));
1649566063dSJacob Faibussowitsch     PetscCall(MatView(C, PETSC_VIEWER_STDOUT_WORLD));
1659566063dSJacob Faibussowitsch     PetscCall(MatDestroy(&C));
1669566063dSJacob Faibussowitsch     PetscCall(TransposeAXPY(C, alpha, mat, MatCreateTranspose));
1679566063dSJacob Faibussowitsch     PetscCall(TransposeAXPY(C, alpha, mat, MatCreateHermitianTranspose));
168c4762a1bSJed Brown   }
169c4762a1bSJed Brown 
170c4762a1bSJed Brown   {
171c4762a1bSJed Brown     Mat matB;
172c4762a1bSJed Brown     /* get matB that has nonzeros of mat in all even numbers of row and col */
1739566063dSJacob Faibussowitsch     PetscCall(MatCreate(PETSC_COMM_WORLD, &matB));
1749566063dSJacob Faibussowitsch     PetscCall(MatSetSizes(matB, PETSC_DECIDE, PETSC_DECIDE, m, n));
1759566063dSJacob Faibussowitsch     PetscCall(MatSetFromOptions(matB));
1769566063dSJacob Faibussowitsch     PetscCall(MatSetUp(matB));
1779566063dSJacob Faibussowitsch     PetscCall(MatGetOwnershipRange(matB, &rstart, &rend));
178c4762a1bSJed Brown     if (rstart % 2 != 0) rstart++;
179c4762a1bSJed Brown     for (i = rstart; i < rend; i += 2) {
180c4762a1bSJed Brown       for (j = 0; j < n; j += 2) {
1818e160fb9SStefano Zampini         v = 10.0 * i + j + 1.0;
1829566063dSJacob Faibussowitsch         PetscCall(MatSetValues(matB, 1, &i, 1, &j, &v, INSERT_VALUES));
183c4762a1bSJed Brown       }
184c4762a1bSJed Brown     }
1859566063dSJacob Faibussowitsch     PetscCall(MatAssemblyBegin(matB, MAT_FINAL_ASSEMBLY));
1869566063dSJacob Faibussowitsch     PetscCall(MatAssemblyEnd(matB, MAT_FINAL_ASSEMBLY));
1879566063dSJacob Faibussowitsch     PetscCall(PetscPrintf(PETSC_COMM_WORLD, " A: original matrix:\n"));
1889566063dSJacob Faibussowitsch     PetscCall(MatView(mat, PETSC_VIEWER_STDOUT_WORLD));
1899566063dSJacob Faibussowitsch     PetscCall(PetscPrintf(PETSC_COMM_WORLD, " B(a subset of A):\n"));
1909566063dSJacob Faibussowitsch     PetscCall(MatView(matB, PETSC_VIEWER_STDOUT_WORLD));
1919566063dSJacob Faibussowitsch     PetscCall(PetscPrintf(PETSC_COMM_WORLD, "MatAXPY:  B = B + alpha * A, SUBSET_NONZERO_PATTERN\n"));
1929566063dSJacob Faibussowitsch     PetscCall(MatAXPY(mat, alpha, matB, SUBSET_NONZERO_PATTERN));
1939566063dSJacob Faibussowitsch     PetscCall(MatView(mat, PETSC_VIEWER_STDOUT_WORLD));
1949566063dSJacob Faibussowitsch     PetscCall(MatDestroy(&matB));
195c4762a1bSJed Brown   }
196c4762a1bSJed Brown 
197a5225ed3SStefano Zampini   /* Test MatZeroRows */
198a5225ed3SStefano Zampini   j = rstart - 1;
199a5225ed3SStefano Zampini   if (j < 0) j = m - 1;
2002f605a99SJose E. Roman   PetscCall(PetscPrintf(PETSC_COMM_WORLD, "MatZeroRows:\n"));
2019566063dSJacob Faibussowitsch   PetscCall(MatZeroRows(mat, 1, &j, 0.0, NULL, NULL));
2029566063dSJacob Faibussowitsch   PetscCall(MatView(mat, PETSC_VIEWER_STDOUT_WORLD));
203a5225ed3SStefano Zampini 
2042f605a99SJose E. Roman   /* Test MatShift */
2052f605a99SJose E. Roman   PetscCall(PetscPrintf(PETSC_COMM_WORLD, "MatShift: B = B - 2*I\n"));
2062f605a99SJose E. Roman   PetscCall(MatShift(mat, -2.0));
2072f605a99SJose E. Roman   PetscCall(MatView(mat, PETSC_VIEWER_STDOUT_WORLD));
2082f605a99SJose E. Roman 
2099566063dSJacob Faibussowitsch   PetscCall(PetscViewerPopFormat(PETSC_VIEWER_STDOUT_WORLD));
210c4762a1bSJed Brown   /* Free data structures */
2119566063dSJacob Faibussowitsch   PetscCall(MatDestroy(&mat));
2129566063dSJacob Faibussowitsch   PetscCall(MatDestroy(&tmat));
2139566063dSJacob Faibussowitsch   PetscCall(PetscFinalize());
214b122ec5aSJacob Faibussowitsch   return 0;
215c4762a1bSJed Brown }
216c4762a1bSJed Brown 
217c4762a1bSJed Brown /*TEST
218c4762a1bSJed Brown 
219c4762a1bSJed Brown    test:
220c4762a1bSJed Brown       suffix: 11_A
221c4762a1bSJed Brown       args: -mat_type seqaij -rectA
222c4762a1bSJed Brown       filter: grep -v "Mat Object"
223c4762a1bSJed Brown 
224c4762a1bSJed Brown    test:
225c4762a1bSJed Brown       suffix: 12_A
226c4762a1bSJed Brown       args: -mat_type seqdense -rectA
227a5225ed3SStefano Zampini       filter: grep -v type | grep -v "Mat Object"
228a5225ed3SStefano Zampini 
229a5225ed3SStefano Zampini    test:
230a5225ed3SStefano Zampini       requires: cuda
231a5225ed3SStefano Zampini       suffix: 12_A_cuda
232a5225ed3SStefano Zampini       args: -mat_type seqdensecuda -rectA
233a5225ed3SStefano Zampini       output_file: output/ex2_12_A.out
234a5225ed3SStefano Zampini       filter: grep -v type | grep -v "Mat Object"
235c4762a1bSJed Brown 
236c4762a1bSJed Brown    test:
23724b337e5SStefano Zampini       requires: kokkos_kernels
238d9265f21SStefano Zampini       suffix: 12_A_kokkos
239dbdd8c31SJunchao Zhang       args: -mat_type aijkokkos -rectA
240d9265f21SStefano Zampini       output_file: output/ex2_12_A.out
241d9265f21SStefano Zampini       filter: grep -v type | grep -v "Mat Object"
242d9265f21SStefano Zampini 
243d9265f21SStefano Zampini    test:
244c4762a1bSJed Brown       suffix: 11_B
245c4762a1bSJed Brown       args: -mat_type seqaij -rectB
246c4762a1bSJed Brown       filter: grep -v "Mat Object"
247c4762a1bSJed Brown 
248c4762a1bSJed Brown    test:
249c4762a1bSJed Brown       suffix: 12_B
250c4762a1bSJed Brown       args: -mat_type seqdense -rectB
251a5225ed3SStefano Zampini       filter: grep -v type | grep -v "Mat Object"
252a5225ed3SStefano Zampini 
253cc19c814SJunchao Zhang    testset:
254cc19c814SJunchao Zhang       args: -rectB
255cc19c814SJunchao Zhang       output_file: output/ex2_12_B.out
256cc19c814SJunchao Zhang       filter: grep -v type | grep -v "Mat Object"
257cc19c814SJunchao Zhang 
258a5225ed3SStefano Zampini       test:
259a5225ed3SStefano Zampini          requires: cuda
260a5225ed3SStefano Zampini          suffix: 12_B_cuda
261cc19c814SJunchao Zhang          args: -mat_type {{seqdensecuda seqaijcusparse}}
262c4762a1bSJed Brown 
263c4762a1bSJed Brown       test:
26424b337e5SStefano Zampini          requires: kokkos_kernels
265d9265f21SStefano Zampini          suffix: 12_B_kokkos
266cc19c814SJunchao Zhang          args: -mat_type aijkokkos
267d9265f21SStefano Zampini 
268d9265f21SStefano Zampini       test:
269cc19c814SJunchao Zhang          suffix: 12_B_aij
270cc19c814SJunchao Zhang          args: -mat_type aij
271cc19c814SJunchao Zhang    test:
272c4762a1bSJed Brown       suffix: 21
273c4762a1bSJed Brown       args: -mat_type mpiaij
2748cc725e6SPierre Jolivet       filter: grep -v type | grep -v " MPI process"
275c4762a1bSJed Brown 
276c4762a1bSJed Brown    test:
277c4762a1bSJed Brown       suffix: 22
278c4762a1bSJed Brown       args: -mat_type mpidense
279a5225ed3SStefano Zampini       filter: grep -v type | grep -v "Mat Object"
280a5225ed3SStefano Zampini 
281a5225ed3SStefano Zampini    test:
282a5225ed3SStefano Zampini       requires: cuda
283a5225ed3SStefano Zampini       suffix: 22_cuda
284a5225ed3SStefano Zampini       output_file: output/ex2_22.out
285a5225ed3SStefano Zampini       args: -mat_type mpidensecuda
286a5225ed3SStefano Zampini       filter: grep -v type | grep -v "Mat Object"
287c4762a1bSJed Brown 
288c4762a1bSJed Brown    test:
28924b337e5SStefano Zampini       requires: kokkos_kernels
290d9265f21SStefano Zampini       suffix: 22_kokkos
291d9265f21SStefano Zampini       output_file: output/ex2_22.out
292dbdd8c31SJunchao Zhang       args: -mat_type aijkokkos
293d9265f21SStefano Zampini       filter: grep -v type | grep -v "Mat Object"
294d9265f21SStefano Zampini 
295d9265f21SStefano Zampini    test:
296c4762a1bSJed Brown       suffix: 23
297c4762a1bSJed Brown       nsize: 3
298c4762a1bSJed Brown       args: -mat_type mpiaij
2998cc725e6SPierre Jolivet       filter: grep -v type | grep -v " MPI process"
300c4762a1bSJed Brown 
301c4762a1bSJed Brown    test:
302c4762a1bSJed Brown       suffix: 24
303c4762a1bSJed Brown       nsize: 3
304c4762a1bSJed Brown       args: -mat_type mpidense
305a5225ed3SStefano Zampini       filter: grep -v type | grep -v "Mat Object"
306a5225ed3SStefano Zampini 
307a5225ed3SStefano Zampini    test:
308a5225ed3SStefano Zampini       requires: cuda
309a5225ed3SStefano Zampini       suffix: 24_cuda
310a5225ed3SStefano Zampini       nsize: 3
311a5225ed3SStefano Zampini       output_file: output/ex2_24.out
312a5225ed3SStefano Zampini       args: -mat_type mpidensecuda
313a5225ed3SStefano Zampini       filter: grep -v type | grep -v "Mat Object"
314c4762a1bSJed Brown 
315c4762a1bSJed Brown    test:
316c4762a1bSJed Brown       suffix: 2_aijcusparse_1
317c4762a1bSJed Brown       args: -mat_type mpiaijcusparse
318a5225ed3SStefano Zampini       output_file: output/ex2_21.out
319c4762a1bSJed Brown       requires: cuda
3208cc725e6SPierre Jolivet       filter: grep -v type | grep -v " MPI process"
321c4762a1bSJed Brown 
322c4762a1bSJed Brown    test:
323629dcba7SJunchao Zhang       suffix: 2_aijkokkos_1
324629dcba7SJunchao Zhang       args: -mat_type aijkokkos
325629dcba7SJunchao Zhang       output_file: output/ex2_21.out
326629dcba7SJunchao Zhang       requires: kokkos_kernels
3278cc725e6SPierre Jolivet       filter: grep -v type | grep -v " MPI process"
328629dcba7SJunchao Zhang 
329629dcba7SJunchao Zhang    test:
330c4762a1bSJed Brown       suffix: 2_aijcusparse_2
331c4762a1bSJed Brown       nsize: 3
332c4762a1bSJed Brown       args: -mat_type mpiaijcusparse
333c4762a1bSJed Brown       output_file: output/ex2_23.out
334c4762a1bSJed Brown       requires: cuda
3358cc725e6SPierre Jolivet       filter: grep -v type | grep -v " MPI process"
336c4762a1bSJed Brown 
337c4762a1bSJed Brown    test:
338d9265f21SStefano Zampini       suffix: 2_aijkokkos_2
339d9265f21SStefano Zampini       nsize: 3
340dbdd8c31SJunchao Zhang       args: -mat_type aijkokkos
341d9265f21SStefano Zampini       output_file: output/ex2_23.out
342629dcba7SJunchao Zhang       # Turn off hip due to intermittent CI failures on hip.txcorp.com. Should re-enable this test when the machine is upgraded.
343dcfd994dSJunchao Zhang       requires: !hip kokkos_kernels
344dcfd994dSJunchao Zhang       filter: grep -v type | grep -v "MPI processes"
345d9265f21SStefano Zampini 
346d9265f21SStefano Zampini    test:
347c4762a1bSJed Brown       suffix: 3
348c4762a1bSJed Brown       nsize: 2
349c4762a1bSJed Brown       args: -mat_type mpiaij -rectA
350c4762a1bSJed Brown 
351c4762a1bSJed Brown    test:
352c4762a1bSJed Brown       suffix: 3_aijcusparse
353c4762a1bSJed Brown       nsize: 2
354c4762a1bSJed Brown       args: -mat_type mpiaijcusparse -rectA
355c4762a1bSJed Brown       requires: cuda
356c4762a1bSJed Brown 
357c4762a1bSJed Brown    test:
358c4762a1bSJed Brown       suffix: 4
359c4762a1bSJed Brown       nsize: 2
360c4762a1bSJed Brown       args: -mat_type mpidense -rectA
3618cc725e6SPierre Jolivet       filter: grep -v type | grep -v " MPI process"
362a5225ed3SStefano Zampini 
363a5225ed3SStefano Zampini    test:
364a5225ed3SStefano Zampini       requires: cuda
365a5225ed3SStefano Zampini       suffix: 4_cuda
366a5225ed3SStefano Zampini       nsize: 2
367a5225ed3SStefano Zampini       output_file: output/ex2_4.out
368a5225ed3SStefano Zampini       args: -mat_type mpidensecuda -rectA
3698cc725e6SPierre Jolivet       filter: grep -v type | grep -v " MPI process"
370c4762a1bSJed Brown 
371c4762a1bSJed Brown    test:
372c4762a1bSJed Brown       suffix: aijcusparse_1
373c4762a1bSJed Brown       args: -mat_type seqaijcusparse -rectA
374c4762a1bSJed Brown       filter: grep -v "Mat Object"
375c4762a1bSJed Brown       output_file: output/ex2_11_A_aijcusparse.out
376c4762a1bSJed Brown       requires: cuda
377c4762a1bSJed Brown 
378c4762a1bSJed Brown TEST*/
379