sxrd
ソルバー¶
sxrd
は sxrdcalc
を用いて原子位置 \(x\) や原子の占有率、デバイワラー因子を与えることで Rocking curve を計算し、実験で得られた Rocking curve からの誤差を \(f(x)\) として返す Solver
です。
前準備¶
sxrdcalc
は py2dmat
から呼び出されます。
そのため、あらかじめ sxrdcalc
をインストールしておく必要があります。
sxrdcalc
はGitHubの以下のURLで公開されています。
https://github.com/sxrdcalc/sxrdcalc
サイトにアクセスの上、「Code」-「Download zip」よりソースコード一式をダウンロードします。
zipファイル解凍後に、Makefileを自身の計算環境に合うように編集したあとに、 make
コマンドを打つことで sxrdcalc
の実行ファイルができます。
なお、 py2dmat
を実行する前にあらかじめバルクデータを作成する必要があります(フォーマットについては、後述のソルバー用補助ファイルをご覧ください)。
入力パラメータ¶
solver
セクション中のサブセクション
config
, post
, param
, reference
を利用します。
[config
] セクション¶
sxrd_exec_file
形式: string型
説明: ソルバー
sxrdcalc
へのパスbulk_struc_in_file
形式: string型
説明: バルク構造のインプットファイル。
以下、入力例を記載します。
[config]
sxrd_exec_file = "../../sxrdcalc"
bulk_struc_in_file = "sic111-r3xr3.blk"
[param
] セクション¶
scale_factor
形式: float型 (default: 1.0)
説明: ターゲットのRocking Curveとシミュレーションで得られるRocking Curveのスケールの値。
opt_scale_factor
形式: bool型 (default: false)
説明:
scale_factor
を最適化するかどうかのフラグ。type_vector
形式: list型
説明: 最適化する変数の種類を正の数のlist形式で指定します。 [
param.atom
]サブセクションで指定されるtypeの種類と、本リストが対応します。 typeが同じ場合は、同じ変数として取り扱われます。
[param.domain
] サブセクション¶
本セクションではドメインを作成します。作成したいドメイン分、定義する必要があります。
[param.domain.atom
] サブサブセクションでドメイン内の情報を指定します。
domain_occupancy
形式: float型
説明: ドメイン全体の占有率。
[param.domain.atom
] サブセクション¶
本セクションはドメインに所属する最適化したい原子の個数分定義を行う必要があります。 なお、変数の種類を表すtypeは、正の数で入力します。
name
形式: string型 (重複可)
説明: 最適化する原子の名前。
pos_center
形式: list型
説明: 原子の中心座標。[\(x_0, y_0, z_0\)]の形式で記載します(\(x_0, y_0, z_0\) はfloat)。
DWfactor
形式: float型
説明: デバイワラー因子(単位は \(\text{Å}^{2}\) )。
occupancy
形式: float型 (default: 1.0)
説明: 原子の占有率。
displace_vector
(省略可)形式: listのlist型
- 説明: 原子を動かす方向を定義するベクトル。最大3方向まで指定可能。
各リストで変位ベクトルと初期値を[type, \(D_{i1}, D_{i2}, D_{i3}\) ]のようにして定義する(typeはint、\(D_{i1}, D_{i2}, D_{i3}\) はfloat)。 与えられた情報に従い、 \(dr_i = (D_{i1} \vec{a} + D_{i2} \vec{b} + D_{i3} \vec{c}) * l_{type}\) のように \(l_{type}\) を変位させます( \(\vec{a}, \vec{b}, \vec{c}\) は
bulk_struc_in_file
もしくはstruc_in_file
で指定された入力ファイルに記載された単位格子ベクトルを表します)。
opt_DW
(省略可)形式: list型
- 説明: デバイワラー因子を変化させる場合のスケールを設定します。
[type, scale]のようにして定義されます。
opt_occupancy
形式: int型
説明: 定義した場合、占有率が変化する。指定された変数がtypeを表します。
以下、入力例を記載します。
[param]
scale_factor = 1.0
type_vector = [1, 2]
[[param.domain]]
domain_occupancy = 1.0
[[param.domain.atom]]
name = "Si"
pos_center = [0.00000000, 0.00000000, 1.00000000]
DWfactor = 0.0
occupancy = 1.0
displace_vector = [[1, 0.0, 0.0, 1.0]]
[[param.domain.atom]]
name = "Si"
pos_center = [0.33333333, 0.66666667, 1.00000000]
DWfactor = 0.0
occupancy = 1.0
displace_vector = [[1, 0.0, 0.0, 1.0]]
[[param.domain.atom]]
name = "Si"
pos_center = [0.66666667, 0.33333333, 1.00000000]
DWfactor = 0.0
occupancy = 1.0
displace_vector = [[1, 0.0, 0.0, 1.0]]
[[param.domain.atom]]
name = "Si"
pos_center = [0.33333333, 0.33333333, 1.00000000]
DWfactor = 0.0
occupancy = 1.0
displace_vector = [[2, 0.0, 0.0, 1.0]]
[reference
] セクション¶
f_in_file
形式: string型
説明: ターゲットとするロッキングカーブのインプットファイルへのパス。
ソルバー用補助ファイル¶
ターゲット参照ファイル¶
ターゲットにするデータが格納されたファイル。 [reference
] セクションの f_in_file
でパスを指定します。
1行ごとに h k l F sigma
が出力されます。ここで、 h, k, l
は波数, F
は強度、 sigma
は F
の不確かさをそれぞれ表します。
以下、ファイル例を記載します。
0.000000 0.000000 0.050000 572.805262 0.1
0.000000 0.000000 0.150000 190.712559 0.1
0.000000 0.000000 0.250000 114.163340 0.1
0.000000 0.000000 0.350000 81.267319 0.1
0.000000 0.000000 0.450000 62.927325 0.1
...
バルク構造ファイル¶
バルク構造のデータが格納されたファイル。 [config
] セクションの bulk_struc_in_file
でパスを指定します。
1行目がコメント, 2行目が a b c alpha beta gamma
を表します。
ここで、 a
, b
, c
はユニットセルの格子定数、 alpha
, beta
, gamma
はそれらのなす角です。
3行目以降は atomsymbol r1 r2 r3 DWfactor occupancy
を指定します。
ここで、 atomsymbol
は原子種、 r1
, r2
, r3
は原子の位置座標、 DWfactor
はデバイワラー因子、 occupancy
は占有率をそれぞれ表します。
以下、ファイル例を記載します。
# SiC(111) bulk
5.33940 5.33940 7.5510487 90.000000 90.000000 120.000000
Si 0.00000000 0.00000000 0.00000000 0.0 1.0
Si 0.33333333 0.66666667 0.00000000 0.0 1.0
Si 0.66666667 0.33333333 0.00000000 0.0 1.0
C 0.00000000 0.00000000 0.25000000 0.0 1.0
...
出力ファイル¶
sxrd
では、 計算時に出力されるファイルが、ランクの番号が記載されたフォルダ下に一式出力されます。
ここでは、 py2dmat
で独自に出力するファイルについて説明します。
stdout
¶
sxrd
が出力する標準出力が記載されています。
sxrdのLeast square fittingに対して、初期パラメータとして変数を与え、1ショット計算(iteration数=0)をした際のRfactorを計算します。
RfactorはFit results以下のRに記載されます。
以下、出力例です。
---------------------------------------
Program py2dmat/mapper_sxrd/sxrdcalc for surface x-ray diffraction calculations.
Version 3.3.3 - August 2019
Inputfile: lsfit.in
Least-squares fit of model to experimental structure factors.
...
Fit results:
Fit not converged after 0 iterations.
Consider increasing the maximum number of iterations or find better starting values.
chi^2 = 10493110.323318, chi^2 / (degree of freedom) = 223257.666454 (Intensities)
chi^2 = 3707027.897897, chi^2 / (degree of freedom) = 78872.933998 (Structure factors)
R = 0.378801
Scale factor: 1.00000000000000 +/- 0.000196
Parameter Nr. 1: 3.500000 +/- 299467640982.406067
Parameter Nr. 2: 3.500000 +/- 898402922947.218384
Covariance matrix:
0 1 2
0 0.0000000383 20107160.3315223120 -60321480.9945669472
1 20107160.3315223120 89680867995567253356544.0000000000 -269042603986701827178496.0000000000
2 -60321480.9945669472 -269042603986701827178496.0000000000 807127811960105615753216.0000000000