1 2 static char help[] = "Tests MatSeqAIJKron.\n\n"; 3 4 #include <petscmat.h> 5 6 int main(int argc,char **argv) 7 { 8 Mat A,B,C,K,Ad,Bd; 9 const PetscScalar *Bv; 10 PetscInt n = 10, m = 20, p = 7, q = 17; 11 PetscBool flg; 12 PetscErrorCode ierr; 13 14 ierr = PetscInitialize(&argc,&argv,(char*)0,help);if (ierr) return ierr; 15 CHKERRQ(MatCreateDense(PETSC_COMM_SELF,m,n,m,n,NULL,&Ad)); 16 CHKERRQ(MatCreateDense(PETSC_COMM_SELF,p,q,p,q,NULL,&Bd)); 17 CHKERRQ(MatSetRandom(Ad,NULL)); 18 CHKERRQ(MatSetRandom(Bd,NULL)); 19 CHKERRQ(MatChop(Ad,0.2)); 20 CHKERRQ(MatChop(Bd,0.2)); 21 CHKERRQ(MatConvert(Ad,MATAIJ,MAT_INITIAL_MATRIX,&A)); 22 CHKERRQ(MatConvert(Bd,MATAIJ,MAT_INITIAL_MATRIX,&B)); 23 CHKERRQ(MatSeqAIJKron(A,B,MAT_INITIAL_MATRIX,&C)); 24 CHKERRQ(MatViewFromOptions(A,NULL,"-A_view")); 25 CHKERRQ(MatViewFromOptions(B,NULL,"-B_view")); 26 CHKERRQ(MatViewFromOptions(C,NULL,"-C_view")); 27 CHKERRQ(MatDenseGetArrayRead(Bd,&Bv)); 28 CHKERRQ(MatCreateKAIJ(A,p,q,NULL,Bv,&K)); 29 CHKERRQ(MatDenseRestoreArrayRead(Bd,&Bv)); 30 CHKERRQ(MatMultEqual(C,K,10,&flg)); 31 PetscCheck(flg,PETSC_COMM_SELF,PETSC_ERR_PLIB,"K*x != C*x"); 32 CHKERRQ(MatScale(A,1.3)); 33 CHKERRQ(MatScale(B,0.3)); 34 CHKERRQ(MatScale(Bd,0.3)); 35 CHKERRQ(MatSeqAIJKron(A,B,MAT_REUSE_MATRIX,&C)); 36 CHKERRQ(MatDenseGetArrayRead(Bd,&Bv)); 37 CHKERRQ(MatKAIJSetT(K,p,q,Bv)); 38 CHKERRQ(MatDenseRestoreArrayRead(Bd,&Bv)); 39 CHKERRQ(MatMultEqual(C,K,10,&flg)); 40 PetscCheck(flg,PETSC_COMM_SELF,PETSC_ERR_PLIB,"K*x != C*x"); 41 CHKERRQ(MatDestroy(&K)); 42 CHKERRQ(MatDestroy(&C)); 43 CHKERRQ(MatDestroy(&B)); 44 CHKERRQ(MatDestroy(&A)); 45 CHKERRQ(MatDestroy(&Bd)); 46 CHKERRQ(MatDestroy(&Ad)); 47 ierr = PetscFinalize(); 48 return ierr; 49 } 50 51 /*TEST 52 53 test: 54 suffix: 1 55 nsize: 1 56 output_file: output/ex101.out 57 58 TEST*/ 59