Actual source code: ex138.c

  1: static char help[] = "Tests MatGetColumnNorms()/Sums()/Means() for matrix read from file.";

  3: #include <petscmat.h>

  5: int main(int argc, char **args)
  6: {
  7:   Mat          A;
  8:   PetscReal   *reductions_real;
  9:   PetscScalar *reductions_scalar;
 10:   char         file[PETSC_MAX_PATH_LEN];
 11:   PetscBool    flg;
 12:   PetscViewer  fd;
 13:   PetscInt     n;
 14:   PetscMPIInt  rank;

 16:   PetscFunctionBeginUser;
 17:   PetscCall(PetscInitialize(&argc, &args, (char *)0, help));
 18:   PetscCallMPI(MPI_Comm_rank(PETSC_COMM_WORLD, &rank));
 19:   PetscCall(PetscOptionsGetString(NULL, NULL, "-f", file, sizeof(file), &flg));
 20:   PetscCheck(flg, PETSC_COMM_WORLD, PETSC_ERR_USER, "Must indicate binary file with the -f option");
 21:   PetscCall(PetscViewerBinaryOpen(PETSC_COMM_WORLD, file, FILE_MODE_READ, &fd));
 22:   PetscCall(MatCreate(PETSC_COMM_WORLD, &A));
 23:   PetscCall(MatSetFromOptions(A));
 24:   PetscCall(MatLoad(A, fd));
 25:   PetscCall(PetscViewerDestroy(&fd));

 27:   PetscCall(MatGetSize(A, NULL, &n));
 28:   PetscCall(PetscMalloc1(n, &reductions_real));
 29:   PetscCall(PetscMalloc1(n, &reductions_scalar));

 31:   PetscCall(MatGetColumnNorms(A, NORM_2, reductions_real));
 32:   if (rank == 0) {
 33:     PetscCall(PetscPrintf(PETSC_COMM_SELF, "NORM_2:\n"));
 34:     PetscCall(PetscRealView(n, reductions_real, PETSC_VIEWER_STDOUT_SELF));
 35:   }

 37:   PetscCall(MatGetColumnNorms(A, NORM_1, reductions_real));
 38:   if (rank == 0) {
 39:     PetscCall(PetscPrintf(PETSC_COMM_SELF, "NORM_1:\n"));
 40:     PetscCall(PetscRealView(n, reductions_real, PETSC_VIEWER_STDOUT_SELF));
 41:   }

 43:   PetscCall(MatGetColumnNorms(A, NORM_INFINITY, reductions_real));
 44:   if (rank == 0) {
 45:     PetscCall(PetscPrintf(PETSC_COMM_SELF, "NORM_INFINITY:\n"));
 46:     PetscCall(PetscRealView(n, reductions_real, PETSC_VIEWER_STDOUT_SELF));
 47:   }

 49:   PetscCall(MatGetColumnSums(A, reductions_scalar));
 50:   if (rank == 0) {
 51:     PetscCall(PetscPrintf(PETSC_COMM_SELF, "REDUCTION_SUM:\n"));
 52:     PetscCall(PetscScalarView(n, reductions_scalar, PETSC_VIEWER_STDOUT_SELF));
 53:   }

 55:   PetscCall(MatGetColumnMeans(A, reductions_scalar));
 56:   if (rank == 0) {
 57:     PetscCall(PetscPrintf(PETSC_COMM_SELF, "REDUCTION_MEAN:\n"));
 58:     PetscCall(PetscScalarView(n, reductions_scalar, PETSC_VIEWER_STDOUT_SELF));
 59:   }

 61:   PetscCall(PetscFree(reductions_real));
 62:   PetscCall(PetscFree(reductions_scalar));
 63:   PetscCall(MatDestroy(&A));
 64:   PetscCall(PetscFinalize());
 65:   return 0;
 66: }

 68: /*TEST

 70:    test:
 71:       suffix: 1
 72:       nsize: 2
 73:       requires: datafilespath !complex double !defined(PETSC_USE_64BIT_INDICES)
 74:       args: -f ${DATAFILESPATH}/matrices/small -mat_type aij
 75:       output_file: output/ex138.out

 77:    test:
 78:       suffix: 2
 79:       nsize: {{1 2}}
 80:       requires: datafilespath !complex double !defined(PETSC_USE_64BIT_INDICES)
 81:       args: -f ${DATAFILESPATH}/matrices/small -mat_type baij -matload_block_size {{2 3}}
 82:       output_file: output/ex138.out

 84:    test:
 85:       suffix: complex
 86:       nsize: 2
 87:       requires: datafilespath complex double !defined(PETSC_USE_64BIT_INDICES)
 88:       args: -f ${DATAFILESPATH}/matrices/nimrod/small_112905 -mat_type aij
 89:       output_file: output/ex138_complex.out
 90:       filter: grep -E "\ 0:|1340:|1344:"

 92: TEST*/