xref: /petsc/src/mat/tests/ex27.c (revision a69119a591a03a9d906b29c0a4e9802e4d7c9795)
1 static char help[] = "Test MatSetRandom on MATMPIAIJ matrices\n\n";
2 
3 /*
4    Adapted from an example Contributed-by: Jakub Kruzik <jakub.kruzik@vsb.cz>
5 */
6 #include <petscmat.h>
7 int main(int argc, char **args) {
8   Mat         A[2];
9   PetscReal   nrm, tol = 10 * PETSC_SMALL;
10   PetscRandom rctx;
11 
12   PetscFunctionBeginUser;
13   PetscCall(PetscInitialize(&argc, &args, (char *)0, help));
14   PetscCall(PetscRandomCreate(PETSC_COMM_WORLD, &rctx));
15 
16   /* Call MatSetRandom on unassembled matrices */
17   PetscCall(MatCreateAIJ(PETSC_COMM_WORLD, PETSC_DECIDE, PETSC_DECIDE, 20, 20, 3, NULL, 3, NULL, &A[0]));
18   PetscCall(MatCreateAIJ(PETSC_COMM_WORLD, PETSC_DECIDE, PETSC_DECIDE, 20, 20, 3, NULL, 3, NULL, &A[1]));
19   PetscCall(MatSetRandom(A[0], rctx));
20   PetscCall(MatSetRandom(A[1], rctx));
21 
22   PetscCall(MatAXPY(A[0], 1.0, A[1], DIFFERENT_NONZERO_PATTERN));
23   PetscCall(MatAXPY(A[0], -1.0, A[0], SAME_NONZERO_PATTERN));
24   PetscCall(MatNorm(A[0], NORM_1, &nrm));
25   if (nrm > tol) PetscCall(PetscPrintf(PETSC_COMM_WORLD, "Error: MatNorm(), norm1=: %g\n", (double)nrm));
26 
27   /* Call MatSetRandom on assembled matrices */
28   PetscCall(MatSetRandom(A[0], rctx));
29   PetscCall(MatSetRandom(A[1], rctx));
30 
31   PetscCall(MatAXPY(A[0], 1.0, A[1], DIFFERENT_NONZERO_PATTERN));
32   PetscCall(MatAXPY(A[0], -1.0, A[0], SAME_NONZERO_PATTERN));
33   PetscCall(MatNorm(A[0], NORM_1, &nrm));
34   if (nrm > tol) PetscCall(PetscPrintf(PETSC_COMM_WORLD, "Error: MatNorm(), norm1=: %g\n", (double)nrm));
35 
36   PetscCall(MatDestroy(&A[0]));
37   PetscCall(MatDestroy(&A[1]));
38   PetscCall(PetscRandomDestroy(&rctx));
39   PetscCall(PetscFinalize());
40   return 0;
41 }
42 
43 /*TEST
44    test:
45       nsize: 3
46 TEST*/
47