# PCVPBJACOBI
Variable size point block Jacobi preconditioner 


## Notes
See `PCJACOBI` for point Jacobi preconditioning, `PCPBJACOBI` for fixed point block size, and `PCBJACOBI` for large size blocks

This works for `MATAIJ` matrices

Uses dense LU factorization with partial pivoting to invert the blocks; if a zero pivot
is detected a PETSc error is generated.

One must call `MatSetVariableBlockSizes()` to use this preconditioner


## Developer Notes
This should support the `PCSetErrorIfFailure()` flag set to `PETSC_TRUE` to allow
the factorization to continue even after a zero pivot is found resulting in a Nan and hence
terminating `KSP` with a `KSP_DIVERGED_NANORINF` allowing
a nonlinear solver/ODE integrator to recover without stopping the program as currently happens.

Perhaps should provide an option that allows generation of a valid preconditioner
even if a block is singular as the `PCJACOBI` does.


## See Also
 `MatSetVariableBlockSizes()`, `PCCreate()`, `PCSetType()`, `PCType`, `PC`, `PCJACOBI`, `PCPBJACOBI`, `PCBJACOBI`

## Level
beginner

## Location
<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/ksp/pc/impls/vpbjacobi/vpbjacobi.c.html#PCVPBJACOBI">src/ksp/pc/impls/vpbjacobi/vpbjacobi.c</A>


---
[Edit on GitLab](https://gitlab.com/petsc/petsc/-/edit/release/src/ksp/pc/impls/vpbjacobi/vpbjacobi.c)


[Index of all PC routines](index.md)  
[Table of Contents for all manual pages](/docs/manualpages/index.md)  
[Index of all manual pages](/docs/manualpages/singleindex.md)  
