3.2. tenes_std の使用方法

tenes_std は与えられたハミルトニアンから虚時間刻み \(\tau\) の虚時間発展演算子 \(\exp\left(-\tau \mathcal{H}_{ij}\right)\) を導出し、 tenes の入力ファイルを生成するツールです。

$ tenes_std std.toml [std_2.toml ...]
  • 引数としてファイルを取ります
    • 複数の入力ファイルからひとつの出力ファイルを生成可能です

    • 同じ名前のパラメータを複数の入力で指定した場合はエラー終了します

    • [[observable.onesite]] などの複数指定できるセクションについては同時に指定可能です
      • 後ろのファイルの内容が前のファイルの内容に追記されます

  • tenes の入力ファイルを出力します

  • コマンドラインオプションは以下の通りです
    • --help
      • ヘルプメッセージの表示

    • --version
      • バージョン番号の表示

    • --output=filename
      • 出力するファイルの名前 filename を指定します

      • デフォルトは input.toml

      • 入力ファイル名と同じファイル名にすることはできません

入力ファイルは tenes_simple を用いて生成できます。 さらに、入力ファイルを編集することで、定義されていない模型・格子での計算が行なえます。 入力ファイルの詳細は tenes_std の入力ファイル を参照してください。 以下、正方格子上で定義されたスピン1/2のハイゼンベルグ模型の入力ファイル例です。

[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