Actual source code: ex198.c

  1: static char help[] = "Test MatMatMatMult\n\
  2: Reads PETSc matrix A B and C, then comput D=A*B*C \n\
  3: Input parameters include\n\
  4:   -fA <input_file> -fB <input_file> -fC <input_file> \n\n";

  6: #include <petscmat.h>

  8: int main(int argc, char **args)
  9: {
 10:   Mat         A, B, C, D, BC, ABC;
 11:   PetscViewer fd;
 12:   char        file[3][PETSC_MAX_PATH_LEN];
 13:   PetscBool   flg;

 16:   PetscInitialize(&argc, &args, (char *)0, help);
 17:   /* read matrices A, B and C */
 18:   PetscOptionsGetString(NULL, NULL, "-fA", file[0], sizeof(file[0]), &flg);

 21:   PetscOptionsGetString(NULL, NULL, "-fB", file[1], sizeof(file[1]), &flg);

 24:   PetscOptionsGetString(NULL, NULL, "-fC", file[2], sizeof(file[2]), &flg);

 27:   /* Load matrices */
 28:   PetscViewerBinaryOpen(PETSC_COMM_WORLD, file[0], FILE_MODE_READ, &fd);
 29:   MatCreate(PETSC_COMM_WORLD, &A);
 30:   MatLoad(A, fd);
 31:   PetscViewerDestroy(&fd);

 33:   PetscViewerBinaryOpen(PETSC_COMM_WORLD, file[1], FILE_MODE_READ, &fd);
 34:   MatCreate(PETSC_COMM_WORLD, &B);
 35:   MatLoad(B, fd);
 36:   PetscViewerDestroy(&fd);

 38:   PetscViewerBinaryOpen(PETSC_COMM_WORLD, file[2], FILE_MODE_READ, &fd);
 39:   MatCreate(PETSC_COMM_WORLD, &C);
 40:   MatLoad(C, fd);
 41:   PetscViewerDestroy(&fd);

 43:   /* Test MatMatMult() */
 44:   MatMatMult(B, C, MAT_INITIAL_MATRIX, PETSC_DEFAULT, &BC);
 45:   MatMatMult(A, BC, MAT_INITIAL_MATRIX, PETSC_DEFAULT, &ABC);

 47:   MatMatMatMult(A, B, C, MAT_INITIAL_MATRIX, PETSC_DEFAULT, &D);
 48:   MatMatMatMult(A, B, C, MAT_REUSE_MATRIX, PETSC_DEFAULT, &D);
 49:   /* MatView(D,PETSC_VIEWER_STDOUT_WORLD); */

 51:   MatEqual(ABC, D, &flg);

 54:   MatDestroy(&ABC);
 55:   MatDestroy(&BC);
 56:   MatDestroy(&D);
 57:   MatDestroy(&C);
 58:   MatDestroy(&B);
 59:   MatDestroy(&A);
 60:   PetscFinalize();
 61:   return 0;
 62: }

 64: /*TEST

 66:    test:
 67:       requires: datafilespath !complex double !defined(PETSC_USE_64BIT_INDICES)
 68:       args: -fA ${DATAFILESPATH}/matrices/matmatmatmult/A.bin -fB ${DATAFILESPATH}/matrices/matmatmatmult/B.bin -fC ${DATAFILESPATH}/matrices/matmatmatmult/C.bin
 69:       output_file: output/ex198.out

 71:    test:
 72:       suffix: 2
 73:       nsize: 3
 74:       requires: datafilespath !complex double !defined(PETSC_USE_64BIT_INDICES)
 75:       args: -fA ${DATAFILESPATH}/matrices/matmatmatmult/A.bin -fB ${DATAFILESPATH}/matrices/matmatmatmult/B.bin -fC ${DATAFILESPATH}/matrices/matmatmatmult/C.bin
 76:       output_file: output/ex198.out

 78: TEST*/