pub struct HamiltonianSystem {
pub q: Vec<f64>,
pub p: Vec<f64>,
pub dt: f64,
pub time: f64,
}Expand description
A complete Hamiltonian system with state (q, p) and a user-supplied Hamiltonian gradient function.
Uses symplectic Euler integration by default for long-time stability.
Fields§
§q: Vec<f64>Generalised coordinates q.
p: Vec<f64>Conjugate momenta p.
dt: f64Time step.
time: f64Current simulation time.
Implementations§
Source§impl HamiltonianSystem
impl HamiltonianSystem
Sourcepub fn new(q: Vec<f64>, p: Vec<f64>, dt: f64) -> Self
pub fn new(q: Vec<f64>, p: Vec<f64>, dt: f64) -> Self
Create a new system with given initial conditions and time step.
Sourcepub fn step(&mut self, grad_h: &dyn Fn(&[f64], &[f64]) -> (Vec<f64>, Vec<f64>))
pub fn step(&mut self, grad_h: &dyn Fn(&[f64], &[f64]) -> (Vec<f64>, Vec<f64>))
Advance one time step using symplectic Euler integration.
grad_h(q, p) must return (∂H/∂p, ∂H/∂q).
Sourcepub fn run(
&mut self,
n: usize,
grad_h: &dyn Fn(&[f64], &[f64]) -> (Vec<f64>, Vec<f64>),
) -> (Vec<Vec<f64>>, Vec<Vec<f64>>)
pub fn run( &mut self, n: usize, grad_h: &dyn Fn(&[f64], &[f64]) -> (Vec<f64>, Vec<f64>), ) -> (Vec<Vec<f64>>, Vec<Vec<f64>>)
Run n steps and return the trajectory as (q_history, p_history).
Sourcepub fn kinetic_energy(&self, masses: &[f64]) -> f64
pub fn kinetic_energy(&self, masses: &[f64]) -> f64
Evaluate a scalar Hamiltonian H(q,p) = Σ p_i²/(2m_i) + V(q).
Provided for convenience; grad_h must still be supplied externally.
Trait Implementations§
Source§impl Clone for HamiltonianSystem
impl Clone for HamiltonianSystem
Source§fn clone(&self) -> HamiltonianSystem
fn clone(&self) -> HamiltonianSystem
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreAuto Trait Implementations§
impl Freeze for HamiltonianSystem
impl RefUnwindSafe for HamiltonianSystem
impl Send for HamiltonianSystem
impl Sync for HamiltonianSystem
impl Unpin for HamiltonianSystem
impl UnsafeUnpin for HamiltonianSystem
impl UnwindSafe for HamiltonianSystem
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more