Skip to content
Projects
These are the docs of the development version (the devel branch). See the docs of the latest release.

example_pkg.schemes

Time steps for a particle in a force field: kick, drift and their leapfrog.

Classes

NameDescription
DriftMove the position at the current velocity.
KickChange the velocity by the acceleration at the current position.
LeapfrogHalf a kick, a drift and half a kick: the velocity Verlet scheme.
SchemeA one-step scheme for x'' = a(x).

Driftclass#

class Drift(Scheme)

Bases: Scheme

Move the position at the current velocity.

Numerics

update

xn+1=xn+vn Δtx^{n+1} = x^n + v^n\,\Delta t

Assumptions:

  • velocity constant over the step

stepmethod#

def step(x, v, dt: float, acceleration: Callable) -> tuple

Advance the position only.

Kickclass#

class Kick(Scheme)

Bases: Scheme

Change the velocity by the acceleration at the current position.

Numerics

update

vn+1=vn+a(xn) Δtv^{n+1} = v^n + a(x^n)\,\Delta t

stepmethod#

def step(x, v, dt: float, acceleration: Callable) -> tuple

Advance the velocity only.

Leapfrogclass#

class Leapfrog(Scheme)

Bases: Scheme

Half a kick, a drift and half a kick: the velocity Verlet scheme.

Numerics

half kick

vn+1/2=vn+12a(xn) Δtv^{n+1/2} = v^n + \tfrac{1}{2} a(x^n)\,\Delta t

drift

xn+1=xn+vn+1/2 Δtx^{n+1} = x^n + v^{n+1/2}\,\Delta t

kick

vn+1=vn+1/2+12a(xn+1) Δtv^{n+1} = v^{n+1/2} + \tfrac{1}{2} a(x^{n+1})\,\Delta t

energy

∣H(xn,vn)−H(x0,v0)∣=O(Δt2)for all n\left|H(x^n, v^n) - H(x^0, v^0)\right| = \mathcal{O}(\Delta t^2) \quad \text{for all } n

Order of accuracy: x: 2, v: 2.

Assumptions:

  • the acceleration depends on the position only

References:

  • Hairer, Lubich and Wanner, Geometric Numerical Integration (2006), section I.1.4

Built from:

  • example_pkg.schemes.Kick
  • example_pkg.schemes.Drift

runmethod#

def run(x, v, dt: float, steps: int, acceleration: Callable) -> np.ndarray

Take steps steps and return the positions, (steps + 1,).

stepmethod#

def step(x, v, dt: float, acceleration: Callable) -> tuple

Advance (x, v) by one leapfrog step.

Schemeclass#

class Scheme(NumericalMethod)

Bases: NumericalMethod

A one-step scheme for x'' = a(x).

stepmethod#

def step(x, v, dt: float, acceleration: Callable) -> tuple

Advance (x, v) by dt.