« 2016年12月 | トップページ

2017年2月

2017年2月26日 (日)

プレイルートに曲線を導入

LongDriver のプレイルートで曲線を使用できるようにしました。曲線は2次のベジェ曲線(放物線)です。プレイルートのノードにフォーカスが当たっている時にメニュー [Each][Curve/Straight] をクリックするとフォーカスの当たっていたノードがベジェ曲線の制御点になるような曲線が描画されます。下記サンプルで4番の選手の2つ目のノードが制御点になっています(画像下側の選手マーク4番を繰り返しクリックするとノードが順次表示されます)。制御点のノードにフォーカスを当てて再度 [Each][Curve/Straight] をクリックすると通常の直線に戻ります。

曲線化とプレイ図のエンコードはすんなり出来たのですが、デコードで暴走させてしまいました。デコードの関数内に曲線用のルーチンを追加したところ、プレイ図コードのスキャン位置が合わなくなり、それが原因で暴走しました。ルーチンを追加したくらいで暴走するようなプログラムを書いていてはダメですね。

ところで、ブレイクポイントを設定してデバッグしていた時に気付いたのですが、「var foo;」のような変数宣言にはブレイクポイントを設定できないのですね。これは、最初に構文解析したら、その後の実行では変数宣言はスキャンしないということでしょうか? 今まで、このような変数宣言はループの外に記述していたのですが、実行中にスキャンしないのなら、ループの内側に記述しても効率は落ちないことになります。


    var foo;		// ループの内側↓に入れても効率は落ちない?
    for (・・・){
        var bar;
        ・・・
    }

ちなみに、最近の JavaScript では var よりも let の方が良いとか言われていますが、馴染みが薄いので、今回は let は使っていません。

なお、LongDriver を読み込む時、ブラウザによってはキャッシュのせいで古い LongDriver を実行することがあるようです。 Chrome では、再読み込みをしてもキャッシュが効いていてダメでした。新しい LongDriver を実行するには、 Chrome の再読み込みマークを右クリックして「ハード再読み込み」を実行する必要がありました。

2017年2月19日 (日)

光に質量を与えたい -2-

超伝導体内で光が質量を獲得する仕組みを知りたくて、インターネット上の資料を幾つか当たってみたのですが、未だ納得できるレベルに至っていません。取り敢えず、解った所をまとめておきます。

光の質量の獲得は秩序変数 \(\Delta\) に対する現象論(ギンツブルグ・ランダウ理論)として記述できます。秩序変数とは相転移を特徴付ける量で、考察の対象に応じて選択されます(秩序変数の超伝導相転移を参照)。この秩序変数を用いて、電磁場が無い時のラグランジアン密度は臨界点近傍で \[ \mathscr{L}=\Delta^*i\partial_t\Delta-\frac{1}{2m}\nabla\Delta^*\cdot\nabla\Delta +b|\Delta|^2+c|\Delta|^4 \tag{1} \] と表されます。ここに \(m\) はクーパー対の質量です。

(1) 式の微分を次のような共変微分に置き換えることで電磁場を導入します。 \[ \begin{eqnarray} \nabla \rightarrow \boldsymbol{D} = \nabla - i\tilde{e}\boldsymbol{A} \tag{2}\\ \partial_t \rightarrow D_t = \partial_t - i\tilde{e}\phi \tag{3} \end{eqnarray} \] すなわち、ラグランジアン密度は (4) 式になります。 \[ \begin{align} \mathscr{L} =& \Delta^*iD_t\Delta - \frac{1}{2m}\boldsymbol{D}\Delta^*\cdot\boldsymbol{D}\Delta\\ & + b|\Delta|^2 + c|\Delta|^4 + \mathscr{L}_\mathrm{em} \tag{4} \end{align} \] ここに \(\mathscr{L}_\mathrm{em}\) は電磁場のラグランジアン密度です。

\(\Delta = |\Delta|e^{i\theta}\) とおき、簡単のため \(|\Delta|\) が時間依存しないとします。そして \[ \begin{eqnarray} \tilde{\boldsymbol{A}} = \boldsymbol{A} - \frac{\nabla\theta}{\tilde{e}} \tag{5}\\ \tilde{\phi} = \phi - \frac{\partial_t\theta}{\tilde{e}} \tag{6} \end{eqnarray} \] を用いると、ラグランジアン密度は \[ \mathscr{L} = \tilde{e}|\Delta|^2\tilde{\phi} - \frac{\tilde{e}^2|\Delta|^2}{2m}\tilde{\boldsymbol{A}}^2 + \mathscr{L}_\mathrm{em} \tag{7} \] となります。このラグランジアン密度より \(\tilde{\boldsymbol{A}}\) の運動方程式は、 \(M=(\tilde{e}^2|\Delta|^2/(2m))^{1/2}\) とおいて、 \[ (\Box + M^2)\tilde{\boldsymbol{A}} = 0 \tag{8} \] となります。ただし、ローレンツゲージ \(\partial_\mu\tilde{A}^\mu = 0\) を仮定しました。 (8) 式は光子 \(\tilde{A}\) が質量 \(M\) を持っていることを表しています。

(1) 式から出発して光子が質量を獲得することが解った訳ですが、超伝導体のラグランジアン密度が (1) 式になることが理解できていません。 BCS の平均場理論によるとハミルトニアン \(H_\mathrm{mf}\) は \[ \begin{align} H_\mathrm{mf} =& -\mu c_i^\dagger c_i + c_i^\dagger t_{ij}c_j\\ & + \frac{1}{2}\langle c_i^\dagger c_j^\dagger\rangle V_{ijkl}c_k c_l + \frac{1}{2}c_i^\dagger c_j^\dagger V_{ijkl}\langle c_k c_l\rangle\\ & - \frac{1}{2}\langle c_i^\dagger c_j^\dagger\rangle V_{ijkl}\langle c_k c_l\rangle \tag{9} \end{align} \] で、 \(\Delta_{ij} = V_{ijkl}\langle c_k c_l\rangle\) が秩序変数になるのですが、これからラグランジアン密度 (1) 式の導き方が判りません。一般的にラグランジアン \(L\) とハミルトニアン \(H\) の間には \[ L = p\dot{q} - H \tag{10} \] の関係がありますが、これに (9) 式を適用するにはどうしたら良いのでしょうか。

« 2016年12月 | トップページ