[petsc-users] question about MatInvertBlockDiagonal_SeqBAIJ
Smith, Barry F.
bsmith at mcs.anl.gov
Thu Feb 22 12:42:10 CST 2018
Removed in the branch barry/remove-mdiag-baij
Barry
> On Feb 22, 2018, at 6:55 AM, Xiangdong <epscodes at gmail.com> wrote:
>
> Hello everyone,
>
> I am curious about the purpose of mdiag in MatInverseBlockDiagonal_SeqBAIJ
>
> http://www.mcs.anl.gov/petsc/petsc-current/src/mat/impls/baij/seq/baij.c.html
>
> It seems that the inverse of the diagonal block is stored is a->idiag, and the extra copy of diagonal block itself is stored in mdiag or a->idiag+bs2*mbs. What is the purpose of storing this mdiag as an extra copy of diagonal block? When will this mdiag be used?
>
> Thank you.
>
> Best,
> Xiangdong
>
>
> if (!a->idiag) {
> 38: PetscMalloc1(2*bs2*mbs,&a->idiag);
> 39: PetscLogObjectMemory((PetscObject)A,2*bs2*mbs*sizeof(PetscScalar));
> 40: }
> 41: diag = a->idiag;
> 42: mdiag = a->idiag+bs2*mbs;
>
>
> 138: for (i=0; i<mbs; i++) {
> 139: odiag = v + bs2*diag_offset[i];
> 140: PetscMemcpy(diag,odiag,bs2*sizeof(PetscScalar));
> 141: PetscMemcpy(mdiag,odiag,bs2*sizeof(PetscScalar));
> 142: PetscKernel_A_gets_inverse_A(bs,diag,v_pivots,v_work,allowzeropivot,&zeropivotdetected);
> 143: if (zeropivotdetected) A->factorerrortype = MAT_FACTOR_NUMERIC_ZEROPIVOT;
> 144: diag += bs2;
> 145: mdiag += bs2;
>
More information about the petsc-users
mailing list