.. _sec-supermirror: [ Super Mirror ] セクション ================================================== このセクションでは、低エネルギーの中性子のスーパーミラーによる反射の機能を定義します。 ここでは、以下のような半経験的なスーパーミラーの反射率を仮定します。 .. math:: R = \begin{cases} R_0 & \mathrm{if}\;\; Q \le Q_c \\ \frac{1}{2} R_0 \left( 1 - \tanh\left[ (Q - mQ_c)/W \right] \right) \left( 1 - \alpha (Q - Q_c) \right) & \mathrm{if}\;\; Q > Q_c \end{cases} ここで :math:`Q` は、散乱ベクター (:math:`\mathrm{\AA^{-1}}`) で、次のように 定義されます。 .. math:: Q = \left|\mathbf{k}_i - \mathbf{k}_f\right| = \frac{4\pi \sin \theta}{\lambda} :math:`m` は、ミラーの物質とレイヤーの数などに依存するパラメーターです。 :math:`Q_c` は、一層のレイヤーによる臨界散乱ベクターで、 これ以上の :math:`Q` で、反射率は :math:`\alpha` の傾斜で直線的に カットオフ値 :math:`Q = mQ_c` まで減少する。 そのときのカットオフの幅は :math:`W` で表される。 これらのパラメーターは、このセクションで次のように定義される。 .. code-block:: text [ Super Mirror ] r-in r-out mm r0 qc am wm {2001-2020} 3001 3 0.99 0.0217 3.0 0.003 2500 3500 3 0.99 0.0217 3.0 0.003 2600 3600 3 0.99 0.0217 3.0 0.003 ... ... ... ... ... ... ... ... ... ... ... ... ... ... 反射の面は、r-inが入射領域、r-outが反射体領域の間の面で定義されます。 同じ値の領域をまとめて書く、( { 2 - 5 } 8 9 ) という書式も使えます。 また、( 6 < 10[1 0 0] < u=3 ) などの lattice, universe 構造も指定できます。 上の標識のその他のパラメーターは、 :math:`m` を ``mm`` で、 :math:`R_0` を ``r0``、 :math:`Q_c` を ``qc`` (:math:`\mathrm{\AA^{-1}}`)、 :math:`\alpha` を ``am`` (:math:`\mathrm{\AA}`)、 :math:`W` を ``wm`` (:math:`\mathrm{\AA^{-1}}`) で定義します。 このスーパーミラーの反射は、10 eV 以下の中性子、また、:math:`\sin\theta > 0.001` の時に制限されます。 後者は、表面の粗さに因るものです。 **mm** パラメータ(m値)に負の値を設定することで、ユーザー定義ミラー機能を利用できます。 この場合、反射率は ``src/usrmirror.f90`` 内の usr_mirror 関数により決定されます。 この関数には、以下の引数が順番に渡されます(カッコ内はプログラム内での変数名です): .. code-block:: text Q (qin), mm (smm), r0 (sr0), qc (sqc), am (sam), wm (swm), file(32) (fname) Q 以外の引数はインプットファイルで指定するパラメータ値がそのまま渡されるため、反射率の計算のための独自のパラメータとして利用することが可能です。 外部ファイルを入力データとして利用する場合は、[Parameters] セクションの **file(32)** にそのファイル名を指定してください。 標準で使われるユーザー定義ミラー関数として、 ``src/usrmirror.f90`` には、外部データベースを内挿して反射率を求めるサンプルプログラムが格納されています。 このプログラムでは、 **mm** の絶対値(実数が指定された場合は小数点以下を切り捨てて整数化)を膜の ID番号 として扱い、 **file(32)** で指定した反射率データファイル内の ID と照合して反射率を求めます。 内挿方法は、q線形-R線形、q線形-R対数、q対数-R線形、q対数-R対数 の4種類が選択可能です。 実験データや他のシミュレーション結果を以下のフォーマットで作成し、利用してください。反射率データファイルのフォーマットは以下の通りです。 データ形式は以下の通りです。 - 1行目: **nset** (int) データセットの総数 - 2行目以降:各データセットのデータを記述 **<データセット1>** - 1行目: **id** (int), **q-type** (int), **nq** (int), **qmin** (double), **qmax** (double) - **id** データセットの識別ID番号 - **q-type** 内挿の方法 :: = 1 q線形-R線形内挿(Rのみ入力) = 2 q線形-R対数内挿(Rのみ入力) = 3 q対数-R線形内挿(Rのみ入力) = 4 q対数-R対数内挿(Rのみ入力) = 11 q線形-R線形内挿(q, Rで入力) = 12 q線形-R対数内挿(q, Rで入力) = 13 q対数-R線形内挿(q, Rで入力) = 14 q対数-R対数内挿(q, Rで入力) - **nq** Rのデータ数 - **qmin** qの最小値 [Å\ :sup:`-1`](q-type = 1–4 のときに有効) - **qmax** qの最大値 [Å\ :sup:`-1`](q-type = 1–4 のときに有効) - 2行目以降 - q-type = 1, 2, 3, 4 の場合:R (double) のみ入力 :: R(1) R(2) ... R(nq) - q-type = 11, 12, 13, 14 の場合:q (double), R (double) の組で入力 (データは q に対して昇順に並んでいる必要があります) :: q(1), R(1) q(2), R(2) ... q(nq), R(nq) - データセット間の区切り :: (空行) (空行) 次のデータセットとの間には区切りのために空行を2行追加します。 **<データセット2>** - 1行目:id, q-type, nq, qmin, qmax (以降同様) :: (空行) (空行) **<データセット nset>** - 上記と同様に記述 このユーザー定義ミラー機能を利用する具体的なサンプル入力ファイルは ``sample/misc/usrmirror`` に格納されています。詳細はそちらを参照してください。