<div dir="ltr">Hi,<div><br></div><div>we've been looking at using the built-in Schur complement capabilities in PETSc, and encountered some issues which I think are bugs, though maybe I just can't figure out how to use things properly.</div>

<div><br></div><div>Attached is a somewhat boiled down test program. It's based on Crank-Nicolson TS, which uses SNES, which uses KSP, which has a PC that's set to type fieldsplit. We'd like to have the KSP solver for the actual Schur complement to use multigrid as PC, eventually.</div>

<div><br></div><div>One, kinda minor issue: when ComputeJacobian is called, we have to use MatZeroEntries and recompute the Jacobian (of course, that's not really needed for the simple problem we're solving right now because it's actually linear). The reason for that is that, I think, the TS CN has shifted / added a diagonal to the Jacobian matrix, as needed for CN. For this, I'm just wondering if that's expected behavior (it's not obvious that one wouldn't be passed the same matrix that was calculated the previous time).</div>

<div><br></div><div>Secondly, running the code with "-ts_view_pre" crashes, because the TS isn't fully set up (in particular, the fieldsplit PC doesn't seem to have properly created its sub-KSPs yet). I'm pretty sure it shouldn't crash because of that. But maybe more importantly, the way things are set up doesn't seem quite right. In particular, even after calling TSSetUp(), the sub objects in the TS aren't properly set up yet -- that only seems to happen in the first call to TSSolve() (or TSStep()). Trying to set up the SNES inside the TS explicitly by calling SNESSetUp() doesn't work, either. During TSStep, SNESSolve() is called with explicit vectors for b, x, it appears only then TSSetUp() will actually work without errors.</div>

<div><br></div><div>I'm not sure when the fieldsplit PC should be set up to have its proper sub-KSP, I suppose at least at TSSetUp() time, if not earlier. For us, since we want to change the sub-KSPs, we need some way to do that before the actual solve, but at that point, PCFieldSplitGetSubKSP() will fail -- this part of the code is #if 0'd out right now.</div>

<div><br></div><div>I believe that all of this works properly when using SNES directly, but we can't get it to work inside the TS, so any help would be appreciated.</div><div><br></div><div>This is on the "maint" branch from petsc's git repo, from a couple of days ago.</div>

<div><br></div><div>Thanks,</div><div>--Kai</div><div><br></div><div><div><br></div>-- <br>Kai Germaschewski<br>Assistant Professor, Dept of Physics / Space Science Center<br>University of New Hampshire, Durham, NH 03824<br>

office: Morse Hall 245E<br>phone:  +1-603-862-2912<br>fax: +1-603-862-2771<br>
</div></div>