Hi Miles,
Thanks for the information. I’m checking it at the moment.
In meantime, I worked on the previous problem a bit more and found several errors. RIght now I have a question about the ProjMPO and ProjMPS class.
The ProjMPO struct is well documented, and it states that it helps with the site-by-site scanning process
o--o--o- -o--o--o--o--o--o <psi|
| | | | | | | | | | |
o--o--o--o--o--o--o--o--o--o--o H
| | | | | | | | | | |
o--o--o- -o--o--o--o--o--o |psi>
Am I correct in assuming that ProjMPS does something similar:
o--o--o- -o--o--o--o--o--o <psi|
| | | | | | | | | | |
o--o--o--o--o--o--o--o--o--o--o M
Where M is the ProjMPS object?
Currently, by reading the source code, eigsolve(PH::ProjMPO, phi::ITensor, ...)
clearly works, but when I tried to evaluate something similar using linsolve( PH::ProjMPO, RHS::ProjMPS, phi::ITensor, ....)
It would give me errors
ERROR: LoadError: MethodError: no method matching iterate(::ProjMPS)
Closest candidates are:
iterate(::Union{LinRange, StepRangeLen}) at /Applications/Julia-1.7.app/Contents/Resources/julia/share/julia/base/range.jl:826
iterate(::Union{LinRange, StepRangeLen}, ::Integer) at /Applications/Julia-1.7.app/Contents/Resources/julia/share/julia/base/range.jl:826
iterate(::T) where T<:Union{Base.KeySet{<:Any, <:Dict}, Base.ValueIterator{<:Dict}} at /Applications/Julia-1.7.app/Contents/Resources/julia/share/julia/base/dict.jl:695
...
Stacktrace:
[1] dot(x::ProjMPS, y::ITensor)
@ LinearAlgebra /Applications/Julia-1.7.app/Contents/Resources/julia/share/julia/stdlib/v1.7/LinearAlgebra/src/generic.jl:877
[2] linsolve(operator::ProjMPO, b::ProjMPS, x₀::ITensor, alg::KrylovKit.GMRES{KrylovKit.ModifiedGramSchmidt2, Float64}, a₀::Float64, a₁::Int64)
@ KrylovKit ~/.julia/packages/KrylovKit/kWdb6/src/linsolve/gmres.jl:4
Or without the initial guess:
ERROR: LoadError: MethodError: no method matching *(::Float64, ::ProjMPS)
Closest candidates are:
*(::Any, ::Any, ::Any, ::Any...) at /Applications/Julia-1.7.app/Contents/Resources/julia/share/julia/base/operators.jl:655
*(::Union{Float16, Float32, Float64}, ::BigFloat) at /Applications/Julia-1.7.app/Contents/Resources/julia/share/julia/base/mpfr.jl:406
*(::Union{Real, Complex}, ::Union{Adjoint{var"#s859", var"#s8591"}, Transpose{var"#s859", var"#s8591"}} where {var"#s859"<:Union{Real, Complex}, var"#s8591"<:(AbstractVector)}, ::AbstractMatrix{<:Union{Real, Complex}}, ::AbstractMatrix{<:Union{Real, Complex}}) at /Applications/Julia-1.7.app/Contents/Resources/julia/share/julia/stdlib/v1.7/LinearAlgebra/src/matmul.jl:1172
...
Stacktrace:
[1] linsolve(f::ProjMPO, b::ProjMPS, a₀::Float64, a₁::Int64; kwargs::Base.Pairs{Symbol, Real, NTuple{4, Symbol}, NamedTuple{(:ishermitian, :tol, :krylovdim, :maxiter), Tuple{Bool, Float64, Int64, Int64}}})
I’m wondering if I’m missing something here and I have to define the operator behaviors with ProjMPS