|
1 | 1 | export smesolveProblem, smesolveEnsembleProblem, smesolve |
2 | 2 |
|
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 |
5 | 12 |
|
6 | 13 | function _smesolve_update_coeff(u, p, t, op_vec) |
7 | 14 | return 2 * real(dot(op_vec, u)) #this is Tr[Sn * ρ + ρ * Sn'] |
@@ -146,7 +153,7 @@ function smesolveProblem( |
146 | 153 | kwargs4..., |
147 | 154 | ) |
148 | 155 |
|
149 | | - return TimeEvolutionProblem(prob, tlist,StateOpType(), dims) |
| 156 | + return TimeEvolutionProblem(prob, tlist,StateOpType(), dims, ()) |
150 | 157 | end |
151 | 158 |
|
152 | 159 | @doc raw""" |
@@ -274,8 +281,9 @@ function smesolveEnsembleProblem( |
274 | 281 | ensemble_prob = TimeEvolutionProblem( |
275 | 282 | EnsembleProblem(prob_sme, prob_func = _prob_func, output_func = _output_func[1], safetycopy = true), |
276 | 283 | prob_sme.times, |
| 284 | + StateOpType(), |
277 | 285 | 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]), |
279 | 287 | ) |
280 | 288 |
|
281 | 289 | return ensemble_prob |
@@ -422,7 +430,7 @@ function smesolve( |
422 | 430 |
|
423 | 431 | # stack to transform Vector{Vector{QuantumObject}} -> Matrix{QuantumObject} |
424 | 432 | 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)), |
426 | 434 | dims = 1, |
427 | 435 | ) |
428 | 436 |
|
|
0 commit comments