1 static char help[] = "Test of setting values in a matrix without preallocation\n\n";
2
3 #include <petscmat.h>
4
ex1_nonsquare_bs1(void)5 PetscErrorCode ex1_nonsquare_bs1(void)
6 {
7 Mat A;
8 PetscInt M, N, m, n, bs = 1;
9 char type[16];
10 PetscBool flg;
11
12 /*
13 Create the matrix
14 */
15 PetscFunctionBegin;
16 M = 10;
17 N = 12;
18 PetscCall(MatCreate(PETSC_COMM_WORLD, &A));
19 PetscCall(PetscOptionsGetString(NULL, NULL, "-type", type, sizeof(type), &flg));
20 if (flg) PetscCall(MatSetType(A, type));
21 else PetscCall(MatSetType(A, MATAIJ));
22 PetscCall(MatSetSizes(A, PETSC_DECIDE, PETSC_DECIDE, M, N));
23 PetscCall(PetscOptionsGetInt(NULL, NULL, "-bs", &bs, NULL));
24 PetscCall(MatSetBlockSize(A, bs));
25 PetscCall(MatSetFromOptions(A));
26
27 /*
28 Get the sizes of the matrix
29 */
30 PetscCall(MatGetLocalSize(A, &m, &n));
31
32 /*
33 Insert non-zero pattern (e.g. perform a sweep over the grid).
34 You can use MatSetValues(), MatSetValuesBlocked() or MatSetValue().
35 */
36 {
37 PetscInt ii, jj;
38 PetscScalar vv = 22.0;
39
40 ii = 3;
41 jj = 3;
42 PetscCall(MatSetValue(A, ii, jj, vv, INSERT_VALUES));
43
44 ii = 7;
45 jj = 4;
46 PetscCall(MatSetValue(A, ii, jj, vv, INSERT_VALUES));
47 PetscCall(MatSetValue(A, jj, ii, vv, INSERT_VALUES));
48
49 ii = 9;
50 jj = 7;
51 PetscCall(MatSetValue(A, ii, jj, vv, INSERT_VALUES));
52 PetscCall(MatSetValue(A, jj, ii, vv, INSERT_VALUES));
53 }
54 PetscCall(MatAssemblyBegin(A, MAT_FINAL_ASSEMBLY));
55 PetscCall(MatAssemblyEnd(A, MAT_FINAL_ASSEMBLY));
56
57 PetscCall(PetscViewerPushFormat(PETSC_VIEWER_STDOUT_WORLD, PETSC_VIEWER_ASCII_COMMON));
58 PetscCall(MatView(A, PETSC_VIEWER_STDOUT_WORLD));
59
60 /*
61 Insert same location non-zero values into A.
62 */
63 {
64 PetscInt ii, jj;
65 PetscScalar vv;
66
67 ii = 3;
68 jj = 3;
69 vv = 0.3;
70 PetscCall(MatSetValue(A, ii, jj, vv, INSERT_VALUES));
71
72 ii = 7;
73 jj = 4;
74 vv = 3.3;
75 PetscCall(MatSetValue(A, ii, jj, vv, INSERT_VALUES));
76 PetscCall(MatSetValue(A, jj, ii, vv, INSERT_VALUES));
77
78 ii = 9;
79 jj = 7;
80 vv = 4.3;
81 PetscCall(MatSetValue(A, ii, jj, vv, INSERT_VALUES));
82 PetscCall(MatSetValue(A, jj, ii, vv, INSERT_VALUES));
83 }
84 PetscCall(MatAssemblyBegin(A, MAT_FINAL_ASSEMBLY));
85 PetscCall(MatAssemblyEnd(A, MAT_FINAL_ASSEMBLY));
86
87 PetscCall(MatView(A, PETSC_VIEWER_STDOUT_WORLD));
88
89 PetscCall(MatDestroy(&A));
90 PetscFunctionReturn(PETSC_SUCCESS);
91 }
92
main(int argc,char ** args)93 int main(int argc, char **args)
94 {
95 PetscFunctionBeginUser;
96 PetscCall(PetscInitialize(&argc, &args, NULL, help));
97 PetscCall(ex1_nonsquare_bs1());
98 PetscCall(PetscFinalize());
99 return 0;
100 }
101
102 /*TEST
103
104 testset:
105 args: -bs {{1 2}} -type {{aij baij sbaij}}
106 filter: grep -v "type:"
107 test:
108 test:
109 suffix: 2
110 nsize: 2
111
112 TEST*/
113