ASE on your local PC (Cu-Ag-Au)
2025年7月11日 更新
ここで利用しているファイルはCrySPY_utility/examples/ase_Cu-Ag-Au_EA-vcからダウンロードできる.
このチュートリアルでは,計算が軽いASEのPure Python EMT calculatorを用いてローカルPCで動作確認を行う.対象となるシステムは3元系のCu-Ag-Au.
cryspy.in
cryspy.in
の例.
[basic]
algo = EA-vc
calc_code = ASE
nstage = 1
njob = 5
jobcmd = zsh
jobfile = job_cryspy
[structure]
atype = Cu Ag Au
ll_nat = 0 0 0
ul_nat = 8 8 8
[ASE]
ase_python = ase_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
target = random
n_elite = 2
n_fittest = 10
slct_func = TNM
t_size = 2
end_point = 0.0 0.0 0.0
maxgen_ea = 0
[option]
calc_in/
calc_in/以下はチュートリアル > ランダムサーチ(RS) > ASE in your local PCと同様
calc_in/ase_in.py
from ase.constraints import FixSymmetry
from ase.filters import FrechetCellFilter
from ase.calculators.emt import EMT
from ase.optimize import BFGS
import numpy as np
from ase.io import read, write
# ---------- input structure
# CrySPY outputs 'POSCAR' as an input file in work/xxxxxx directory
atoms = read('POSCAR', format='vasp')
# ---------- setting and run
atoms.calc = EMT()
atoms.set_constraint([FixSymmetry(atoms)])
cell_filter = FrechetCellFilter(atoms, hydrostatic_strain=False)
opt = BFGS(cell_filter)
# ---------- 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
# ---------- ASE
python3 ase_in.py > out.log
ASE-CHGNet(Cu-Au)
2025年7月11日 更新
ここで利用しているファイルはCrySPY_utility/examples/ase_chgnet_Cu-Au_EA-vcからダウンロードできる.
このチュートリアルでは,機械学習ポテンシャルのCHGNetを用いてジョブスケジューラーを備えた計算機クラスタで行うことを想定している.
手持ちのPCでも十分動作するので,そうしたい場合は入力を適宜変更すること.
対象となるシステムは2元系のCu-Au.
事前計算
EA-vcではcryspy.in
で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 ..
計算が無事に終わったら,それぞれのディレクトリにend_point
というファイルができており,ここに構造最適化後の1原子あたりのエネルギー(eV/atom)が出力されている.
cat Au_fcc/end_point
-3.2357187271118164
cat Cu_fcc/end_point
-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
target = random
n_elite = 2
n_fittest = 10
slct_func = TNM
t_size = 2
maxgen_ea = 0
end_point = -4.08352709 -3.23571777
[option]
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
VASP(Fe-Al)
2025年7月12日
バージョン1.4.2でEA-vcはVASPに対応.
ここで利用しているファイルはCrySPY_utility/examples/vasp_Fe-Al_EA-vcからダウンロードできる.
このチュートリアルでは,VASPを用いてジョブスケジューラーを備えた計算機クラスタで行うことを想定している.
対象となるシステムは2元系のFe-Alで,強磁性を仮定した計算を行う.
事前計算
EA-vcではcryspy.in
でend_point
として,各元素単体の1原子当たりのエネルギーを基準として用いるため,事前に計算する必要がある.
exampleファイルの中に二つのディレクトリがあるはず.
Al-fcc
├── POSCAR
├── INCAR
├── POTCAR_dummy
└── job_cryspy
Fe-bcc
├── POSCAR
├── INCAR
├── POTCAR_dummy
└── job_cryspy
結晶構造データ(POSCAR
)とその構造最適化を行いエネルギーを求めるインプットファイル(INCAR
)およびジョブスクリプト(job_cryspy
)があるので適宜使用する計算機の環境に合わせて編集すること.
また,POTCARファイルは配布できないので各自で準備すること.
INCAR
ファイルでは,最終的に使用するカットオフなどの値を単体の計算でも利用しなければならないので注意すること.
ジョブを実行する(ジョブサブミットのコマンドは適宜読み替えること).
cd Al_fcc
qsub job_cryspy
cd ../Fe_bcc
qsub job_cryspy
cd ..
計算が終わったら1原子あたりのエネルギーを計算しておく.
今回はBCCやFCCなので,ユニットセルは1原子で構成されており,全エネルギーの値をそのまま使えばよい.
通常はユニットセルの原子数でセルあたりのエネルギーを割って計算する.
cryspy.in
cryspy.in
の例.
[basic]
algo = EA-vc
calc_code = VASP
nstage = 2
njob = 10
jobcmd = qsub
jobfile = job_cryspy
[structure]
atype = Fe Al
ll_nat = 0 0
ul_nat = 8 8
[VASP]
kppvol = 40 120
vasp_MAGMOM = 4.0 0.0
[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
target = random
n_elite = 2
n_fittest = 10
slct_func = TNM
t_size = 2
maxgen_ea = 0
end_point = -8.24249611 -3.74226843
[option]
for VASP
[VASP]セクションのvasp_MAGMOM
にはatype
に対応する元素のMAGMOM
の値を入れる.
CrySPYは./work/xxx/INCAR
(xxxは構造ID)にINCARをコピーする際に,n*vasp_MAGMOM
(nは原子数)を追記する.
例えば, atype = (‘Fe’, ‘Al’),nat = (5, 3),vasp_MAGMOM = (4.0 0.0)の場合,下記のように追記する.
このチュートリアルでは使用していないが,他にもINCARのLDAUL,LDAUUおよびLDAUJに対応している.cryspy.in
ではvasp_
をつけて下記のように使う.
[VASP]
kppvol = 40 120
vasp_MAGMOM = 4.0 0.0
vasp_LDAUL = 2 -1
vasp_LDAUU = 4.0 0.0
vasp_LDAUJ = 0.0 0.0
nat = (5, 0)のように2元系から単体に次元が落ちる場合,CrySPYは./work/xxx/INCAR
に下記のように追記する.
原子数がゼロの元素に関しては何もしない.
MAGMOM = 5*4.0
LDAUL = 2
LDAUU = 4.0
LDAUJ = 0.0
calc_in/
POTCAR
EA-vcでは各元素に対応するPOTCARファイルをそれぞれ準備する.
ファイル名は
のように末尾にatype
に書いた元素名をつける.
CrySPYは計算する構造の原子数に合わせて,./work/xxx/POTCAR
を準備する.
つまり,nat = (5, 0)のようにFeだけから構成される構造の場合はPOTCAR_Fe
,
nat = (4, 4)のようにFe-Al系の場合はPOTCAR_Fe
とPOTCAR_Al
を繋げてPOTCAR
にする.
job_cryspy
#!/bin/sh
#$ -cwd
#$ -V -S /bin/bash
####$ -V -S /bin/zsh
#$ -N FeAl_CrySPY_ID
#$ -pe smp 32
# ---------- vasp
VASPROOT=/usr/local/vasp/vasp.6.4.2/bin
mpirun -np $NSLOTS $VASPROOT/vasp_std
INCAR
1_INCAR
SYSTEM = FeAl
Algo = Fast
####LREAL = Auto
ENCUT = 348
ISMEAR = 1
SIGMA = 0.1
NSW = 40
IBRION = 2
ISIF = 2
ISPIN = 2
######MAGMOM = # cryspy append MAGMOM in work/xx/INCAR
EDIFF = 1e-6
EDIFFG = -0.01
KPAR = 4
LWAVE = .FALSE.
LCHARG = .FALSE.
2_INCAR
SYSTEM = FeAl
Algo = Fast
####LREAL = Auto
ENCUT = 348
ISMEAR = 1
SIGMA = 0.1
NSW = 200
IBRION = 2
ISIF = 3
ISPIN = 2
######MAGMOM = # cryspy append MAGMOM in work/xx/INCAR
EDIFF = 1e-6
EDIFFG = -0.01
KPAR = 4
LWAVE = .FALSE.
LCHARG = .FALSE.
QE(Fe-Al)
2025年7月18日
バージョン1.4.2でEA-vcはQEに対応.
ここで利用しているファイルはCrySPY_utility/examples/qe_Fe-Al_EA-vcからダウンロードできる.
このチュートリアルでは,QEを用いてジョブスケジューラーを備えた計算機クラスタで行うことを想定している.
対象となるシステムは2元系のFe-Alで,強磁性を仮定した計算を行う.
事前計算
EA-vcではcryspy.in
でend_point
として,各元素単体の1原子当たりのエネルギーを基準として用いるため,事前に計算する必要がある.
exampleファイルの中に二つのディレクトリがあるはず.
Al-fcc
├── pwscf.in
└── job_cryspy
Fe-bcc
├── pwscf.in
└── job_cryspy
インプットファイル(pwscf.in
)およびジョブスクリプト(job_cryspy
)があるので適宜使用する計算機の環境に合わせて編集すること.
pwscf.in
ファイルでは,最終的に使用するカットオフなどの値を単体の計算でも利用しなければならないので注意すること.
ジョブを実行する(ジョブサブミットのコマンドは適宜読み替えること).
cd Al_fcc
qsub job_cryspy
cd ../Fe_bcc
qsub job_cryspy
cd ..
計算が終わったら1原子あたりのエネルギーをeV単位に変換しておくこと.
今回はBCCやFCCなので,ユニットセルは1原子で構成されているが,
通常はユニットセルの原子数でセルあたりのエネルギーを割って計算する.
cryspy.in
cryspy.in
の例.
[basic]
algo = EA-vc
calc_code = QE
nstage = 2
njob = 10
jobcmd = qsub
jobfile = job_cryspy
[structure]
atype = Fe Al
ll_nat = 0 0
ul_nat = 8 8
[QE]
kppvol = 40 120
qe_infile = pwscf.in
qe_outfile = pwscf.out
[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
target = random
n_elite = 2
n_fittest = 10
slct_func = TNM
t_size = 2
maxgen_ea = 6
end_point = -3406.14117375 -91.25463006
[option]
for QE
VASPと違ってQEでは組成可変型への対応は簡単で,2元系の探索の場合は常に2元系のインプット,3元系なら常に3元系のインプットを./calc_in
に準備すればよい.
ただしnat
だけは変更の必要があるので,CrySPYが自動で書き換える.
準備する際は下記のように何か適当な数字でnat
を書いておく.
CrySPYは./work/xxx/
において,先頭の空白を除いてnat
から始まる行を
に自動的に書き換える.
calc_in/
job_cryspy
#!/bin/sh
#$ -cwd
#$ -V -S /bin/bash
####$ -V -S /bin/zsh
#$ -N FeAl_CrySPY_ID
#$ -pe smp 32
QEROOT=/usr/local/qe/q-e-qe-7.3.1/bin
mpirun -np $NSLOTS $QEROOT/pw.x -nk 4 < pwscf.in > pwscf.out
if [ -e "CRASH" ]; then
sed -i -e '3 s/^.*$/skip/' stat_job
exit 1
fi
pwscf.in
1_pwscf.in
&control
calculation = 'relax'
nstep = 40
pseudo_dir = '/usr/local/qe/gbrv/all_pbe_UPF_v1.5/'
outdir='./outdir/'
/
&system
ibrav = 0
nat = 1
ntyp = 2
ecutwfc = 40
ecutrho = 200
occupations = "smearing"
smearing = "mp"
degauss = 0.01
nspin = 2
starting_magnetization(1) = 0.4
starting_magnetization(2) = 0.0
/
&electrons
mixing_beta = 0.4
/
&ions
/
&cell
/
ATOMIC_SPECIES
Fe -1.0 fe_pbe_v1.5.uspp.F.UPF
Al -1.0 al_pbe_v1.uspp.F.UPF
2_pwscf.in
&control
calculation = 'vc-relax'
nstep = 200
pseudo_dir = '/usr/local/qe/gbrv/all_pbe_UPF_v1.5/'
outdir='./outdir/'
/
&system
ibrav = 0
nat = 1
ntyp = 2
ecutwfc = 40
ecutrho = 200
occupations = "smearing"
smearing = "mp"
degauss = 0.01
nspin = 2
starting_magnetization(1) = 0.4
starting_magnetization(2) = 0.0
/
&electrons
mixing_beta = 0.4
/
&ions
/
&cell
/
ATOMIC_SPECIES
Fe -1.0 fe_pbe_v1.5.uspp.F.UPF
Al -1.0 al_pbe_v1.uspp.F.UPF
次世代の生成
2025年6月16日
初回実行
cryspy
を実行すると,構造生成モードになり,第一世代のランダム構造が生成されて,一旦プログラムは終了する.
出力をみると,ll_nat
とul_nat
の範囲の原子数で構造が生成されているのが確認できる.
...
[2025-06-16 10:04:45,648][cryspy_init][INFO] # ---------- Initial structure generation
[2025-06-16 10:04:45,648][rs_gen][INFO] # ------ mindist
[2025-06-16 10:04:45,650][struc_util][INFO] Cu - Cu: 1.32
[2025-06-16 10:04:45,650][struc_util][INFO] Cu - Ag: 1.385
[2025-06-16 10:04:45,650][struc_util][INFO] Cu - Au: 1.34
[2025-06-16 10:04:45,650][struc_util][INFO] Ag - Ag: 1.45
[2025-06-16 10:04:45,650][struc_util][INFO] Ag - Au: 1.405
[2025-06-16 10:04:45,650][struc_util][INFO] Au - Au: 1.36
[2025-06-16 10:04:45,650][rs_gen][INFO] # ------ generate structures
[2025-06-16 10:04:45,659][gen_pyxtal][WARNING] Compoisition [1 4] not compatible with symmetry 34: spg = 34 retry.
[2025-06-16 10:04:45,662][gen_pyxtal][WARNING] Compoisition [ 2 2 12] not compatible with symmetry 39: spg = 39 retry.
[2025-06-16 10:04:45,691][gen_pyxtal][INFO] Structure ID 0: (3, 1, 2) Space group: 82 --> 119 I-4m2
[2025-06-16 10:04:45,694][gen_pyxtal][WARNING] Compoisition [6 6 2] not compatible with symmetry 57: spg = 57 retry.
[2025-06-16 10:04:45,749][gen_pyxtal][INFO] Structure ID 1: (1, 8, 5) Space group: 71 --> 71 Immm
[2025-06-16 10:04:45,857][gen_pyxtal][INFO] Structure ID 2: (3, 7, 8) Space group: 174 --> 174 P-6
...
cryspy.stat
を見ると,EAでは現在の世代の情報が追加されている.
[status]
generation = 1
id_queueing = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
構造最適化
何度かcryspy
を実行して,第一世代の構造最適化を終わらせると,下記のように出力される.
...
[2025-06-16 10:25:56,962][ctrl_job][INFO] Done generation 1
[2025-06-16 10:25:56,962][ctrl_job][INFO] Calculate convex hull for generation 1
[2025-06-16 10:25:57,854][ctrl_job][INFO]
EA is ready
凸包
この時点で,./data/convex_hull/
にhull distanceの情報とconvex hullのグラフが出力されている.
ID hull distance (eV/atom) Num_atom
7 0.000000 (0, 2, 6)
14 0.036510 (1, 7, 6)
17 0.064702 (0, 1, 5)
19 0.113649 (0, 0, 8)
16 0.168530 (6, 4, 8)
9 0.186497 (8, 4, 6)
1 0.187379 (1, 8, 5)
11 0.233893 (4, 5, 4)
3 0.273365 (6, 5, 5)
10 0.326759 (1, 4, 4)
2 0.330749 (3, 7, 8)
8 0.359543 (6, 2, 7)
4 0.404169 (4, 4, 2)
18 0.422989 (0, 6, 8)
13 0.428456 (0, 6, 3)
5 0.444792 (7, 4, 7)
6 0.464305 (7, 7, 7)
12 0.556654 (3, 0, 0)
15 0.560062 (6, 7, 1)
0 0.644278 (3, 1, 2)
- conv_hull_gen_1.svg

次世代生成
準備ができた状態でもう一度cryspy
を実行すると,バックアップが実行されてから,次世代構造の生成が始まる.
...
[2025-06-16 10:37:19,860][ctrl_job][INFO] Done generation 1
[2025-06-16 10:37:20,136][utility][INFO] Backup data
[2025-06-16 10:37:20,173][ea_next_gen][INFO] # ---------- Evolutionary algorithm
[2025-06-16 10:37:20,174][ea_next_gen][INFO] Generation 2
[2025-06-16 10:37:20,174][ea_next_gen][INFO] # ------ natural selection
[2025-06-16 10:37:20,177][ea_next_gen][INFO] ranking without duplication (including elite):
[2025-06-16 10:37:20,177][ea_next_gen][INFO] Structure ID 7, fitness: 0.00000
[2025-06-16 10:37:20,177][ea_next_gen][INFO] Structure ID 14, fitness: 0.03651
[2025-06-16 10:37:20,177][ea_next_gen][INFO] Structure ID 17, fitness: 0.06470
[2025-06-16 10:37:20,177][ea_next_gen][INFO] Structure ID 19, fitness: 0.11365
[2025-06-16 10:37:20,177][ea_next_gen][INFO] Structure ID 16, fitness: 0.16853
[2025-06-16 10:37:20,177][ea_next_gen][INFO] Structure ID 9, fitness: 0.18650
[2025-06-16 10:37:20,177][ea_next_gen][INFO] Structure ID 1, fitness: 0.18738
[2025-06-16 10:37:20,177][ea_next_gen][INFO] Structure ID 11, fitness: 0.23389
[2025-06-16 10:37:20,177][ea_next_gen][INFO] Structure ID 3, fitness: 0.27336
[2025-06-16 10:37:20,177][ea_next_gen][INFO] Structure ID 10, fitness: 0.32676
[2025-06-16 10:37:20,177][ea_next_gen][INFO] # ------ Generate children
[2025-06-16 10:37:20,177][ea_child][INFO] # -- mindist
[2025-06-16 10:37:20,179][struc_util][INFO] Cu - Cu: 1.32
[2025-06-16 10:37:20,179][struc_util][INFO] Cu - Ag: 1.385
[2025-06-16 10:37:20,179][struc_util][INFO] Cu - Au: 1.34
[2025-06-16 10:37:20,179][struc_util][INFO] Ag - Ag: 1.45
[2025-06-16 10:37:20,179][struc_util][INFO] Ag - Au: 1.405
[2025-06-16 10:37:20,179][struc_util][INFO] Au - Au: 1.36
[2025-06-16 10:37:20,217][crossover][INFO] Structure ID 20 (0, 4, 7) was generated from 19 and 14 by crossover. Space group: 1 P1
[2025-06-16 10:37:20,219][crossover][INFO] Structure ID 21 (0, 1, 7) was generated from 7 and 17 by crossover. Space group: 1 P1
[2025-06-16 10:37:20,221][crossover][INFO] Structure ID 22 (3, 0, 8) was generated from 16 and 19 by crossover. Space group: 1 P1
[2025-06-16 10:37:20,225][crossover][INFO] Structure ID 23 (0, 1, 7) was generated from 7 and 17 by crossover. Space group: 1 P1
...
[2025-06-16 10:37:20,809][ea_next_gen][INFO] # ------ Select elites
[2025-06-16 10:37:20,809][ea_next_gen][INFO] Structure ID 7 keeps as the elite
[2025-06-16 10:37:20,809][ea_next_gen][INFO] Structure ID 14 keeps as the elite
あとはcryspy
の実行を繰り返せば,探索が進む.
結果の確認
ここでは,EAと異なるところを中心に述べる.
cryspy_rslt
以下は第3世代まで計算を終えたcryspy_rslt
の例である.EA-vcでは,形成エネルギー(Ef_eV_atom
)と原子数(Num_atom
)も追加される.
Gen Spg_num Spg_sym Spg_num_opt Spg_sym_opt E_eV_atom Ef_eV_atom Num_atom Magmom Opt
0 1 119 I-4m2 119 I-4m2 0.639865 0.639865 (3, 1, 2) NaN no_file
1 1 71 Immm 71 Immm 0.182650 0.182650 (1, 8, 5) NaN no_file
2 1 174 P-6 187 P-6m2 0.324864 0.324864 (3, 7, 8) NaN no_file
3 1 71 Immm 71 Immm 0.269227 0.269227 (6, 5, 5) NaN no_file
4 1 12 C2/m 65 Cmmm 0.401521 0.401521 (4, 4, 2) NaN no_file
7 1 123 P4/mmm 123 P4/mmm -0.009930 -0.009930 (0, 2, 6) NaN no_file
10 1 107 I4mm 107 I4mm 0.320875 0.320875 (1, 4, 4) NaN no_file
5 1 121 I-42m 121 I-42m 0.439643 0.439643 (7, 4, 7) NaN no_file
6 1 115 P-4m2 115 P-4m2 0.459892 0.459892 (7, 7, 7) NaN no_file
8 1 81 P-4 81 P-4 0.354247 0.354247 (6, 2, 7) NaN no_file
9 1 11 P2_1/m 11 P2_1/m 0.182084 0.182084 (8, 4, 6) NaN no_file
11 1 10 P2/m 10 P2/m 0.229819 0.229819 (4, 5, 4) NaN no_file
nat_data
原子数の情報はnat_data
にも出力される.
ID ('Cu', 'Ag', 'Au')
0 (3, 1, 2)
1 (1, 8, 5)
2 (3, 7, 8)
3 (6, 5, 5)
4 (4, 4, 2)
5 (7, 4, 7)
6 (7, 7, 7)
7 (0, 2, 6)
8 (6, 2, 7)
9 (8, 4, 6)
10 (1, 4, 4)
...
hull_dist_all_gen_x
例えば第3世代終了時点のhull distanceのデータは./convex_hull/hull_dist_all_gen_3
というファイルに出力される.
ID hull distance (eV/atom) Num_atom
43 0.000000 (0, 2, 5)
42 0.000000 (0, 5, 5)
48 0.000000 (0, 1, 5)
46 0.000009 (0, 1, 5)
28 0.000011 (0, 1, 5)
41 0.000360 (0, 4, 6)
47 0.001838 (0, 1, 5)
36 0.001992 (1, 1, 6)
21 0.002544 (0, 1, 7)
23 0.002551 (0, 1, 7)
24 0.002795 (0, 4, 7)
conv_hull_gen_x.svg
例えば第3世代終了時点の凸包プロットの画像データは./convex_hull/conv_hull_gen_3.svg
に出力される.
デフォルトはsvg形式であるが,入力ファイルでfig_format
を変更していればpdfやpngで出力される.

解析と可視化
凸包の自動プロット
EA-vcでは2元系および3元系の探索シミュレーションの場合,凸包のグラフは各世代の計算終了時に自動プロットされる.
自分でもっと編集したい場合はJupyterでカスタマイズできる.
4元系の時はJupyterを用いたplotly(pymatgenに必要なのでインストールされているはず)の可視化が利用可能.
ここではいくつか例を示しておく.
2元系

上図は3世代まで探索した時の例で,赤文字は説明のために追加した.
凸包プロットに関する入力ファイルの設定は以下が関係する.括弧内はデフォルト値.
show_max
:y軸上限(0.2)label_stable
:安定相の組成を表示するかどうか(True)vmax
:右のカラーバーの最大値(0.2)bottom_margin
:最小値とy軸下限の間のマージン(0.02).fig_format
:図のファイルフォーマット.svg, png, pdfに対応.(svg)
マーカー上の十字の印は最新世代の探索結果を示している.
3元系

上図は3世代まで探索した時の例で,赤文字は説明のために追加した.
凸包プロットに関する入力ファイルの設定は以下が関係する.括弧内はデフォルト値.
show_max
:hull distanceがshow_max以下のものだけをプロット(0.2)label_stable
:安定相の組成を表示するかどうか(True)vmax
:右のカラーバーの最大値(0.2)bottom_margin
:3元系では無関係fig_format
:図のファイルフォーマット.svg, png, pdfに対応.(svg)
マーカーの十字の印は最新世代の探索結果を示している.
データのダウンロード
ここでは,CrySPYのデータをローカルPCで解析・可視化することを前提としている.
CrySPYをスーパーコンピュータやワークステーションで使用している場合は,データをローカルPCにダウンロードすること.
work
や backup
ディレクトリは,ファイルサイズが非常に大きくなる可能性があるため,不要であれば削除してよい.
Jupyter notebook
先ほどダウンロードした結果の中にある data/
ディレクトリに移動する.
その後,CrySPY utilityがローカルにダウンロード してある場合は cryspy_analyzer_EA-vc.ipynb
をコピーする.
またはGitHubから直接ダウンロードしてくる(CrySPY_utility/notebook/).
Jupyter notebookファイルには,CrySPYのコードと同じ関数が書かれており,自由に凸包のプロットをカスタマイズできる.
適宜順番に実行していき,下記のどちらかを選ぶと自動プロットと同じものが得られる
- Binary system, matplotlib
- Ternary system, matplotlib
途中にある
- Interactive plot using Plotly
では,2元系,3元系および4元系において,Plotlyを用いたインタラクティブプロットができる.
プロット例はCrySPY > チュートリアル > インタラクティブモード(Jupyter Notebook) #Interactive plot using Plotlyを参考にすること.