Yoshida

Yoshida weights, coefficients and multistep sequence construnction (list of weighted seed steps)

sympint.yoshida.coefficients(ni: int, nf: int) list[float][source]

Generate Yoshida coefficients for given Yoshida orders (ni < nf)

Parameters:
  • ni (int, non-negative) – initial Yoshida order

  • nf (int, non-negative) – final Yoshida order

Return type:

list[float]

Note

Given a time-reversible integration step w(2(ni - 1))(dt) Construct coefficients x1, x2, x3, …, x3, x2, x1, so that w(2 nf)(dt) = w(2(ni - 1))(x1 dt) o … o w(2(ni - 1))(x1 dt)

sympint.yoshida.sequence(ni: int, nf: int, mappings: Sequence[Callable[[...], jax.Array]], merge: bool = False, parameters: list[list[Any]] | None = None) Sequence[Callable[[...], jax.Array]][source]

Construct Yoshida integrator multistep sequence (ordered sequence of weighted mappings)

Parameters:
  • ni (int, non-negative) – initial Yoshida order

  • nf (int, non-negative) – final Yoshida order

  • mappings (Sequence[Callable[..., Array]]) – list of (time-reversible) mappings

  • merge (bool, default=False) – flag to merge edge mappings (assume commuting)

  • parameters (Optional[list[list[Any]]], default=None) – list of optional fixed parameters for each mapping

Return type:

Sequence[Callable[…, Array]]

Note

Each input mapping is assumed to have (x, dt, *args, *pars) signature Output sequence mappings have (x, dt, *args) singnatures

sympint.yoshida.table(k: int, ni: int, nf: int, merge: bool = False) tuple[list[int], list[float]][source]

Generate Yoshida multistep table (sequence of coefficients for multistep integrator)

Parameters:
  • k (int, positive) – number of mappings

  • ni (int, non-negative) – initial Yoshida order

  • nf (int, non-negative) – final Yoshida order

  • merge (bool, default=False) – flag to merge edge mappings (assume commuting)

Return type:

tuple[list[int], list[float]]

Note

Given a set of symplectic mappings indexed as 0, 1, …, (l - 1) and Yoshida ni <= nf orders Construct Yoshida coefficients (i1, x1), (i2, x2), …, (i2, x2), (i1, x1) w(2m)(dt) = w(i1)(x1 dx) o w(i2)(x2 dx) o … o w(i2)(x2 dx) o w(i1)(x1 dx)

sympint.yoshida.weights(n: int) list[float][source]

Generate Yoshida weights for a given Yoshida order

Parameters:

n (int, positive) – Yoshida order

Return type:

list[float]

Note

The resulting integration step difference order is two times the Yoshida order Given a time-reversible integration step w(2n)(dt) with difference order 2n 2(n + 1) order symmetric integration step w(2(n + 1))(dt) can be constructed x1, x2, x1 = weights(n + 1) w(2(n + 1))(dt) = w(2n)(x1 dt) o w(2n)(x2 dt) o w(2n)(x1 dt)