1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
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<c64> {
let mut b = unsafe { ndarray::Array2::<c64>::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::<StaticHamiltonion>(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)
}
|