carlos/Hyperbolic relaxation of the Reduced Ostrovsky Equation
Apr 19
Repo: https://github.com/carlosmunozmoncayo/Hyperbolic-Ostrovsky
We wrote the following hyperbolic relaxation of Reduced Ostrovsky:
\[ u_t + \mu u u_x = \gamma v, \]
\[ v_t+\tilde{c}(u-v_x)=0. \]
I’ll refer to the system as HypRO.
We have tried the following approaches for the discretization of the HypRO:
Pseudo-Spectral-Method with SSPRK time integration: The choice of the time step is not clear to me in this case, I’ll check the literature. This scheme does not capture shocks, which is part of the motivation to write the HypRO.
Operator splitting: Splitting advective part and source term. One wave speed of the hyperbolic part depends on \(\tilde{c}\), so the CFL condition requires a very small time step, introducing large numerical diffusion. Good accuracy is recovered with Sharpclaw, but we have a similar restriction for the time step.
Operator splitting: Splitting the advective parts in Burgers’ and advection equations. We solve Burger’s equation using Clawpack and the advection equation using a semi-Lagrangian method with piecewise linear reconstruction and minmod limiter. This gives a reasonably accurate (formally 2nd order accurate) solution which is computed extremely fast if we just follow the CFL condition using the wave speeds from the hyperbolic part. However, some oscillations that eventually destroy the solution arise as we let \(\tilde{c}\) increase. I suspect that this is an accuracy issue arising from the operator splitting. I think that the leading truncation error has the form:
\[ ||LTE||_{\infty }\frac{C(u,v)}{2}\Delta t \max \left( |v+\tilde{c}|,|\tilde{c}-\tilde{c}u|\right) + \mathcal{O}(\Delta t^2). \]
Which forces us to take a time stem that is (in the best case) inversely proportional to \(\tilde{c}\). Which, to attain the same accuracy, is less efficient than the original operator splitting approach.
TO DO
Use a high order operator splitting in Clawpack. For this I should modify the file: clawpack/pyclaw/src/pyclaw/classic/solver.py The correct way to do this would be to import the class ClawSolver and override the step function. This is also a way to evolve the system in a particular way, like an IMEX scheme (?)
Check stability and accuracy results in the operator splitting literature. In particular restrictions on time step. What about adaptive time-stepping with operator splitting?
Keep an eye on other ways to solve the problem, like IMEX schemes or exponential integrators. Is there a way to exploit the simple solutions for the linear pieces (advection and source term) other than operator splitting?