(Sadly) MATSBAIJ is extremely broken, in particular, it cannot be used to retrieve rectangular blocks in MatCreateSubMatrices, thus you cannot get the A01 and A10 blocks in PCFIELDSPLIT. I have a branch that fixes this, but I haven’t rebased in a while (and I’m AFK right now), would you want me to rebase and give it a go, or must you stick to a release tarball?
Thanks, Pierre > On 26 Aug 2023, at 10:09 PM, Carl-Johan Thore <carljohanth...@gmail.com> > wrote: > > Hi, > > I'm trying to use PCFIELDSPLIT with MATSBAIJ in PETSc 3.19.4. According to > the manual > "[t]he fieldsplit preconditioner cannot currently be used with the MATBAIJ or > MATSBAIJ data > formats if the blocksize is larger than 1". Since my blocksize is exactly 1 > it would seem that I can > use PCFIELDSPLIT. But this fails with "PETSC ERROR: For symmetric format, > iscol must equal isrow" > from MatCreateSubMatrix_MPISBAIJ. Tracing backwards one ends up in > fieldsplit.c at > > /* extract the A01 and A10 matrices */ > ilink = jac->head; > PetscCall(ISComplement(ilink->is_col, rstart, rend, &ccis)); > if (jac->offdiag_use_amat) { > PetscCall(MatCreateSubMatrix(pc->mat, ilink->is, ccis, MAT_INITIAL_MATRIX, > &jac->B)); > } else { > PetscCall(MatCreateSubMatrix(pc->pmat, ilink->is, ccis, > MAT_INITIAL_MATRIX, &jac->B)); > } > > This, since my A01 and A10 are not square, seems to explain why iscol is not > equal to isrow. > From this I gather that it is in general NOT possible to use PCFIELDSPLIT > with MATSBAIJ even > with block size 1? > > Kind regards, > Carl-Johan