Itebd
simple itebd based on ITensor
Install / Use
/learn @hoihui/ItebdREADME
iTEBD
A single header file for itebd calculations based on the ITensor library.
Installation and Linking
Refer to ITensor's instruction for using iTensor. You just need to add
#include "itebd.h"
and make sure the header file is within path.
Examples
I have created a few examples to reproduce figures of some arXiv papers that utilized iTEBD:
-
arXiv:cond-mat/0605597 (figs. 5 and 6)
-
arXiv:0907.3206 (fig.3b)
-
arXiv:1302.4460 (fig.2a)
-
arXiv:1503.02010 (fig.1)
-
arXiv:1604.03571 (fig.2a)
Please make the corresponding file's name you want to compile. For example, make 1503.02010 generates executable 1503.02010 that produces figure 1 of arXiv:1503.02010.
By default, it is now set to reproduce figures 5 and 6 of Vidal's original paper.
Basic Usage
Henceforth I assume we have using namespace itensor;
Instantiation
itebd<IndexType,z> sys(ampo,QNA,QNB,Chi0);
-
IndexTypecould beIndexorIQIndex, depending on whether you want to use symmetries. -
zoptional and defaults to 2. The coordination number. Could be useful for exotic system with >2 neighbors e.g. arXiv:0712.1806 (I have not tried). -
ampois a two-site AutoMPO object of ITensor. Hamiltonian is specified byampo. The sites must be of typeIQIndex. -
QNAandQNBare optional and defaults to 1. The initial quantum numbers of the two sites (site A and site B). Physical meanings of these numbers are determined by the sites which are IQIndex . -
Chi0is optional and defaults to 1. The initial bond dimension of each set of quantum numbers.
Propagation (step)
double itebd::step(std::complex<double> dt, size_t steps = 1, double thres = 1E-10, int maxm = 0);
-
dtis the timestep on real axis. When it is real, it propagates in real time. -
stepsnumber of steps -
thresis theCutoffvalue used for SVD. -
maxmis theMaxmvalue used for SVD. -
returns: Energy estimated based on the log of the expection value of the evolution operator
double itebd::step_imag(std::complex<double> dt, size_t steps = 1, double thres = 1E-10, int maxm = 0);
- identical to above but in the imaginary axis.
Local Measurements
std::complex<double> itebd::measure(const T &op)
-
opis a two-neighboring sites operator with indices the same as the site used to constructampo. -
returns: Expectation value of the operator at the current state
Long-Range two-opeartor correlation measurements
std::vector<std::complex<double>> itebd::measure(const T &op1A, const T &op2, const std::vector<int> &rv);
-
op1Ais the operator at the origin and must have the same Index as the first site in the sites used to contructampo -
opt2is the opeartor at the second site. Can have either one of the site indices. -
rvis the list of integer distances between sites 1 and 2 to compute <opt1A*opt2> -
returns: a vector of complex values of <opt1A*opt2>
Helpful member variables / functions
-
.tv(vector of doubles): the times (in absolute values) traversed by the system since it starts -
.Sv(vector of doubles): the entanglement entropies the system had for each time in.tv -
.bonddim(int): current bond dimension -
.GA,.GB,.L[0],.L[1]: the Gammas and Lambdas of the state as used in Vidal's paper -
.resetTime()(void): resets both.tvand.Sv -
.setH(const AutoMPO &o)(void): sets a new Hamiltonian while keeping the current states unchanged. -
.backup()and.restore()(void): backup and restore the state -
.randomize()(void): randomize all the tensors (e.g. before imaginary time propagation)
Higher Dimensions?
By instantiating with z=4 you can try to use this for 2-dimensional systems where the "environment" is never computed. Some call this "simplified update" of iPEPS and saw good results if the environment is at least computed for measurements. I have not implemented this yet so it should never be used for serious work in 2D. cond-mat.0605597 implements simplified update without calculation of environment.
Related Skills
node-connect
348.5kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
109.1kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
348.5kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
348.5kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
