pymatgenで結晶の体積を予測する
pymatgenにはpymatgen.analysis.structure_prediction.volume_predictor.DLSVolumePredictor
というクラスがあって、ボンド長のデータベースに基づいて与えられた結晶の体積を予測することができる(すごい)。
DLSVolumePredictor を使えるようにする
pymatgen.analysis.structure_prediction.volume_predictor.DLSVolumePredictor
をimportしようとするとDLS_bond_params.yaml
がないと怒られた。
多分私のインストールの仕方が悪いのだと思うが、とりあえず
https://github.com/materialsproject/pymatgen/blob/master/pymatgen/analysis/structure_prediction/DLS_bond_params.yaml
からyamlファイルをダウンロードしてpymatgen/analysis/structure_prediction
以下に配置すると動くようになる。
アルゴリズム
具体的なアルゴリズムは実装にしか説明がないみたい。 概要を自分用にまとめておく。
まず、結晶中の原子種Aのボンド長bp(M)を $$ bp(M) = r(M) + k(M) * (standard\,deviation\,of\,electronnegativity) $$ で予測する。 ここで、r(M)とk(M)はフィッティングパラメター。
各サイトの近傍原子までの距離と予測したボンド長bp(M)から期待される距離の比を取り、この比の最小値が1になるように結晶を拡大する。
icsd_vol=True
にすると、ICSD用に更に体積を1.05倍する。
例
cubic CaTiO3 でDLSVolumePredictorを試してみた。 material projectのデータによると体積は58.440Å^{3}なのに対して、DLSVolumePredictorは49.506Å^{3}と予測している。 お手軽なわりにかなりいい結果だと思う。