名城大学理工学部 応用化学科 永田研究室
トップ 教育 研究 プロフィール アクセス リンク キャラクター ブログ
トップ  >  ブログ  >  電気化学のシミュレーション:Python/ElectroKitty

 

ブログ「天白で有機化学やってます。」 ブログ「天白で有機化学やってます。」
< 化学・物質学科 体験実験講習会やります! | ブログトップ

電気化学のシミュレーション: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 からの変換が必要なのと、溶媒の粘度を動粘度で指定するあたりが要注意です。上の設定で、計算は数秒で終了します。なかなかいい感じです。

< 化学・物質学科 体験実験講習会やります! | ブログトップ