Hi,
I am trying to perform the real-time evolution of a Hamiltonian of the form H = i [H1, H2]
where H1
,H2
are real Hermitian operators, i
is the imaginary unit, and the square brackets are the commutator. H
is Hermitian but has explicit imaginary units around. I compute H
via
H = contract(prime(H1),H2) - contract(prime(H2),H1)
H = 1im * replaceprime(temp, 2 => 1)
Unfortunately, upon feeding the TDVP function I get the following error message:
ERROR: LoadError: InexactError: Float64(-0.24083556717441038 + 8.817865484998814e-13im)
Stacktrace:
[1] Real
@ ./complex.jl:44 [inlined]
[2] convert
@ ./number.jl:7 [inlined]
[3] setindex!(::Matrix{Float64}, ::ComplexF64, ::Int64, ::Int64)
@ Base ./array.jl:971
[4] applyexp(H::ProjMPO, tau::Float64, x0::ITensor; kwargs::Base.Pairs{Symbol, Real, NTuple{4, Symbol}, NamedTuple{(:tol, :maxiter, :outputlevel, :current_time), Tuple{Float64, Int64, Int64, Float64}}})
@ ITensorTDVP ~/.julia/packages/ITensorTDVP/c3OYY/src/applyexp.jl:54
[5] applyexp
@ ~/.julia/packages/ITensorTDVP/c3OYY/src/applyexp.jl:24 [inlined]
[6] (::ITensorTDVP.var"#solver#38"{ITensorTDVP.var"#solver#37#39"{Base.Pairs{Symbol, Real, NTuple{7, Symbol}, NamedTuple{(:time_step, :nsweeps, :reverse_step, :normalize, :maxdim, :cutoff, :outputlevel), Tuple{Float64, Int64, Bool, Bool, Int64, Float64, Int64}}}}})(H::ProjMPO, t::Float64, psi0::ITensor; kws::Base.Pairs{Symbol, Real, Tuple{Symbol, Symbol}, NamedTuple{(:current_time, :outputlevel), Tuple{Float64, Int64}}})
@ ITensorTDVP ~/.julia/packages/ITensorTDVP/c3OYY/src/tdvp.jl:27
[7] solver
@ ~/.julia/packages/ITensorTDVP/c3OYY/src/tdvp.jl:19 [inlined]
[8] tdvp_site_update!(nsite_val::Val{2}, reverse_step_val::Val{false}, solver::ITensorTDVP.var"#solver#38"{ITensorTDVP.var"#solver#37#39"{Base.Pairs{Symbol, Real, NTuple{7, Symbol}, NamedTuple{(:time_step, :nsweeps, :reverse_step, :normalize, :maxdim, :cutoff, :outputlevel), Tuple{Float64, Int64, Bool, Bool, Int64, Float64, Int64}}}}}, PH::ProjMPO, psi::MPS, b::Int64; current_time::Float64, outputlevel::Int64, time_step::Float64, normalize::Bool, direction::Base.Order.ForwardOrdering, noise::Float64, which_decomp::Nothing, svd_alg::String, cutoff::Float64, maxdim::Int64, mindim::Int64, maxtruncerr::Float64)
@ ITensorTDVP ~/.julia/packages/ITensorTDVP/c3OYY/src/tdvp_step.jl:304
[9] tdvp_site_update!(solver::ITensorTDVP.var"#solver#38"{ITensorTDVP.var"#solver#37#39"{Base.Pairs{Symbol, Real, NTuple{7, Symbol}, NamedTuple{(:time_step, :nsweeps, :reverse_step, :normalize, :maxdim, :cutoff, :outputlevel), Tuple{Float64, Int64, Bool, Bool, Int64, Float64, Int64}}}}}, PH::ProjMPO, psi::MPS, b::Int64; nsite::Int64, reverse_step::Bool, current_time::Float64, outputlevel::Int64, time_step::Float64, normalize::Bool, direction::Base.Order.ForwardOrdering, noise::Float64, which_decomp::Nothing, svd_alg::String, cutoff::Float64, maxdim::Int64, mindim::Int64, maxtruncerr::Float64)
@ ITensorTDVP ~/.julia/packages/ITensorTDVP/c3OYY/src/tdvp_step.jl:157
[10] tdvp_sweep(direction::Base.Order.ForwardOrdering, solver::Function, PH::ProjMPO, time_step::Float64, psi::MPS; kwargs::Base.Pairs{Symbol, Real, NTuple{11, Symbol}, NamedTuple{(:current_time, :time_step, :nsweeps, :reverse_step, :normalize, :maxdim, :cutoff, :outputlevel, :sweep, :mindim, :noise), Tuple{Float64, Float64, Int64, Bool, Bool, Int64, Float64, Int64, Int64, Int64, Float64}}})
@ ITensorTDVP ~/.julia/packages/ITensorTDVP/c3OYY/src/tdvp_step.jl:80
[11] tdvp_step(order::ITensorTDVP.TDVPOrder{2, Base.Order.ForwardOrdering()}, solver::Function, PH::ProjMPO, time_step::Float64, psi::MPS; current_time::Float64, kwargs::Base.Pairs{Symbol, Real, NTuple{10, Symbol}, NamedTuple{(:time_step, :nsweeps, :reverse_step, :normalize, :maxdim, :cutoff, :outputlevel, :sweep, :mindim, :noise), Tuple{Float64, Int64, Bool, Bool, Int64, Float64, Int64, Int64, Int64, Float64}}})
@ ITensorTDVP ~/.julia/packages/ITensorTDVP/c3OYY/src/tdvp_step.jl:9
[12] macro expansion
@ ~/.julia/packages/ITensorTDVP/c3OYY/src/tdvp_generic.jl:84 [inlined]
[13] macro expansion
@ ./timing.jl:393 [inlined]
[14] tdvp(solver::Function, PH::ProjMPO, t::Float64, psi0::MPS; kwargs::Base.Pairs{Symbol, Real, NTuple{7, Symbol}, NamedTuple{(:time_step, :nsweeps, :reverse_step, :normalize, :maxdim, :cutoff, :outputlevel), Tuple{Float64, Int64, Bool, Bool, Int64, Float64, Int64}}})
@ ITensorTDVP ~/.julia/packages/ITensorTDVP/c3OYY/src/tdvp_generic.jl:83
[15] tdvp
@ ~/.julia/packages/ITensorTDVP/c3OYY/src/tdvp_generic.jl:45 [inlined]
[16] tdvp(solver::Function, H::MPO, t::Float64, psi0::MPS; kwargs::Base.Pairs{Symbol, Real, NTuple{7, Symbol}, NamedTuple{(:time_step, :nsweeps, :reverse_step, :normalize, :maxdim, :cutoff, :outputlevel), Tuple{Float64, Int64, Bool, Bool, Int64, Float64, Int64}}})
@ ITensorTDVP ~/.julia/packages/ITensorTDVP/c3OYY/src/tdvp_generic.jl:150
[17] tdvp
@ ~/.julia/packages/ITensorTDVP/c3OYY/src/tdvp_generic.jl:143 [inlined]
[18] #tdvp#41
@ ~/.julia/packages/ITensorTDVP/c3OYY/src/tdvp.jl:47 [inlined]
[19] top-level scope
Is there a way around?
Thanks,
Federico