xref: /petsc/src/mat/tests/ex136.c (revision 732aec7a18f2199fb53bb9a2f3aef439a834ce31)
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