Thank you, Mark. This is encouraging!
I will give it a try and report back.

-Ling

From: Mark Adams <mfad...@lbl.gov>
Date: Sunday, March 3, 2024 at 11:10 AM
To: Zou, Ling <l...@anl.gov>
Cc: petsc-users@mcs.anl.gov <petsc-users@mcs.anl.gov>
Subject: Re: [petsc-users] FW: 'Preconditioning' with lower-order method
On Sun, Mar 3, 2024 at 11: 42 AM Zou, Ling via petsc-users <petsc-users@ mcs. 
anl. gov> wrote: Original email may have been sent to the incorrect place. See 
below. -Ling From: Zou, Ling <lzou@ anl. gov> Date: Sunday, March 3, 2024 at
ZjQcmQRYFpfptBannerStart
This Message Is From an External Sender
This message came from outside your organization.

ZjQcmQRYFpfptBannerEnd


On Sun, Mar 3, 2024 at 11:42 AM Zou, Ling via petsc-users 
<petsc-users@mcs.anl.gov<mailto:petsc-users@mcs.anl.gov>> wrote:
Original email may have been sent to the incorrect place.
See below.

-Ling

From: Zou, Ling <l...@anl.gov<mailto:l...@anl.gov>>
Date: Sunday, March 3, 2024 at 10:34 AM
To: petsc-users 
<petsc-users-boun...@mcs.anl.gov<mailto:petsc-users-boun...@mcs.anl.gov>>
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.

  1.  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]


  1.  Option -2, dynamically changing residual function F(x)

In pseudo code, would be something like.


You can try it. I would doubt the linear version (1) would help. This is 
similar to "defect correction" but not the same.

The nonlinear version (2) is something you could try.
I've seen people switch nonlinear solvers like this but not operators.
You could try it.

Mark

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