いろいろあって、ダイオードのシミュレーションをする必要があり、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