xref: /petsc/src/mat/tests/ex27.c (revision ffa8c5705e8ab2cf85ee1d14dbe507a6e2eb5283)
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   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