MLIP(Cu-Au)

最終更新日:2026年10月16日

情報
  • ASEのCalculatorとして利用可能な機械学習原子間ポテンシャル(MLIP)のインストールが必要
  • ここでは例として,CHGNetを用いる

ここで利用しているファイルはCrySPY_utility/examples/chgnet_Cu-Au_EA-vcからダウンロードできる. このチュートリアルでは,機械学習原子間ポテンシャル(MLIP)のCHGNetを用いてジョブスケジューラーを備えた計算機クラスタで行うことを想定している. Calculatorの部分を変更すれば,様々なMLIPを用いることができる. 手持ちのPCでも十分動作するので,そうしたい場合は入力を適宜変更すること. 対象となるシステムは2元系のCu-Au.

事前計算

EA-vcではcryspy.inでref_energies(ver. 1.4.3以下ではend_point)として,各元素単体の1原子当たりのエネルギーを基準として用いるため,事前に計算する必要がある. exampleファイルの中に二つのディレクトリがあるはず.

Au_fcc
├── POSCAR
├── chgnet_in.py
└── job_cryspy
Cu_fcc
├── POSCAR
├── chgnet_in.py
└── job_cryspy

結晶構造データ(POSCAR)とその構造最適化を行いエネルギーを求めるpythonスクリプト(chgnet_in.py)およびジョブスクリプト(job_cryspy)があるので適宜使用する計算機の環境に合わせて編集すること.

ジョブを実行する(ジョブサブミットのコマンドは適宜読み替えること).

cd Au_fcc
qsub job_cryspy
cd ../Cu_fcc
qsub job_cryspy
cd ..

計算が無事に終わったら,それぞれのディレクトリにref_energiesというファイルができており,ここに構造最適化後の1原子あたりのエネルギー(eV/atom)が出力されている.

cat Au_fcc/ref_energies
-3.2357187271118164
cat Cu_fcc/ref_energies
-4.083529472351074

これらをcryspy.inでの入力に用いる.

cryspy.in

cryspy.inの例.

[basic]
algo = EA-vc
calc_code = ASE
nstage = 1
njob = 20
jobcmd = qsub
jobfile = job_cryspy

[structure]
atype = Cu Au
ll_nat = 0 0
ul_nat = 8 8

[ASE]
ase_python = chgnet_in.py

[EA]
n_pop = 20
n_crsov = 5
n_perm = 2
n_strain = 2
n_rand = 2
n_add = 3
n_elim = 3
n_subs = 3
n_elite = 2
n_fittest = 10
slct_func = TNM
t_size = 2
maxgen_ea = 0
ref_energies = -4.08352709  -3.23571777

[option]
rslt_out = always
energy_output_interval = 1
backup_interval = 1
  • algo = EA-vc を使用.
  • v1.5.0以降は,[option]セクションのenergy_output_intervalで凸包の図と凸包からの距離のファイルの出力間隔(世代数)を指定できる.デフォルトは1(毎世代),0で自動出力を無効化.
  • v1.5.0以降は,[option]セクションのbackup_intervalで自動バックアップの間隔(世代数)を指定できる.デフォルトは1,0で自動バックアップを無効化.詳細は機能 > バックアップを参照.
  • MLIPではASEのCalculatorを用いるので,calc_code = ASEを使う.
  • jobcmdは計算機環境に合わせて変更すること.
  • [structure]セクションでは,ll_natで各元素の原子数の最小値,ul_natで最大値を指定.
  • n_pop = n_crsov + n_perm + n_strain + n_rand + n_add + n_elim + n_subs
  • ref_energies(ver. 1.4.3以下ではend_point)には事前計算しておいたCu, Auにおける各単体の1原子当たりのエネルギー(eV/atom)を入力.atypeの順番.
  • [EA]セクションのパラメータについては,入力ファイル > [EA] sectionおよび探索アルゴリズム > 組成可変型進化的アルゴリズム(EA-vc)を見ること.
  • 自動的にプロットされる凸包グラフのパラメータはチュートリアル > 組成可変型進化的アルゴリズム(EA-VC) > 解析と可視化も参考にすること.

calc_in/

calc_in/以下はチュートリアル > ランダムサーチ(RS) > ASE in your local PCと同様であるが,少しだけCHGNet用に変更している. ジョブスクリプトのpython本体のpathも計算機環境に合わせること.

calc_in/chgnet_in.py

# ---------- import
from ase.constraints import FixSymmetry
from ase.filters import FrechetCellFilter
from ase.io import read, write
from ase.optimize import FIRE, BFGS, LBFGS
from chgnet.model import CHGNetCalculator

# ---------- input structure
# CrySPY outputs 'POSCAR' as an input file in work/xxxxxx directory
atoms = read('POSCAR')

# ---------- set up
atoms.calc = CHGNetCalculator()
atoms.set_constraint([FixSymmetry(atoms)])
cell_filter = FrechetCellFilter(atoms)
opt = BFGS(cell_filter, trajectory='opt.traj')

# ---------- run
converged = opt.run(fmax=0.01, steps=2000)

# ---------- rule in ASE interface
# output file for energy: 'log.tote' in eV/cell
#                         CrySPY reads the last line of 'log.tote' file
# outimized structure: 'CONTCAR' file in vasp format
# check_opt: 'out_check_opt' file ('done' or 'not yet')
#                         CrySPY reads the last line of 'out_check_opt' file

# ------ energy
e = cell_filter.atoms.get_total_energy()    # eV/cell
with open('log.tote', mode='w') as f:
    f.write(str(e))

# ------ struc
opt_atoms = cell_filter.atoms.copy()
opt_atoms.set_constraint(None)    # remove constraint for pymatgen
write('CONTCAR', opt_atoms, format='vasp', direct=True)

# ------ check_opt
with open('out_check_opt', mode='w') as f:
    if converged:
        f.write('done\n')
    else:
        f.write('not yet\n')

calc_in/job_cryspy

#!/bin/sh
#$ -cwd
#$ -V -S /bin/bash
####$ -V -S /bin/zsh
#$ -N CuAu_CrySPY_ID
#$ -pe smp 2

# ---------- OpenMP
export OMP_NUM_THREADS=2

# ---------- ASE
/usr/local/Python-3.10.13/bin/python3 chgnet_in.py > out.log