.. highlight:: none 横磁場イジング模型 ---------------------------- ここでは正方格子上の横磁場イジング模型に対して、横磁場を変化させた場合の計算例について紹介します。 ハミルトニアンは .. math:: \begin{aligned} H = J^z \sum_{\langle i,j \rangle} {S}_i^{z} {S}_j^{z} - h^x \sum_i S_i^x \end{aligned} です。 大きさ1/2のスピン演算子を用いて定義しており、パウリ演算子を直接用いたモデルと係数が異なることに注意してください。 入力ファイルの変数 ``hx`` を用いることで横磁場 :math:`h^x` の大きさを調整することが可能です。例えば、横磁場が0の場合には、 .. literalinclude:: ../../../../sample/01_transverse_field_ising/simple.toml とします(``Jz = -1.0`` なので、 ``hx=0`` では強磁性状態になります)。入力ファイルを ``simple.toml`` とした場合、 .. code:: bash $ tenes_simple simple.toml $ tenes_std std.toml $ tenes input.toml を実行することで計算が開始されます。 (あらかじめ TeNeS をインストールしたのち、環境変数 PATH を適切に設定してください。) 計算を実行すると、 .. code:: bash Number of Processes: 1 Number of Threads / Process: 1 Tensor type: real Start simple update 10% [100/1000] done 20% [200/1000] done 30% [300/1000] done 40% [400/1000] done 50% [500/1000] done 60% [600/1000] done 70% [700/1000] done 80% [800/1000] done 90% [900/1000] done 100% [1000/1000] done Start calculating observables Start updating environment Start calculating onesite operators Save onesite observables to output_0/onesite_obs.dat Start calculating twosite operators Save twosite observables to output_0/twosite_obs.dat Save observable densities to output_0/density.dat Save elapsed times to output_0/time.dat Onesite observables per site: Sz = 0.5 0 Sx = -1.28526262482e-13 0 Twosite observables per site: hamiltonian = -0.5 0 SzSz = 0.5 0 SxSx = -1.7374919982e-18 0 SySy = 1.73749202733e-18 0 Wall times [sec.]: simple update = 3.545813509 full update = 0 environmnent = 0.123170523 observable = 0.048149856 Done. のように計算が実行されます。 最初に並列化の情報およびテンソルの実虚が表示されます。 次に計算プロセスの実行状況が表示されます。 計算終了後、 1サイト演算子 ``Sz``, ``Sx`` およびハミルトニアン ``hamiltonian`` , 最近接相関 ``SzSz``, ``SxSx``, ``SySy`` のサイトあたりの期待値が出力されます。 最後にフェーズごとの計算時間が出力されます(単位は秒)。 計算終了後は ``output`` ディレクトリに ``density.dat, parameters.dat, time.dat, onesite_obs.dat, twosite_obs.dat`` がそれぞれ出力されます。各出力ファイルの詳細は、 :ref:`sec-output-format` をご覧ください。 例えば ```` の値は、 ``onesite_obs.dat`` から読み取ることが可能です。 ``hx`` をパラメータとして0.2刻みで0-3.0まで振ったときの結果を下図に表示します。 なお、サンプルスクリプトの例として、 ``sample/01_transverse_field_ising`` フォルダ内に ``tutorial_example.py`` , ``tutorial_read.py`` があります。 - ``tutorial_example.py`` の中身 .. literalinclude:: ../../../../sample/01_transverse_field_ising/tutorial_example.py - ``tutorial_read.py`` の中身 .. literalinclude:: ../../../../sample/01_transverse_field_ising/tutorial_read.py あらかじめ ``tenes`` などにパスを通した上で .. code:: $ python tutorial_example.py として実行できます(MacBook2017, 1.4 GHz Intel Core i7で数分程度で計算が全て終了します)。 得られた結果は .. code:: $ python tutorial_read.py とすることで集計でき、 ``hx``, エネルギー、 ```` 、 ```` が出力されます。 .. figure:: ../../img/tutorial_1_Sz_vs_G.* :name: fig_transverse :width: 400px :align: center ```` , ```` の ``hx`` 依存性 :numref:`fig_transverse` から ``hx`` が大きくなるにつれ、 ```` が ``0.5`` から徐々に小さくなり最終的には0になる一方、 ```` は ``0`` から大きくなり最終的には ``0.5`` になることが分かります。