Skip to content

Commit d8d26a3

Browse files
fixed a bug with smesolve!
1 parent 5a354fe commit d8d26a3

File tree

2 files changed

+14
-6
lines changed

2 files changed

+14
-6
lines changed

src/time_evolution/mesolve.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ _mesolve_make_L_QobjEvo(H::Nothing, c_ops::Nothing) = throw(ArgumentError("Both
77
c_ops are Nothing. You are probably running the wrong function."))
88

99
function _gen_mesolve_solution(sol, prob::TimeEvolutionProblem{ST}) where {ST<:Union{Operator,OperatorKet,SuperOperator}}
10-
if ST == Operator
10+
if prob.states_type == Operator
1111
ρt = map-> QuantumObject(vec2mat(ϕ), type = prob.states_type, dims = prob.dimensions), sol.u)
1212
else
1313
ρt = map-> QuantumObject(ϕ, type = prob.states_type, dims = prob.dimensions), sol.u)

src/time_evolution/smesolve.jl

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,14 @@
11
export smesolveProblem, smesolveEnsembleProblem, smesolve
22

3-
_smesolve_generate_state(u, dims, isoperket::Val{false}) = QuantumObject(vec2mat(u), type = Operator(), dims = dims)
4-
_smesolve_generate_state(u, dims, isoperket::Val{true}) = QuantumObject(u, type = OperatorKet(), dims = dims)
3+
#_smesolve_generate_state(u, dims, isoperket::Val{false}) = QuantumObject(vec2mat(u), type = Operator(), dims = dims)
4+
#_smesolve_generate_state(u, dims, isoperket::Val{true}) = QuantumObject(u, type = OperatorKet(), dims = dims)
5+
function _smesolve_generate_state(u, dims, type)
6+
if type == OperatorKet
7+
return QuantumObject(u, type = type, dims = dims)
8+
else
9+
return QuantumObject(vec2mat(u), type = Operator(), dims = dims)
10+
end
11+
end
512

613
function _smesolve_update_coeff(u, p, t, op_vec)
714
return 2 * real(dot(op_vec, u)) #this is Tr[Sn * ρ + ρ * Sn']
@@ -146,7 +153,7 @@ function smesolveProblem(
146153
kwargs4...,
147154
)
148155

149-
return TimeEvolutionProblem(prob, tlist,StateOpType(), dims)
156+
return TimeEvolutionProblem(prob, tlist,StateOpType(), dims, ())
150157
end
151158

152159
@doc raw"""
@@ -274,8 +281,9 @@ function smesolveEnsembleProblem(
274281
ensemble_prob = TimeEvolutionProblem(
275282
EnsembleProblem(prob_sme, prob_func = _prob_func, output_func = _output_func[1], safetycopy = true),
276283
prob_sme.times,
284+
StateOpType(),
277285
prob_sme.dimensions,
278-
merge(prob_sme.kwargs, (progr = _output_func[2], channel = _output_func[3])),
286+
(progr = _output_func[2], channel = _output_func[3]),
279287
)
280288

281289
return ensemble_prob
@@ -422,7 +430,7 @@ function smesolve(
422430

423431
# stack to transform Vector{Vector{QuantumObject}} -> Matrix{QuantumObject}
424432
states_all = stack(
425-
map(i -> _smesolve_generate_state.(sol[:, i].u, Ref(dims), ens_prob.kwargs.isoperket), eachindex(sol)),
433+
map(i -> _smesolve_generate_state.(sol[:, i].u, Ref(dims), [ens_prob.states_type]), eachindex(sol)),
426434
dims = 1,
427435
)
428436

0 commit comments

Comments
 (0)