いろいろあって、ダイオードのシミュレーションをする必要があり、TCADソフトを使ってみることにした。
SynopsysとかSilvacoのソフトだとライセンス料がけっこう高いので、まずは無料で使えるTCADソフトを試してみる。
Charonってなんやねん
- Charon Parallel TCAD simulation
- 中性子放射および他の放射源からの影響(イオン化など)による変位損傷のモデリングをサポートする半導体TCADコード
サンディア国立研究所 (SNL) が開発している、オープンソース(GNU GPL3)のTCADソフト。
SNLでは核兵器の研究とかもやっているので、放射線による影響を考慮したシミュレーターを自分で作る必要があった、ということなんでしょうかね。
インストール手順
ユーザーマニュアルを読め。手順多くてけっこうダルい。
今回はWSL2 + Ubuntu 22.04の環境にインストールした。
- Ubuntu 20.04だとインストールできない。Ubuntu 22.04ならインストールできた。
- 20.04だと
Trilinosのビルドでコケる。 /usr/bin/ld: ../exodus/libexodus.a(ex_utils.c.o): undefined reference to symbol 'H5get_libversion@@HDF5_SERIAL_1.8.7' /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libhdf5_serial.so: error adding symbols: DSO missing from command line collect2: error: ld returned 1 exit status- Trilinos/issues/7906
- 20.04だと
# 1. パッケージのダウンロード # 使用するBLASライブラリによって速度が変わる。今回はOpenBLAS $ sudo apt install subversion git build-essential cmake libhdf5-dev openmpi-common libboost1.74-dev netcdf-bin libnetcdf-dev libopenblas-base libopenblas-dev # 作業ディレクトリ $ mkdir ~/work $ cd ~/work # TriBITSのダウンロード $ cd ~/work $ git clone https://github.com/TriBITSPub/TriBITS.git $ cd ~/work/TriBITS $ git checkout 769f615fafb $ export TRIBITS_BASE_DIR=~/work/TriBITS/ # Charonの展開 $ cd ~/work $ tar xzf charon-distrib-v2_2.tar.gz # Trilinosのダウンロード $ cd ~/work/tcad-charon $ git clone https://github.com/Trilinos/Trilinos.git Trilinos $ cd Trilinos $ git checkout 81e9581a3c5 # ビルドパラメータ設定 # 高速化のために環境に合わせたパラメータを設定する。 # 今回は高速化を考慮せず、標準的なパラメータで $ cd ~/work/tcad-charon/scripts/build $ mkdir ≪ユーザー名≫ $ cd ≪ユーザー名≫ $ cp ../all/General.opts $ cp ../all/Linux.opts # ビルドする $ cd ~/work $ mkdir build-charon $ cd build-charon $ python3 ~/work/tcad-charon/scripts/build/all/build_charon.py $ make -j16 $ sudo make install
ビルドパラメータは、tcad-charon/scripts/build/all に標準的なものがいくつか入っています。
( attaway, chama, eclipce みたいな、SNLが保有するスーパーコンピューター用のビルドパラメータもある)
この中から必要なものを選んで、場合によってはファイルを編集して、Linuxユーザーと同じ名前のフォルダを作ってそこにコピーします。
CUDA用のビルドパラメータ ascicgpu21.opts もあるので、これ使うとGPUで高速化するのかも。
動作確認だ!!!!
動作確認のために、チュートリアルを実行してみよう!
どういうわけか charonInterpreter.py へのパスが通っていないので、直接指定して実行する。
$ ~/work/charon-build/src/interpreter/charonInterpreter/charonInterpreter.py -i pndiode.iv.inp --run
executing: mpirun -np 1 /usr/local/bin/charon_mp.exe --i=pndiode.iv.inp.xml --current |& tee -a pndiode.iv.inp.log
/bin/sh: 1: Syntax error: "&" unexpected
なぜか、stderrをstdoutにリダイレクトする記述でコケている。なんでや!!!
参考: https://dec9ue.hatenablog.com/entry/2016/04/02/224249
釈然としない思いを抱えながら charonInterpreter.py の |& を 2>1 | に変更する。どうして…?
$ diff -up tcad-charon/scripts/charonInterpreter/charonInterpreter.py charon-build/src/interpreter/charonInterpreter/charonInterpreter.py
--- tcad-charon/scripts/charonInterpreter/charonInterpreter.py 2022-05-19 04:41:52.000000000 +0900
+++ charon-build/src/interpreter/charonInterpreter/charonInterpreter.py 2022-07-19 20:50:31.109598900 +0900
@@ -148,10 +148,9 @@ if args.input != None:
logFilename = filename+".log"
if runLog:
if silentOutput == True and runLog == True:
- logFilenamePlus = " |& tee -a "+logFilename+" >& /dev/null"
+ logFilenamePlus = " 2>&1 | tee -a "+logFilename+" >& /dev/null"
else:
- logFilenamePlus = " |& tee -a "+logFilename
-
+ logFilenamePlus = " 2>&1 | tee -a "+logFilename
if args.np != None:
numProcs = args.np
チュートリアルを実行してみよう
Charon-QuickStart-v2.2-Public.pdfを読みなさい。
$ cd ~/work $ curl -L https://www.sandia.gov/app/uploads/sites/106/2022/07/CharonTutorial-v2.2.tgz | tar xz $ cd CharonTutorial-v2.2 $ ls Charon-QuickStart-v2.2-Public.pdf Tutorial1 Tutorial2 Tutorial3 Tutorial5 $ cd Tutorial1 $ ~/work/charon-build/src/interpreter/charonInterpreter/charonInterpreter.py -i pndiode.iv.inp --run $ ls currents-loca.dat pndiode.iv.inp pndiode.iv.inp.xml pndiode.nlp.exo pndiode.dd.iv.exo pndiode.iv.inp.log pndiode.iv.timings
いやしかし…インストールとチュートリアル実行まではできたけど、自分のやりたいシミュレーションを実行できるようになるまですごい難しそうだぞコレ…。大変だ…
メッシュを切る
メッシュを切るためには、Coreform Cubit が必要。
いちおう無料版もあるっぽい。
Exodus-II形式に対応したソフトがあれば Cubit じゃなくてもよい。
シミュレーションの流れ
- メッシュを切る
- NLP (nonlinear Poisson) シミュレーション
- DD (drift-diffusion) シミュレーション
- いろいろな解析
NLP解は、最初に静電ポテンシャルに対して計算されます。 これは、DD解の初期推定として使用されます。
Tutorial1は、 NLPシミュレーションまで実行してある。なので、DDシミュレーションだけ実行すればIV特性が得られる。
Tutorial2は、メッシュ作成からやる必要がある。
メモ
- 長さの単位は基本的にはμm
- ドープ濃度は cm^-3