1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

RustBCAを使った二体衝突近似

Last updated at Posted at 2025-09-27

さいしょに

私が学生のころ、イオン注入のシミュレーションソフトとしては、SRIMを使用していました。なお、SRIMは非営利目的で使用してくださいとライセンスに書いてあります。

Permission to use, copy, modify and distribute this software for any non-commercial purpose and without fee is hereby granted, provided that this copyright and permission notice appear on all copies of the software.

イオン注入の条件を考える際、シミュレーションは必須と言ってよいでしょう。なんとなくイオン注入について会社の人に説明する機会が生まれそうな気配があり、営利目的でも使用できるシミュレーター無いかなと探していたところ、RustBCAというソフトウェアがありました。この記事では、簡単な紹介と最低限動かすところまでを示します。
また、今回調べる過程にて、SRIMの作者であるJames F. Ziegler氏が最近ご逝去された事を知りました。ご冥福をお祈りいたします。

RustBCAとは

RustBCAとは、二体衝突近似(binary collision approximation, BCA)を用いて、スパッタリング、反射、注入などのイオン-物質相互作用をシミュレートする、Rustで記述された汎用的なコードです。
GUIは無いのですが、とりあえず動かすだけならRustの知識は不要で、tomlファイルに必要な情報を書き込んで実行すれば、良い感じの結果が得られる素敵なコード、という認識です。

RustBCA is a general-purpose, high-performance code for simulating ion-material interactions including sputtering, reflection, and implantation using the binary collision approximation (BCA), written in Rust!

準備

Windows11での使用を想定しています。以下のソフトウェアをインストールする必要があります。

  • Rust
  • Python
  • Git
  • Visual Studio Build tool(コンポーネントが必要)

それぞれ、基本的に公式から最新のインストーラーを使ってインストールすれば良いです。

ハマり点

地味にハマったのは、Visual Studioのコンポーネントをインストールする必要がある点です。これがないと、コンパイルする際にlikner not foundというエラーが起きてうまく動きません。必要なコンポーネントは以下の記事を参考にしました。

error: linker `link.exe` not found

Rustを触ったのは初めてだったのですが、最低限ここを読んでhello worldが出来る所までは確認しておくと良いでしょう。

動かそう

とりあえずは、以下のようにcloneして必要なPythonのライブラリをインストールします。これが終われば準備OK

git clone https://github.com/lcpp-org/rustbca
cd rustbca
python -m pip install .

そこで、exsamplesフォルダにあるlayered_geometry.tomlの条件でシミュレーションしたい場合、以下のコードでシミュレーションが開始します。

cargo run --release examples/layered_geometry.toml

結果は.outputファイルとして保存されます。グラフ化はpythonで行う必要があるので、下のように書けば良いです。今回の条件ではこの深さでHeが止まったよ、と理解すれば良いのかなと思います。

import numpy as np
import matplotlib.pyplot as plt

# 必要に応じてワーキングディレクトリを変更する

deposited_ions = np.genfromtxt(
    "2000.0eV_0.0001deg_He_TiO2_Al_Sideposited.output",
    delimiter=",",
    names=["M", "Z", "x", "y", "z", "collisions"],
)

fig, ax = plt.subplots()
ax.hist(deposited_ions["x"], bins=100)

ax.set_xlabel("micron")

plt.show()

Figure_1.png

.tomlどうすれば問題

詳しくはwikiのほうを読む必要がありますが雑にGeminiに聞いてもだいたい回答してくれます。

エネルギー2000 eV(2 keV)のヘリウムイオン(He)を、二酸化チタン(TiO₂)/ アルミニウム(Al)/ シリコン(Si)の多層膜ターゲットに、ほぼ垂直(0.0001度)に入射させたときに、ターゲット原子がどのように弾き飛ばされるか(スパッタリングや内部での変位)を調べる

今は、細かいところは触りながら「こんな感じかなあ」とやっているところです。怪しいところが結構あるので、別途頻繁に更新するようなページを作って公開メモ帳みたいな形でやっていきます。

参考リンク

James Ziegler氏に関する記事

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?