無料のTCADソフト Charonのインストール

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

  • pndiode.iv.inp
    • 入力ファイル(計算条件、パラメータなど)
  • pndiode.nlp.exo
    • 入力ファイル(NLP解析の計算結果)
    • DD解析を実行するために必要
  • pndiode.dd.iv.exo
    • DD解析の計算結果の3次元メッシュ
    • 可視化ソフト ParaViewVisItで開ける
  • currents-loca.dat
    • IV特性の計算結果
$ 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 じゃなくてもよい。

シミュレーションの流れ

  1. メッシュを切る
  2. NLP (nonlinear Poisson) シミュレーション
  3. DD (drift-diffusion) シミュレーション
  4. いろいろな解析

NLP解は、最初に静電ポテンシャルに対して計算されます。 これは、DD解の初期推定として使用されます。

Tutorial1は、 NLPシミュレーションまで実行してある。なので、DDシミュレーションだけ実行すればIV特性が得られる。
Tutorial2は、メッシュ作成からやる必要がある。

メモ

  • 長さの単位は基本的にはμm
  • ドープ濃度は cm^-3

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中