電気化学のシミュレーション:Python/ElectroKitty 2025/10/28(火)
だいぶ前に「電気化学のシミュレーション:Pythonを使ってみる」という記事を書きました。そこで紹介したコードは、シミュレーションの雰囲気をつかむには十分ですが、研究現場で使うとなると、コードの正当性が査読論文の形で公開されているパッケージを使いたいところです。探してみたら、見つかりました! 今年の4月に公開された論文です。"ElectroKitty: A Python Tool for Modeling Electrochemical Data Including Non-Langmuir Adsorption", O. Vodeb, P. F. B. D. Martins, D. Strmčnik, N. Hodnik, M. Gaberšček, ACS Electrochemistry 2025, 1, 1540-1544. https://doi.org/10.1021/acselectrochem.4c00218
ソースコードは GitHub にあります。https://github.com/RedrumKid/ElectroKitty/tree/master ……えーっと、Kitty ってもうちょっと可愛いイメージなんですが、まあいいか。
Python がインストール済みであれば、pip install electrokitty でインストールできます。使い方は下のようになります。(いちいち self がついているのは、Tkinter を使ったコードの一部を切り出したためです。気にしないでください。)
from electrokitty import ElectroKitty
...
# 初期化
self.mechanism = "E(1): a = b \n E(1): b = c"
# 電極反応の定義 [alpha, k0 [m/s], E0 [V]]
self.kinetic_constants = [[0.5, self.k0 * 1e-2, -0.99],
[0.5, self.k0 * 1e-2, -1.15]]
# 拡散係数 [m^2/s]
self.diffusion_constants = [self.diff * 1e-4, self.diff * 1e-4, self.diff * 1e-4]
# 初期濃度 [[吸着種 [mol/m^2]], [溶液種 [mol/m^3]]
self.initial_concentrations = [[], [self.bulk * 1e6, 0, 0]]
# 空間情報
# [格子点の間隔, 格子の全長, 溶媒の動粘度 [m^2/s], RDEの回転数 [Hz]]
# アセトニトリルの動粘度:粘度 (0.343 mPa•s)/密度 (0.786 g/cm^3) = 4.36e-7 m^2/s
self.spatial_information = [0.001, 20, 4.36e-7, 0]
# セル定数 [温度[K], 抵抗[ohm], 二重層容量[F/m^2], 電極面積[m^2]]
self.cell_constants = [293, 0, 0, 5e-4*5e-4*3.1416]
# 吸着
self.iso = []
# 電位
self.Ei = -0.2
self.E_switch = -1.5
self.rate = 0.1
self.nt = 1000
# シミュレーションオブジェクトを作成
self.ec = ElectroKitty(self.mechanism)
self.ec.V_potential(self.Ei, self.E_switch, self.rate, 0, 0, self.nt)
self.ec.create_simulation(self.kinetic_constants, self.cell_constants, self.diffusion_constants, self.iso, self.spatial_information, self.initial_concentrations, kinetic_model = "BV")
# シミュレーションを実行、描画
self.potential, self.current, _ = self.ec.simulate()
self.ax.plot(self.potential, self.current*1e6, "b")
単位系がすべて SI 単位なので、cm や L からの変換が必要なのと、溶媒の粘度を動粘度で指定するあたりが要注意です。上の設定で、計算は数秒で終了します。なかなかいい感じです。
