pythonで化学計算機を作る【pymatgen】

pymatgenとは

pymatgenとは,化学計算ができるpythonのライブラリです。簡単に化合物のオブジェクトを作り,その性質を抜き出すことができます。初めての方はpythonでなんとなく材料研究者の気分を味わおう【pymatgen入門】が非常に分かりやすいのでこれを一読することをお勧めします。

秤量自動計算機を作る

pymatgenを使えば,入力された化合物のモル質量などが分かります。例えば水1gなら1/18molですね。この水に対して1/2倍の量の砂糖を溶かしたいとします。これは1/36molですね。この1/36molに砂糖の分子量を掛ければ,入れるべき砂糖の量が分かります。

今回作るプログラムの結果がこちらです。

計算の原理は簡単ですが,いちいち分子量をwikipediaで調べて電卓叩くのも面倒です。なので,これから作るプログラムは以下の機能を持つことにしましょう。

  1. 元となる物質名を入力
  2. その物質の重さ(g)を入力
  3. その物質の物質量を出力
  4. 他の物質を入力
  5. その物質の,元となる物質に対する比を入力
  6. Noが入力されるまで他の物質を入力し続ける
  7. 他の物質の量を出力

[amazon_long]

元となる物質を入力する


from pymatgen.core import Composition

#化合物の組成式を入力
comp_name = input("Target compound name:\n")
gram = input("Target compound weight(g)\n")
comp = Composition(comp_name)

#化合物の分子量を出力
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))
        

まず最初にpymatgen.coreからCompositionをインポートします。これは化合物を扱う便利なライブラリです。

次に化合物の名前を入力させます。この時の入力は,水ならH2Oと,数字はそのまま大文字で入れて構いません。組成式を入れましょう。同様に重さも入れます。

Composition(化合物名)とすることでその化合物の情報が入ったオブジェクトを作ることができます。上ではcomp.weightとすることで,そのモル質量を出力できます。すごい。

あとは単純で,入力された重さは文字列なのでfloatで小数に変換し,それをモル質量で割ることで入力された物質の物質量を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))
while(True):
    pass
        

これで完成です。解説していきます。

まず他の物質名とそのモル質量のリストを作ります。

次にyが押される限り,化合物の名前とその比を入力させます。この比は例えば水素と酸素から水を作る時,酸素を1とすると水素は2ですので,元となる物質が酸素の時はここでは水素を入力することになるので2となります。逆では0.5ですね。

“Calculate other compound?”でn(正確にはy以外)が押されると,必要量表示に移ります。

ここでは物質名:必要量を表示します。まずComposition(matlist[i])で入力された物質のオブジェクトを作り,.weightメソッドでそのモル質量を出します。それに組成比×元となる物質の物質量をかけ,必要量を算出します。

使用例

H2Oの合成

H2とO2から水を合成する場合の秤量です。水1molに対してH2は1,O2は0.5ですので,下のように入力します。

砂糖の水への溶解

溶かしたい水の量を100gとして,それに対して0.2molの砂糖を溶かします。注意したいのが,mol/Lではないということです。このような用とには向かないかもしれません…

チタン酸バリウムの秤量

私がこのプログラムを作った動機でもある,セラミックスの合成時の秤量です。セラミックスの合成は基本的に酸化物や原料を組成比で混ぜます。今回は例としてチタン酸バリウム(BaTiO3)を,BaCO3とTiO2から合成する場合をやってみました。

完成コード(忙しい方はこちらをクリック)


    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)
    #化合物の分子量を出力
    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)

おわりに

pymatgenが意外と簡単な用途でも力を発揮することが分かると思います。極力人の手での計算は減らしていきましょう。お読みいただきありがとうございました!

[amazon]

「pythonで化学計算機を作る【pymatgen】」に1件のコメントがあります

  1. ピンバック: pymatgenのインストール方法(conda,pip) | Wak-tech

コメントする

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