Currently DMGetMatrix(DM dm, MatType mattype , Mat *J) is supposed to produce the system Jacobian, according to the docs.
SNES will use it, but, since DMGetMatrix returns a single matrix, it can't use a different preconditioning matrix.
Why not change this to DMGetMatrices(DM dm, MatType jtype, Mat *J, MatType ptype, Mat *P)?
I'm not exactly sure what the best way of handling MatType should be (same MatType for J and P, separate types, how dm->mattype
affects the result), but I think it can be sorted out, whereas the absence of P is a clear limitation.
Dmitry.