3.2. Usage of tenes_stdΒΆ

tenes_std is a tool to calculate imaginary time evolution operators \(\exp \left( -\tau \mathcal{H}_{ij} \right)\) from a given Hamiltonian \(\mathcal{H}\) and an imaginary time step \(\tau\), and to generate an input file for tenes.

$ tenes_std std.toml
  • Takes input files as arguments
    • Multiple input files can be specified

    • When parameters are duplicated, tenes_std stops with an error

    • Sections that can be specified multiple times, such as [[observable.onesite]], can be specified in multiple input files simultaneously
      • In this case, the sections in the latter input file are appended to those in the former input file

  • Output an input file for tenes

  • Command line options are as follows
    • --help
      • Show help message

    • --version
      • Show version number

    • --output=filename
      • Specify the output file name filename

      • Default is input.toml

      • File name cannot be the same as the input file name

By making and editing input files, users can simulate on other models and lattices than predefined ones. See Input file for tenes_std for details of the input file. Below, a sample file for the S=1/2 Heisenberg model on the square lattice is shown.

[parameter]
[parameter.general]
is_real = true   # limit tensors as real-valued ones
[parameter.simple_update]
num_step = 1000  # number of steps
tau = 0.01       # imaginary time step
[parameter.full_update]
num_step = 0     # number of steps
tau = 0.01       # imaginary time step
[parameter.ctm]
dimension = 9    # bond dimension

[tensor]
type = "square lattice"
L_sub = [2, 2]   # unitcell size
skew = 0         # boundary condition

# tensors in unitcell
[[tensor.unitcell]]
index = [0, 3]   # index of tensors
physical_dim = 2 # physical bond dimension
virtual_dim = [3, 3, 3, 3]
                 # virtual bond dimension
noise = 0.01     # noise in initial tensor
initial_state = [1.0, 0.0]
                 # initial state

[[tensor.unitcell]]
index = [1, 2]
physical_dim = 2
virtual_dim = [3, 3, 3, 3]
noise = 0.01
initial_state = [0.0, 1.0]


# (bond) hamiltonian
[[hamiltonian]]
dim = [2, 2]    # physical bond dimensions
bonds = """     # bond information
0 1 0           # first: index of one site
1 1 0           # second: x coord of the other
2 1 0           # third:  y coord of the other
3 1 0
0 0 1
1 0 1
2 0 1
3 0 1
"""
elements = """     # nonzero elements of tensor
0 0 0 0 0.25 0.0   # first:  initial state of one site
1 0 1 0 -0.25 0.0  # second: initial state of the other
0 1 1 0 0.5 0.0    # third:  final state of one site
1 0 0 1 0.5 0.0    # fourth: final state of the other
0 1 0 1 -0.25 0.0  # fifth:  real part
1 1 1 1 0.25 0.0   # sixth:  imag part
"""

# observables
[observable]
[[observable.onesite]]
name = "Sz"        # name
group = 0          # index
sites = []         # sites to be acted
dim = 2            # dimension
elements = """     # nonzero elements
0 0 0.5 0.0
1 1 -0.5 0.0
"""

[[observable.twosite]]
name = "hamiltonian"
group = 0
dim = [2, 2]
bonds = """
0 1 0
1 1 0
2 1 0
3 1 0
0 0 1
1 0 1
2 0 1
3 0 1
"""
elements = """
0 0 0 0 0.25 0.0
1 0 1 0 -0.25 0.0
0 1 1 0 0.5 0.0
1 0 0 1 0.5 0.0
0 1 0 1 -0.25 0.0
1 1 1 1 0.25 0.0
"""

[[observable.twosite]]
name = "SzSz"
group = 1
dim = [2, 2]
bonds = """
0 1 0
1 1 0
2 1 0
3 1 0
0 0 1
1 0 1
2 0 1
3 0 1
"""
ops = [0, 0]  # index of onesite operators