xref: /petsc/src/mat/tests/ex61.c (revision 732aec7a18f2199fb53bb9a2f3aef439a834ce31)
1 static char help[] = "Tests MatSeq(B)AIJSetColumnIndices().\n\n";
2 
3 #include <petscmat.h>
4 
5 /*
6       Generate the following matrix:
7 
8          1 0 3
9          1 2 3
10          0 0 3
11 */
main(int argc,char ** args)12 int main(int argc, char **args)
13 {
14   Mat         A;
15   PetscScalar v;
16   PetscInt    i, j, rowlens[] = {2, 3, 1}, cols[] = {0, 2, 0, 1, 2, 2};
17   PetscBool   flg;
18 
19   PetscFunctionBeginUser;
20   PetscCall(PetscInitialize(&argc, &args, NULL, help));
21   PetscCall(PetscOptionsHasName(NULL, NULL, "-baij", &flg));
22   if (flg) {
23     PetscCall(MatCreateSeqBAIJ(PETSC_COMM_WORLD, 1, 3, 3, 0, rowlens, &A));
24     PetscCall(MatSeqBAIJSetColumnIndices(A, cols));
25   } else {
26     PetscCall(MatCreateSeqAIJ(PETSC_COMM_WORLD, 3, 3, 0, rowlens, &A));
27     PetscCall(MatSeqAIJSetColumnIndices(A, cols));
28   }
29 
30   i = 0;
31   j = 0;
32   v = 1.0;
33   PetscCall(MatSetValues(A, 1, &i, 1, &j, &v, INSERT_VALUES));
34   i = 0;
35   j = 2;
36   v = 3.0;
37   PetscCall(MatSetValues(A, 1, &i, 1, &j, &v, INSERT_VALUES));
38 
39   i = 1;
40   j = 0;
41   v = 1.0;
42   PetscCall(MatSetValues(A, 1, &i, 1, &j, &v, INSERT_VALUES));
43   i = 1;
44   j = 1;
45   v = 2.0;
46   PetscCall(MatSetValues(A, 1, &i, 1, &j, &v, INSERT_VALUES));
47   i = 1;
48   j = 2;
49   v = 3.0;
50   PetscCall(MatSetValues(A, 1, &i, 1, &j, &v, INSERT_VALUES));
51 
52   i = 2;
53   j = 2;
54   v = 3.0;
55   PetscCall(MatSetValues(A, 1, &i, 1, &j, &v, INSERT_VALUES));
56 
57   PetscCall(MatAssemblyBegin(A, MAT_FINAL_ASSEMBLY));
58   PetscCall(MatAssemblyEnd(A, MAT_FINAL_ASSEMBLY));
59   PetscCall(MatView(A, PETSC_VIEWER_STDOUT_WORLD));
60 
61   PetscCall(MatDestroy(&A));
62   PetscCall(PetscFinalize());
63   return 0;
64 }
65 
66 /*TEST
67 
68    test:
69 
70    test:
71       suffix: 2
72       args: -baij
73 
74 TEST*/
75