入出力

odatse-XAFS モジュールは FEFF を用いて原子位置 \(x\) からスペクトルを計算し、実験で得られたXAFSスペクトルからの誤差を \(f(x)\) として返す Solver です。

この章では、入力パラメータおよび入力データと出力データについて説明します。 入力パラメータは Info クラスの solver の項目が該当します。TOMLファイルを入力として与える場合は、 [solver] セクションに記述します。dict 形式でパラメータを作成する場合は solver キー以下に入れ子の dict 形式でデータを用意します。以下では、TOML形式でパラメータ項目を説明します。

入力データは、ターゲットとする参照データと、FEFF の入力ファイルのテンプレートです。 出力データは、FEFF の feff85L が出力する結果およびログファイルです。以下の節で内容を示します。

入力パラメータ

solver セクションとセクション中のサブセクション config, param, reference を利用します。

[solver] セクション

  • dimension

    形式: 整数型

    説明: パラメータの次元数を指定します。solver セクションまたは base セクションに記述する必要があり、両方指定した場合は solverセクションの値が優先されます。 string_list の要素数と一致している必要があります。

[solver.config] セクション

  • feff_exec_file

    形式: string型 (default: "feff8.5L")

    説明: FEFF ソルバーへのパスを指定します。

  • feff_input_file

    形式: string型 (default: "feff.inp")

    説明: FEFFソルバーの入力ファイルのファイル名を指定します。 feff85L の場合は feff.inp 固定です。

  • feff_output_file

    形式: string型 (default: "chi.dat")

    説明: FEFFの出力ファイルのうち、X線吸収スペクトルデータのファイル名を指定します。 feff85L の場合は chi.dat 固定です。

  • feff_template_file

    形式: string型 (default: "template.txt")

    説明: FEFF入力ファイルのテンプレートのファイル名を指定します。

  • remove_work_dir

    形式: bool型 (default: false)

    説明: FEFF の出力ファイルを削除するかどうかを指定します。

  • use_tmpdir

    形式: bool型 (default: false)

    説明: FEFF の出力ファイルの書き出し先として /tmp (または TMPDIR 環境変数で指定するディレクトリ) 内の一時的なディレクトリを使用するかどうかを指定します。

[solver.param] セクション

  • string_list

    形式: string型のリスト (default: ["value_01", "value_02"])

    説明: ソルバーの入力ファイルを作成するための参照用テンプレートファイルで利用するプレースホルダーのリスト。リストの要素数は dimension の値と一致する必要があります。これらの文字列が探索中のパラメータの値に置換されます。

  • polarization_list

    形式: string型の3要素のリスト

    説明: ソルバーの入力ファイル用のテンプレートファイル内で偏光ベクトルの成分のプレースホルダーとして使用する文字列のリスト。これらの文字列が偏光ベクトルの各要素に置換されます。

  • polarization

    形式: 3要素からなる float 型のリストのリスト

    説明: 偏光ベクトルのリストを指定します。

  • calculated_first_k

    形式: float型

    説明: FEFFによる計算値と測定データとの比較を行う波数の範囲について下端を指定します。

  • calculated_last_k

    形式: float型

    説明: FEFFによる計算値と測定データとの比較を行う波数の範囲について上端を指定します。

  • k_range

    形式: float型のリスト

    説明: FEFFによる計算値と測定データとの比較を行う波数の範囲を [下端, 上端] の形式のリストとして指定します。 calculated_first_k, calculated_last_k による指定とは排他的で、どちらかの形式で範囲を指定する必要があります。

[solver.reference] セクション

  • path_epsilon

    形式: string型

    説明: 実験データファイルへのパスを指定します。

ソルバー用補助ファイル

入力テンプレートファイル

入力テンプレートファイル template.txtsurf.exe の入力ファイルを作成するためのテンプレートです。 動かすパラメータ(求めたい原子座標などの値)を value_* などの文字列に置き換えます。 使用する文字列は入力ファイルの [solver.param] セクションにある string_list で指定します。 偏光ベクトルの要素についても同様に polarization_* などの文字列に置き換え、使用する文字列を [solver.param] セクションの polarization_list に指定します。

以下、テンプレートの例を記載します。

* This feff.inp file generated by ATOMS, version 2.50
* ATOMS written by and copyright (c) Bruce Ravel, 1992-1999

* -- * -- * -- * -- * -- * -- * -- * -- * -- * -- * -- * -- * -- * -- *
*       total mu =      725.4 cm^-1, delta mu =      610.0 cm^-1
*       specific gravity = 12.006, cluster contains   55 atoms.
* -- * -- * -- * -- * -- * -- * -- * -- * -- * -- * -- * -- * -- * -- *
*       mcmaster corrections:  0.00020 ang^2 and  0.770E-07 ang^4
* -- * -- * -- * -- * -- * -- * -- * -- * -- * -- * -- * -- * -- * -- *

TITLE   Sample_data

EDGE      K
S02       1.0

*         pot    xsph  fms   paths genfmt ff2chi
CONTROL   1      1      1      1      1      1
PRINT     0      0      0      0      0      0

*         r_scf   [ l_scf  n_scf  ca ]
*SCF       6.05142     0     15     0.1


EXAFS    20
RPATH    6

*         kmax  [ delta_k  delta_e ]
*XANES     4.0     0.07     0.5
*         r_fms     [ l_fms ]
*FMS       6.05142    0
*
*RPATH     0.10000
*         emin  emax  resolution
*LDOS      -20    20   0.1


POTENTIALS
*   ipot   z [ label   l_scmt  l_fms  stoichiometry ]
      0   28    Ni
      1   16    S
      2    8     O
NLEG         2

*CRITERIA     4.00     2.50

*DEBYE        300.00   340.00

* CORRECTION 4.50 0.5
* RMULTIPLIER 1.00
* ION 0 0.2
* ION 1 0.2

*         ixc  [ Vr  Vi ]
EXCHANGE  0    -5    0
SIG2  0.0016
POLARIZATION   polarization_01 polarization_02 polarization_03

ATOMS
0.0000 0.0000 0.0000 0 Ni
value_01 value_02 value_03 1 S
1.1400 1.2800 0.9700 2 O

この場合、 value_01, value_02, value_03 が動かすパラメータ、 polarization_01, polarization_02, polarization_03 が偏光ベクトルの要素になります。 FEFF 入力ファイルの書式については FEFF のマニュアルを参照してください。

ターゲット参照ファイル

ターゲットとする測定データが格納されたファイルを [solver.reference] セクションの path_epsilon に指定します。ファイルの書式は、 第一列に波数、第二列以降はスペクトル強度と不確かさの組が偏光方向ごとに格納されています。最初の2行はヘッダです。 以下、ファイルの例を示します。

k    c(k)_E[001]
(Ni09sum000-004k    e(k)_E[001]             Ni11sum000-004k_sum140521_E1    e(k)_E[1-10]            Ni13dd_sum000-004k_d140617_t    e(k)_E[110]
3.5           -0.02335000             0.006999908                     -0.04765000             0.007511923                     -0.04365000             0.007200607
3.55          -0.01203000             0.009141367                     -0.03033000             0.010077591                     -0.03322000             0.009255752
3.6           -0.00198000             0.008535745                     -0.02501000             0.008242841                     -0.02414000             0.007907668
...

出力ファイル

odatse-XAFS では、 feff85L により出力されるファイルが、 ランクの番号が記載されたフォルダ下にある Log%%%%%_##### フォルダ以下の call_01, call_02, call_03 ディレクトリに一式出力されます。 (use_tmpdirTrue の場合は、/tmp または TMPDIR 環境変数で指定する一時ディレクトリ内に書き出されます。) %%%%% はアルゴリズムの反復回数 step (例:モンテカルロステップ数)、 ##### はアルゴリズムにおけるグループの番号 set (例:モンテカルロにおけるレプリカ番号)、 call_01... は偏光方向ごとの個別のラベルです。

大規模計算ではこれらのフォルダの数が多くなり、計算機のストレージの制限に抵触する場合があります。 そのような場合には、 solver.config.remove_work_dir パラメータを true にして、計算が終了した作業フォルダを削除してください。