summaryrefslogtreecommitdiff
path: root/src/main.rs
blob: 773ea727141f3b1ea73eaad2a3e34b3d1d4f245a (plain)
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)
}