Lines Matching refs:bmat

416   Mat_BlockMat *bmat = (Mat_BlockMat *)mat->data;  in MatDestroy_BlockMat()  local
420 PetscCall(VecDestroy(&bmat->right)); in MatDestroy_BlockMat()
421 PetscCall(VecDestroy(&bmat->left)); in MatDestroy_BlockMat()
422 PetscCall(VecDestroy(&bmat->middle)); in MatDestroy_BlockMat()
423 PetscCall(VecDestroy(&bmat->workb)); in MatDestroy_BlockMat()
424 if (bmat->diags) { in MatDestroy_BlockMat()
425 for (i = 0; i < mat->rmap->n / mat->rmap->bs; i++) PetscCall(MatDestroy(&bmat->diags[i])); in MatDestroy_BlockMat()
427 if (bmat->a) { in MatDestroy_BlockMat()
428 for (i = 0; i < bmat->nz; i++) PetscCall(MatDestroy(&bmat->a[i])); in MatDestroy_BlockMat()
430 PetscCall(MatSeqXAIJFreeAIJ(mat, (PetscScalar **)&bmat->a, &bmat->j, &bmat->i)); in MatDestroy_BlockMat()
437 Mat_BlockMat *bmat = (Mat_BlockMat *)A->data; in MatMult_BlockMat() local
450 aj = bmat->j; in MatMult_BlockMat()
451 aa = bmat->a; in MatMult_BlockMat()
452 ii = bmat->i; in MatMult_BlockMat()
455 PetscCall(VecPlaceArray(bmat->left, yy + bs * i)); in MatMult_BlockMat()
458 PetscCall(VecPlaceArray(bmat->right, xx + bs * aj[jrow])); in MatMult_BlockMat()
459 PetscCall(MatMultAdd(aa[jrow], bmat->right, bmat->left, bmat->left)); in MatMult_BlockMat()
460 PetscCall(VecResetArray(bmat->right)); in MatMult_BlockMat()
463 PetscCall(VecResetArray(bmat->left)); in MatMult_BlockMat()
472 Mat_BlockMat *bmat = (Mat_BlockMat *)A->data; in MatMult_BlockMat_Symmetric() local
485 aj = bmat->j; in MatMult_BlockMat_Symmetric()
486 aa = bmat->a; in MatMult_BlockMat_Symmetric()
487 ii = bmat->i; in MatMult_BlockMat_Symmetric()
491 PetscCall(VecPlaceArray(bmat->left, yy + bs * i)); in MatMult_BlockMat_Symmetric()
492 PetscCall(VecPlaceArray(bmat->middle, xx + bs * i)); in MatMult_BlockMat_Symmetric()
495 PetscCall(VecPlaceArray(bmat->right, xx + bs * aj[jrow])); in MatMult_BlockMat_Symmetric()
496 PetscCall(MatMultAdd(aa[jrow], bmat->right, bmat->left, bmat->left)); in MatMult_BlockMat_Symmetric()
497 PetscCall(VecResetArray(bmat->right)); in MatMult_BlockMat_Symmetric()
502 PetscCall(VecPlaceArray(bmat->right, xx + bs * aj[jrow])); /* upper triangular part */ in MatMult_BlockMat_Symmetric()
503 PetscCall(MatMultAdd(aa[jrow], bmat->right, bmat->left, bmat->left)); in MatMult_BlockMat_Symmetric()
504 PetscCall(VecResetArray(bmat->right)); in MatMult_BlockMat_Symmetric()
506 PetscCall(VecPlaceArray(bmat->right, yy + bs * aj[jrow])); /* lower triangular part */ in MatMult_BlockMat_Symmetric()
507 PetscCall(MatMultTransposeAdd(aa[jrow], bmat->middle, bmat->right, bmat->right)); in MatMult_BlockMat_Symmetric()
508 PetscCall(VecResetArray(bmat->right)); in MatMult_BlockMat_Symmetric()
511 PetscCall(VecResetArray(bmat->left)); in MatMult_BlockMat_Symmetric()
512 PetscCall(VecResetArray(bmat->middle)); in MatMult_BlockMat_Symmetric()
837 Mat_BlockMat *bmat = (Mat_BlockMat *)A->data; in MatBlockMatSetPreallocation_BlockMat() local
855 bmat->mbs = A->rmap->n / bs; in MatBlockMatSetPreallocation_BlockMat()
857 PetscCall(VecCreateSeqWithArray(PETSC_COMM_SELF, 1, bs, NULL, &bmat->right)); in MatBlockMatSetPreallocation_BlockMat()
858 PetscCall(VecCreateSeqWithArray(PETSC_COMM_SELF, 1, bs, NULL, &bmat->middle)); in MatBlockMatSetPreallocation_BlockMat()
859 PetscCall(VecCreateSeq(PETSC_COMM_SELF, bs, &bmat->left)); in MatBlockMatSetPreallocation_BlockMat()
861 if (!bmat->imax) PetscCall(PetscMalloc2(A->rmap->n, &bmat->imax, A->rmap->n, &bmat->ilen)); in MatBlockMatSetPreallocation_BlockMat()
865 bmat->imax[i] = nnz[i]; in MatBlockMatSetPreallocation_BlockMat()
870 PetscCall(PetscArrayzero(bmat->ilen, bmat->mbs)); in MatBlockMatSetPreallocation_BlockMat()
873 PetscCall(MatSeqXAIJFreeAIJ(A, (PetscScalar **)&bmat->a, &bmat->j, &bmat->i)); in MatBlockMatSetPreallocation_BlockMat()
874 PetscCall(PetscShmgetAllocateArray(nz, sizeof(PetscScalar), (void **)&bmat->a)); in MatBlockMatSetPreallocation_BlockMat()
875 PetscCall(PetscShmgetAllocateArray(nz, sizeof(PetscInt), (void **)&bmat->j)); in MatBlockMatSetPreallocation_BlockMat()
876 PetscCall(PetscShmgetAllocateArray(A->rmap->n + 1, sizeof(PetscInt), (void **)&bmat->i)); in MatBlockMatSetPreallocation_BlockMat()
877 bmat->free_a = PETSC_TRUE; in MatBlockMatSetPreallocation_BlockMat()
878 bmat->free_ij = PETSC_TRUE; in MatBlockMatSetPreallocation_BlockMat()
880 bmat->i[0] = 0; in MatBlockMatSetPreallocation_BlockMat()
881 for (i = 1; i < bmat->mbs + 1; i++) bmat->i[i] = bmat->i[i - 1] + bmat->imax[i - 1]; in MatBlockMatSetPreallocation_BlockMat()
883 bmat->nz = 0; in MatBlockMatSetPreallocation_BlockMat()
884 bmat->maxnz = nz; in MatBlockMatSetPreallocation_BlockMat()
885 A->info.nz_unneeded = (double)bmat->maxnz; in MatBlockMatSetPreallocation_BlockMat()