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に依存するため、引数設定ファイル、フィッティングパラメータ設定ファイルは、計算データディレクトリ毎に
準備している。

  1. 既に実行したファイルがある場合は削除する (Launcher:optimize_ATLAS:[clean])
    test% python ../optimize_decay.py clean
     ファイルを削除するかどうか聞いてくるので、
     ・ すべて削除する場合は all
     ・ 聞かれているファイル群だけ削除する場合は yes
     ・ 削除しない場合は no
     を入力し、ENTERを押す
     
  2. 初期化 (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
     
  3. 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
     
  4. 入力データの確認 (Launcher:optimize_ATLAS:[plot]): 入力データファイル input_data.xlsx を読み込み、プロットする
    test% python ../optimize_ATLAS.py plot

     
  5. フィッティング変数の初期値の確認 (Launcher:optimize_ATLAS:[sim]): 入力データファイル input_data.xlsx とフィッティング変数ファイル input_data_parameters.csv を読み込み、
    入力データとシミュレーション結果をプロットする
    test% python ../optimize_ATLAS.py sim

     
  6. 線形係数 (移動度)だけ非線形フィッティング (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
      
  7. フィッティング (Launcher:optimize_ATLAS:[fit]): 全パラメータで非線形最小二乗法を実行する
     
    test% python ../optimize_decay.py fit

     

  8. 十分に収束するまで、フィッティングを繰り返す。
    必要があれば decay_parameters.csv の値 (pk) を修正したり、一部パラメータを固定 (optid=0) したりして
    最適解を求める。
     

  9. 変数の誤差 (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は範囲を決められなかった (想定範囲内では、損失関数に影響を与えない)
     

  10. 欠陥密度分布 (DOS) のプロット (Launcher:optimize_ATLAS:[plot DOS]) 
     
    test% python ../optimize_decay.py --mode=plot_dos

     

  11. IV特性のプロット(Launcher:optimize_ATLAS:[plot IV])
     

    test% python ../optimize_decay.py --mode=plot_iv