Skip to content

Python連携機能を用いた全エネルギーの体積依存性の予測#

Advance/NanoLaboではPythonスクリプトを介してさまざまな操作を行うことが可能です。Pythonスクリプトを活用することで煩雑なワークフローを自動化することができます。

本事例ではゲルマニウム単結晶の全エネルギーがユニットセルの体積にどのように依存するかを解析します。体積が異なる31個のモデルについて、Pythonスクリプトを用いて、モデルの作成および計算結果の解析を行います。

Warning

本ページではAdvance/NanoLaboの機能紹介を目的としてサンプルコード1を記載していますが、その動作の保証はしかねます。Python連携機能の使用方法はオンラインマニュアルをご覧ください。

体積が異なるモデルの作成#

ゲルマニウム単結晶の最適化構造

ゲルマニウム単結晶の最適化構造2をPythonスクリプトから読み込み、新しいプロジェクトを作成します。新たに作成したプロジェクトについて、ユニットセル3を等方的に拡大(縮小)します。拡大(縮小)率を変えながらこの手続きを繰り返すことで、体積の異なる複数個のプロジェクトを作成することができます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
import nanolabo
import numpy as np

# ユニットセルの体積を0.80, 0.81, ... 1.09, 1.10倍にした計31個のモデルを作成する
N = 31
scale_list = np.linspace(0.8, 1.1, N)

for idx, scale_volume in enumerate(scale_list):
    # 最適化構造(Ge-Optimized.cif)を読み込み、新しいプロジェクトを作成する
    # プロジェクト名はGe-0, Ge-1, ... Ge-29, Ge-30となる 
    prj_name = f'Ge-{idx}'
    nanolabo.create_project('Ge-Optimized.cif', prj_name)

    # ユニットセルを等方的に拡大・縮小する
    lattice = nanolabo.get_lattice(prj_name)
    lattice = np.array(lattice) * scale_volume ** (1./3.)  
    nanolabo.set_lattice(prj_name, lattice)
    nanolabo.save_project(prj_name)

計算実行#

プロジェクト名を指定してrun_project関数を呼び出すことで、計算を実行します。

1
2
3
for idx, scale_volume in enumerate(scale_list):
    prj_name = f'Ge-{idx}'
    nanolabo.run_project(prj_name, 'SCF')
ジョブ実行中の画面

体積依存性の解析#

計算終了後にqe_get_total_energy関数を呼び出すことで、系の全エネルギーを取得することができます。本事例では体積の異なる31個のプロジェクトから全エネルギーを読み出し、体積比―全エネルギープロットを描画しています。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 各モデルの全エネルギーをリストに読み込む
energy_list = [None] * N
for idx, scale in enumerate(scale_list):
    prj_name = f'Ge-{idx}'
    nanolabo.open_project(prj_name)
    converge, energy = nanolabo.qe_get_total_energy(prj_name)
    energy_list[idx] = energy if converge else None
    nanolabo.close_project(prj_name)

# 体積比―全エネルギーのプロットを描画する
import matplotlib.pyplot as plt

plt.scatter(scale_list, energy_list)
plt.show()
体積比―全エネルギーのプロット

平衡構造と比較して、体積比が以内の領域では、全エネルギーの変化はに満たないですが、ほど圧縮されるとだけ不安定化することが分かります。

このような全エネルギーの体積依存性の解析を行うことで、体積弾性率や転移圧力を予測することも可能になります。

リンク#

関連ページ#


  1. サンプルコードはPython3.7以上を前提としています。サンプルコード中で NumPyMatplotlibを使用しています。これらについては各ライブラリの公式ウェブサイトをご覧ください。 

  2. 構造最適化計算をAdvance/NanoLabo上で実行し、その結果をcifファイル(Ge-Optimized.cif)にあらかじめ保存しています。 

  3. ユニットセルだけでなく原子座標の編集もPythonから行うことが可能です。