Actual source code: ex248.c


  2: static char help[] = "Tests MatSeqAIJKron.\n\n";

  4: #include <petscmat.h>

  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;

 14:   PetscInitialize(&argc, &argv, (char *)0, help);
 15:   MatCreateDense(PETSC_COMM_SELF, m, n, m, n, NULL, &Ad);
 16:   MatCreateDense(PETSC_COMM_SELF, p, q, p, q, NULL, &Bd);
 17:   MatSetRandom(Ad, NULL);
 18:   MatSetRandom(Bd, NULL);
 19:   MatChop(Ad, 0.2);
 20:   MatChop(Bd, 0.2);
 21:   MatConvert(Ad, MATAIJ, MAT_INITIAL_MATRIX, &A);
 22:   MatConvert(Bd, MATAIJ, MAT_INITIAL_MATRIX, &B);
 23:   MatSeqAIJKron(A, B, MAT_INITIAL_MATRIX, &C);
 24:   MatViewFromOptions(A, NULL, "-A_view");
 25:   MatViewFromOptions(B, NULL, "-B_view");
 26:   MatViewFromOptions(C, NULL, "-C_view");
 27:   MatDenseGetArrayRead(Bd, &Bv);
 28:   MatCreateKAIJ(A, p, q, NULL, Bv, &K);
 29:   MatDenseRestoreArrayRead(Bd, &Bv);
 30:   MatMultEqual(C, K, 10, &flg);
 32:   MatScale(A, 1.3);
 33:   MatScale(B, 0.3);
 34:   MatScale(Bd, 0.3);
 35:   MatSeqAIJKron(A, B, MAT_REUSE_MATRIX, &C);
 36:   MatDenseGetArrayRead(Bd, &Bv);
 37:   MatKAIJSetT(K, p, q, Bv);
 38:   MatDenseRestoreArrayRead(Bd, &Bv);
 39:   MatMultEqual(C, K, 10, &flg);
 41:   MatDestroy(&K);
 42:   MatDestroy(&C);
 43:   MatDestroy(&B);
 44:   MatDestroy(&A);
 45:   MatDestroy(&Bd);
 46:   MatDestroy(&Ad);
 47:   PetscFinalize();
 48:   return 0;
 49: }

 51: /*TEST

 53:     test:
 54:       suffix: 1
 55:       nsize: 1
 56:       output_file: output/ex101.out

 58: TEST*/