SemiLagrangian.jl Documentation

Let us consider an abstract scalar advection equation of the form

$ \frac{∂f}{∂t}+ a(x, t) ⋅ ∇f = 0. $

The characteristic curves associated to this equation are the solutions of the ordinary differential equations

$ \frac{dX}{dt} = a(X(t), t) $

We shall denote by $X(t, x, s)$ the unique solution of this equation associated to the initial condition $X(s) = x$.

The classical semi-Lagrangian method is based on a backtracking of characteristics. Two steps are needed to update the distribution function $f^{n+1}$ at $t^{n+1}$ from its value $f^n$ at time $t^n$ :

  1. For each grid point $x_i$ compute $X(t^n; x_i, t^{n+1})$ the value of the characteristic at $t^n$ which takes the value $x_i$ at $t^{n+1}$.
  2. As the distribution solution of first equation verifies $f^{n+1}(x_i) = f^n(X(t^n; x_i, t^{n+1})),$ we obtain the desired value of $f^{n+1}(x_i)$ by computing $f^n(X(t^n;x_i,t^{n+1})$ by interpolation as $X(t^n; x_i, t^{n+1})$ is in general not a grid point.

Eric Sonnendrücker - Numerical methods for the Vlasov equations

SemiLagrangian.SemiLagrangianModule

SemiLagrangian.jl

Build Status codecov

Advection implementation in Julia using Semi-Lagrangian numerical method

Note

This package is difficult to use directly. There is still a lack of documentation and some parts like splines need to be optimized. This package has been developed to calculate the interpolations and advections used in the package VlasovSolvers.jl.

Dependencies

  • Base
  • Base.Threads
  • Core
  • DocStringExtensions
  • FFTW
  • LinearAlgebra
  • Polynomials
  • Requires
source