xref: /petsc/src/mat/tests/ex90.c (revision b122ec5aa1bd4469eb4e0673542fb7de3f411254)
1c4762a1bSJed Brown 
2c4762a1bSJed Brown static char help[] ="Tests MatPtAP() \n";
3c4762a1bSJed Brown 
4c4762a1bSJed Brown #include <petscmat.h>
5c4762a1bSJed Brown 
6c4762a1bSJed Brown /*
7c4762a1bSJed Brown  * This is an extremely simple example to test MatPtAP. It is very useful when developing and debugging the code.
8c4762a1bSJed Brown  *
9c4762a1bSJed Brown  * A =
10c4762a1bSJed Brown 
11c4762a1bSJed Brown    1   2   0   4
12c4762a1bSJed Brown    0   1   2   0
13c4762a1bSJed Brown    2   0   4   0
14c4762a1bSJed Brown    0   1   2   1
15c4762a1bSJed Brown  *
16c4762a1bSJed Brown  *
17c4762a1bSJed Brown  *
18c4762a1bSJed Brown  * P =
19c4762a1bSJed Brown 
20c4762a1bSJed Brown    1.00000   0.00000
21c4762a1bSJed Brown    0.30000   0.50000
22c4762a1bSJed Brown    0.00000   0.80000
23c4762a1bSJed Brown    0.90000   0.00000
24c4762a1bSJed Brown  *
25c4762a1bSJed Brown  *
26c4762a1bSJed Brown  *AP =
27c4762a1bSJed Brown  *
28c4762a1bSJed Brown  * 5.20000   1.00000
29c4762a1bSJed Brown    0.30000   2.10000
30c4762a1bSJed Brown    2.00000   3.20000
31c4762a1bSJed Brown    1.20000   2.10000
32c4762a1bSJed Brown  *
33c4762a1bSJed Brown  * PT =
34c4762a1bSJed Brown 
35c4762a1bSJed Brown    1.00000   0.30000   0.00000   0.90000
36c4762a1bSJed Brown    0.00000   0.50000   0.80000   0.00000
37c4762a1bSJed Brown 
38c4762a1bSJed Brown  *
39c4762a1bSJed Brown  * C =
40c4762a1bSJed Brown 
41c4762a1bSJed Brown    6.3700   3.5200
42c4762a1bSJed Brown    1.7500   3.6100
43c4762a1bSJed Brown  *
44c4762a1bSJed Brown  * */
45c4762a1bSJed Brown 
46c4762a1bSJed Brown int main(int argc,char **argv)
47c4762a1bSJed Brown {
48c4762a1bSJed Brown   Mat            A,P,PtAP;
49c4762a1bSJed Brown   PetscInt       i1[] = {0, 3, 5}, i2[] = {0,2,5};
50c4762a1bSJed Brown   PetscInt       j1[] = {0, 1, 3, 1, 2}, j2[] = {0, 2, 1, 2, 3};
51c4762a1bSJed Brown   PetscScalar    a1[] = {1, 2, 4, 1, 2}, a2[] = {2, 4, 1, 2, 1};
52c4762a1bSJed Brown   PetscInt       pi1[] = {0,1,3}, pi2[] = {0,1,2};
53c4762a1bSJed Brown   PetscInt       pj1[] = {0, 0, 1}, pj2[] = {1,0};
54c4762a1bSJed Brown   PetscScalar    pa1[] = {1, 0.3, 0.5}, pa2[] = {0.8, 0.9};
55c4762a1bSJed Brown   MPI_Comm       comm;
56c4762a1bSJed Brown   PetscMPIInt    rank,size;
57c4762a1bSJed Brown 
58*b122ec5aSJacob Faibussowitsch   CHKERRQ(PetscInitialize(&argc,&argv,NULL,help));
59c4762a1bSJed Brown   comm = PETSC_COMM_WORLD;
605f80ce2aSJacob Faibussowitsch   CHKERRMPI(MPI_Comm_rank(comm,&rank));
615f80ce2aSJacob Faibussowitsch   CHKERRMPI(MPI_Comm_size(comm,&size));
622c71b3e2SJacob Faibussowitsch   PetscCheckFalse(size != 2,comm,PETSC_ERR_ARG_INCOMP,"You have to use two processor cores to run this example ");
635f80ce2aSJacob Faibussowitsch   CHKERRQ(MatCreateMPIAIJWithArrays(comm,2,2,PETSC_DETERMINE,PETSC_DETERMINE,rank? i2:i1,rank? j2:j1,rank? a2:a1,&A));
645f80ce2aSJacob Faibussowitsch   CHKERRQ(MatCreateMPIAIJWithArrays(comm,2,1,PETSC_DETERMINE,PETSC_DETERMINE,rank? pi2:pi1,rank? pj2:pj1,rank? pa2:pa1,&P));
655f80ce2aSJacob Faibussowitsch   CHKERRQ(MatPtAP(A,P,MAT_INITIAL_MATRIX,1.1,&PtAP));
665f80ce2aSJacob Faibussowitsch   CHKERRQ(MatView(A,NULL));
675f80ce2aSJacob Faibussowitsch   CHKERRQ(MatView(P,NULL));
685f80ce2aSJacob Faibussowitsch   CHKERRQ(MatView(PtAP,NULL));
695f80ce2aSJacob Faibussowitsch   CHKERRQ(MatPtAP(A,P,MAT_REUSE_MATRIX,1.1,&PtAP));
705f80ce2aSJacob Faibussowitsch   CHKERRQ(MatView(A,NULL));
715f80ce2aSJacob Faibussowitsch   CHKERRQ(MatView(P,NULL));
725f80ce2aSJacob Faibussowitsch   CHKERRQ(MatView(PtAP,NULL));
735f80ce2aSJacob Faibussowitsch   CHKERRQ(MatDestroy(&A));
745f80ce2aSJacob Faibussowitsch   CHKERRQ(MatDestroy(&P));
755f80ce2aSJacob Faibussowitsch   CHKERRQ(MatDestroy(&PtAP));
76*b122ec5aSJacob Faibussowitsch   CHKERRQ(PetscFinalize());
77*b122ec5aSJacob Faibussowitsch   return 0;
78c4762a1bSJed Brown }
79c4762a1bSJed Brown 
80c4762a1bSJed Brown /*TEST
81c4762a1bSJed Brown    test:
82c4762a1bSJed Brown      nsize: 2
83c4762a1bSJed Brown      args:   -matptap_via allatonce
84c4762a1bSJed Brown      output_file: output/ex90_1.out
85c4762a1bSJed Brown 
86c4762a1bSJed Brown    test:
87c4762a1bSJed Brown      nsize: 2
88c4762a1bSJed Brown      suffix: merged
89c4762a1bSJed Brown      args:   -matptap_via allatonce_merged
90c4762a1bSJed Brown      output_file: output/ex90_1.out
91c4762a1bSJed Brown 
92c4762a1bSJed Brown TEST*/
93