In mpiaij.c, there is this if statement: if (a->inode.size) mat->ops->multdiagonalblock = MatMultDiagonalBlock_MPIAIJ; which prevents the operation MatMultDiagonalBlock from being set if a->inode.size is zero. Why is this? What is wrong with the diagonal block when inode.size==0? Thanks, John