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

Reply via email to