Actual source code: ex307.c
1: static char help[] = "Tests MatConvert() from MATAIJ to MATSELL across multiple processes.\n\n";
3: #include <petscmat.h>
5: int main(int argc, char **args)
6: {
7: Mat A, B;
8: PetscViewer viewer;
9: PetscBool flg;
10: char file[PETSC_MAX_PATH_LEN];
12: PetscFunctionBeginUser;
13: PetscCall(PetscInitialize(&argc, &args, NULL, help));
14: PetscCall(PetscOptionsGetString(NULL, NULL, "-f", file, sizeof(file), &flg));
15: PetscCheck(flg, PETSC_COMM_WORLD, PETSC_ERR_USER, "Must indicate binary file with the -f option");
16: PetscCall(MatCreate(PETSC_COMM_WORLD, &A));
17: PetscCall(MatSetType(A, MATAIJ));
18: PetscCall(PetscViewerBinaryOpen(PETSC_COMM_WORLD, file, FILE_MODE_READ, &viewer));
19: PetscCall(MatLoad(A, viewer));
20: PetscCall(PetscViewerDestroy(&viewer));
22: PetscCall(MatConvert(A, MATSELL, MAT_INITIAL_MATRIX, &B));
23: PetscCall(MatMultEqual(A, B, 10, &flg));
24: PetscCheck(flg, PETSC_COMM_WORLD, PETSC_ERR_PLIB, "MatMult() differs between MATAIJ and converted MATSELL");
25: PetscCall(MatMultAddEqual(A, B, 10, &flg));
26: PetscCheck(flg, PETSC_COMM_WORLD, PETSC_ERR_PLIB, "MatMultAdd() differs between MATAIJ and converted MATSELL");
28: PetscCall(MatDestroy(&A));
29: PetscCall(MatDestroy(&B));
30: PetscCall(PetscFinalize());
31: return 0;
32: }
34: /*TEST
36: build:
37: requires: !complex !defined(PETSC_USE_64BIT_INDICES) double
39: test:
40: nsize: 2
41: args: -f ${wPETSC_DIR}/share/petsc/datafiles/matrices/spd-real-int32-float64
42: output_file: output/empty.out
44: TEST*/