xref: /petsc/src/mat/tests/ex259.c (revision fbf9dbe564678ed6eff1806adbc4c4f01b9743f4)
1 static char help[] = "Test of setting values in a matrix without preallocation\n\n";
2 
3 #include <petscmat.h>
4 
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 
93 int main(int argc, char **args)
94 {
95   PetscFunctionBeginUser;
96   PetscCall(PetscInitialize(&argc, &args, (char *)0, 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