Hi!
There are two types of finite-temperature purification codes: MPO purification and MPS purification. I have four questions regarding these two codes. What I want to calculate is the dynamical structure factor of the Heisenberg model at finite temperature, as shown in the photo below:
For MPS purification: Finite temperature example codes by emstoudenmire · Pull Request #891 · ITensor/ITensors.jl
- The template code uses quantum number conservation to construct the initial state. But how should we establish the initial state for models without quantum number conservation, such as the XXZ model?
- After performing imaginary time evolution, we need to normalize the MPS. When subsequently calculating the dynamical structure factor, do we need to normalize the MPS every time after we apply Sz operators or other single operators?
In the METTS algorithm, after applying the imaginary time evolution operator to obtain the METTS, I did not perform normalization when acting with other operators. I wonder if MPS purification need to normalize after apply operator?
For MPO purification: ITensorMPS.jl/examples/finite_temperature/purification.jl at main · ITensor/ITensorMPS.jl
-
Similar to MPS purification, after imaginary time evolution, should we normalize rho after performing any operations? What normalization method should be used for rho?
For example,Szi = op(s, "Sz", i); rho = apply(Szi,rho;cutoff); normalize!(rho)
orSzi = op(s, "Sz", i); rho = apply(Szi,rho;cutoff); rho = rho / tr(rho)
orSzi = op(s, "Sz", i); rho = apply(Szi,rho;cutoff)
? -
When calculating the dynamical structure factor using MPO purification, I need to perform real-time evolution on the MPO. How should this be done? I saw an answer( Related to making a trotter gate and finding the GS - ITensor Julia Questions - ITensor Discourse) mentioning that
apply_dag
might be required. Could you clarify this step?
I would really appreciate any suggestion.