xref: /petsc/src/mat/tests/ex256.c (revision 327415f76d85372a4417cf1aaa14db707d4d6c04)
106c5243aSJose E. Roman static char help[] = "Test some operations of SeqDense matrices with an LDA larger than M.\n";
206c5243aSJose E. Roman 
306c5243aSJose E. Roman #include <petscmat.h>
406c5243aSJose E. Roman 
506c5243aSJose E. Roman int main(int argc,char **argv)
606c5243aSJose E. Roman {
706c5243aSJose E. Roman   Mat            A,B;
806c5243aSJose E. Roman   PetscScalar    *a,*b;
906c5243aSJose E. Roman   PetscInt       n=4,lda=5,i;
1006c5243aSJose E. Roman 
11*327415f7SBarry Smith   PetscFunctionBeginUser;
1206c5243aSJose E. Roman   PetscCall(PetscInitialize(&argc,&argv,0,help));
1306c5243aSJose E. Roman   PetscCall(PetscOptionsGetInt(NULL,NULL,"-n",&n,NULL));
1406c5243aSJose E. Roman   PetscCall(PetscOptionsGetInt(NULL,NULL,"-lda",&lda,NULL));
1506c5243aSJose E. Roman   PetscCheck(lda>=n,PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"lda %" PetscInt_FMT " < n %" PetscInt_FMT,lda,n);
1606c5243aSJose E. Roman 
1706c5243aSJose E. Roman   /*
1806c5243aSJose E. Roman    * Create two identical matrices (MatDuplicate does not preserve lda)
1906c5243aSJose E. Roman    */
2006c5243aSJose E. Roman   PetscCall(PetscCalloc2(lda*n,&a,lda*n,&b));
2106c5243aSJose E. Roman   for (i=0; i<n; i++) {
2206c5243aSJose E. Roman     a[i+i*lda] = 1.0+2.0*PETSC_i;
2306c5243aSJose E. Roman     if (i>0) a[i+(i-1)*lda] = 3.0-0.5*PETSC_i;
2406c5243aSJose E. Roman     b[i+i*lda] = 1.0+2.0*PETSC_i;
2506c5243aSJose E. Roman     if (i>0) b[i+(i-1)*lda] = 3.0-0.5*PETSC_i;
2606c5243aSJose E. Roman   }
2706c5243aSJose E. Roman   PetscCall(MatCreate(PETSC_COMM_SELF,&A));
2806c5243aSJose E. Roman   PetscCall(MatSetSizes(A,n,n,n,n));
2906c5243aSJose E. Roman   PetscCall(MatSetType(A,MATSEQDENSE));
3006c5243aSJose E. Roman   PetscCall(MatSeqDenseSetPreallocation(A,a));
3106c5243aSJose E. Roman   PetscCall(MatDenseSetLDA(A,lda));
3206c5243aSJose E. Roman 
3306c5243aSJose E. Roman   PetscCall(MatCreate(PETSC_COMM_SELF,&B));
3406c5243aSJose E. Roman   PetscCall(MatSetSizes(B,n,n,n,n));
3506c5243aSJose E. Roman   PetscCall(MatSetType(B,MATSEQDENSE));
3606c5243aSJose E. Roman   PetscCall(MatSeqDenseSetPreallocation(B,b));
3706c5243aSJose E. Roman   PetscCall(MatDenseSetLDA(B,lda));
3806c5243aSJose E. Roman 
3906c5243aSJose E. Roman   PetscCall(MatView(A,NULL));
4006c5243aSJose E. Roman   PetscCall(MatConjugate(A));
4106c5243aSJose E. Roman   PetscCall(MatView(A,NULL));
4206c5243aSJose E. Roman   PetscCall(MatRealPart(A));
4306c5243aSJose E. Roman   PetscCall(MatView(A,NULL));
4406c5243aSJose E. Roman   PetscCall(MatImaginaryPart(B));
4506c5243aSJose E. Roman   PetscCall(MatView(B,NULL));
4606c5243aSJose E. Roman 
4706c5243aSJose E. Roman   PetscCall(PetscFree2(a,b));
4806c5243aSJose E. Roman   PetscCall(MatDestroy(&A));
4906c5243aSJose E. Roman   PetscCall(MatDestroy(&B));
5006c5243aSJose E. Roman   PetscCall(PetscFinalize());
5106c5243aSJose E. Roman   return 0;
5206c5243aSJose E. Roman }
5306c5243aSJose E. Roman 
5406c5243aSJose E. Roman /*TEST
5506c5243aSJose E. Roman 
5606c5243aSJose E. Roman    build:
5706c5243aSJose E. Roman      requires: complex
5806c5243aSJose E. Roman 
5906c5243aSJose E. Roman    test:
6006c5243aSJose E. Roman 
6106c5243aSJose E. Roman TEST*/
62