This repository provides the source code to implement the DMRG-S algorithm proposed in 1, which accurately extracts quantum many-body scarred eigenstates (a small fraction of non-thermal excited eigenstates of non-integrable Hamiltomians). The DMRG-S algorithm can access system sizes far beyond the scope of exact diagonalization and assist analytical studies in discovering exact MPS representations of new scars for generic Hamiltonians.
The DMRG-S algorithm is implemented based on the ITensor library 2 in Julia programming language. The environment setup requires the installation of the ITensor.jl
package (with version
projmpo.jl
abstractprojmpo.jl
dmrgs.jl
projmpo.jl
and abstractprojmpo.jl
include some changes to the original files in the folder "src/mps/" of the ITensors pakage, which are listed below:
-
projmpo.jl
includes “product_label” in the struct ProjMPO to add another mode for theproduct
function inabstractprojmpo.jl
; -
abstractprojmpo.jl
includes some new methods to contract local tensors from MPO$(H-\xi)^2$ and MPS$|\psi_t\rangle$ in order to obtain$\mathcal{A_t}^{[i,i+1]}$ and$\tilde{\psi_t}^{[i,i+1]}$ 1. In addition, the original functionproduct
is added with another mode to implement the operation for the matrix$\mathcal{A}_{t,\text{eff}}^{[i,i+1]}$ mutiplying a vector;
dmrgs.jl
contains the main function of DMRG-S and SIMPS method with two-site optimization.
- Replace the original files
projmpo.jl
andabstractprojmpo.jl
in the foldersrc/mps/
of the ITensors pakage (which is typically located in.julia/packages/ITensors
) with our revised version. - Add the file
dmrgs.jl
into the foldersrc/mps/
. Then add a lineinclude("mps/dmrgs.jl")
in the filesrc/ITensors.jl
of the ITensors pakage. - Add the methods
dmrgs
andsimps
in the filesrc/exports.jl
of the ITensors pakage. - Using
julia PXP_dmrgs.jl
in the terminal to run the code.
where PXP_dmrgs.jl
include several adjustable parameters:
-
initial_energy
for the initial setting of$\xi_0$ -
psi0
for the initial setting of$|\psi_0\rangle$ -
N
is the system size -
maxD
sets the maximum bond dimension -
minD
sets the minimum bond dimension to start with -
var_thre
sets threshold for the variance to update the$\xi_t$
The output files are stored in the fold data
in the form of .h5
to store the MPSs during the optimization.