Hi everyone,
I am working on solving a nonlinear problem using FreeFEM with PETSc/SNES. The linearized system solved at each Newton step results in a matrix with a bordered block structure that looks like this:
Mat A = [[J, 0, jl],
[H, J, hl],
[0, q', 0]];
where jl
, hl
, and q
are real[int]
and J
and H
are square Mat
objects.
I have created functions to evaluate the residual and Jacobian associated with the block system for SNESSolve
, but I am unsure how to set the KSP parameters to make the fieldsplit work properly. This problem should be efficiently solved with an exact block LU factorization. I have implemented this block factorization by hand using in PETSc using only KSP objects, but I would like to “upgrade” to the more robust solvers within SNES.
I’ve tried the following set of parameters:
set(A, sparams = "-pc_type fieldsplit -pc_fieldsplit_type schur -pc_fieldsplit_detect_saddle_point -ksp_view");
but the solver crashes before PETSc delivers any information about the matrix. I am curious if there is an obvious parameter set that I should be using for such a problem, or if there is a helpful command I can use to ease the debugging process. I would also be interested in any examples that use bordered matrices with SNES.
Cheers,
Chris