@@ -40,17 +40,21 @@ function _spost(B::AbstractSciMLOperator, Id::AbstractMatrix)
4040end
4141
4242# # intrinsic liouvillian
43- _liouvillian (H:: MT , Id:: AbstractMatrix ) where {MT<: Union{AbstractMatrix,AbstractSciMLOperator} } =
44- - 1im * (_spre (H, Id) - _spost (H' , Id))
43+ function _liouvillian (H:: MT , Id:: AbstractMatrix ) where {MT<: Union{AbstractMatrix,AbstractSciMLOperator} }
44+ CType = _complex_float_type (H)
45+ CType (- 1.0im ) * _spre (H, Id) + CType (1.0im ) * _spost (H' , Id)
46+ end
4547_liouvillian (H:: MatrixOperator , Id:: AbstractMatrix ) = MatrixOperator (_liouvillian (H. A, Id))
46- _liouvillian (H:: ScaledOperator , Id:: AbstractMatrix ) =
47- - 1im * (ScaledOperator (H. λ, _spre (H. L, Id)) - ScaledOperator (conj (H. λ), _spost (H. L' , Id)))
48+ function _liouvillian (H:: ScaledOperator , Id:: AbstractMatrix )
49+ CType = _complex_float_type (H)
50+ CType (- 1.0im ) * ScaledOperator (H. λ, _spre (H. L, Id)) + CType (1.0im ) * ScaledOperator (conj (H. λ), _spost (H. L' , Id))
51+ end
4852_liouvillian (H:: AddedOperator , Id:: AbstractMatrix ) = AddedOperator (map (op -> _liouvillian (op, Id), H. ops))
4953
5054# intrinsic lindblad_dissipator
5155function _lindblad_dissipator (O:: MT , Id:: AbstractMatrix ) where {MT<: Union{AbstractMatrix,AbstractSciMLOperator} }
5256 Od_O = O' * O
53- return _sprepost (O, O' ) - (_spre (Od_O, Id) + _spost (Od_O, Id)) / 2
57+ return _sprepost (O, O' ) + _complex_float_type (H)( - 0.5 + 0.0im ) * (_spre (Od_O, Id) + _spost (Od_O, Id))
5458end
5559function _lindblad_dissipator (O:: MatrixOperator , Id:: AbstractMatrix )
5660 _O = O. A
0 commit comments