Good example code for IMEX and operator splitting methods in Fenics

I was watching some of Wolfgang Bangerth’s videos on Deal II, in particular his video on splitting methods for transport equations. I am new to both IMEX and operator splitting methods, so I wanted to do some simple experiments. I was trying to find some good Fenics code examples showing a simple IMEX and operator splitting method–just to see what the code looks like. Can anyone point to me a good examples of these implementations in Fenics?

I looked at the Advection-Diffusion-Reaction tutorial, which is a similar transport system. But that tutorial solves the problem as a vector valued function. The only splitting in that tutorial is for accessing the components of the unknown vector function. I also looked at the Navier-Stokes tutorial and that does implement Chorin’s method for pressure correction. I was not sure if that was a good prototype for implementing splitting methods because it was so specific to solving the Navier-Stokes problem. Of course which splitting methods work for which problems is always going to be specialized, but I am really looking for generic code where I can swap in different implicit and explicit solvers, etc., for the transport equation with diffusive and advective components. I want to understand the best method to do that in Fenics.

I also took a look at some other posts, but the code there did not work. It might be from older Fenics versions–since they come from an archived version of the Fenics forum? I can try and fool around
with this example, but I am not sure if it is a good implementation or example to emulate.

Any suggestions would be appreciated. Thanks.

https://fenicsproject.org/qa/2513/how-to-define-a-given-explizit-runge-kutta-method-correctly/

What about https://arxiv.org/pdf/2002.00074.pdf
with corresponding code GitHub - vpdecaria/beab2: This is an implementation of an adaptive stepsize and or Implicit/Explicit (IMEX) timestepping scheme for the incompressible Navier-Stokes equations. The method is called MOOSE-IMEX-12. MOOSE stands for Multiple Order One Solve Embedded, because there is only one linear solve each time step, but two solutions of different orders of accuracy are produced. Backward Euler/Adams Bashforth 2. An adaptive, implicit/explicit, timestepping method for the Navier-Stokes equation.

Oh @dokken thanks so much. Yeah, I can take a look at this. I think I saw this paper in my search, but I was not sure if it was a good implementation. But I can certainly dive deeper into the code now. I appreciate the help.