Pymatgen:Compositionクラスの利用方法

この記事ではPymatgenのElementモジュールの利用方法について簡単に紹介します。

Compositionクラスでは、組成の文字列から様々な情報を取り出せます。記事の後半では、Compositionクラスを応用した簡単な秤量計算機のプログラムを紹介します。

※この記事はPymatgenの使用法・実例をまとめたPymatgenの使い方の一部です。

Compositionクラスの呼び出し

  1. import pymatgen as mgと入力
  2. comp = mg.Composition("BaTiO3")と入力して、compという変数にCompositionオブジェクトを割り当てる。

これで呼び出しは完了です。このcompに対して操作することで、この例でいうBaTiO3の各種情報を取り出せます。

Compositionクラスの属性

試しにBaTiO3の分子量を取得してみましょう。

print(comp.weight)


分子量が取得できました。

その他取得できる情報の一例を下に示します。

  • comp.total_electrons:全電子数

  • comp.fractional_composition:全体が1になるような組成

  • comp.get_atomic_fraction(el):elのモル分率
    elにはElementオブジェクトを入れます。これはmg.Element("name")で生成できます。例えばBaのモル分率を知りたい場合は以下のようにしましょう。

  • comp.get_wt_fraction(el):elの重量分率

Baは重いので、BaTiO3のうち58.8%の重量を占めているようですね。

このように、プログラム上便利な情報を取ってくれるのがCompositionクラスです。

他の属性や関数などは公式documentを参考にしてください。

秤量計算機を作ってみよう

実用的な秤量計算機を、Compositionクラスを用いて作ってみます。

完成コード

先に完成コードを示します。.pyファイルや、jupyter notebook上のセルに入力して実行すると動きます。

from pymatgen.core import Composition
from time import sleep
#化合物の組成式を入力
comp_name = input("Target compound name:\n")
gram = input("Target compound weight(g)\n")
comp = Composition(comp_name)
#化合物の物質量(mol)を出力
print("Weight of {} per mol:\n{:.3f}\n".format(comp_name,comp.weight))
comp_mol = float(gram)/comp.weight
print("mol of compound:{:.5f}".format(comp_mol))

mat_list = []
mol_list = []
#nが入力されるまで原料化合物の入力
while input("Calculate other compound? (y/n):") == "y":
    #化合物の組成式を入力
    mat_list.append(input("compound name:"))
    mol_list.append(input("composition ratio:"))

#入力された化合物の必要量を表示
print("\n=============================================\n")
for i in range(len(mat_list)):
    print("{}:\n{:.4}g\n".format(mat_list[i],Composition(mat_list[i]).weight*float(mol_list[i])*comp_mol))

sleep(60)

以下解説です。

組成の入力

まず組成を文字列として入力し、それをCompositionオブジェクトに変えます。

comp_name = input("Target compound name:\n")
gram = input("Target compound weight(g)\n")
comp = Composition(comp_name)

この時に、最終的に作りたい化合物の必要重量を入れておきましょう。例えばBaTiO3を1.5 g作りたい場合は、それぞれの入力で「BaTiO3」「1.5」と入力します。

目的化合物のモルを算出

次に、入力した情報から、目的の物質の量は何モルかを算出します。例えばBaTiO3が1.5gがあった時、その物質量(モル)は1.5/233.19(分子量) となりますね。それをプログラムに書き下しただけです。

comp_mol = float(gram)/comp.weight
print("mol of compound:{:.5f}".format(comp_mol))

合成に必要な物質のリストを作成

ここで2つのリストを用意します。一つ目は原材料の名前を格納するmat_list、二つ目はそのモル比を格納するmol_listです。
H2Oの場合、簡単に以下のような合成式を考えます。
H2 + 1/2O2 –> H2O

目的物を1とした時、H2は1、O2は0.5になりますね。この1,0.5をmol_listに格納し、計算に使います。

mat_list = []
mol_list = []
#nが入力されるまで原料化合物の入力
while input("Calculate other compound? (y/n):") == "y":
    #化合物の組成式を入力
    mat_list.append(input("compound name:"))
    mol_list.append(input("composition ratio:"))

while文にして、目的物に対する各成分のモル比を入力してあげます。H2Oの場合は「H2, 1, O2, 0.5」のようにします。

各原料の必要重量を算出

#入力された化合物の必要量を表示
print("\n=============================================\n")
for i in range(len(mat_list)):
    print("{}:\n{:.4}g\n".format(mat_list[i],Composition(mat_list[i]).weight*float(mol_list[i])*comp_mol))

ここでは各原料をfor文で回し、各成分の必要量を算出しています。

各成分の必要なmol数は、モル比×目的物のmol数で表されますね。
例えばH2Oが1.8g (0.1mol)作りたい場合に必要なO2は、0.5×0.1 = 0.05molになります。

その計算がfloat(mol_list[i])*comp_molです。

原料のモル質量(Composition.weight)にこのmol数を掛ければ必要な重量が出てきます。

それを計算する式が以下です。
Composition(mat_list[i]).weight*float(mol_list[i])*comp_mol)

以上がCompositionクラスを使った秤量計算機の一例でした。

このように単純な機能でありながら、人間では時間のかかることを短い時間で行うことができます。

他のpymatgeの使い方

その他のPymatgenの使用法についてはPymatgenの使い方をご覧ください。

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です