Actual source code: ex60.c
1: static char help[] = "Tests MatGetColumnVector().";
3: #include <petscmat.h>
5: int main(int argc, char **args)
6: {
7: Mat C;
8: PetscInt i, j, m = 3, n = 2, Ii, J, col = 0;
9: PetscMPIInt size, rank;
10: PetscScalar v;
11: Vec yy;
13: PetscFunctionBeginUser;
14: PetscCall(PetscInitialize(&argc, &args, NULL, help));
15: PetscCall(PetscOptionsGetInt(NULL, NULL, "-col", &col, NULL));
17: PetscCallMPI(MPI_Comm_rank(PETSC_COMM_WORLD, &rank));
18: PetscCallMPI(MPI_Comm_size(PETSC_COMM_WORLD, &size));
19: n = 2 * size;
21: /* create the matrix for the five point stencil, YET AGAIN*/
22: PetscCall(MatCreate(PETSC_COMM_WORLD, &C));
23: PetscCall(MatSetSizes(C, PETSC_DECIDE, PETSC_DECIDE, m * n, m * n));
24: PetscCall(MatSetFromOptions(C));
25: PetscCall(MatSeqAIJSetPreallocation(C, 5, NULL));
26: PetscCall(MatMPIAIJSetPreallocation(C, 5, NULL, 5, NULL));
27: PetscCall(MatSetUp(C));
29: for (i = 0; i < m; i++) {
30: for (j = 2 * rank; j < 2 * rank + 2; j++) {
31: v = -1.0;
32: Ii = j + n * i;
33: if (i > 0) {
34: J = Ii - n;
35: PetscCall(MatSetValues(C, 1, &Ii, 1, &J, &v, INSERT_VALUES));
36: }
37: if (i < m - 1) {
38: J = Ii + n;
39: PetscCall(MatSetValues(C, 1, &Ii, 1, &J, &v, INSERT_VALUES));
40: }
41: if (j > 0) {
42: J = Ii - 1;
43: PetscCall(MatSetValues(C, 1, &Ii, 1, &J, &v, INSERT_VALUES));
44: }
45: if (j < n - 1) {
46: J = Ii + 1;
47: PetscCall(MatSetValues(C, 1, &Ii, 1, &J, &v, INSERT_VALUES));
48: }
49: v = 4.0;
50: PetscCall(MatSetValues(C, 1, &Ii, 1, &Ii, &v, INSERT_VALUES));
51: }
52: }
53: PetscCall(MatAssemblyBegin(C, MAT_FINAL_ASSEMBLY));
54: PetscCall(MatAssemblyEnd(C, MAT_FINAL_ASSEMBLY));
55: PetscCall(MatView(C, PETSC_VIEWER_STDOUT_WORLD));
57: PetscCall(MatCreateVecs(C, NULL, &yy));
58: PetscCall(VecSetFromOptions(yy));
60: PetscCall(MatGetColumnVector(C, yy, col));
62: PetscCall(VecView(yy, PETSC_VIEWER_STDOUT_WORLD));
64: PetscCall(VecDestroy(&yy));
65: PetscCall(MatDestroy(&C));
66: PetscCall(PetscFinalize());
67: return 0;
68: }
70: /*TEST
72: test:
73: nsize: 3
74: args: -col 7
76: test:
77: suffix: dense
78: nsize: 3
79: args: -col 7 -mat_type dense -vec_type {{mpi standard}}
80: filter: grep -v type
82: test:
83: requires: cuda
84: suffix: dense_cuda
85: nsize: 3
86: output_file: output/ex60_dense.out
87: args: -col 7 -mat_type {{mpidense mpidensecuda}} -vec_type {{mpi standard cuda mpicuda}}
88: filter: grep -v type
90: TEST*/