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}と予測している。 お手軽なわりにかなりいい結果だと思う。

gist6dc418f28adafd0bf7e8deb9c40f4e60