1c4762a1bSJed Brown static char help[] = "Tests MatLoad() MatView() for MPIBAIJ.\n\n";
2c4762a1bSJed Brown
3c4762a1bSJed Brown #include <petscmat.h>
4c4762a1bSJed Brown
main(int argc,char ** args)5d71ae5a4SJacob Faibussowitsch int main(int argc, char **args)
6d71ae5a4SJacob Faibussowitsch {
7c4762a1bSJed Brown Mat A, B;
8c4762a1bSJed Brown char file[PETSC_MAX_PATH_LEN];
9c4762a1bSJed Brown PetscBool flg;
10c4762a1bSJed Brown PetscViewer fd;
11c4762a1bSJed Brown
12327415f7SBarry Smith PetscFunctionBeginUser;
13*c8025a54SPierre Jolivet PetscCall(PetscInitialize(&argc, &args, NULL, help));
149566063dSJacob Faibussowitsch PetscCall(PetscOptionsGetString(NULL, NULL, "-f", file, sizeof(file), &flg));
1528b400f6SJacob Faibussowitsch PetscCheck(flg, PETSC_COMM_WORLD, PETSC_ERR_USER, "Must indicate binary file with the -f option");
16c4762a1bSJed Brown
17c4762a1bSJed Brown /*
18c4762a1bSJed Brown Open binary file. Note that we use FILE_MODE_READ to indicate
19c4762a1bSJed Brown reading from this file.
20c4762a1bSJed Brown */
219566063dSJacob Faibussowitsch PetscCall(PetscViewerBinaryOpen(PETSC_COMM_WORLD, file, FILE_MODE_READ, &fd));
22c4762a1bSJed Brown
23c4762a1bSJed Brown /*
24c4762a1bSJed Brown Load the matrix; then destroy the viewer.
25c4762a1bSJed Brown */
269566063dSJacob Faibussowitsch PetscCall(MatCreate(PETSC_COMM_WORLD, &A));
279566063dSJacob Faibussowitsch PetscCall(MatSetFromOptions(A));
289566063dSJacob Faibussowitsch PetscCall(MatLoad(A, fd));
299566063dSJacob Faibussowitsch PetscCall(PetscViewerDestroy(&fd));
30c4762a1bSJed Brown
31c4762a1bSJed Brown /*
32c4762a1bSJed Brown Open another binary file. Note that we use FILE_MODE_WRITE to indicate writing to the file
33c4762a1bSJed Brown */
349566063dSJacob Faibussowitsch PetscCall(PetscViewerBinaryOpen(PETSC_COMM_WORLD, "fileoutput", FILE_MODE_WRITE, &fd));
359566063dSJacob Faibussowitsch PetscCall(PetscViewerBinarySetFlowControl(fd, 3));
36c4762a1bSJed Brown /*
37c4762a1bSJed Brown Save the matrix and vector; then destroy the viewer.
38c4762a1bSJed Brown */
399566063dSJacob Faibussowitsch PetscCall(MatView(A, fd));
409566063dSJacob Faibussowitsch PetscCall(PetscViewerDestroy(&fd));
41c4762a1bSJed Brown
42c4762a1bSJed Brown /* load the new matrix */
439566063dSJacob Faibussowitsch PetscCall(PetscViewerBinaryOpen(PETSC_COMM_WORLD, "fileoutput", FILE_MODE_READ, &fd));
449566063dSJacob Faibussowitsch PetscCall(MatCreate(PETSC_COMM_WORLD, &B));
459566063dSJacob Faibussowitsch PetscCall(MatSetFromOptions(B));
469566063dSJacob Faibussowitsch PetscCall(MatLoad(B, fd));
479566063dSJacob Faibussowitsch PetscCall(PetscViewerDestroy(&fd));
48c4762a1bSJed Brown
499566063dSJacob Faibussowitsch PetscCall(MatEqual(A, B, &flg));
50c4762a1bSJed Brown if (flg) {
519566063dSJacob Faibussowitsch PetscCall(PetscPrintf(PETSC_COMM_WORLD, "Matrices are equal\n"));
52c4762a1bSJed Brown } else {
539566063dSJacob Faibussowitsch PetscCall(PetscPrintf(PETSC_COMM_WORLD, "Matrices are not equal\n"));
54c4762a1bSJed Brown }
55c4762a1bSJed Brown
569566063dSJacob Faibussowitsch PetscCall(MatDestroy(&A));
579566063dSJacob Faibussowitsch PetscCall(MatDestroy(&B));
589566063dSJacob Faibussowitsch PetscCall(PetscFinalize());
59b122ec5aSJacob Faibussowitsch return 0;
60c4762a1bSJed Brown }
61c4762a1bSJed Brown
62c4762a1bSJed Brown /*TEST
63c4762a1bSJed Brown
64c4762a1bSJed Brown test:
65c4762a1bSJed Brown nsize: 3
66dfd57a17SPierre Jolivet requires: datafilespath !complex double !defined(PETSC_USE_64BIT_INDICES)
67c4762a1bSJed Brown args: -f ${DATAFILESPATH}/matrices/cfd.2.100 -mat_view ascii::ascii_info
68c4762a1bSJed Brown
69c4762a1bSJed Brown test:
70c4762a1bSJed Brown suffix: 2
71c4762a1bSJed Brown nsize: 5
72dfd57a17SPierre Jolivet requires: datafilespath !complex double !defined(PETSC_USE_64BIT_INDICES)
73c4762a1bSJed Brown args: -f ${DATAFILESPATH}/matrices/cfd.2.100 -mat_view ascii::ascii_info
74c4762a1bSJed Brown
75c4762a1bSJed Brown test:
76c4762a1bSJed Brown suffix: 3
77c4762a1bSJed Brown nsize: 7
78dfd57a17SPierre Jolivet requires: datafilespath !complex double !defined(PETSC_USE_64BIT_INDICES)
79c4762a1bSJed Brown args: -f ${DATAFILESPATH}/matrices/cfd.2.100 -mat_view ascii::ascii_info
80c4762a1bSJed Brown
81c4762a1bSJed Brown test:
82c4762a1bSJed Brown suffix: 4
83c4762a1bSJed Brown nsize: 3
84dfd57a17SPierre Jolivet requires: datafilespath !complex double !defined(PETSC_USE_64BIT_INDICES)
85c4762a1bSJed Brown args: -f ${DATAFILESPATH}/matrices/cfd.2.100 -mat_view ascii::ascii_info -mat_type baij
86c4762a1bSJed Brown
87c4762a1bSJed Brown test:
88c4762a1bSJed Brown suffix: 5
89c4762a1bSJed Brown nsize: 5
90dfd57a17SPierre Jolivet requires: datafilespath !complex double !defined(PETSC_USE_64BIT_INDICES)
91c4762a1bSJed Brown args: -f ${DATAFILESPATH}/matrices/cfd.2.100 -mat_view ascii::ascii_info -mat_type baij
92c4762a1bSJed Brown
93c4762a1bSJed Brown test:
94c4762a1bSJed Brown suffix: 6
95c4762a1bSJed Brown nsize: 7
96dfd57a17SPierre Jolivet requires: datafilespath !complex double !defined(PETSC_USE_64BIT_INDICES)
97c4762a1bSJed Brown args: -f ${DATAFILESPATH}/matrices/cfd.2.100 -mat_view ascii::ascii_info -mat_type baij
98c4762a1bSJed Brown
99c4762a1bSJed Brown TEST*/
100