Hi guys, (This might actually be a PETSc question, but I know there are some PETSc folks that also peruse through this mailing list) I'm looking again through the Preconditioning saddle-point systems <https://firedrakeproject.org/demos/saddle_point_systems.py.html> demo, one example shown was providing the scour complement approximation for the mixed poisson problem. I see that the bilinear form for the discontinuous laplacian (plus the flux mass term) is set as the preconditioning Mat for KSPSetOperators() and that these PETSc options are utilized: parameters = { "ksp_type": "gmres", "ksp_rtol": 1e-8, "pc_type": "fieldsplit", "pc_fieldsplit_type": "schur", "pc_fieldsplit_schur_fact_type": "full", "pc_fieldsplit_off_diag_use_amat": True, "fieldsplit_0_ksp_type": "preonly", "fieldsplit_0_pc_type": "ilu", "fieldsplit_1_ksp_type": "preonly", "fieldsplit_1_pc_type": "hypre" } This raises a couple questions from myself: 1) Why is "pc_fieldsplit_off_diag_use_amat": True necessary? In the aP term, I see a dot(sigma, tau)*dx term in the bilinear, so wouldn't that actually be the amat? 2) I don't see -pc_fieldsplit_schur_precondition set anywhere meaning the default is the a11 matrix. In the original bilinear form, a11 would be zero but because you passed in aP, a11 now pick up the laplacian term? 3) Can this easily have been done instead using "pc_fieldsplit_schur_precondition": "user" and the user would provide a python context that builds only the schur complement approximation and applies the action? Thanks, Justin