Lines Matching defs:A
21 sparse_matrix_t A;
24 status = mkl_sparse_s_create_bsr(&A, SPARSE_INDEX_BASE_ZERO, SPARSE_LAYOUT_COLUMN_MAJOR, (MKL_INT)n, (MKL_INT)n, (MKL_INT)n, (MKL_INT *)ia, (MKL_INT *)ia, (MKL_INT *)ja, a);
26 (void)mkl_sparse_destroy(A);
40 static PetscErrorCode MatAssemblyEnd_SeqBAIJMKL(Mat A, MatAssemblyType mode);
42 PETSC_INTERN PetscErrorCode MatConvert_SeqBAIJMKL_SeqBAIJ(Mat A, MatType type, MatReuse reuse, Mat *newmat)
47 Mat_SeqBAIJMKL *baijmkl = (Mat_SeqBAIJMKL *)A->spptr;
50 if (reuse == MAT_INITIAL_MATRIX) PetscCall(MatDuplicate(A, MAT_COPY_VALUES, &B));
62 switch (A->rmap->bs) {
122 static PetscErrorCode MatDestroy_SeqBAIJMKL(Mat A)
124 Mat_SeqBAIJMKL *baijmkl = (Mat_SeqBAIJMKL *)A->spptr;
128 /* Clean up everything in the Mat_SeqBAIJMKL data structure, then free A->spptr. */
131 PetscCall(PetscFree(A->spptr));
134 /* Change the type of A back to SEQBAIJ and use MatDestroy_SeqBAIJ()
136 PetscCall(PetscObjectChangeTypeName((PetscObject)A, MATSEQBAIJ));
137 PetscCall(MatDestroy_SeqBAIJ(A));
141 static PetscErrorCode MatSeqBAIJMKL_create_mkl_handle(Mat A)
143 Mat_SeqBAIJ *a = (Mat_SeqBAIJ *)A->data;
144 Mat_SeqBAIJMKL *baijmkl = (Mat_SeqBAIJMKL *)A->spptr;
166 bs = A->rmap->bs;
169 if ((nz != 0) & !A->structure_only) {
193 static PetscErrorCode MatDuplicate_SeqBAIJMKL(Mat A, MatDuplicateOption op, Mat *M)
199 PetscCall(MatDuplicate_SeqBAIJ(A, op, M));
200 baijmkl = (Mat_SeqBAIJMKL *)A->spptr;
205 PetscCall(MatSeqBAIJMKL_create_mkl_handle(A));
209 static PetscErrorCode MatMult_SeqBAIJMKL_SpMV2(Mat A, Vec xx, Vec yy)
211 Mat_SeqBAIJ *a = (Mat_SeqBAIJ *)A->data;
212 Mat_SeqBAIJMKL *baijmkl = (Mat_SeqBAIJMKL *)A->spptr;
229 if (!baijmkl->sparse_optimized) PetscCall(MatSeqBAIJMKL_create_mkl_handle(A));
234 PetscCall(PetscLogFlops(2.0 * a->bs2 * a->nz - a->nonzerorowcnt * A->rmap->bs));
240 static PetscErrorCode MatMultTranspose_SeqBAIJMKL_SpMV2(Mat A, Vec xx, Vec yy)
242 Mat_SeqBAIJ *a = (Mat_SeqBAIJ *)A->data;
243 Mat_SeqBAIJMKL *baijmkl = (Mat_SeqBAIJMKL *)A->spptr;
260 if (!baijmkl->sparse_optimized) PetscCall(MatSeqBAIJMKL_create_mkl_handle(A));
265 PetscCall(PetscLogFlops(2.0 * a->bs2 * a->nz - a->nonzerorowcnt * A->rmap->bs));
271 static PetscErrorCode MatMultAdd_SeqBAIJMKL_SpMV2(Mat A, Vec xx, Vec yy, Vec zz)
273 Mat_SeqBAIJ *a = (Mat_SeqBAIJ *)A->data;
274 Mat_SeqBAIJMKL *baijmkl = (Mat_SeqBAIJMKL *)A->spptr;
277 PetscInt m = a->mbs * A->rmap->bs;
293 if (!baijmkl->sparse_optimized) PetscCall(MatSeqBAIJMKL_create_mkl_handle(A));
297 /* If zz and yy are the same vector, we can use mkl_sparse_x_mv, which calculates y = alpha*A*x + beta*y,
313 static PetscErrorCode MatMultTransposeAdd_SeqBAIJMKL_SpMV2(Mat A, Vec xx, Vec yy, Vec zz)
315 Mat_SeqBAIJ *a = (Mat_SeqBAIJ *)A->data;
316 Mat_SeqBAIJMKL *baijmkl = (Mat_SeqBAIJMKL *)A->spptr;
319 PetscInt n = a->nbs * A->rmap->bs;
336 if (!baijmkl->sparse_optimized) PetscCall(MatSeqBAIJMKL_create_mkl_handle(A));
340 /* If zz and yy are the same vector, we can use mkl_sparse_x_mv, which calculates y = alpha*A*x + beta*y,
364 static PetscErrorCode MatDiagonalScale_SeqBAIJMKL(Mat A, Vec ll, Vec rr)
367 PetscCall(MatDiagonalScale_SeqBAIJ(A, ll, rr));
368 PetscCall(MatSeqBAIJMKL_create_mkl_handle(A));
386 PETSC_INTERN PetscErrorCode MatConvert_SeqBAIJ_SeqBAIJMKL(Mat A, MatType type, MatReuse reuse, Mat *newmat)
393 if (reuse == MAT_INITIAL_MATRIX) PetscCall(MatDuplicate(A, MAT_COPY_VALUES, &B));
395 PetscCall(PetscObjectTypeCompare((PetscObject)A, type, &sametype));
415 static PetscErrorCode MatAssemblyEnd_SeqBAIJMKL(Mat A, MatAssemblyType mode)
419 PetscCall(MatAssemblyEnd_SeqBAIJ(A, mode));
420 PetscCall(MatSeqBAIJMKL_create_mkl_handle(A));
421 A->ops->destroy = MatDestroy_SeqBAIJMKL;
422 A->ops->mult = MatMult_SeqBAIJMKL_SpMV2;
423 A->ops->multtranspose = MatMultTranspose_SeqBAIJMKL_SpMV2;
424 A->ops->multadd = MatMultAdd_SeqBAIJMKL_SpMV2;
425 A->ops->multtransposeadd = MatMultTransposeAdd_SeqBAIJMKL_SpMV2;
426 A->ops->scale = MatScale_SeqBAIJMKL;
427 A->ops->diagonalscale = MatDiagonalScale_SeqBAIJMKL;
428 A->ops->axpy = MatAXPY_SeqBAIJMKL;
429 A->ops->duplicate = MatDuplicate_SeqBAIJMKL;
449 . A - the matrix
466 A nonzero block is any block that as 1 or more nonzeros in it
485 PetscErrorCode MatCreateSeqBAIJMKL(MPI_Comm comm, PetscInt bs, PetscInt m, PetscInt n, PetscInt nz, const PetscInt nnz[], Mat *A)
488 PetscCall(MatCreate(comm, A));
489 PetscCall(MatSetSizes(*A, m, n, m, n));
490 PetscCall(MatSetType(*A, MATSEQBAIJMKL));
491 PetscCall(MatSeqBAIJSetPreallocation_SeqBAIJ(*A, bs, nz, (PetscInt *)nnz));
495 PETSC_EXTERN PetscErrorCode MatCreate_SeqBAIJMKL(Mat A)
498 PetscCall(MatSetType(A, MATSEQBAIJ));
499 PetscCall(MatConvert_SeqBAIJ_SeqBAIJMKL(A, MATSEQBAIJMKL, MAT_INPLACE_MATRIX, &A));