xref: /petsc/src/mat/tests/ex176.c (revision d71ae5a4db6382e7f06317b8d368875286fe9008)
1c4762a1bSJed Brown 
2c4762a1bSJed Brown static char help[] = "Tests MatCreateMPIAIJWithArrays() abd MatUpdateMPIAIJWithArrays()\n";
3c4762a1bSJed Brown 
4c4762a1bSJed Brown #include <petscmat.h>
5c4762a1bSJed Brown 
6c4762a1bSJed Brown /*
7c4762a1bSJed Brown  * This is an extremely simple example to test MatUpdateMPIAIJWithArrays()
8c4762a1bSJed Brown  *
9c4762a1bSJed Brown  * A =
10c4762a1bSJed Brown 
11c4762a1bSJed Brown    1    2   0   3  0  0
12c4762a1bSJed Brown    0    4   5   0  0  6
13c4762a1bSJed Brown    7    0   8   0  9  0
14c4762a1bSJed Brown    0   10  11  12  0  13
15c4762a1bSJed Brown    0   14  15   0  0  16
16c4762a1bSJed Brown   17    0   0   0  0  18
17c4762a1bSJed Brown  *
18c4762a1bSJed Brown  * */
19c4762a1bSJed Brown 
20*d71ae5a4SJacob Faibussowitsch int main(int argc, char **argv)
21*d71ae5a4SJacob Faibussowitsch {
22c4762a1bSJed Brown   Mat      A;
239371c9d4SSatish Balay   PetscInt i[3][3] = {
249371c9d4SSatish Balay     {0, 3, 6},
259371c9d4SSatish Balay     {0, 3, 7},
269371c9d4SSatish Balay     {0, 3, 5}
279371c9d4SSatish Balay   };
289371c9d4SSatish Balay   PetscInt j[3][7] = {
299371c9d4SSatish Balay     {0, 1, 3, 1, 2, 5,  -1},
309371c9d4SSatish Balay     {0, 2, 4, 1, 2, 3,  5 },
319371c9d4SSatish Balay     {1, 2, 5, 0, 5, -1, -1}
329371c9d4SSatish Balay   };
339371c9d4SSatish Balay   PetscScalar a[3][7] = {
349371c9d4SSatish Balay     {1,  2,  3,  4,  5,  6,  -1},
359371c9d4SSatish Balay     {7,  8,  9,  10, 11, 12, 13},
369371c9d4SSatish Balay     {14, 15, 16, 17, 18, -1, -1}
379371c9d4SSatish Balay   };
389371c9d4SSatish Balay   PetscScalar anew[3][7] = {
399371c9d4SSatish Balay     {10,  20,  30,  40,  50,  60,  -1 },
409371c9d4SSatish Balay     {70,  80,  90,  100, 110, 120, 130},
419371c9d4SSatish Balay     {140, 150, 160, 170, 180, -1,  -1 }
429371c9d4SSatish Balay   };
43c4762a1bSJed Brown   MPI_Comm    comm;
44c4762a1bSJed Brown   PetscMPIInt rank, size;
45c4762a1bSJed Brown 
46327415f7SBarry Smith   PetscFunctionBeginUser;
479566063dSJacob Faibussowitsch   PetscCall(PetscInitialize(&argc, &argv, NULL, help));
48c4762a1bSJed Brown   comm = PETSC_COMM_WORLD;
499566063dSJacob Faibussowitsch   PetscCallMPI(MPI_Comm_rank(comm, &rank));
509566063dSJacob Faibussowitsch   PetscCallMPI(MPI_Comm_size(comm, &size));
51be096a46SBarry Smith   PetscCheck(size == 3, comm, PETSC_ERR_WRONG_MPI_SIZE, "You have to use three MPI processes to run this example ");
529566063dSJacob Faibussowitsch   PetscCall(MatCreateMPIAIJWithArrays(comm, 2, 2, PETSC_DETERMINE, PETSC_DETERMINE, i[rank], j[rank], a[rank], &A));
539566063dSJacob Faibussowitsch   PetscCall(MatView(A, NULL));
549566063dSJacob Faibussowitsch   PetscCall(MatUpdateMPIAIJWithArrays(A, 2, 2, PETSC_DETERMINE, PETSC_DETERMINE, i[rank], j[rank], anew[rank]));
559566063dSJacob Faibussowitsch   PetscCall(MatView(A, NULL));
569566063dSJacob Faibussowitsch   PetscCall(MatUpdateMPIAIJWithArrays(A, 2, 2, PETSC_DETERMINE, PETSC_DETERMINE, i[rank], j[rank], a[rank]));
579566063dSJacob Faibussowitsch   PetscCall(MatView(A, NULL));
586a3d2595SBarry Smith   PetscCall(MatUpdateMPIAIJWithArray(A, anew[rank]));
596a3d2595SBarry Smith   PetscCall(MatView(A, NULL));
609566063dSJacob Faibussowitsch   PetscCall(MatDestroy(&A));
619566063dSJacob Faibussowitsch   PetscCall(PetscFinalize());
62b122ec5aSJacob Faibussowitsch   return 0;
63c4762a1bSJed Brown }
64c4762a1bSJed Brown 
65c4762a1bSJed Brown /*TEST
66c4762a1bSJed Brown    test:
67c4762a1bSJed Brown      nsize: 3
68c4762a1bSJed Brown 
69c4762a1bSJed Brown TEST*/
70