Difference between revisions of "ALPS 2 Tutorials:TEBD-01 bhquench/ja"

From ALPS
Jump to: navigation, search
(Created page with "{{Languages|ALPS_2_Tutorials:TEBD-01_bhquench}} = ハードコア・ボゾン模型= <!--In this first tutorial we investigate the behavior of the hardcore boson model--> この…")
 
 
Line 2: Line 2:
  
 
= ハードコア・ボゾン模型=
 
= ハードコア・ボゾン模型=
<!--In this first tutorial we investigate the behavior of the hardcore boson model-->
 
 
このチュートリアルではハードコア・ボゾン模型の振る舞いについて学習します。
 
このチュートリアルではハードコア・ボゾン模型の振る舞いについて学習します。
  
 
<math> H=-t\sum_{i=1}^{L-1}(b_i^{\dagger}b_{i+1} +b_ib_{i+1}^{\dagger})+V\sum_{i=1}^{L-1}n_in_{i+1} </math>
 
<math> H=-t\sum_{i=1}^{L-1}(b_i^{\dagger}b_{i+1} +b_ib_{i+1}^{\dagger})+V\sum_{i=1}^{L-1}n_in_{i+1} </math>
<!--
 
as the parameter <math>V</math> is changed in time.  It is well known that for large <math>V/t</math> the ground state of the hardcore boson model at half filling is a charge-density wave (CDW) insulator while for small <math>V/t</math> the ground state is a superfluid (SF).  It is interesting to consider what happens to the system if we begin in one phase and then dynamically change, or "quench", one of the Hamiltonian parameters <math>t</math> or <math>V</math> such that we are in the other phase.  As a simple first foray into the rich physics of quenches, we will consider quenching from one phase to the other and then back into the original phase.  A particularly stringent criterion for adiabaticity of such a quench is how close the final state is to the initial state, i.e.-->
 
  
 
パラメータ <math>V</math>は時間によって変化します。half filling近傍でのハードコア・ボゾン模型の定常状態は大きな<math>V/t</math>で電荷密度波(CDW:charge-density wave)絶縁体、小さな<math>V/t</math>では、定常状態は超流動体(SF:superfluid)であることはよく知られています。系がある相から急激に別の相に変化するような状態、"クエンチ"、ハミルトニアンパラメーター<math>t</math>や<math>V</math>がこのような別の相になる場合、どのようなことが起きるのか?非常に面白い問題です。クエンチの最初の簡単な物理的アプローチとして、ある相から別の相へ、そして元の相に戻るクエンチを考えてみましょう。このようなクエンチの特に厳しい判定条件は、終状態がどれだけ初期状態に近いかです。例えば、
 
パラメータ <math>V</math>は時間によって変化します。half filling近傍でのハードコア・ボゾン模型の定常状態は大きな<math>V/t</math>で電荷密度波(CDW:charge-density wave)絶縁体、小さな<math>V/t</math>では、定常状態は超流動体(SF:superfluid)であることはよく知られています。系がある相から急激に別の相に変化するような状態、"クエンチ"、ハミルトニアンパラメーター<math>t</math>や<math>V</math>がこのような別の相になる場合、どのようなことが起きるのか?非常に面白い問題です。クエンチの最初の簡単な物理的アプローチとして、ある相から別の相へ、そして元の相に戻るクエンチを考えてみましょう。このようなクエンチの特に厳しい判定条件は、終状態がどれだけ初期状態に近いかです。例えば、
Line 13: Line 10:
 
<math> L(t; \gamma)\equiv |\langle\psi\left(t\right)|\psi\left(0\right)\rangle|^2 </math>
 
<math> L(t; \gamma)\equiv |\langle\psi\left(t\right)|\psi\left(0\right)\rangle|^2 </math>
  
<!--which we call the Loschmidt Echo.  Note that the <math> t</math> in this expression is the time and not the hopping parameter <math> t </math>.  The parameter <math> \gamma </math> is meant to convey that this quantity in general depends on the manner in which the system is quenched.-->
+
これはLoschmidtエコーと呼ばれます。この式にある<math> t</math>は時間を表しており、ホッピングパラメータ<math> t </math>ではありません。パラメータ <math> \gamma </math>は、系がクエンチされた状況に対応する数値です。ALPS TEBDのルーチンでのクエンチの一般的な構造は次のパラメータ化した値で与えられます。
これはLoschmidtエコーと呼ばれます。この式にある<math> t</math>は時間を表しており、ホッピングパラメータ<math> t </math>ではありません。パラメータ <math> \gamma </math>は、系がクエンチされた状況に対応する数値です。
 
 
 
<!--The general structure of a quench in the ALPS TEBD routines is given by the parameterization-->
 
ALPS TEBDのルーチンでのクエンチの一般的な構造は次のパラメータ化した値で与えられます。
 
  
 
<math>g(t)=g(t_i)+((t-t_i)/\tau)\,^p (g(t_f)-g(t_i))</math>
 
<math>g(t)=g(t_i)+((t-t_i)/\tau)\,^p (g(t_f)-g(t_i))</math>
  
<!--where <math> g</math> is some Hamiltonian parameter.  In the present case we will take <math> g</math> to be the interaction parameter <math> V</math>.  We will begin our system in the CDW regime with <math> V/t=10</math>, quench to the SF regime where <math> V/t=0</math>, and then quench back to the CDW regime with <math> V/t=10</math>.  In the three parts of this tutorial we will investigate a)the effects of the timescale <math> \tau</math> on the Loschmidt echo during a linear quench, b) the effects of "holding" the system in the SF phase for a time <math> \tau_{\mathrm{hold}}</math> before returning to the CDW phase, and c) the effects of changing the power <math> p</math> of the quench function.-->
 
 
<math> g</math>はハミルトニアンのパラメータです。このケースの場合、<math> g</math>を相互作用パラメータ<math> V</math>として取り扱います。CDW域として<math> V/t=10</math>で開始し、SF域(<math> V/t=0</math>)にクエンチし、また、<math> V/t=10</math>のCDW域に戻ります。このチュートリアルの3つのポイントは、a)線形クエンチでのLoschmidtエコーの時間スケール<math> \tau</math>の影響 b)CDW相に戻る前のSF相の時間<math> \tau_{\mathrm{hold}}</math>の"holding"の影響 c)クエンチ関数の力<math> p</math>の変化の影響を調査することです。
 
<math> g</math>はハミルトニアンのパラメータです。このケースの場合、<math> g</math>を相互作用パラメータ<math> V</math>として取り扱います。CDW域として<math> V/t=10</math>で開始し、SF域(<math> V/t=0</math>)にクエンチし、また、<math> V/t=10</math>のCDW域に戻ります。このチュートリアルの3つのポイントは、a)線形クエンチでのLoschmidtエコーの時間スケール<math> \tau</math>の影響 b)CDW相に戻る前のSF相の時間<math> \tau_{\mathrm{hold}}</math>の"holding"の影響 c)クエンチ関数の力<math> p</math>の変化の影響を調査することです。
 
  
 
==線形クエンチ==
 
==線形クエンチ==
<!--First, we will investigate the effects of the quench rate <math> \tau </math>  on the adiabaticity of a linear quench from the CDW to the SF phase and back.-->
 
 
最初に、CDWからSF相、そしてCDWに戻る線形クエンチの断熱性のクエンチ率<math> \tau </math>の影響を計算します。
 
最初に、CDWからSF相、そしてCDWに戻る線形クエンチの断熱性のクエンチ率<math> \tau </math>の影響を計算します。
  
 
===Pythonを用いた計算の実行===
 
===Pythonを用いた計算の実行===
<!--To set up and run the simulation in Python we use the script tutorial1a.py. The first parts of this script imports the required modules and then prepares the input files as a list of Python dictionaries:-->
 
 
Pythonスクリプト'''tutorial1a.py'''を参照してください。
 
Pythonスクリプト'''tutorial1a.py'''を参照してください。
  
Line 65: Line 54:
 
                 })
 
                 })
  
<!--Let's go through the TEBD-specific parameters in more detail (see [http://alps.comp-phys.org/mediawiki/index.php/Documentation:TEBD] for a list of all such parameters).  The parameter INITIAL_STATE is set to ground, which means that we begin from the ground state of our Hamiltonian with user-specified parameters.  The parameters t and V specify that the initial Hamiltonian parameters <math> t=1</math> and <math> V=10 </math> are used to find the ground state.  In order to find the ground state, TEBD performs evolution in  imaginary time.  We refer to this step as ITP, and so all parameters containing ITP deal with the ground state properties.  The vectors ITP_CHIS, ITP_DTS, and ITP_CONVS are the entanglement cutoff parameters, time steps, and convergence criteria for successive applications of imaginary time propagation.  These constitute the main convergence parameters for TEBD, and convergence should always be carefully checked in each parameter.  For now, don't worry too much about their actual values, we'll see how errors are controlled in the next set of tutorials.-->
 
 
TEBDに特有のパラメータの詳細をみていきます(こちらに[http://alps.comp-phys.org/mediawiki/index.php/Documentation:TEBD]全パラメータのリストがあります)。パラメータINITIAL_STATEは定常状態を定義します。ユーザが決めたパラメータで表現したハミルトニアンでの定常状態から計算を始めます。パラメータt,Vは初期ハミルトニアンパラメータ<math> t=1</math>、<math> V=10 </math>とします。定常状態をみつけるため、TEBDは虚数時間での展開をおこないます。このステップをITPとし、ITPを含むすべてのパラメータは定常状態の特性に対応します。ITP_CHIS,ITP_DTS,ITP_CONVSの各ベクターは虚時間伝播法の連続アプリケーション用のエンタングルメントカットオフパラメータ、タイムステップ、そして収束判定基準です。これらはTEBDの主な収束に関するパラメータ群です。そして、収束はこの各パラメータによって常にチェックされます。この収束に関するHOWTOを次に述べていきます。
 
TEBDに特有のパラメータの詳細をみていきます(こちらに[http://alps.comp-phys.org/mediawiki/index.php/Documentation:TEBD]全パラメータのリストがあります)。パラメータINITIAL_STATEは定常状態を定義します。ユーザが決めたパラメータで表現したハミルトニアンでの定常状態から計算を始めます。パラメータt,Vは初期ハミルトニアンパラメータ<math> t=1</math>、<math> V=10 </math>とします。定常状態をみつけるため、TEBDは虚数時間での展開をおこないます。このステップをITPとし、ITPを含むすべてのパラメータは定常状態の特性に対応します。ITP_CHIS,ITP_DTS,ITP_CONVSの各ベクターは虚時間伝播法の連続アプリケーション用のエンタングルメントカットオフパラメータ、タイムステップ、そして収束判定基準です。これらはTEBDの主な収束に関するパラメータ群です。そして、収束はこの各パラメータによって常にチェックされます。この収束に関するHOWTOを次に述べていきます。
  
<!--Now we turn to the real-time propagation parameters.  We wish to perform a series of two quenches.  First we want to quench the parameter <math> V </math> linearly in time from its initial value 10 to 0.  Comparing with the general form of a quench <math>g(t)=g(t_i)+((t-t_i)/\tau)\,^p (g(t_f)-g(t_i))</math> we see that this corresponds to <math>g=V </math>, <math>g(t_i)=10 </math>, <math>g(t_f)=0 </math>, <math>p=1 </math>, and <math> \tau </math> is the free parameter whose effects are to be investigated.  Looking at the parameter list, we see that the first elements of the vectors GS, GIS, GFS, and POWS correspond to <math>g </math>, <math>g(t_i) </math>, <math>g(t_f) </math>, and <math>p </math>, respectively.  The first element of the vector TAUS is looped over using the variable A, which means that we will perform a series of simulations with <math> \tau </math>=5, 10, 15, 25, and 50.  The second quench is essentially the reverse of the first, with <math>g=V </math>, <math>g(t_i)=0 </math>, <math>g(t_f)=10 </math>, <math>p=1 </math>, and  <math> \tau </math> the same as the first.  Comparing with the parameters list, we see that this corresponds to the second elements of the vectors GS, GIS, etc. as above.-->
 
 
実時間伝搬パラメータについて説明します。2種類のクエンチのシミュレーションをおこないますが、最初はパラメータ<math> V </math>が線形的に初期値10から0にクエンチする場合です。一般的なクエンチ<math>g(t)=g(t_i)+((t-t_i)/\tau)\,^p (g(t_f)-g(t_i))</math>と比較してください。<math>g=V </math>、<math>g(t_i)=10 </math>, <math>g(t_f)=0 </math>, <math>p=1 </math>, and <math> \tau </math>は効果の検証が必要なパラメータです。パラメータリストを見てください。最初の GS, GIS, GFS,POWSベクターの要素は<math>g </math>, <math>g(t_i) </math>, <math>g(t_f) </math>, <math>p </math>にそれぞれ対応します。ベクターTAUSの最初の要素は変数Aを用い、繰り返し指定します。これは、最初にAを定義した<math> \tau </math>=5, 10, 15, 25, 50に対応しています。2つめのクエンチは本質的に、最初の反対です。<math>g=V </math>, <math>g(t_i)=0 </math>, <math>g(t_f)=10 </math>, <math>p=1 </math>,  <math> \tau </math>は最初と同じです。パラメータリストを比較してください。上記のGS、GIS・・などの2番目の要素に対応しています。
 
実時間伝搬パラメータについて説明します。2種類のクエンチのシミュレーションをおこないますが、最初はパラメータ<math> V </math>が線形的に初期値10から0にクエンチする場合です。一般的なクエンチ<math>g(t)=g(t_i)+((t-t_i)/\tau)\,^p (g(t_f)-g(t_i))</math>と比較してください。<math>g=V </math>、<math>g(t_i)=10 </math>, <math>g(t_f)=0 </math>, <math>p=1 </math>, and <math> \tau </math>は効果の検証が必要なパラメータです。パラメータリストを見てください。最初の GS, GIS, GFS,POWSベクターの要素は<math>g </math>, <math>g(t_i) </math>, <math>g(t_f) </math>, <math>p </math>にそれぞれ対応します。ベクターTAUSの最初の要素は変数Aを用い、繰り返し指定します。これは、最初にAを定義した<math> \tau </math>=5, 10, 15, 25, 50に対応しています。2つめのクエンチは本質的に、最初の反対です。<math>g=V </math>, <math>g(t_i)=0 </math>, <math>g(t_f)=10 </math>, <math>p=1 </math>,  <math> \tau </math>は最初と同じです。パラメータリストを比較してください。上記のGS、GIS・・などの2番目の要素に対応しています。
  
<!--Time evolution is simulated by breaking the full propagator approximately into a series of operations which act only on two neighboring sites at a time.  The error in using this approximate propagator is second order in the "infinitesimal" timestep dt.  TEBD gives a protocol for updating the canonical form of our state after such a two-site operation has been applied.  The error in this procedure is controlled by CHI_LIMIT, which is directly related to the amount of spatial entanglement, and TRUNC_LIMIT, which is akin to the TRUNCATION_ERROR in the DMRG routines.  The parameter vector NUMSTEPS specifies how many timesteps are taken in performing each quench, which together with <math> \tau </math> implicitly defines the timestep dt.  The overall error is a nontrivial function of CHI_LIMIT, TRUNC_LIMIT, and NUMSTEPS which will be investigated in the next set of tutorials, so we won't worry about the choice of these much for now.  Finally, STEPSFORSTORE determines how many time steps are taken before observables are computed and stored and SIMID is an integer differentiating the simulations with different <math> \tau </math>.-->
 
 
隣り合った2つのサイトにだけ作用する演算をおこない、完全な伝搬関数を近似的に解く方法で時間発展シミュレーションをおこないます。この伝搬関数をもちいた誤差は微小なタイプステップdtの二次のオーダーになります。TEBDは、このような2サイトでの計算の後、状態の標準系への更新をおこなうプロトコルを与えます。この手順の誤差はCHI_LIMITで設定されます。そして、それは、空間エンタングルメント量とTRUNC_LIMITに直接関係があります。これらはDMRGルーチンのTRUNCATION_ERRORと同じです。パラメータNUMSTEPSは各クエンチでのタイムステップを定義します。それはタイムステップdtを定義する<math> \tau </math>も同時に決めることになります。全誤差はCHI_LIMIT, TRUNC_LIMIT, NUMSTEPSの関数で表され、無視できないレベルではあります。次のチュートリアルで適切なパラメータセットを調査し、これらの誤差が重大なレベルにならないように留意します。最後に、 STEPSFORSTOREは、観測値が計算され、ストアされる前に何回タイムステップが実行されるか決めます。SIMIDは異なる<math> \tau </math>をシミュレーションを区別している整数です。
 
隣り合った2つのサイトにだけ作用する演算をおこない、完全な伝搬関数を近似的に解く方法で時間発展シミュレーションをおこないます。この伝搬関数をもちいた誤差は微小なタイプステップdtの二次のオーダーになります。TEBDは、このような2サイトでの計算の後、状態の標準系への更新をおこなうプロトコルを与えます。この手順の誤差はCHI_LIMITで設定されます。そして、それは、空間エンタングルメント量とTRUNC_LIMITに直接関係があります。これらはDMRGルーチンのTRUNCATION_ERRORと同じです。パラメータNUMSTEPSは各クエンチでのタイムステップを定義します。それはタイムステップdtを定義する<math> \tau </math>も同時に決めることになります。全誤差はCHI_LIMIT, TRUNC_LIMIT, NUMSTEPSの関数で表され、無視できないレベルではあります。次のチュートリアルで適切なパラメータセットを調査し、これらの誤差が重大なレベルにならないように留意します。最後に、 STEPSFORSTOREは、観測値が計算され、ストアされる前に何回タイムステップが実行されるか決めます。SIMIDは異なる<math> \tau </math>をシミュレーションを区別している整数です。
  
<!--We now move on to the actual computation.  The lines:-->
 
 
では、実際に計算してみましょう。
 
では、実際に計算してみましょう。
  
Line 83: Line 68:
 
  res=pyalps.runTEBD(nmlnameList)
 
  res=pyalps.runTEBD(nmlnameList)
  
<!--perpare the input files for the TEBD routines and run the simulations for the range of <math> \tau </math> specified in the parameters.  We now load the Loschmidt Echo and interaction parameter <math> U </math> as functions of time via:-->
 
 
TEBDルーチンの入力ファイルを準備し、パラメータで決められた<math> \tau </math>のレンジでシミュレーションを実行します。Loschmidtエコーと相互作用パラメータ<math> U </math>を時間の関数としてロードします。
 
TEBDルーチンの入力ファイルを準備し、パラメータで決められた<math> \tau </math>のレンジでシミュレーションを実行します。Loschmidtエコーと相互作用パラメータ<math> U </math>を時間の関数としてロードします。
  
Line 89: Line 73:
 
  LEdata=pyalps.load.loadTimeEvolution(pyalps.getResultFiles(prefix='tutorial_1a'), measurements=['Loschmidt Echo', 'V'])
 
  LEdata=pyalps.load.loadTimeEvolution(pyalps.getResultFiles(prefix='tutorial_1a'), measurements=['Loschmidt Echo', 'V'])
  
<!--Finally, we plot the collected data using:-->
 
 
最後に、プロットをおこないます。
 
最後に、プロットをおこないます。
  
Line 116: Line 99:
  
 
===Vistrailsを用いた計算の実行===
 
===Vistrailsを用いた計算の実行===
<!--To run the simulation in Vistrails open the file tutorial1a.vt and look at the workflow labeled "tutorial1a". Click on "Execute" to prepare the input file, run the simulation and create the output figure.-->
 
 
Vistrailsを用いた実行は、tutorial1a.vtを開き、ワークフロー"tutorial1a"を選択してください。
 
Vistrailsを用いた実行は、tutorial1a.vtを開き、ワークフロー"tutorial1a"を選択してください。
  
 
=== 質疑  ===
 
=== 質疑  ===
<!--
+
 
* How does the behavior of the overlap change as the quench rate decreases?
 
* Roughly how slowly do you have to perform the quench in order for it to be adiabatic?
 
* Is it easier or harder for a larger system to be adiabatic?  Why?
 
* Are these properties changed depending on whether the intermediate phase is gapped or not?  One can test this by changing from the hardcore boson model to the (softcore) boson Hubbard model, and then quenching from the Mott-Insulating (MI) phase at large <math> U/t</math> and unit filling to the CDW phase with large <math> V</math>.  As you quench from the Mott insulating to the CDW phase and back, how difficult is it to be adiabatic?
 
-->
 
 
* 重なりの振る舞いは、クエンチの減少にどのように影響を与えますか?
 
* 重なりの振る舞いは、クエンチの減少にどのように影響を与えますか?
 
* 断熱的にクエンチがおこなわれるために、おおよそどれくらいの速度で計算をおこなうべきですか?
 
* 断熱的にクエンチがおこなわれるために、おおよそどれくらいの速度で計算をおこなうべきですか?
Line 132: Line 109:
  
 
==ホールド時の線形クエンチ==
 
==ホールド時の線形クエンチ==
<!--In this section we will investigate the effects of "holding" the system in the SF phase for a time <math> \tau_{\mathrm{hold}} </math> before quenching back to the CDW phase.-->
 
 
このセクションでは、CDW相へクエンチする以前の時間<math> \tau_{\mathrm{hold}} </math>でのSF相の"holding"の影響を調査します。
 
このセクションでは、CDW相へクエンチする以前の時間<math> \tau_{\mathrm{hold}} </math>でのSF相の"holding"の影響を調査します。
  
 
===Pythonを用いた計算の実行===
 
===Pythonを用いた計算の実行===
<!--To set up and run the simulation in Python we use the script tutorial1b.py. The first parts of this script imports the required modules and then prepares the input files as a list of Python dictionaries:-->
 
 
Pythonスクリプトを用いた実行方法です。tutorial1b.pyを参照してください。
 
Pythonスクリプトを用いた実行方法です。tutorial1b.pyを参照してください。
  
Line 172: Line 147:
 
                 })
 
                 })
 
      
 
      
<!--Note that in this case we have three quenches as GS, GIS, etc. are all vectors of length three.  The second quench keeps the Hamiltonian parameters fixed at <math> t=1</math>, <math>V=0 </math> for a time <math> \tau_{\mathrm{hold}} </math> before quenching back.  We write the input files, run the simulations, get outputs, and plot as above:-->
 
 
このケースではGS、GISのような3つのクエンチがあります。すべてのベクターの長さは3です。2番目のクエンチはクエンチ前の時間<math> \tau_{\mathrm{hold}} </math>、<math> t=1</math>, <math>V=0 </math>のような固定ハミルトニアンパラメータを保持します。入力ファイルを準備し、計算を実行し、出力を得て、最後にプロットをおこないます。
 
このケースではGS、GISのような3つのクエンチがあります。すべてのベクターの長さは3です。2番目のクエンチはクエンチ前の時間<math> \tau_{\mathrm{hold}} </math>、<math> t=1</math>, <math>V=0 </math>のような固定ハミルトニアンパラメータを保持します。入力ファイルを準備し、計算を実行し、出力を得て、最後にプロットをおこないます。
  
Line 206: Line 180:
  
 
===Vistrailsを用いた計算の実行===
 
===Vistrailsを用いた計算の実行===
<!--To run the simulation in Vistrails open the file tutorial1b.vt and look at the workflow labeled "tutorial1b". Click on "Execute" to prepare the input file, run the simulation and create the output figure-->
 
 
Vistrailsを用いた実行は、tutorial1a.vtを開き、ワークフロー"tutorial1b"を選択してください。
 
Vistrailsを用いた実行は、tutorial1a.vtを開き、ワークフロー"tutorial1b"を選択してください。
  
 
=== 質疑  ===
 
=== 質疑  ===
<!--
+
 
* How does the behavior of the overlap change as the hold time increases?
 
* Is this behavior monotonic in the hold time?  Why or why not?
 
-->
 
 
* 重なりの振る舞いはどのようにホールドの増加に影響を与えますか?
 
* 重なりの振る舞いはどのようにホールドの増加に影響を与えますか?
 
* これらの振る舞いはホールド時間で単調に増加しますか?違いますか? 何故ですか?
 
* これらの振る舞いはホールド時間で単調に増加しますか?違いますか? 何故ですか?
  
 
==非線形クエンチ==
 
==非線形クエンチ==
<!--In this section we will investigate the effects of varying the power of the quench away from being linear.-->
 
 
このセクションでは非線形でのクエンチの影響を調査します。
 
このセクションでは非線形でのクエンチの影響を調査します。
  
 
===Pythonを用いた計算の実行===
 
===Pythonを用いた計算の実行===
<!--To set up and run the simulation in Python we use the script tutorial1c.py. The first parts of this script imports the required modules and then prepares the input files as a list of Python dictionaries:-->
 
 
Pythonスクリプトを用いた実行方法です。tutorial1c.pyを参照してください。
 
Pythonスクリプトを用いた実行方法です。tutorial1c.pyを参照してください。
  
Line 258: Line 226:
 
                 })
 
                 })
 
    
 
    
<!--We then write the input files, run the simulations, get outputs, and plot as above:-->
 
 
入力ファイルを準備し、計算を実行し、出力を得て、最後にプロットをおこないます。
 
入力ファイルを準備し、計算を実行し、出力を得て、最後にプロットをおこないます。
  
Line 292: Line 259:
  
 
===Vistrailsを用いた計算の実行===
 
===Vistrailsを用いた計算の実行===
<!--To run the simulation in Vistrails open the file tutorial1c.vt and look at the workflow labeled "tutorial1c". Click on "Execute" to prepare the input file, run the simulation and create the output figure-->
 
 
Vistrailsを用いた実行は、tutorial1a.vtを開き、ワークフロー"tutorial1c"を選択してください。
 
Vistrailsを用いた実行は、tutorial1a.vtを開き、ワークフロー"tutorial1c"を選択してください。
  
 
=== 質疑  ===
 
=== 質疑  ===
<!--* How does the behavior of the overlap change as the power changes?
+
 
* Again change from the hardcore boson model to the boson Hubbard model and investigate the dynamics of the MI-CDW transition, this time with a nonlinear quench.  Is the behavior different from that of a linear quench?
 
* The present example uses an asymmetric quench which is linear one one side and nonlinear on the other.  How is the behavior changed if you make both quenches nonlinear?-->
 
 
* 重なりの振る舞いはどのようにクエンチに影響をあたえますか?
 
* 重なりの振る舞いはどのようにクエンチに影響をあたえますか?
 
* ハードコア・ボゾン模型からボゾン・Hubbard模型に変化させ、非線形でのMI-CDWの相転移のダイナミックスをみてください。線形のときと振る舞いが異なりますか?
 
* ハードコア・ボゾン模型からボゾン・Hubbard模型に変化させ、非線形でのMI-CDWの相転移のダイナミックスをみてください。線形のときと振る舞いが異なりますか?
 
* このサンプルでは、片方は線形、片方は非線形の非対称クエンチを使用しています。もし両方とも非線形にしたらどうなりますか?
 
* このサンプルでは、片方は線形、片方は非線形の非対称クエンチを使用しています。もし両方とも非線形にしたらどうなりますか?

Latest revision as of 04:01, 19 March 2012

ハードコア・ボゾン模型

このチュートリアルではハードコア・ボゾン模型の振る舞いについて学習します。

 H=-t\sum_{i=1}^{L-1}(b_i^{\dagger}b_{i+1} +b_ib_{i+1}^{\dagger})+V\sum_{i=1}^{L-1}n_in_{i+1}

パラメータ Vは時間によって変化します。half filling近傍でのハードコア・ボゾン模型の定常状態は大きなV/tで電荷密度波(CDW:charge-density wave)絶縁体、小さなV/tでは、定常状態は超流動体(SF:superfluid)であることはよく知られています。系がある相から急激に別の相に変化するような状態、"クエンチ"、ハミルトニアンパラメーターtVがこのような別の相になる場合、どのようなことが起きるのか?非常に面白い問題です。クエンチの最初の簡単な物理的アプローチとして、ある相から別の相へ、そして元の相に戻るクエンチを考えてみましょう。このようなクエンチの特に厳しい判定条件は、終状態がどれだけ初期状態に近いかです。例えば、

 L(t; \gamma)\equiv |\langle\psi\left(t\right)|\psi\left(0\right)\rangle|^2

これはLoschmidtエコーと呼ばれます。この式にある tは時間を表しており、ホッピングパラメータ t ではありません。パラメータ  \gamma は、系がクエンチされた状況に対応する数値です。ALPS TEBDのルーチンでのクエンチの一般的な構造は次のパラメータ化した値で与えられます。

g(t)=g(t_i)+((t-t_i)/\tau)\,^p (g(t_f)-g(t_i))

 gはハミルトニアンのパラメータです。このケースの場合、 gを相互作用パラメータ Vとして取り扱います。CDW域として V/t=10で開始し、SF域( V/t=0)にクエンチし、また、 V/t=10のCDW域に戻ります。このチュートリアルの3つのポイントは、a)線形クエンチでのLoschmidtエコーの時間スケール \tauの影響 b)CDW相に戻る前のSF相の時間 \tau_{\mathrm{hold}}の"holding"の影響 c)クエンチ関数の力 pの変化の影響を調査することです。

線形クエンチ

最初に、CDWからSF相、そしてCDWに戻る線形クエンチの断熱性のクエンチ率 \tau の影響を計算します。

Pythonを用いた計算の実行

Pythonスクリプトtutorial1a.pyを参照してください。

import pyalps
import matplotlib.pyplot as plt
import pyalps.plot
parms=[]
count=0
for A in [5.0, 10.0, 15.0, 25.0, 50.0]:
       count+=1
       parms.append({ 
                 'L'                         : 10,
                 'MODEL'                     : 'hardcore boson',
                 'CONSERVED_QUANTUMNUMBERS'  : 'N',
                 'N' : 5,
                 't'                         : 1.0,
                 'V'                         : 10.0,
                 'ITP_CHIS' : [20, 30, 35],
                 'ITP_DTS' : [0.05, 0.05,0.025],
                 'ITP_CONVS' : [1E-8, 1E-8, 1E-9],
                 'INITIAL_STATE' : 'ground',
                 'CHI_LIMIT' : 40, 
                 'TRUNC_LIMIT' : 1E-12,
                 'NUM_THREADS' : 1,
                 'TAUS' : [A,  A],
                 'POWS' : [1.0, 1.0],
                 'GS' : ['V',  'V'],
                 'GIS' : [10.0,  0.0],
                 'GFS' : [0.0,  10.0],
                 'NUMSTEPS' : [500,  500],
                 'STEPSFORSTORE' : [5, 3],
                 'SIMID' : count
               })

TEBDに特有のパラメータの詳細をみていきます(こちらに[1]全パラメータのリストがあります)。パラメータINITIAL_STATEは定常状態を定義します。ユーザが決めたパラメータで表現したハミルトニアンでの定常状態から計算を始めます。パラメータt,Vは初期ハミルトニアンパラメータ t=1 V=10 とします。定常状態をみつけるため、TEBDは虚数時間での展開をおこないます。このステップをITPとし、ITPを含むすべてのパラメータは定常状態の特性に対応します。ITP_CHIS,ITP_DTS,ITP_CONVSの各ベクターは虚時間伝播法の連続アプリケーション用のエンタングルメントカットオフパラメータ、タイムステップ、そして収束判定基準です。これらはTEBDの主な収束に関するパラメータ群です。そして、収束はこの各パラメータによって常にチェックされます。この収束に関するHOWTOを次に述べていきます。

実時間伝搬パラメータについて説明します。2種類のクエンチのシミュレーションをおこないますが、最初はパラメータ V が線形的に初期値10から0にクエンチする場合です。一般的なクエンチg(t)=g(t_i)+((t-t_i)/\tau)\,^p (g(t_f)-g(t_i))と比較してください。g=V g(t_i)=10 , g(t_f)=0 , p=1 , and  \tau は効果の検証が必要なパラメータです。パラメータリストを見てください。最初の GS, GIS, GFS,POWSベクターの要素はg , g(t_i) , g(t_f) , p にそれぞれ対応します。ベクターTAUSの最初の要素は変数Aを用い、繰り返し指定します。これは、最初にAを定義した \tau =5, 10, 15, 25, 50に対応しています。2つめのクエンチは本質的に、最初の反対です。g=V , g(t_i)=0 , g(t_f)=10 , p=1 ,  \tau は最初と同じです。パラメータリストを比較してください。上記のGS、GIS・・などの2番目の要素に対応しています。

隣り合った2つのサイトにだけ作用する演算をおこない、完全な伝搬関数を近似的に解く方法で時間発展シミュレーションをおこないます。この伝搬関数をもちいた誤差は微小なタイプステップdtの二次のオーダーになります。TEBDは、このような2サイトでの計算の後、状態の標準系への更新をおこなうプロトコルを与えます。この手順の誤差はCHI_LIMITで設定されます。そして、それは、空間エンタングルメント量とTRUNC_LIMITに直接関係があります。これらはDMRGルーチンのTRUNCATION_ERRORと同じです。パラメータNUMSTEPSは各クエンチでのタイムステップを定義します。それはタイムステップdtを定義する \tau も同時に決めることになります。全誤差はCHI_LIMIT, TRUNC_LIMIT, NUMSTEPSの関数で表され、無視できないレベルではあります。次のチュートリアルで適切なパラメータセットを調査し、これらの誤差が重大なレベルにならないように留意します。最後に、 STEPSFORSTOREは、観測値が計算され、ストアされる前に何回タイムステップが実行されるか決めます。SIMIDは異なる \tau をシミュレーションを区別している整数です。

では、実際に計算してみましょう。

baseName='tutorial_1a'
#write output files
nmlnameList=pyalps.writeTEBDfiles(parms, baseName)
#run the application
res=pyalps.runTEBD(nmlnameList)

TEBDルーチンの入力ファイルを準備し、パラメータで決められた \tau のレンジでシミュレーションを実行します。Loschmidtエコーと相互作用パラメータ U を時間の関数としてロードします。

#Load the loschmidt echo and V
LEdata=pyalps.load.loadTimeEvolution(pyalps.getResultFiles(prefix='tutorial_1a'), measurements=['Loschmidt Echo', 'V'])

最後に、プロットをおこないます。

LE=pyalps.collectXY(LEdata, x='Time', y='Loschmidt Echo',foreach=['SIMID'])
for q in LE:
	q.props['label']=r'$\tau=$'+str(q.props['TAUS'][0])
plt.figure()
pyalps.plot.plot(LE)
plt.xlabel('Time $t$')
plt.ylabel('Loschmidt Echo $|< \psi(0)|\psi(t) > |^2$')
plt.title('Loschmidt Echo vs. Time')
plt.legend(loc='lower right')

Ufig=pyalps.collectXY(LEdata, x='Time', y='V',foreach=['SIMID'])
for q in Ufig:
	q.props['label']=r'$\tau=$'+str(q.props['TAUS'][0])

plt.figure()
pyalps.plot.plot(Ufig)
plt.xlabel('Time $t$')
plt.ylabel('V')
plt.title('Interaction parameter $V$ vs. Time')
plt.legend(loc='lower right')
plt.show()

Vistrailsを用いた計算の実行

Vistrailsを用いた実行は、tutorial1a.vtを開き、ワークフロー"tutorial1a"を選択してください。

質疑

  • 重なりの振る舞いは、クエンチの減少にどのように影響を与えますか?
  • 断熱的にクエンチがおこなわれるために、おおよそどれくらいの速度で計算をおこなうべきですか?
  • 断熱の大規模計算は容易ですか?難しいですか? それは何故ですか?
  • これらの特性は、中間相がギャップされているかどうかに応じて影響がありますか? ハードコア・ボゾン模型から(ソフトコア)ボゾンHubbard模型に変更し、また、大きな U/tでのMott絶縁体相からクエンチさせ、大きな VでのCDW相へ変化させることによってテストしてみてください。MI→CDW→MIの系で、どのような点が難しいですか?

ホールド時の線形クエンチ

このセクションでは、CDW相へクエンチする以前の時間 \tau_{\mathrm{hold}} でのSF相の"holding"の影響を調査します。

Pythonを用いた計算の実行

Pythonスクリプトを用いた実行方法です。tutorial1b.pyを参照してください。

import pyalps
import matplotlib.pyplot as plt
import pyalps.plot
#prepare the input parameters
parms=[]
count=0
for A in [5.0, 10.0, 15.0, 25.0, 50.0]:
       count+=1
       parms.append({ 
                 'L'                         : 10,
                 'MODEL'                     : 'hardcore boson',
                 'CONSERVED_QUANTUMNUMBERS'  : 'N',
                 'N' : 5,
                 't'                         : 1.0,
                 'V'                         : 10.0,
                 'ITP_CHIS' : [20, 30, 35], 
                 'ITP_DTS' : [0.05, 0.05,0.025],
                 'ITP_CONVS' : [1E-8, 1E-8, 1E-9],
                 'INITIAL_STATE' : 'ground',
                 'CHI_LIMIT' : 80,
                 'TRUNC_LIMIT' : 1E-12,
                 'NUM_THREADS' : 1,
                 'TAUS' : [10.0, A, 10.0],
                 'POWS' : [1.0, 0.0,1.0],
                 'GS' : ['V', 'V', 'V'],
                 'GIS' : [10.0,0.0, 0.0],
                 'GFS' : [0.0, 0.0, 10.0],
                 'NUMSTEPS' : [500, int(A/0.05), 500],
                 'STEPSFORSTORE' : [5,5, 3],
                 'SIMID' : count
               })
    

このケースではGS、GISのような3つのクエンチがあります。すべてのベクターの長さは3です。2番目のクエンチはクエンチ前の時間 \tau_{\mathrm{hold}}  t=1, V=0 のような固定ハミルトニアンパラメータを保持します。入力ファイルを準備し、計算を実行し、出力を得て、最後にプロットをおこないます。

baseName='tutorial_1b'
#write output files
nmlnameList=pyalps.writeTEBDfiles(parms, baseName)
#run the application
res=pyalps.runTEBD(nmlnameList)
#Load the loschmidt echo and U
LEdata=pyalps.load.loadTimeEvolution(pyalps.getResultFiles(prefix='tutorial_1b'), measurements=['Loschmidt Echo', 'V'])
LE=pyalps.collectXY(LEdata, x='Time', y='Loschmidt Echo',foreach=['SIMID'])
for q in LE:
	q.props['label']=r'$\tau_{\mathrm{hold}}=$'+str(q.props['TAUS'][1])
plt.figure()
pyalps.plot.plot(LE)
plt.xlabel('Time $t$')
plt.ylabel('Loschmidt Echo $|< \psi(0)|\psi(t) > |^2$')
plt.title('Loschmidt Echo vs. Time')
plt.legend(loc='lower right')
Ufig=pyalps.collectXY(LEdata, x='Time', y='V',foreach=['SIMID'])
for q in Ufig:
	q.props['label']=r'$\tau_{\mathrm{hold}}=$'+str(q.props['TAUS'][1])
plt.figure()
pyalps.plot.plot(Ufig)
plt.xlabel('Time $t$')
plt.ylabel('V')
plt.title('Interaction parameter $V$ vs. Time')
plt.legend()
plt.show()

Vistrailsを用いた計算の実行

Vistrailsを用いた実行は、tutorial1a.vtを開き、ワークフロー"tutorial1b"を選択してください。

質疑

  • 重なりの振る舞いはどのようにホールドの増加に影響を与えますか?
  • これらの振る舞いはホールド時間で単調に増加しますか?違いますか? 何故ですか?

非線形クエンチ

このセクションでは非線形でのクエンチの影響を調査します。

Pythonを用いた計算の実行

Pythonスクリプトを用いた実行方法です。tutorial1c.pyを参照してください。

import pyalps
import matplotlib.pyplot as plt
import pyalps.plot
#prepare the input parameters
parms=[]
count=0
for A in [1.0, 1.5, 2.0, 2.5, 3.0]:
       count+=1
       parms.append({ 
                 'L'                         : 10,
                 'MODEL'                     : 'hardcore boson',
                 'CONSERVED_QUANTUMNUMBERS'  : 'N',
                 'N' : 5,
                 't'                         : 1.0,
                 'V'                         : 10.0,
                 'ITP_CHIS' : [20, 30, 35],
                 'ITP_DTS' : [0.05, 0.05,0.025],
                 'ITP_CONVS' : [1E-8, 1E-8, 1E-9],
                 'INITIAL_STATE' : 'ground',
                 'CHI_LIMIT' : 40,
                 'TRUNC_LIMIT' : 1E-12,
                 'NUM_THREADS' : 1,
                 'TAUS' : [10.0,  10.0],
                 'POWS' : [1.0, A],
                 'GS' : ['V',  'V'],
                 'GIS' : [10.0,  0.0],
                 'GFS' : [0.0,  10.0],
                 'NUMSTEPS' : [1000,  1000],
                 'STEPSFORSTORE' : [10, 5],
                 'SIMID' : count
               })
  

入力ファイルを準備し、計算を実行し、出力を得て、最後にプロットをおこないます。

baseName='tutorial_1c'
#write output files
nmlnameList=pyalps.writeTEBDfiles(parms, baseName)
#run the application
res=pyalps.runTEBD(nmlnameList)
#Load the loschmidt echo and U
LEdata=pyalps.load.loadTimeEvolution(pyalps.getResultFiles(prefix='tutorial_1c'), measurements=['V', 'Loschmidt Echo'])
LE=pyalps.collectXY(LEdata, x='Time', y='Loschmidt Echo',foreach=['SIMID'])
for q in LE:
	q.props['label']=r'$\tau=$'+str(q.props['POWS'][1])
plt.figure()
pyalps.plot.plot(LE)
plt.xlabel('Time $t$')
plt.ylabel('Loschmidt Echo $|< \psi(0)|\psi(t) > |^2$')
plt.title('Loschmidt Echo vs. Time ')
plt.legend(loc='lower left')

Ufig=pyalps.collectXY(LEdata, x='Time', y='V',foreach=['SIMID'])
for q in Ufig:
	q.props['label']=r'$\tau=$'+str(q.props['POWS'][1])
plt.figure()
pyalps.plot.plot(Ufig)
plt.xlabel('Time $t$')
plt.ylabel('U')
plt.title('Interaction parameter $V$ vs. Time')
plt.legend(loc='lower left')
plt.show()

Vistrailsを用いた計算の実行

Vistrailsを用いた実行は、tutorial1a.vtを開き、ワークフロー"tutorial1c"を選択してください。

質疑

  • 重なりの振る舞いはどのようにクエンチに影響をあたえますか?
  • ハードコア・ボゾン模型からボゾン・Hubbard模型に変化させ、非線形でのMI-CDWの相転移のダイナミックスをみてください。線形のときと振る舞いが異なりますか?
  • このサンプルでは、片方は線形、片方は非線形の非対称クエンチを使用しています。もし両方とも非線形にしたらどうなりますか?