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;

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

 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));

 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));

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

 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));

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

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