xref: /petsc/src/mat/tests/ex162.c (revision 732aec7a18f2199fb53bb9a2f3aef439a834ce31)
1 static char help[] = "Tests MatShift for SeqAIJ matrices with some missing diagonal entries\n\n";
2 
3 #include <petscmat.h>
4 
main(int argc,char ** argv)5 int main(int argc, char **argv)
6 {
7   Mat         A;
8   PetscInt    coli[4], row;
9   PetscScalar vali[4];
10   PetscMPIInt size;
11 
12   PetscFunctionBeginUser;
13   PetscCall(PetscInitialize(&argc, &argv, NULL, help));
14   PetscCallMPI(MPI_Comm_size(PETSC_COMM_WORLD, &size));
15   PetscCheck(size == 1, PETSC_COMM_WORLD, PETSC_ERR_WRONG_MPI_SIZE, "This is a uniprocessor example only!");
16 
17   PetscCall(MatCreate(PETSC_COMM_SELF, &A));
18   PetscCall(MatSetSizes(A, 4, 4, 4, 4));
19   PetscCall(MatSetType(A, MATSEQAIJ));
20   PetscCall(MatSeqAIJSetPreallocation(A, 4, NULL));
21 
22   row     = 0;
23   coli[0] = 1;
24   coli[1] = 3;
25   vali[0] = 1.0;
26   vali[1] = 2.0;
27   PetscCall(MatSetValues(A, 1, &row, 2, coli, vali, ADD_VALUES));
28 
29   row     = 1;
30   coli[0] = 0;
31   coli[1] = 1;
32   coli[2] = 2;
33   coli[3] = 3;
34   vali[0] = 3.0;
35   vali[1] = 4.0;
36   vali[2] = 5.0;
37   vali[3] = 6.0;
38   PetscCall(MatSetValues(A, 1, &row, 4, coli, vali, ADD_VALUES));
39 
40   row     = 2;
41   coli[0] = 0;
42   coli[1] = 3;
43   vali[0] = 7.0;
44   vali[1] = 8.0;
45   PetscCall(MatSetValues(A, 1, &row, 2, coli, vali, ADD_VALUES));
46 
47   PetscCall(MatAssemblyBegin(A, MAT_FINAL_ASSEMBLY));
48   PetscCall(MatAssemblyEnd(A, MAT_FINAL_ASSEMBLY));
49   PetscCall(MatView(A, PETSC_VIEWER_STDOUT_WORLD));
50 
51   PetscCall(MatShift(A, 0.0));
52   PetscCall(MatView(A, PETSC_VIEWER_STDOUT_WORLD));
53 
54   PetscCall(MatDestroy(&A));
55   PetscCall(PetscFinalize());
56   return 0;
57 }
58 
59 /*TEST
60 
61    test:
62 
63 TEST*/
64