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*/