xref: /petsc/src/mat/tests/ex27.c (revision d5b43468fb8780a8feea140ccd6fa3e6a50411cc)
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 {
9   Mat         A[2];
10   PetscReal   nrm, tol = 10 * PETSC_SMALL;
11   PetscRandom rctx;
12 
13   PetscFunctionBeginUser;
14   PetscCall(PetscInitialize(&argc, &args, (char *)0, help));
15   PetscCall(PetscRandomCreate(PETSC_COMM_WORLD, &rctx));
16 
17   /* Call MatSetRandom on unassembled matrices */
18   PetscCall(MatCreateAIJ(PETSC_COMM_WORLD, PETSC_DECIDE, PETSC_DECIDE, 20, 20, 3, NULL, 3, NULL, &A[0]));
19   PetscCall(MatCreateAIJ(PETSC_COMM_WORLD, PETSC_DECIDE, PETSC_DECIDE, 20, 20, 3, NULL, 3, NULL, &A[1]));
20   PetscCall(MatSetRandom(A[0], rctx));
21   PetscCall(MatSetRandom(A[1], rctx));
22 
23   PetscCall(MatAXPY(A[0], 1.0, A[1], DIFFERENT_NONZERO_PATTERN));
24   PetscCall(MatAXPY(A[0], -1.0, A[0], SAME_NONZERO_PATTERN));
25   PetscCall(MatNorm(A[0], NORM_1, &nrm));
26   if (nrm > tol) PetscCall(PetscPrintf(PETSC_COMM_WORLD, "Error: MatNorm(), norm1=: %g\n", (double)nrm));
27 
28   /* Call MatSetRandom on assembled matrices */
29   PetscCall(MatSetRandom(A[0], rctx));
30   PetscCall(MatSetRandom(A[1], rctx));
31 
32   PetscCall(MatAXPY(A[0], 1.0, A[1], DIFFERENT_NONZERO_PATTERN));
33   PetscCall(MatAXPY(A[0], -1.0, A[0], SAME_NONZERO_PATTERN));
34   PetscCall(MatNorm(A[0], NORM_1, &nrm));
35   if (nrm > tol) PetscCall(PetscPrintf(PETSC_COMM_WORLD, "Error: MatNorm(), norm1=: %g\n", (double)nrm));
36 
37   PetscCall(MatDestroy(&A[0]));
38   PetscCall(MatDestroy(&A[1]));
39   PetscCall(PetscRandomDestroy(&rctx));
40   PetscCall(PetscFinalize());
41   return 0;
42 }
43 
44 /*TEST
45    test:
46       nsize: 3
47 TEST*/
48