pub mod plot; mod simulation; use num_complex::Complex; use plot::Graph; use simulation::time_evolution::*; use simulation::*; struct StaticHamiltonion; impl MatrixGen for StaticHamiltonion { fn gen(_t: f64) -> ndarray::Array2 { let mut b = unsafe { ndarray::Array2::::uninitialized((4, 4)) }; expm::expm(&simulation::hamiltonians::X0(), &mut b); b } } fn main() { let dt = 1.0; let iterations = 100; let state = simulation::twoxtwo_level::TwoXTwoLevel::new( Complex::new(0.0, 0.0), Complex::new(0.0, 0.0), Complex::new(0.0, 0.0), Complex::new(0.0, 0.0), ); let trace = Vec::new(); for i in 0..iterations { state.evolve::(i as f64 * dt); let fibre = state.fibrate(); trace.push([ fibre[0], fibre[1], fibre[2], 0.0, 0.0, i as f64 / iterations as f64, ]); } plot::Gnuplot::plot3d(&trace, 1) }