|
26 | 26 |
|
27 | 27 | @testset "sesolve" begin |
28 | 28 | tlist = range(0, 20 * 2π / g, 1000) |
| 29 | + saveat_idxs = 500:900 |
| 30 | + saveat = tlist[saveat_idxs] |
29 | 31 |
|
30 | 32 | prob = sesolveProblem(H, ψ0, tlist, e_ops = e_ops, progress_bar = Val(false)) |
31 | 33 | sol = sesolve(prob) |
32 | 34 | sol2 = sesolve(H, ψ0, tlist, progress_bar = Val(false)) |
33 | | - sol3 = sesolve(H, ψ0, tlist, e_ops = e_ops, saveat = tlist, progress_bar = Val(false)) |
| 35 | + sol3 = sesolve(H, ψ0, tlist, e_ops = e_ops, saveat = saveat, progress_bar = Val(false)) |
34 | 36 | sol_string = sprint((t, s) -> show(t, "text/plain", s), sol) |
35 | 37 | sol_string2 = sprint((t, s) -> show(t, "text/plain", s), sol2) |
36 | 38 |
|
|
48 | 50 | @test length(sol2.states) == length(tlist) |
49 | 51 | @test sol2.expect === nothing |
50 | 52 | @test length(sol3.times) == length(tlist) |
51 | | - @test length(sol3.states) == length(tlist) |
| 53 | + @test length(sol3.states) == length(saveat) |
52 | 54 | @test size(sol3.expect) == (length(e_ops), length(tlist)) |
| 55 | + @test sol.expect[1, saveat_idxs] ≈ expect(e_ops[1], sol3.states) atol = 1e-6 |
53 | 56 | @test sol_string == |
54 | 57 | "Solution of time evolution\n" * |
55 | 58 | "(return code: $(sol.retcode))\n" * |
|
92 | 95 | @inferred sesolveProblem(H, ψ0_int, tlist, progress_bar = Val(false)) |
93 | 96 | @inferred sesolve(H, ψ0, tlist, e_ops = e_ops, progress_bar = Val(false)) |
94 | 97 | @inferred sesolve(H, ψ0, tlist, progress_bar = Val(false)) |
95 | | - @inferred sesolve(H, ψ0, tlist, e_ops = e_ops, saveat = tlist, progress_bar = Val(false)) |
| 98 | + @inferred sesolve(H, ψ0, tlist, e_ops = e_ops, saveat = saveat, progress_bar = Val(false)) |
96 | 99 | @inferred sesolve(H, ψ0, tlist, e_ops = (a' * a, a'), progress_bar = Val(false)) # We test the type inference for Tuple of different types |
97 | 100 | end |
98 | 101 | end |
99 | 102 |
|
100 | 103 | @testset "mesolve, mcsolve, ssesolve and smesolve" begin |
101 | 104 | tlist = range(0, 10 / γ, 100) |
| 105 | + saveat_idxs = 50:90 |
| 106 | + saveat = tlist[saveat_idxs] |
102 | 107 |
|
103 | 108 | prob_me = mesolveProblem(H, ψ0, tlist, c_ops, e_ops = e_ops, progress_bar = Val(false)) |
104 | 109 | sol_me = mesolve(prob_me) |
105 | 110 | sol_me2 = mesolve(H, ψ0, tlist, c_ops, progress_bar = Val(false)) |
106 | | - sol_me3 = mesolve(H, ψ0, tlist, c_ops, e_ops = e_ops, saveat = tlist, progress_bar = Val(false)) |
| 111 | + sol_me3 = mesolve(H, ψ0, tlist, c_ops, e_ops = e_ops, saveat = saveat, progress_bar = Val(false)) |
107 | 112 | prob_mc = mcsolveProblem(H, ψ0, tlist, c_ops, e_ops = e_ops, progress_bar = Val(false)) |
108 | 113 | sol_mc = mcsolve(H, ψ0, tlist, c_ops, ntraj = 500, e_ops = e_ops, progress_bar = Val(false)) |
109 | 114 | sol_mc2 = mcsolve( |
|
116 | 121 | progress_bar = Val(false), |
117 | 122 | jump_callback = DiscreteLindbladJumpCallback(), |
118 | 123 | ) |
119 | | - sol_mc_states = mcsolve(H, ψ0, tlist, c_ops, ntraj = 500, saveat = tlist, progress_bar = Val(false)) |
| 124 | + sol_mc_states = mcsolve(H, ψ0, tlist, c_ops, ntraj = 500, saveat = saveat, progress_bar = Val(false)) |
120 | 125 | sol_mc_states2 = mcsolve( |
121 | 126 | H, |
122 | 127 | ψ0, |
123 | 128 | tlist, |
124 | 129 | c_ops, |
125 | 130 | ntraj = 500, |
126 | | - saveat = tlist, |
| 131 | + saveat = saveat, |
127 | 132 | progress_bar = Val(false), |
128 | 133 | jump_callback = DiscreteLindbladJumpCallback(), |
129 | 134 | ) |
|
147 | 152 | @test prob_mc.prob.f.f isa MatrixOperator |
148 | 153 | @test sum(abs, sol_mc.expect .- sol_me.expect) / length(tlist) < 0.1 |
149 | 154 | @test sum(abs, sol_mc2.expect .- sol_me.expect) / length(tlist) < 0.1 |
150 | | - @test sum(abs, vec(expect_mc_states_mean) .- vec(sol_me.expect[1, :])) / length(tlist) < 0.1 |
151 | | - @test sum(abs, vec(expect_mc_states_mean2) .- vec(sol_me.expect[1, :])) / length(tlist) < 0.1 |
| 155 | + @test sum(abs, vec(expect_mc_states_mean) .- vec(sol_me.expect[1, saveat_idxs])) / length(tlist) < 0.1 |
| 156 | + @test sum(abs, vec(expect_mc_states_mean2) .- vec(sol_me.expect[1, saveat_idxs])) / length(tlist) < 0.1 |
152 | 157 | @test sum(abs, sol_sse.expect .- sol_me.expect) / length(tlist) < 0.1 |
153 | 158 | @test sum(abs, sol_sme.expect .- sol_me.expect) / length(tlist) < 0.1 |
154 | 159 | @test length(sol_me.times) == length(tlist) |
|
158 | 163 | @test length(sol_me2.states) == length(tlist) |
159 | 164 | @test sol_me2.expect === nothing |
160 | 165 | @test length(sol_me3.times) == length(tlist) |
161 | | - @test length(sol_me3.states) == length(tlist) |
| 166 | + @test length(sol_me3.states) == length(saveat) |
162 | 167 | @test size(sol_me3.expect) == (length(e_ops), length(tlist)) |
| 168 | + @test sol_me3.expect[1, saveat_idxs] ≈ expect(e_ops[1], sol_me3.states) atol = 1e-6 |
163 | 169 | @test length(sol_mc.times) == length(tlist) |
164 | 170 | @test size(sol_mc.expect) == (length(e_ops), length(tlist)) |
165 | 171 | @test length(sol_mc_states.times) == length(tlist) |
|
0 commit comments