D2MatE Top
optimize_flex Top
実行例: [tkprog_X_path]/ATLAS/optimize_ATLAS/optimize_ATLAS.py
注: optimize_ATLAS.pyの機能の一部は、Launcher:
”External applications" => Electrical/Launcher.pyで起動できる
電気特性関連のLauncher.pyのメニューにある、"ATLAS"
=> "optimize_ATLAS" ダイアログに実装されています。
以下の説明では、各modeに対応する Launcher:Decay の機能
(ボタン) を Launcher:optimize_ATLAS:[fit]
などと書きます。
以下に典型的な実行例を示す。代表的なmode引数は、--modeが不要。
実行ディレクトリ: [tkprog_X_path]/ATLAS/optimize_ATLAS/TFT_simple
入力データ: [tkprog_X_path]/ATLAS/optimize_ATLAS/TFT_simple/TFT_Vg-Id.csv
引数設定ファイル: [tkprog_X_path]/ATLAS/optimize_ATLAS/TFT_simple/optimize_ATLAS_arg_config.xlsx
フィッティングパラメータ設定ファイル: [tkprog_X_path]/ATLAS/optimize_ATLAS/TFT_simple/optimize_ATLAS_fit_config.xlsx
templateディレクトリ: [tkprog_X_path]/ATLAS/optimize_ATLAS/TFT_simple/template
入力ファイルのデフォルトは decay.xlsx になっている。
変更する場合は、起動時引数 --infile=path名 で指定する。
特徴: ATLASは非常に柔軟なプログラムであり、入力ファイル(デバイス構造など)もさまざまな形で入力される。
そのため、optimize_ATLAS.pyでは、ATLAS入力ファイルのtemplateをつくり、optimize_ATLAS.pyのパラメータを使ってATLAS入力ファイルを作ったうえで、
ATLASの計算エンジン (実際にはdeckbuild)
を外部プログラムとして起動し、その出力ファイルを読み込むという手順を取っている。
フィッティングパラメータはtemplateに依存するため、引数設定ファイル、フィッティングパラメータ設定ファイルは、計算データディレクトリ毎に
準備している。
- 既に実行したファイルがある場合は削除する
(Launcher:optimize_ATLAS:[clean])
test% python ../optimize_decay.py clean
ファイルを削除するかどうか聞いてくるので、
・ すべて削除する場合は all
・ 聞かれているファイル群だけ削除する場合は yes
・ 削除しない場合は no
を入力し、ENTERを押す
- 初期化 (Launcher:optimize_ATLAS:[init]): 設定ファイル input_data.in、フィッティング変数ファイル
input_data_parameters.csv を作成
実行に必要なファイル: input.xlsx
test% python ../optimize_decay.py init
initの前段でcleanを実行するため、1と同じことを聞かれるので、all/yes/noを回答する。
線形最小二乗法により、係数の初期値を決定する。
出力例(抜粋):
config parameter file : /home/share/tkProg/tkprog_Linux/ATLAS/optimize_ATLAS/TFT_simple/input_data.in
fitting parameter file: /home/share/tkProg/tkprog_Linux/ATLAS/optimize_ATLAS/TFT_simple/input_data_parameters.csv
history file : /home/share/tkProg/tkprog_Linux/ATLAS/optimize_ATLAS/TFT_simple/input_data-history.xlsx
data file (transfer) : IVobs.xlsx
Fitting configuration
method : nelder-mead
jac : 3-points
tol : 1e-05
nmaxiter : 1000
nmaxcall : 10000
y_scale : log
Fitting parameters red from [/home/share/tkProg/tkprog_Linux/ATLAS/optimize_ATLAS/TFT_simple/input_data_parameters.csv]:
00: cdp= 1.08e+18 cm-3 (id=1) penality: 1 * (1e+13 - 1e+20)
01: mun= 9.25 cm2/Vs (id=1) penality: 1 * (0.01 - 30)
02: nta= 3.048e+19 cm-3/eV (id=1) penality: 1 * (0 - 1e+23)
03: wta= 0.035 eV (id=1) penality: 1 * (0.0001 - 2)
04: nga= 1.35e+18 cm-3/eV (id=1) penality: 1 * (0 - 1e+23)
05: wga= 0.664 eV (id=1) penality: 1 * (0.0001 - 2)
06: ntd= 1e+19 eV (id=1) penality: 1 * (0 - 1e+23)
07: wtd= 0.05 cm-3/eV (id=1) penality: 1 * (0.0001 - 2)
08: ngd= 0 cm-3/eV (id=0) penality: 1 * (0 - 1e+23)
09: egd= 2.62 eV (id=0) penality: 1 * (1.5 - 4)
10: wgd= 0.1 eV (id=0) penality: 1 * (0.0001 - 2)
Save configuration parameters to [/home/share/tkProg/tkprog_Linux/ATLAS/optimize_ATLAS/TFT_simple/input_data.in]
Error in tkfile.open(): [/home/share/tkProg/tkprog_Linux/ATLAS/optimize_ATLAS/TFT_simple/input_data.in] does not exist
Warning in tkinifile.WriteString: Can not read [/home/share/tkProg/tkprog_Linux/ATLAS/optimize_ATLAS/TFT_simple/input_data.in]
Save fitting parameters to [/home/share/tkProg/tkprog_Linux/ATLAS/optimize_ATLAS/TFT_simple/input_data_parameters.csv] (save_parameters)
作成されるファイル:
config parameter file : /home/share/tkProg/tkprog_Linux/ATLAS/optimize_ATLAS/TFT_simple/input_data.in
fitting parameter file: /home/share/tkProg/tkprog_Linux/ATLAS/optimize_ATLAS/TFT_simple/input_data_parameters.csv
- templateファイルの確認 (Launcher:optimize_ATLAS:[update]):
templateファイル TFT_simple/template/IV_Vd01.in
を読み込み、ATLASの入力ファイル TFT_simple/IV_Vd01.in
を作成する
test% python ../optimize_ATLAS.py update
作成されるファイル:
ATLAS input file : /home/share/tkProg/tkprog_Linux/ATLAS/optimize_ATLAS/TFT_simple/IV_Vd01.in
- 入力データの確認 (Launcher:optimize_ATLAS:[plot]): 入力データファイル input_data.xlsx
を読み込み、プロットする
test% python ../optimize_ATLAS.py plot
- フィッティング変数の初期値の確認
(Launcher:optimize_ATLAS:[sim]):
入力データファイル input_data.xlsx
とフィッティング変数ファイル input_data_parameters.csv
を読み込み、
入力データとシミュレーション結果をプロットする
test% python ../optimize_ATLAS.py sim
- 線形係数 (移動度)だけ非線形フィッティング
(Launcher:optimize_ATLAS:[fitlp]):
線形パラメータのみ非線形最小二乗法を実行する
このモデルでは、線形パラメータ (linid=1) は移動度 mup
のみなので、まずはこれだけを最適化する。
test% python ../optimize_ATLAS.py fitlp
適当に合ったところで "stop"
ボタンを押して中断する
コンソール出力 (peaks-out.txt):
Function did not converge
Final parameters:
00: cdp= 1.00371e+18 cm-3 (id=1) (linear=0) penality: 1 * (1e+13 - 1e+20)
01: mun= 9.20804 cm2/Vs (id=1) (linear=1) penality: 1 * (0.01 - 30)
02: nta= 3.08712e+19 cm-3/eV (id=1) (linear=0) penality: 1 * (0 - 1e+23)
03: wta= 0.0359537 eV (id=1) (linear=0) penality: 1 * (0.0001 - 2)
04: nga= 2.30367e+18 cm-3/eV (id=1) (linear=0) penality: 1 * (0 - 1e+23)
05: wga= 0.661037 eV (id=1) (linear=0) penality: 1 * (0.0001 - 2)
06: ntd= 9.85504e+18 eV (id=1) (linear=0) penality: 1 * (0 - 1e+23)
07: wtd= 0.0507477 cm-3/eV (id=1) (linear=0) penality: 1 * (0.0001 - 2)
08: ngd= 0 cm-3/eV (id=0) (linear=0) penality: 1 * (0 - 1e+23)
09: egd= 2.62 eV (id=0) (linear=0) penality: 1 * (1.5 - 4)
10: wgd= 0.1 eV (id=0) (linear=0) penality: 1 * (0.0001 - 2)
fmin= 1e+300
Save configuration parameters to [/home/share/tkProg/tkprog_Linux/ATLAS/optimize_ATLAS/TFT_simple/input_data.in]
Save fitting parameters to [/home/share/tkProg/tkprog_Linux/ATLAS/optimize_ATLAS/TFT_simple/input_data_parameters.csv] (save_parameters)
Final data:
Vg (V) Vd (V) T (K) Id (A) initial final
1 0.1 303 2.106e-08 6.333e-07 4.134e-08
2 0.1 303 6.322e-08 7.147e-07 6.743e-08
4 0.1 303 1.885e-07 8.921e-07 1.512e-07
6 0.1 303 3.555e-07 1.086e-06 2.759e-07
8 0.1 303 5.555e-07 1.292e-06 4.332e-07
10 0.1 303 7.824e-07 1.507e-06 6.138e-07
12 0.1 303 1.031e-06 1.729e-06 8.103e-07
14 0.1 303 1.298e-06 1.956e-06 1.018e-06
16 0.1 303 1.581e-06 2.187e-06 1.233e-06
18 0.1 303 1.875e-06 2.421e-06 1.454e-06
20 0.1 303 2.18e-06 2.656e-06 1.679e-06
Save input, initial, and final data to [IVfit.xlsx]
Plot optimized
*** fit.last_message: No message
-
フィッティング (Launcher:optimize_ATLAS:[fit]): 全パラメータで非線形最小二乗法を実行する
test% python ../optimize_decay.py fit
-
十分に収束するまで、フィッティングを繰り返す。
必要があれば decay_parameters.csv の値 (pk)
を修正したり、一部パラメータを固定 (optid=0)
したりして
最適解を求める。
-
変数の誤差 (Launcher:optimize_ATLAS:[error]):
フィッティングが終了したら、尤度関数を計算し、フィッティング結果の精度を確認する
test% python ../optimize_ATLAS.py error
コンソール出力 (peaks-out.txt):
Accuracy within one sigma:
000: cdp : 9.15705e+17 -1.597e+15 + 1.386e+15 in ( 9.14108e+17 - 9.17091e+17)
001: mun : 11.0007 -0.1461 + 0.1282 in ( 10.8546 - 11.1289)
002: nta : 5.66995e+19 -2.573e+18 + 3.597e+18 in ( 5.41263e+19 - 6.02969e+19)
003: wta : 0.0197956 -0.0005663 + 0.000974 in ( 0.0192293 - 0.0207696)
004: nga : 1.33184e+18 -1.923e+15 + 2.122e+15 in ( 1.32991e+18 - 1.33396e+18)
005: wga : 1.00904 -0.001182 + 0.001383 in ( 1.00786 - 1.01042)
006: ntd : 1.02118e+11 * + 3.008e+16 in ( * - 3.00767e+16)
007: wtd : 2 * + * in ( * - * )
wtdは範囲を決められなかった
(想定範囲内では、損失関数に影響を与えない)
-
欠陥密度分布 (DOS)
のプロット (Launcher:optimize_ATLAS:[plot
DOS])
test% python ../optimize_decay.py --mode=plot_dos
-
IV特性のプロット(Launcher:optimize_ATLAS:[plot
IV])
test% python ../optimize_decay.py --mode=plot_iv