Actual source code: ex136.c


  2: static char help[] = "Tests MatLoad() MatView() for MPIBAIJ.\n\n";

  4: #include <petscmat.h>

  6: int main(int argc, char **args)
  7: {
  8:   Mat         A, B;
  9:   char        file[PETSC_MAX_PATH_LEN];
 10:   PetscBool   flg;
 11:   PetscViewer fd;

 13:   PetscFunctionBeginUser;
 14:   PetscCall(PetscInitialize(&argc, &args, (char *)0, help));
 15:   PetscCall(PetscOptionsGetString(NULL, NULL, "-f", file, sizeof(file), &flg));
 16:   PetscCheck(flg, PETSC_COMM_WORLD, PETSC_ERR_USER, "Must indicate binary file with the -f option");

 18:   /*
 19:      Open binary file.  Note that we use FILE_MODE_READ to indicate
 20:      reading from this file.
 21:   */
 22:   PetscCall(PetscViewerBinaryOpen(PETSC_COMM_WORLD, file, FILE_MODE_READ, &fd));

 24:   /*
 25:      Load the matrix; then destroy the viewer.
 26:   */
 27:   PetscCall(MatCreate(PETSC_COMM_WORLD, &A));
 28:   PetscCall(MatSetFromOptions(A));
 29:   PetscCall(MatLoad(A, fd));
 30:   PetscCall(PetscViewerDestroy(&fd));

 32:   /*
 33:      Open another binary file.  Note that we use FILE_MODE_WRITE to indicate writing to the file
 34:   */
 35:   PetscCall(PetscViewerBinaryOpen(PETSC_COMM_WORLD, "fileoutput", FILE_MODE_WRITE, &fd));
 36:   PetscCall(PetscViewerBinarySetFlowControl(fd, 3));
 37:   /*
 38:      Save the matrix and vector; then destroy the viewer.
 39:   */
 40:   PetscCall(MatView(A, fd));
 41:   PetscCall(PetscViewerDestroy(&fd));

 43:   /* load the new matrix */
 44:   PetscCall(PetscViewerBinaryOpen(PETSC_COMM_WORLD, "fileoutput", FILE_MODE_READ, &fd));
 45:   PetscCall(MatCreate(PETSC_COMM_WORLD, &B));
 46:   PetscCall(MatSetFromOptions(B));
 47:   PetscCall(MatLoad(B, fd));
 48:   PetscCall(PetscViewerDestroy(&fd));

 50:   PetscCall(MatEqual(A, B, &flg));
 51:   if (flg) {
 52:     PetscCall(PetscPrintf(PETSC_COMM_WORLD, "Matrices are equal\n"));
 53:   } else {
 54:     PetscCall(PetscPrintf(PETSC_COMM_WORLD, "Matrices are not equal\n"));
 55:   }

 57:   PetscCall(MatDestroy(&A));
 58:   PetscCall(MatDestroy(&B));
 59:   PetscCall(PetscFinalize());
 60:   return 0;
 61: }

 63: /*TEST

 65:    test:
 66:       nsize: 3
 67:       requires: datafilespath !complex double !defined(PETSC_USE_64BIT_INDICES)
 68:       args: -f ${DATAFILESPATH}/matrices/cfd.2.100 -mat_view ascii::ascii_info

 70:    test:
 71:       suffix: 2
 72:       nsize: 5
 73:       requires: datafilespath !complex double !defined(PETSC_USE_64BIT_INDICES)
 74:       args: -f ${DATAFILESPATH}/matrices/cfd.2.100 -mat_view ascii::ascii_info

 76:    test:
 77:       suffix: 3
 78:       nsize: 7
 79:       requires: datafilespath !complex double !defined(PETSC_USE_64BIT_INDICES)
 80:       args: -f ${DATAFILESPATH}/matrices/cfd.2.100 -mat_view ascii::ascii_info

 82:    test:
 83:       suffix: 4
 84:       nsize: 3
 85:       requires: datafilespath !complex double !defined(PETSC_USE_64BIT_INDICES)
 86:       args: -f ${DATAFILESPATH}/matrices/cfd.2.100 -mat_view ascii::ascii_info -mat_type baij

 88:    test:
 89:       suffix: 5
 90:       nsize: 5
 91:       requires: datafilespath !complex double !defined(PETSC_USE_64BIT_INDICES)
 92:       args: -f ${DATAFILESPATH}/matrices/cfd.2.100 -mat_view ascii::ascii_info -mat_type baij

 94:    test:
 95:       suffix: 6
 96:       nsize: 7
 97:       requires: datafilespath !complex double !defined(PETSC_USE_64BIT_INDICES)
 98:       args: -f ${DATAFILESPATH}/matrices/cfd.2.100 -mat_view ascii::ascii_info -mat_type baij

100: TEST*/