1 2 static char help[] = "Tests MatGetColumnVector()."; 3 4 #include <petscmat.h> 5 6 int main(int argc, char **args) { 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; 12 13 PetscFunctionBeginUser; 14 PetscCall(PetscInitialize(&argc, &args, (char *)0, help)); 15 PetscCall(PetscOptionsGetInt(NULL, NULL, "-col", &col, NULL)); 16 17 PetscCallMPI(MPI_Comm_rank(PETSC_COMM_WORLD, &rank)); 18 PetscCallMPI(MPI_Comm_size(PETSC_COMM_WORLD, &size)); 19 n = 2 * size; 20 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)); 28 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)); 56 57 PetscCall(MatCreateVecs(C, NULL, &yy)); 58 PetscCall(VecSetFromOptions(yy)); 59 60 PetscCall(MatGetColumnVector(C, yy, col)); 61 62 PetscCall(VecView(yy, PETSC_VIEWER_STDOUT_WORLD)); 63 64 PetscCall(VecDestroy(&yy)); 65 PetscCall(MatDestroy(&C)); 66 PetscCall(PetscFinalize()); 67 return 0; 68 } 69 70 /*TEST 71 72 test: 73 nsize: 3 74 args: -col 7 75 76 test: 77 suffix: dense 78 nsize: 3 79 args: -col 7 -mat_type dense -vec_type {{mpi standard}} 80 filter: grep -v type 81 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 89 90 TEST*/ 91