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