implementations.sweeper_classes.Runge_Kutta_Nystrom module

class RKN(params)[source]

Bases: RungeKuttaNystrom

Runge-Kutta-Nystrom method https://link.springer.com/book/10.1007/978-3-540-78862-1 page: 284 Chapter: II.14 Numerical methods for Second order differential equations

class RungeKuttaNystrom(params)[source]

Bases: RungeKutta

Runge-Kutta scheme that fits the interface of a sweeper. Actually, the sweeper idea fits the Runge-Kutta idea when using only lower triangular rules, where solutions at the nodes are successively computed from earlier nodes. However, we only perform a single iteration of this.

We have two choices to realise a Runge-Kutta sweeper: We can choose Q = Q_Delta = <Butcher tableau>, but in this implementation, that would lead to a lot of wasted FLOPS from integrating with Q and then with Q_Delta and subtracting the two. For that reason, we built this new sweeper, which does not have a preconditioner.

This class only supports lower triangular Butcher tableaux such that the system can be solved with forward substitution. In this way, we don’t get the maximum order that we could for the number of stages, but computing the stages is much cheaper. In particular, if the Butcher tableaux is strictly lower triangular, we get an explicit method, which does not require us to solve a system of equations to compute the stages.

Please be aware that all fundamental parameters of the Sweeper are ignored. These include

  • num_nodes

  • collocation_class

  • initial_guess

  • QI

All of these variables are either determined by the RK rule, or are not part of an RK scheme.

Attribues:

butcher_tableau (ButcherTableau): Butcher tableau for the Runge-Kutta scheme that you want

compute_end_point()[source]

In this Runge-Kutta implementation, the solution to the step is always stored in the last node

get_full_f(f)[source]

Test the right hand side funtion is the correct type

Parameters:

f (dtype_f) – Right hand side at a single node

Returns:

Full right hand side as a mesh

Return type:

mesh

update_nodes()[source]

Update the u- and f-values at the collocation nodes

Returns:

None

class Velocity_Verlet(params)[source]

Bases: RungeKuttaNystrom

Velocity-Verlet scheme https://de.wikipedia.org/wiki/Verlet-Algorithmus