Are you forming the Jacobian for the first and second order cases inside of Newton?
You can run both with -log_view to see how much time is spent in the various events (compute function, compute Jacobian, linear solve, ...) for the two cases and compare them. > On Mar 3, 2024, at 11:42 AM, Zou, Ling via petsc-users > <[email protected]> wrote: > > Original email may have been sent to the incorrect place. > See below. > > -Ling > > From: Zou, Ling <[email protected] <mailto:[email protected]>> > Date: Sunday, March 3, 2024 at 10:34 AM > To: petsc-users <[email protected] > <mailto:[email protected]>> > Subject: 'Preconditioning' with lower-order method > > Hi all, > > I am solving a PDE system over a spatial domain. Numerical methods are: > Finite volume method (both 1st and 2nd order implemented) > BDF1 and BDF2 for time integration. > What I have noticed is that 1st order FVM converges much faster than 2nd > order FVM, regardless the time integration scheme. Well, not surprising since > 2nd order FVM introduces additional non-linearity. > > I’m thinking about two possible ways to speed up 2nd order FVM, and would > like to get some thoughts or community knowledge before jumping into code > implementation. > > Say, let the 2nd order FVM residual function be F2(x) = 0; and the 1st order > FVM residual function be F1(x) = 0. > Option – 1, multi-step for each time step > Step 1: solving F1(x) = 0 to obtain a temporary solution x1 > Step 2: feed x1 as an initial guess to solve F2(x) = 0 to obtain the final > solution. > [Not sure if gain any saving at all] > > Option -2, dynamically changing residual function F(x) > In pseudo code, would be something like. > > snesFormFunction(SNES snes, Vec u, Vec f, void *) > { > if (snes.nl_it_no < 4) // 4 being arbitrary here > f = F1(u); > else > f = F2(u); > } > > I know this might be a bit crazy since it may crash after switching residual > function, still, any thoughts? > > Best, > > -Ling
