Actual source code: ex10.c
2: static char help[] = "Reads a PETSc matrix and computes the 2 norm of the columns\n\n";
4: /*
5: Include "petscmat.h" so that we can use matrices.
6: automatically includes:
7: petscsys.h - base PETSc routines petscvec.h - vectors
8: petscmat.h - matrices
9: petscis.h - index sets petscviewer.h - viewers
10: */
11: #include <petscmat.h>
13: int main(int argc, char **args)
14: {
15: Mat A; /* matrix */
16: PetscViewer fd; /* viewer */
17: char file[PETSC_MAX_PATH_LEN]; /* input file name */
18: PetscReal *norms;
19: PetscInt n, cstart, cend;
20: PetscBool flg;
21: PetscViewerFormat format;
23: PetscFunctionBeginUser;
24: PetscCall(PetscInitialize(&argc, &args, (char *)0, help));
25: /*
26: Determine files from which we read the matrix
27: */
28: PetscCall(PetscOptionsGetString(NULL, NULL, "-f", file, sizeof(file), &flg));
29: PetscCheck(flg, PETSC_COMM_WORLD, PETSC_ERR_USER, "Must indicate binary file with the -f option");
31: /*
32: Open binary file. Note that we use FILE_MODE_READ to indicate
33: reading from this file.
34: */
35: PetscCall(PetscViewerCreate(PETSC_COMM_WORLD, &fd));
36: PetscCall(PetscViewerSetType(fd, PETSCVIEWERBINARY));
37: PetscCall(PetscViewerSetFromOptions(fd));
38: PetscCall(PetscOptionsGetEnum(NULL, NULL, "-viewer_format", PetscViewerFormats, (PetscEnum *)&format, &flg));
39: if (flg) PetscCall(PetscViewerPushFormat(fd, format));
40: PetscCall(PetscViewerFileSetMode(fd, FILE_MODE_READ));
41: PetscCall(PetscViewerFileSetName(fd, file));
43: /*
44: Load the matrix; then destroy the viewer.
45: Matrix type is set automatically but you can override it by MatSetType() prior to MatLoad().
46: Do that only if you really insist on the given type.
47: */
48: PetscCall(MatCreate(PETSC_COMM_WORLD, &A));
49: PetscCall(MatSetOptionsPrefix(A, "a_"));
50: PetscCall(PetscObjectSetName((PetscObject)A, "A"));
51: PetscCall(MatSetFromOptions(A));
52: PetscCall(MatLoad(A, fd));
53: PetscCall(PetscViewerDestroy(&fd));
55: PetscCall(MatGetSize(A, NULL, &n));
56: PetscCall(MatGetOwnershipRangeColumn(A, &cstart, &cend));
57: PetscCall(PetscMalloc1(n, &norms));
58: PetscCall(MatGetColumnNorms(A, NORM_2, norms));
59: PetscCall(PetscRealView(cend - cstart, norms + cstart, PETSC_VIEWER_STDOUT_WORLD));
60: PetscCall(PetscFree(norms));
62: PetscCall(PetscObjectPrintClassNamePrefixType((PetscObject)A, PETSC_VIEWER_STDOUT_WORLD));
63: PetscCall(MatViewFromOptions(A, NULL, "-mat_view"));
65: PetscCall(MatDestroy(&A));
66: PetscCall(PetscFinalize());
67: return 0;
68: }
70: /*TEST
72: test:
73: suffix: mpiaij
74: nsize: 2
75: requires: datafilespath double !complex !defined(PETSC_USE_64BIT_INDICES)
76: args: -f ${DATAFILESPATH}/matrices/small -a_mat_type mpiaij
77: args: -a_matload_symmetric
79: test:
80: suffix: mpiaij_hdf5
81: nsize: 2
82: requires: datafilespath double !complex !defined(PETSC_USE_64BIT_INDICES) hdf5 defined(PETSC_HDF5_HAVE_ZLIB)
83: args: -f ${DATAFILESPATH}/matrices/matlab/small.mat -a_mat_type mpiaij -viewer_type hdf5 -viewer_format hdf5_mat
84: args: -a_matload_symmetric
86: test:
87: suffix: mpiaij_rect_hdf5
88: nsize: 2
89: requires: datafilespath double !complex !defined(PETSC_USE_64BIT_INDICES) hdf5 defined(PETSC_HDF5_HAVE_ZLIB)
90: args: -f ${DATAFILESPATH}/matrices/matlab/small_rect.mat -a_mat_type mpiaij -viewer_type hdf5 -viewer_format hdf5_mat
92: test:
93: # test for more processes than rows
94: suffix: mpiaij_hdf5_tiny
95: nsize: 8
96: requires: double !complex !defined(PETSC_USE_64BIT_INDICES) hdf5 defined(PETSC_HDF5_HAVE_ZLIB)
97: args: -f ${wPETSC_DIR}/share/petsc/datafiles/matrices/tiny_system_with_x0.mat -a_mat_type mpiaij -viewer_type hdf5 -viewer_format hdf5_mat
98: args: -a_matload_symmetric
100: test:
101: # test for more processes than rows, complex
102: TODO: not yet implemented for MATLAB complex format
103: suffix: mpiaij_hdf5_tiny_complex
104: nsize: 8
105: requires: double complex !defined(PETSC_USE_64BIT_INDICES) hdf5 defined(PETSC_HDF5_HAVE_ZLIB)
106: args: -f ${wPETSC_DIR}/share/petsc/datafiles/matrices/tiny_system_with_x0_complex.mat -a_mat_type mpiaij -viewer_type hdf5 -viewer_format hdf5_mat
107: args: -a_matload_symmetric
109: test:
110: TODO: mpibaij not supported yet
111: suffix: mpibaij_hdf5
112: nsize: 2
113: requires: datafilespath double !complex !defined(PETSC_USE_64BIT_INDICES) hdf5 defined(PETSC_HDF5_HAVE_ZLIB)
114: args: -f ${DATAFILESPATH}/matrices/matlab/small.mat -a_mat_type mpibaij -a_mat_block_size 2 -viewer_type hdf5 -viewer_format hdf5_mat
115: args: -a_matload_symmetric
117: test:
118: suffix: mpidense
119: nsize: 2
120: requires: datafilespath double !complex !defined(PETSC_USE_64BIT_INDICES)
121: args: -f ${DATAFILESPATH}/matrices/small -a_mat_type mpidense
122: args: -a_matload_symmetric
124: test:
125: suffix: seqaij
126: requires: datafilespath double !complex !defined(PETSC_USE_64BIT_INDICES)
127: args: -f ${DATAFILESPATH}/matrices/small -a_mat_type seqaij
128: args: -a_matload_symmetric
130: test:
131: suffix: seqaij_hdf5
132: requires: datafilespath double !complex !defined(PETSC_USE_64BIT_INDICES) hdf5 defined(PETSC_HDF5_HAVE_ZLIB)
133: args: -f ${DATAFILESPATH}/matrices/matlab/small.mat -a_mat_type seqaij -viewer_type hdf5 -viewer_format hdf5_mat
134: args: -a_matload_symmetric
136: test:
137: suffix: seqaij_rect_hdf5
138: requires: datafilespath double !complex !defined(PETSC_USE_64BIT_INDICES) hdf5 defined(PETSC_HDF5_HAVE_ZLIB)
139: args: -f ${DATAFILESPATH}/matrices/matlab/small_rect.mat -a_mat_type seqaij -viewer_type hdf5 -viewer_format hdf5_mat
141: test:
142: suffix: seqdense
143: requires: datafilespath double !complex !defined(PETSC_USE_64BIT_INDICES)
144: args: -f ${DATAFILESPATH}/matrices/small -a_mat_type seqdense
145: args: -a_matload_symmetric
147: test:
148: suffix: seqdense_hdf5
149: requires: datafilespath double !complex !defined(PETSC_USE_64BIT_INDICES) hdf5 defined(PETSC_HDF5_HAVE_ZLIB)
150: args: -f ${DATAFILESPATH}/matrices/matlab/small_dense.mat -a_mat_type seqdense -viewer_type hdf5 -viewer_format hdf5_mat
151: args: -a_matload_symmetric
153: test:
154: suffix: seqdense_rect_hdf5
155: requires: datafilespath double !complex !defined(PETSC_USE_64BIT_INDICES) hdf5 defined(PETSC_HDF5_HAVE_ZLIB)
156: args: -f ${DATAFILESPATH}/matrices/matlab/small_rect_dense.mat -a_mat_type seqdense -viewer_type hdf5 -viewer_format hdf5_mat
158: test:
159: suffix: mpidense_hdf5
160: nsize: 2
161: requires: datafilespath double !complex !defined(PETSC_USE_64BIT_INDICES) hdf5 defined(PETSC_HDF5_HAVE_ZLIB)
162: args: -f ${DATAFILESPATH}/matrices/matlab/small_dense.mat -a_mat_type mpidense -viewer_type hdf5 -viewer_format hdf5_mat
163: args: -a_matload_symmetric
165: test:
166: suffix: mpidense_rect_hdf5
167: nsize: 2
168: requires: datafilespath double !complex !defined(PETSC_USE_64BIT_INDICES) hdf5 defined(PETSC_HDF5_HAVE_ZLIB)
169: args: -f ${DATAFILESPATH}/matrices/matlab/small_rect_dense.mat -a_mat_type mpidense -viewer_type hdf5 -viewer_format hdf5_mat
170: TEST*/