simSL : 超格子回折のシミュレーションプログラム
InGaAsP系III-V族化合物半導体超格子のX線回折のシミュレーション計算を行います。 一回散乱近似で、超格子部分だけの反射の計算を行っています。
1. ダウンロード
解凍した時にできるフォルダの中の、dll ファイルと platforms, styles という二つのフォルダは 実行ファイル simSL.exe と同じ場所に置いておいて下さい。examples は、計算用の設定ファイルの例を収めています。
-
simSL実行環境のパック (Windows 64bit版, Qt5.12.4使用) 2020.5.30 ( $\sin$, $\cos$ 型界面可能)
2. 使ってみる
simSL.exe を起動すると次のような window が現れます。 超格子の層構造など計算に必要な情報を納めたテキストファイル(「条件ファイル」と呼ぶ)を準備し、最上部に現れる「Drop Structure File」にドラッグ/ドロップすると計算されます。 ダウンロードしたファイルの中にある、examples というフォルダに条件ファイルの例が幾つか入っています。 examples の中にある、SL-ex0.exe 等を、ドラッグ/ドロップしてみて下さい。
3. 画面の見方と操作
-
window 上部に現れるグラフは「条件ファイル」で指定した組成分布を表しています。 このプログラムは In$_x$Ga$_{1-x}$As$_y$P$_{1-y}$ 系の計算に特化していますが、青色の線はIII族のIn組成 $x$ を、 赤色の線は V族のAs組成 $y$ を表しています。
-
画面真ん中は、計算された回折強度を示しています。縦軸のスケールを $\log$ スケールにするには、 左下の「Log」と書かれたボタンをチェックします。
-
グラフ表示内で、マウスの左ボタンでグラフをつかむと、グラフの平行移動ができます。
-
グラフ表示の真ん中あたりでマウスホイールを回すとグラフの拡大縮小ができます。
-
グラフ下辺の $x$ 軸あたりでマウスホイールを回すと $x$ 軸方向の拡大縮小ができます。
-
グラフ左辺の $y$ 軸あたりでマウスホイールを回すと $y$ 軸方向の拡大縮小ができます。
-
グラフの平行移動や、拡大縮小は組成分布のグラフに関しても同様の操作で行えます。
-
別の「条件ファイル」を読み込むとグラフのスケールはリセットされます。 リセットしたくない場合(同じスケールで見たい場合)は画面右上の「Keep Scale」ボタンをチェックして下さい。
4. 出力ファイル
計算結果は画面に表示されますが、ファイルとしても保存されます。
ドラッグ・ドロップでしたファイルがあった場所に、同じ名前(但し名前の末尾に '-cmp'、'-dif' という文字列が付け加わった名前)のファイルができます。
'-cmp' が付いたファイルは、「条件ファイル」を解釈した結果の1周期分の組成分布が記録されています。
'-dif' が付いたファイルは、計算された回折強度です。
5. 条件ファイル
条件ファイルの書き方説明するために
この節の末尾に条件ファイルの一例を示します。
これは、ダウンロードしたファイルを展開した時にできる examples の中の SL-ex0.txt の内容です。
-
次の例の様に '#' 記号で始まる行はコメントです。
# X線の波長(オングストローム単位)
行の途中に '#' 記号が現れた場合もそれ以降はコメントです。
-
次の例の様に 'WAVELENGTH' で始まる行は、X線の波長をいくらと考えて計算するかを指定します。単位は Å です。
WAVELENGTH 1.500
-
'SUBSTRATE' で始まる行は、基板結晶の種類を指定します。 基板の指定は基板の格子定数を与えて、超格子層の歪を決めるために使われます。 その際、全ての層は無緩和で、ポアソン比 $\nu = 1/3$ だと仮定して計算しています。
3番目のパラメータは基板の回折を計算から排除するかどうかを指定しています。 1 なら計算に入れず(超格子の a 方向の格子定数を拘束する役割はする)、0 なら計算に入れます。デフォルトは 0 です。SUBSTRATE 1.0 0.0 0 # x = 1.0, y = 0.0 すなわち InP 0 : 0 基板を加算する : 1 しない
-
'LAYER' で始まる行は超格子を構成する層の一つがどのようなものかを指定します。 組成が違う LAYER を幾つか指定することで、例えば InP / InGaAs 超格子を構成します。
LAYER 10 1.0 0.0 ABRUPT 0 0.53 1.0 ABRUPT 0 0.53 1.0
-
先頭の数字 10 はその層が 10ML の厚さであることを示します。
-
二番目の数字 1.0 はその層の意図された In組成が 1.0 であることを示します。
-
三番目の数字 0.0 はその層の意図された As組成が 0.0 であることを示します。
-
「意図された組成」と書いているのは、 組成は界面付近で変動して意図した値とは違う値になり得ると考えているからです。
-
次に続く「ABRUPT 0 0.53 1.0」と「ABRUPT 0 0.53 1.0」はそれぞれ上下の界面の状態を指定しています。 (前が上界面の指定、後が下界面の指定)
-
どちらも書き方は同じで、最初のキーワードが界面の組成分布の形を示します。
ABRUPT(または A) : 遷移層なしにいきなり変化する。
LINEAR(または L) : 界面で組成が線形に変化する。
PARABOLIC(または P) : 界面で組成が二次関数的に変化する。
HARMONIC(または H) : 界面で組成が正(余)弦関数的に変化する。
-
続く数字は遷移層の厚さを示します。この例では ABRUPT なので遷移層の厚さは何でも良いのですが、一応 0 にしてあります。
-
続く二つの数字 0.53 と 1.0 は界面の先にある層の III族組成、V族組成を示しています。
遷移層がある場合(L, P の場合)、一番界面よりの層の組成はここで指定した組成と「意図された組成」の平均値になり、 遷移総内部ではその値から「意図された値」に向かって変化します。 -
遷移層があっても、一つの LAYER 全体の厚さは変わりません。
例えば、LAYER の厚さが 10 で、遷移層の厚さが上下ともに 4 だとすると、 「意図された組成」の層の厚さが $10 - 4 \times 2 = 2$ML になります。
他の例も確認してみて下さい。
-
SL-ex3.txt : 純粋な InP。構造がないと超格子回折が出ないことの確認(プログラムのチェック)用。
- SL-ex0.txt
# X線の波長(オングストローム単位) WAVELENGTH 1.500 # 基板の組成 : In_x Ga_(1-x) As_y P_(1-y) # SUBSTRATE III族組成x V族組成y SUBSTRATE 1.0 0.0 0 # x = 1.0, y = 0.0 すなわち InP 0 : 0 基板を加算する : 1 しない # 超格子を構成する LAYER の指定 # LAYER 厚さ[ML] III続組成x V族組成y 上界面の指定 下界面の指定 # "界面の指定" :: ABRUPT / LINEAR / PARABOLIC 遷移層の厚さ[ML] 界面の先の層のIII続組成x V族組成y # 「遷移層」は LAYER の厚さの内にとられる。(LAYER 10 で遷移層が上下ともに 4 だとすると) # 4ML遷移層/2ML指定組成の層/4ML遷移層 になる。 # 10ML の InP で、上下ともにアブラプトに組成変化 (遷移層厚や、上下の組成は意味がない) LAYER 10 1.0 0.0 ABRUPT 0 0.53 1.0 ABRUPT 0 0.53 1.0 # 10ML の InGaAs で、上下ともにアブラプトに組成変化 LAYER 10 0.53 1.0 ABRUPT 0 1.0 0.0 ABRUPT 0 1.00 0.0 # 超格子の繰返し回数 REPEAT 20
-