Actual source code: ex27.c

  1: static char help[] = "Test MatSetRandom on MATMPIAIJ matrices\n\n";

  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;

 14:   PetscInitialize(&argc, &args, (char *)0, help);
 15:   PetscRandomCreate(PETSC_COMM_WORLD, &rctx);

 17:   /* Call MatSetRandom on unassembled matrices */
 18:   MatCreateAIJ(PETSC_COMM_WORLD, PETSC_DECIDE, PETSC_DECIDE, 20, 20, 3, NULL, 3, NULL, &A[0]);
 19:   MatCreateAIJ(PETSC_COMM_WORLD, PETSC_DECIDE, PETSC_DECIDE, 20, 20, 3, NULL, 3, NULL, &A[1]);
 20:   MatSetRandom(A[0], rctx);
 21:   MatSetRandom(A[1], rctx);

 23:   MatAXPY(A[0], 1.0, A[1], DIFFERENT_NONZERO_PATTERN);
 24:   MatAXPY(A[0], -1.0, A[0], SAME_NONZERO_PATTERN);
 25:   MatNorm(A[0], NORM_1, &nrm);
 26:   if (nrm > tol) PetscPrintf(PETSC_COMM_WORLD, "Error: MatNorm(), norm1=: %g\n", (double)nrm);

 28:   /* Call MatSetRandom on assembled matrices */
 29:   MatSetRandom(A[0], rctx);
 30:   MatSetRandom(A[1], rctx);

 32:   MatAXPY(A[0], 1.0, A[1], DIFFERENT_NONZERO_PATTERN);
 33:   MatAXPY(A[0], -1.0, A[0], SAME_NONZERO_PATTERN);
 34:   MatNorm(A[0], NORM_1, &nrm);
 35:   if (nrm > tol) PetscPrintf(PETSC_COMM_WORLD, "Error: MatNorm(), norm1=: %g\n", (double)nrm);

 37:   MatDestroy(&A[0]);
 38:   MatDestroy(&A[1]);
 39:   PetscRandomDestroy(&rctx);
 40:   PetscFinalize();
 41:   return 0;
 42: }

 44: /*TEST
 45:    test:
 46:       nsize: 3
 47: TEST*/