@@ -8,20 +8,19 @@ function _reduce_dims(
88 sel,
99 reduce,
1010) where {T,N,DT<: Integer }
11- rd = dims
12- nd = length (rd)
13- rd_new = zero (rd)
14- rd_new[sel] .= reduce
15- @. rd_new = rd - rd_new
11+ nd = length (dims)
12+ dims_new = zero (dims)
13+ dims_new[sel] .= reduce
14+ @. dims_new = dims - dims_new
1615
1716 if nd == 1
18- ρmat = similar (QO, rd_new [1 ], rd_new [1 ])
19- copyto! (ρmat, view (QO, 1 : rd_new [1 ], 1 : rd_new [1 ]))
17+ ρmat = similar (QO, dims_new [1 ], dims_new [1 ])
18+ copyto! (ρmat, view (QO, 1 : dims_new [1 ], 1 : dims_new [1 ]))
2019 else
21- ρmat = reshape (QO, reverse! ( repeat (rd, 2 ))... )
22- ρmat2 = similar (QO, reverse! ( repeat (rd_new, 2 ))... )
23- copyto! (ρmat2, view (ρmat, reverse! (repeat ([1 : n for n in rd_new ], 2 ))... ))
24- ρmat = reshape (ρmat2, prod (rd_new ), prod (rd_new ))
20+ ρmat = reshape (QO, reverse ( vcat (dims, dims ))... )
21+ ρmat2 = similar (QO, reverse ( vcat (dims_new, dims_new ))... )
22+ copyto! (ρmat2, view (ρmat, reverse! (repeat ([1 : n for n in dims_new ], 2 ))... ))
23+ ρmat = reshape (ρmat2, prod (dims_new ), prod (dims_new ))
2524 end
2625
2726 return ρmat
@@ -33,26 +32,25 @@ function _increase_dims(
3332 sel,
3433 increase,
3534) where {T,N,DT<: Integer }
36- rd = dims
37- nd = length (rd)
38- rd_new = MVector (zero (rd)) # Mutable SVector
39- rd_new[sel] .= increase
40- @. rd_new = rd + rd_new
35+ nd = length (dims)
36+ dims_new = MVector (zero (dims)) # Mutable SVector
37+ dims_new[sel] .= increase
38+ @. dims_new = dims + dims_new
4139
4240 if nd == 1
43- ρmat = similar (QO, rd_new [1 ], rd_new [1 ])
44- fill! (selectdim (ρmat, 1 , rd [1 ]+ 1 : rd_new [1 ]), 0 )
45- fill! (selectdim (ρmat, 2 , rd [1 ]+ 1 : rd_new [1 ]), 0 )
46- copyto! (view (ρmat, 1 : rd [1 ], 1 : rd [1 ]), QO)
41+ ρmat = similar (QO, dims_new [1 ], dims_new [1 ])
42+ fill! (selectdim (ρmat, 1 , dims [1 ]+ 1 : dims_new [1 ]), 0 )
43+ fill! (selectdim (ρmat, 2 , dims [1 ]+ 1 : dims_new [1 ]), 0 )
44+ copyto! (view (ρmat, 1 : dims [1 ], 1 : dims [1 ]), QO)
4745 else
48- ρmat2 = similar (QO, reverse! ( repeat (rd_new, 2 ))... )
49- ρmat = reshape (QO, reverse! ( repeat (rd, 2 ))... )
46+ ρmat2 = similar (QO, reverse ( vcat (dims_new, dims_new ))... )
47+ ρmat = reshape (QO, reverse ( vcat (dims, dims ))... )
5048 for i in eachindex (sel)
51- fill! (selectdim (ρmat2, nd - sel[i] + 1 , rd [sel[i]]+ 1 : rd_new [sel[i]]), 0 )
52- fill! (selectdim (ρmat2, 2 * nd - sel[i] + 1 , rd [sel[i]]+ 1 : rd_new [sel[i]]), 0 )
49+ fill! (selectdim (ρmat2, nd - sel[i] + 1 , dims [sel[i]]+ 1 : dims_new [sel[i]]), 0 )
50+ fill! (selectdim (ρmat2, 2 * nd - sel[i] + 1 , dims [sel[i]]+ 1 : dims_new [sel[i]]), 0 )
5351 end
54- copyto! (view (ρmat2, reverse! (repeat ([1 : n for n in rd ], 2 ))... ), ρmat)
55- ρmat = reshape (ρmat2, prod (rd_new ), prod (rd_new ))
52+ copyto! (view (ρmat2, reverse! (repeat ([1 : n for n in dims ], 2 ))... ), ρmat)
53+ ρmat = reshape (ρmat2, prod (dims_new ), prod (dims_new ))
5654 end
5755
5856 return ρmat
@@ -131,7 +129,9 @@ function _DFDIncreaseReduceAffect!(integrator)
131129
132130 resize! (integrator, size (L, 1 ))
133131 copyto! (integrator. u, mat2vec (ρt))
134- return integrator. p = merge (internal_params, (L = L, e_ops = e_ops2, dfd_ρt_cache = similar (integrator. u)))
132+ integrator. p = merge (internal_params, (L = L, e_ops = e_ops2, dfd_ρt_cache = similar (integrator. u)))
133+
134+ return nothing
135135end
136136
137137function dfd_mesolveProblem (
@@ -241,6 +241,7 @@ function dfd_mesolve(
241241 ρt = map (
242242 i -> QuantumObject (
243243 vec2mat (sol. u[i]),
244+ type = Operator,
244245 dims = sol. prob. p. dim_list_evo[searchsortedlast (sol. prob. p. dim_list_evo_times, sol. t[i])],
245246 ),
246247 eachindex (sol. t),
0 commit comments