xref: /petsc/src/mat/tests/ex256.c (revision 06c5243adf84d0fa86c5567284a8ca67e7df82ea)
1*06c5243aSJose E. Roman static char help[] = "Test some operations of SeqDense matrices with an LDA larger than M.\n";
2*06c5243aSJose E. Roman 
3*06c5243aSJose E. Roman #include <petscmat.h>
4*06c5243aSJose E. Roman 
5*06c5243aSJose E. Roman int main(int argc,char **argv)
6*06c5243aSJose E. Roman {
7*06c5243aSJose E. Roman   Mat            A,B;
8*06c5243aSJose E. Roman   PetscScalar    *a,*b;
9*06c5243aSJose E. Roman   PetscInt       n=4,lda=5,i;
10*06c5243aSJose E. Roman 
11*06c5243aSJose E. Roman   PetscCall(PetscInitialize(&argc,&argv,0,help));
12*06c5243aSJose E. Roman   PetscCall(PetscOptionsGetInt(NULL,NULL,"-n",&n,NULL));
13*06c5243aSJose E. Roman   PetscCall(PetscOptionsGetInt(NULL,NULL,"-lda",&lda,NULL));
14*06c5243aSJose E. Roman   PetscCheck(lda>=n,PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"lda %" PetscInt_FMT " < n %" PetscInt_FMT,lda,n);
15*06c5243aSJose E. Roman 
16*06c5243aSJose E. Roman   /*
17*06c5243aSJose E. Roman    * Create two identical matrices (MatDuplicate does not preserve lda)
18*06c5243aSJose E. Roman    */
19*06c5243aSJose E. Roman   PetscCall(PetscCalloc2(lda*n,&a,lda*n,&b));
20*06c5243aSJose E. Roman   for (i=0; i<n; i++) {
21*06c5243aSJose E. Roman     a[i+i*lda] = 1.0+2.0*PETSC_i;
22*06c5243aSJose E. Roman     if (i>0) a[i+(i-1)*lda] = 3.0-0.5*PETSC_i;
23*06c5243aSJose E. Roman     b[i+i*lda] = 1.0+2.0*PETSC_i;
24*06c5243aSJose E. Roman     if (i>0) b[i+(i-1)*lda] = 3.0-0.5*PETSC_i;
25*06c5243aSJose E. Roman   }
26*06c5243aSJose E. Roman   PetscCall(MatCreate(PETSC_COMM_SELF,&A));
27*06c5243aSJose E. Roman   PetscCall(MatSetSizes(A,n,n,n,n));
28*06c5243aSJose E. Roman   PetscCall(MatSetType(A,MATSEQDENSE));
29*06c5243aSJose E. Roman   PetscCall(MatSeqDenseSetPreallocation(A,a));
30*06c5243aSJose E. Roman   PetscCall(MatDenseSetLDA(A,lda));
31*06c5243aSJose E. Roman 
32*06c5243aSJose E. Roman   PetscCall(MatCreate(PETSC_COMM_SELF,&B));
33*06c5243aSJose E. Roman   PetscCall(MatSetSizes(B,n,n,n,n));
34*06c5243aSJose E. Roman   PetscCall(MatSetType(B,MATSEQDENSE));
35*06c5243aSJose E. Roman   PetscCall(MatSeqDenseSetPreallocation(B,b));
36*06c5243aSJose E. Roman   PetscCall(MatDenseSetLDA(B,lda));
37*06c5243aSJose E. Roman 
38*06c5243aSJose E. Roman   PetscCall(MatView(A,NULL));
39*06c5243aSJose E. Roman   PetscCall(MatConjugate(A));
40*06c5243aSJose E. Roman   PetscCall(MatView(A,NULL));
41*06c5243aSJose E. Roman   PetscCall(MatRealPart(A));
42*06c5243aSJose E. Roman   PetscCall(MatView(A,NULL));
43*06c5243aSJose E. Roman   PetscCall(MatImaginaryPart(B));
44*06c5243aSJose E. Roman   PetscCall(MatView(B,NULL));
45*06c5243aSJose E. Roman 
46*06c5243aSJose E. Roman   PetscCall(PetscFree2(a,b));
47*06c5243aSJose E. Roman   PetscCall(MatDestroy(&A));
48*06c5243aSJose E. Roman   PetscCall(MatDestroy(&B));
49*06c5243aSJose E. Roman   PetscCall(PetscFinalize());
50*06c5243aSJose E. Roman   return 0;
51*06c5243aSJose E. Roman }
52*06c5243aSJose E. Roman 
53*06c5243aSJose E. Roman /*TEST
54*06c5243aSJose E. Roman 
55*06c5243aSJose E. Roman    build:
56*06c5243aSJose E. Roman      requires: complex
57*06c5243aSJose E. Roman 
58*06c5243aSJose E. Roman    test:
59*06c5243aSJose E. Roman 
60*06c5243aSJose E. Roman TEST*/
61