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;

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

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

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

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

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

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

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

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

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

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

 63: /*TEST

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

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

 77: TEST*/