Garfield 2014925 Makefile Source code Magboltz Component Elmer
Garfield++ 2014/9/25 京大理 髙田淳史
Makefile例
Source codeの流れ Magboltz ガスの定義 (組成・温度・圧力…) Component. Elmer geometry, 電場構造, 比誘電率の読み込み Sensor simulationするarea・電極の定義 Avalanche. Microscopic 増幅過程のシミュレーション
Magboltz部分 Medium. Magboltz *gas = new Medium. Magboltz(); gas->Set. Composition("ar", 90. , "c 2 h 6", 10); 組成の定義 (6種まで) gas->Set. Temperature(293. 15); 温度の定義 gas->Set. Pressure(760. ); 圧力の定義 gas->Enable. Penning. Transfer(0. 31, 0, "ar"); Penning効果の定義 gas->Set. Max. Electron. Energy(200. ); gas->Enable. Drift(); Cross section tableの最大値 電子のdrift領域として定義 gas->Initialise(); gas->Load. Ion. Mobility(“file名”) イオンのmobility
定義されているGas Garfield++のUser Guide Appendix Bにも記載 CF 4, Ar, He-3, Ne, Kr, Xe, CH 4, C 2 H 6, C 3 H 8, i. C 4 H 10, CO 2, neo. C 5 H 12, H 2 O, O 2, NO, N 2 O, C 2 H 4, C 2 H 2, D 2, CO, Methylal, DME, Reid-Step, Maxwell-Model, C 2 F 6, SF 6, NH 3, C 3 H 6, c. C 3 H 6, CH 3 OH, C 2 H 5 OH, C 3 H 7 OH, Cs, F 2, CS 2, COS, CD 4, BF 3, C 2 HF 5, C 2 H 2 F 4, TMA, CHF 3, CF 3 Br, C 3 F 8, O 3, Hg, H 2 S, n. C 4 H 10, n. C 5 H 12, N 2 (Phelps), Ge. H 4, Si. H 4
Ar 90% + Ethane 10% Avalanche Size r : Penning Transfer Rate □:No. 10 2004/5/13 15: 00 2004/5/13 23: 40 ▲:No. 16 2005/10/11 21: 00 ■:イオンの数 ●:電子の数 • • . 6 0 r= . 4 0 r= E tive ffec 値) 考 in ( 参 ga r= 0. 2 . 0 0 r= Avalanche Sizeの 平均値をplot Penning Transfer Rateの文献値は 0. 31± 0. 01 (JINST 2010 P 05002)
Component. Elmer部分 Component. Elmer *elm = new Component. Elmer(“gemcell/mesh. header”, “gemcell/mesh. elements”, “gemcell/mesh. nodes”, “gemcell/dielectrics. dat”, “gemcell/gemcel. result”, “cm"); elm->Enable. Periodicity. X(); elm->Enable. Mirror. Periodicity. Y(); elm->Set. Medium(0, gas); Medium. Magboltzの情報とリンク elm->Set. Weighting. Field(“gemcell/gemcell_Wtlel. result”, “wtlel”); 重み付電場の読み込み
Sensor部分 Sensor *sensor = new Sensor(); sensor->Add. Component(elm); sensor->Set. Area(-axis_x, -axis_y, -axis_z, axis_x, axis_y, axis_z); Simulationするareaの範囲の定義 sensor->Add. Electrode(elm, “wtlel”); 信号読み出し電極 sensor->Set. Time. Window(0, t. End/ns. Bins, ns. Bins); 開始時刻 bin幅 bin数
増幅時の電子をトレース Avalanche. Microscopic部分 Avalanche. Microscopic *aval = new Avalanche. Microscopic(); aval->Set. Sensor(sensor) aval->Avalanche. Electron( x, y, z, vx, vy, vz); int ne, ni; Seed電子の初期位置 aval->Get. Avalanche. Size(ne, ni); Seed電子の初速 増幅で生じた電子とイオンの数 int nd = aval->Get. Number. Of. Electron. Endpoints(); for (int i=0; i<nd; i++) { double x 0, y 0, z 0, t 0, e 0, x 1, y 1, z 1, t 1, e 1; int status; 電子の初期位置・時刻・エネルギー aval->Get. Electron. Endpopint(i, x 0, y 0, z 0, t 0, e 0, x 1, y 1, z 1, t 1, e 1, status); } 電子の終着位置・時刻・エネルギー
イオンの方は… Avalanche. MC *ion = new Avalanche. MC(); ion->Set. Sensor(sensor); ion->Set. Distance. Steps(2 e-4); int nd = aval->Get. Number. Of. Electron. Endpoints(); for (int i=0; i<nd; i++) { double x 0, y 0, z 0, t 0, e 0, x 1, y 1, z 1, t 1, e 1; int status; aval->Get. Electron. Endpopint(i, x 0, y 0, z 0, t 0, e 0, x 1, y 1, z 1, t 1, e 1, status); ion->Drift. Ion(x 0, y 0, z 0, t 0); } なだれ電子の発生点にイオンを作って 個々に追尾する
信号波形 gas->Load. Ion. Mobility(“file名”); elm->Set. Weighting. Field(“file名”, “名前”); sensor->Add. Electrode(elm, “名前”); sensor->Set. Time. Window(start, w_bin, n_bin); aval->Enable. Signal. Calculation(); ion->Enable. Signal. Calculation(); for( ; ; ){ sensor->Clear. Signal(); for(int j=0; j<n_bin; j++) double w = sensor->Get. Signal(“名前”, j); } イオン成分: Get. Ion. Signal(“名前”, j) 電子成分: Get. Electron. Siganl(“名前”, j);
- Slides: 16