Actual source code: ex61.c
1: static char help[] = "Tests MatSeq(B)AIJSetColumnIndices().\n\n";
3: #include <petscmat.h>
5: /*
6: Generate the following matrix:
8: 1 0 3
9: 1 2 3
10: 0 0 3
11: */
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;
19: PetscFunctionBeginUser;
20: PetscCall(PetscInitialize(&argc, &args, (char *)0, 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: }
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));
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));
52: i = 2;
53: j = 2;
54: v = 3.0;
55: PetscCall(MatSetValues(A, 1, &i, 1, &j, &v, INSERT_VALUES));
57: PetscCall(MatAssemblyBegin(A, MAT_FINAL_ASSEMBLY));
58: PetscCall(MatAssemblyEnd(A, MAT_FINAL_ASSEMBLY));
59: PetscCall(MatView(A, PETSC_VIEWER_STDOUT_WORLD));
61: PetscCall(MatDestroy(&A));
62: PetscCall(PetscFinalize());
63: return 0;
64: }
66: /*TEST
68: test:
70: test:
71: suffix: 2
72: args: -baij
74: TEST*/