Skip to content

Commit 1c5d394

Browse files
Make runtests multithreaded and reduce time for timeevolution tests
1 parent 9d83fbc commit 1c5d394

File tree

3 files changed

+105
-28
lines changed

3 files changed

+105
-28
lines changed

.github/workflows/CI.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ jobs:
7171
- uses: julia-actions/julia-runtest@v1
7272
env:
7373
GROUP: ${{ matrix.group }}
74+
JULIA_NUM_THREADS: auto
7475
- uses: julia-actions/julia-processcoverage@v1
7576
with:
7677
directories: src,ext

test/core-test/time_evolution.jl

Lines changed: 102 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -144,17 +144,19 @@
144144
"reltol = $(sol_sse.reltol)\n"
145145

146146
# Time-Dependent Hamiltonian
147+
# ssesolve is slow to be run on CI. It is not removed from the test because it may be useful for testing in more powerful machines.
148+
147149
N = 10
148150
a = tensor(destroy(N), qeye(2))
149151
σm = tensor(qeye(N), sigmam())
150152
σz = tensor(qeye(N), sigmaz())
151153
ω = 1.0
152-
ωd = 1.05
154+
ωd = 1.02
153155
Δ = ω - ωd
154-
F = 0.01
156+
F = 0.05
155157
g = 0.1
156-
γ = 0.01
157-
nth = 0.05
158+
γ = 0.1
159+
nth = 0.001
158160

159161
# Time Evolution in the drive frame
160162

@@ -163,12 +165,14 @@
163165
e_ops = [a' * a, σz]
164166

165167
ψ0 = tensor(basis(N, 0), basis(2, 1))
166-
tlist = range(0, 10 / γ, 1000)
168+
tlist = range(0, 2 / γ, 1000)
169+
170+
rng = MersenneTwister(12)
167171

168172
sol_se = sesolve(H, ψ0, tlist, e_ops = e_ops, progress_bar = Val(false))
169173
sol_me = mesolve(H, ψ0, tlist, c_ops, e_ops = e_ops, progress_bar = Val(false))
170-
sol_mc = mcsolve(H, ψ0, tlist, c_ops, ntraj = 500, e_ops = e_ops, progress_bar = Val(false))
171-
sol_sse = ssesolve(H, ψ0, tlist, c_ops, ntraj = 500, e_ops = e_ops, progress_bar = Val(false))
174+
sol_mc = mcsolve(H, ψ0, tlist, c_ops, ntraj = 500, e_ops = e_ops, progress_bar = Val(false), rng = rng)
175+
# sol_sse = ssesolve(H, ψ0, tlist, c_ops, ntraj = 500, e_ops = e_ops, progress_bar = Val(false), rng = rng)
172176

173177
# Time Evolution in the lab frame
174178

@@ -182,13 +186,23 @@
182186

183187
sol_se_td = sesolve(H_td, ψ0, tlist, e_ops = e_ops, progress_bar = Val(false), params = p)
184188
sol_me_td = mesolve(H_td, ψ0, tlist, c_ops, e_ops = e_ops, progress_bar = Val(false), params = p)
185-
sol_mc_td = mcsolve(H_td, ψ0, tlist, c_ops, ntraj = 500, e_ops = e_ops, progress_bar = Val(false), params = p)
186-
sol_sse_td = ssesolve(H_td, ψ0, tlist, c_ops, ntraj = 500, e_ops = e_ops, progress_bar = Val(false), params = p)
189+
sol_mc_td = mcsolve(
190+
H_td,
191+
ψ0,
192+
tlist,
193+
c_ops,
194+
ntraj = 500,
195+
e_ops = e_ops,
196+
progress_bar = Val(false),
197+
params = p,
198+
rng = rng,
199+
)
200+
# sol_sse_td = ssesolve(H_td, ψ0, tlist, c_ops, ntraj = 500, e_ops = e_ops, progress_bar = Val(false), params = p, rng = rng)
187201

188202
@test sol_se.expect sol_se_td.expect atol = 1e-6 * length(tlist)
189203
@test sol_me.expect sol_me_td.expect atol = 1e-6 * length(tlist)
190204
@test sol_mc.expect sol_mc_td.expect atol = 1e-2 * length(tlist)
191-
@test sol_sse.expect sol_sse_td.expect atol = 1e-2 * length(tlist)
205+
# @test sol_sse.expect ≈ sol_sse_td.expect atol = 1e-2 * length(tlist)
192206

193207
H_td2 = QobjEvo(H_td)
194208
L_td = QobjEvo(H_td, type = SuperOperator, f = liouvillian)
@@ -204,14 +218,24 @@
204218
params = p,
205219
)
206220
sol_me_td2 = mesolve(L_td, ψ0, tlist, c_ops, e_ops = e_ops, progress_bar = Val(false), params = p)
207-
sol_mc_td2 = mcsolve(H_td2, ψ0, tlist, c_ops, ntraj = 500, e_ops = e_ops, progress_bar = Val(false), params = p)
208-
sol_sse_td2 =
209-
ssesolve(H_td2, ψ0, tlist, c_ops, ntraj = 500, e_ops = e_ops, progress_bar = Val(false), params = p)
221+
sol_mc_td2 = mcsolve(
222+
H_td2,
223+
ψ0,
224+
tlist,
225+
c_ops,
226+
ntraj = 500,
227+
e_ops = e_ops,
228+
progress_bar = Val(false),
229+
params = p,
230+
rng = rng,
231+
)
232+
# sol_sse_td2 =
233+
# ssesolve(H_td2, ψ0, tlist, c_ops, ntraj = 500, e_ops = e_ops, progress_bar = Val(false), params = p, rng = rng)
210234

211235
@test sol_se.expect sol_se_td2.expect atol = 1e-6 * length(tlist)
212236
@test sol_me.expect sol_me_td2.expect atol = 1e-6 * length(tlist)
213237
@test sol_mc.expect sol_mc_td2.expect atol = 1e-2 * length(tlist)
214-
@test sol_sse.expect sol_sse_td2.expect atol = 1e-2 * length(tlist)
238+
# @test sol_sse.expect ≈ sol_sse_td2.expect atol = 1e-2 * length(tlist)
215239

216240
@testset "Type Inference mesolve" begin
217241
@inferred mesolveProblem(H, ψ0, tlist, c_ops, e_ops = e_ops, progress_bar = Val(false))
@@ -233,20 +257,49 @@
233257
end
234258

235259
@testset "Type Inference mcsolve" begin
236-
@inferred mcsolveEnsembleProblem(H, ψ0, tlist, c_ops, ntraj = 500, e_ops = e_ops, progress_bar = Val(false))
237-
@inferred mcsolve(H, ψ0, tlist, c_ops, ntraj = 500, e_ops = e_ops, progress_bar = Val(false))
238-
@inferred mcsolve(H, ψ0, tlist, c_ops, ntraj = 500, progress_bar = Val(true))
239-
@inferred mcsolve(H, ψ0, [0, 10], c_ops, ntraj = 500, progress_bar = Val(false))
260+
@inferred mcsolveEnsembleProblem(
261+
H,
262+
ψ0,
263+
tlist,
264+
c_ops,
265+
ntraj = 5,
266+
e_ops = e_ops,
267+
progress_bar = Val(false),
268+
rng = rng,
269+
)
270+
@inferred mcsolve(H, ψ0, tlist, c_ops, ntraj = 5, e_ops = e_ops, progress_bar = Val(false), rng = rng)
271+
@inferred mcsolve(H, ψ0, tlist, c_ops, ntraj = 5, progress_bar = Val(true), rng = rng)
272+
@inferred mcsolve(H, ψ0, [0, 10], c_ops, ntraj = 5, progress_bar = Val(false), rng = rng)
240273
@inferred mcsolve(
241274
H,
242275
tensor(Qobj(zeros(Int64, N)), Qobj([0, 1])),
243276
tlist,
244277
c_ops,
245-
ntraj = 500,
278+
ntraj = 5,
279+
progress_bar = Val(false),
280+
rng = rng,
281+
)
282+
@inferred mcsolve(
283+
H,
284+
ψ0,
285+
tlist,
286+
(a, a'),
287+
e_ops = (a' * a, a'),
288+
ntraj = 5,
289+
progress_bar = Val(false),
290+
rng = rng,
291+
) # We test the type inference for Tuple of different types
292+
@inferred mcsolve(
293+
H_td,
294+
ψ0,
295+
tlist,
296+
c_ops,
297+
ntraj = 5,
298+
e_ops = e_ops,
246299
progress_bar = Val(false),
300+
params = p,
301+
rng = rng,
247302
)
248-
@inferred mcsolve(H, ψ0, tlist, (a, a'), e_ops = (a' * a, a'), ntraj = 500, progress_bar = Val(false)) # We test the type inference for Tuple of different types
249-
@inferred mcsolve(H_td, ψ0, tlist, c_ops, ntraj = 500, e_ops = e_ops, progress_bar = Val(false), params = p)
250303
end
251304

252305
@testset "Type Inference ssesolve" begin
@@ -256,31 +309,52 @@
256309
ψ0,
257310
tlist,
258311
c_ops_tuple,
259-
ntraj = 500,
312+
ntraj = 5,
260313
e_ops = e_ops,
261314
progress_bar = Val(false),
315+
rng = rng,
262316
)
263-
@inferred ssesolve(H, ψ0, tlist, c_ops_tuple, ntraj = 500, e_ops = e_ops, progress_bar = Val(false))
264-
@inferred ssesolve(H, ψ0, tlist, c_ops_tuple, ntraj = 500, progress_bar = Val(true))
265-
@inferred ssesolve(H, ψ0, [0, 10], c_ops_tuple, ntraj = 500, progress_bar = Val(false))
317+
@inferred ssesolve(
318+
H,
319+
ψ0,
320+
tlist,
321+
c_ops_tuple,
322+
ntraj = 5,
323+
e_ops = e_ops,
324+
progress_bar = Val(false),
325+
rng = rng,
326+
)
327+
@inferred ssesolve(H, ψ0, tlist, c_ops_tuple, ntraj = 5, progress_bar = Val(true), rng = rng)
328+
@inferred ssesolve(H, ψ0, [0, 10], c_ops_tuple, ntraj = 5, progress_bar = Val(false), rng = rng)
266329
@inferred ssesolve(
267330
H,
268331
tensor(Qobj(zeros(Int64, N)), Qobj([0, 1])),
269332
tlist,
270333
c_ops_tuple,
271-
ntraj = 500,
334+
ntraj = 5,
272335
progress_bar = Val(false),
336+
rng = rng,
273337
)
274-
@inferred ssesolve(H, ψ0, tlist, c_ops_tuple, ntraj = 500, e_ops = (a' * a, a'), progress_bar = Val(false)) # We test the type inference for Tuple of different types
338+
@inferred ssesolve(
339+
H,
340+
ψ0,
341+
tlist,
342+
c_ops_tuple,
343+
ntraj = 5,
344+
e_ops = (a' * a, a'),
345+
progress_bar = Val(false),
346+
rng = rng,
347+
) # We test the type inference for Tuple of different types
275348
@inferred ssesolve(
276349
H_td,
277350
ψ0,
278351
tlist,
279352
c_ops_tuple,
280-
ntraj = 500,
353+
ntraj = 5,
281354
e_ops = e_ops,
282355
progress_bar = Val(false),
283356
params = p,
357+
rng = rng,
284358
)
285359
end
286360

test/runtests.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ const GROUP = get(ENV, "GROUP", "All")
88

99
const testdir = dirname(@__FILE__)
1010

11+
println("---- Running tests with $(Threads.nthreads()) threads. ----")
12+
1113
# Put core tests in alphabetical order
1214
core_tests = [
1315
"correlations_and_spectrum.jl",

0 commit comments

Comments
 (0)