ランダムサーチ (RS)
ASE は初心者にとって始めやすいツールである. CrySPYのインストール時に,ASEも自動的にインストールされるためである. 高い精度はないが,非常に軽量で高速な原子間ポテンシャルを備えており,ノートPCなどの低スペックな環境でも動作確認に適している.
入力ファイルの準備
下記のどれか一つに従い,その後CrySPY実行のセクションに移ること.
ASE は初心者にとって始めやすいツールである. CrySPYのインストール時に,ASEも自動的にインストールされるためである. 高い精度はないが,非常に軽量で高速な原子間ポテンシャルを備えており,ノートPCなどの低スペックな環境でも動作確認に適している.
下記のどれか一つに従い,その後CrySPY実行のセクションに移ること.
2025年7月11日 更新 v1.4.2
ASEは様々なコードのインターフェースを提供しているPythonライブラリであり, Pure Python EMT calculatorというシンプルなEMTの計算も実行できる.CrySPYさえインストールしてあれば,精度はともかく簡単に計算できるので,CrySPYのテストにちょうど良い.
このチュートリアルでは,MacやLinuxなどのOSのローカルPCを用いてCu 8原子の構造探索を試す.
ここでは次のような条件を想定している:
job_cryspy
ase_in.py
どこか適当なワーキングディレクトリに移動して,まずはexampleをコピーしてくる.下記のどちらからコピーしてきても良い.
cd ase_Cu8_RS
tree
.
├── calc_in
│ ├── ase_in.py
│ └── job_cryspy
└── cryspy.in
cryspy.in
はCrySPYの入力ファイル.
[basic]
algo = RS
calc_code = ASE
tot_struc = 5
nstage = 1
njob = 5
jobcmd = zsh
jobfile = job_cryspy
[structure]
atype = Cu
nat = 8
[ASE]
ase_python = ase_in.py
[option]
[basic]
セクションのjobcmd = zsh
は環境に合わせてjobcmd = sh
やjobcmd = bash
等に変更する.
CrySPYは内部でバックグラウンドジョブとしてzsh job_cryspy
を実行する.
ASEを使う場合は,[ASE]
セクションが必要.
下記の二つのファイル名は好きなように変えても良い.
jobfile
: job_cryspy
ase_python
: ase_in.py
他の入力変数については後で説明を行う.
ASEのジョブファイルや入力ファイルはこのディレクトリに準備する.
ジョブファイルの名前はcryspy.in
のjobfile
に一致させる必要がある.
ジョブファイルの例は下記の通り.
#!/bin/sh
# ---------- ASE
python3 ase_in.py
ase_in.py
というファイル名も自由に変えられるが, cryspy.in
のase_python
の値と一致させておく必要がある.
CrySPYではジョブファイルの最後の行はsed -i -e ‘3 s/^.*$/done/’ stat_jobとしておくルールになっている.
バージョン1.4.2からCrySPYがジョブファイルの末尾に自動的に下記を追記するようになった.(参考:機能 > ジョブファイルの自動書き換え)
# ---------- CrySPY
sed -i -e '3s/^sub.*/done/' stat_job
1.4.2より古いバージョンでは,ジョブファイルの最後の行はsed -i -e '3s/^sub.*/done/' stat_job
と書いておくルールになっている.自分でsedコマンド文を書いたジョブファイルを1.4.2以上のバージョンで使用しても2回実行されるだけなので問題はない.
上記sedコマンドの意味は,stat_jobというファイルの3行目のsubから始まる部分をdoneに変える処理.
(詳細:機能 > ジョブファイルの自動書き換え)
CrySPYのジョブファイルのCrySPY_ID
という文字列は自動的に構造IDに置き換わるようになっている.
PBSやSLURMといったジョブスケジューラーを使う場合,ジョブ名にCrySPY_ID
と書いておくとどの構造のジョブなのかが分かり便利である.
例えば,PBSでは#PBS -N Si_CrySPY_ID
のように書いておくと,ジョブをサブミットする際,#PBS -N Si_10
のように置き換わる.
注意点として,ジョブ名を数字から始めるとエラーとなることが多いので,Si_
のように何か文字列を頭につけておくこと.
ステージ数(nstage
in cryspy.in
)に応じた数のインプットファイルが必要となる.
インプットファイル名の先頭にx_
,または語尾に_x
をつけて準備する.
ここでx
はステージ数.
CrySPYが探すインプットファイル名の優先順位は以下の通り.
x_ase_in.py
ase_in.py_x
ase_in.py
各ステージで共通のインプットを使用するのであればx_
や_x
を省略できる.
このASEのチュートリアルではnstage = 1
を用いるので,ASEのインプットファイルはase_in.py
の一つだけでよい.x_
や_x
を省略したファイルを準備している.
ase_in.py
は例えば下記の通り(ASEの使い方の詳細は公式のドキュメントを見ること).
from ase.constraints import FixSymmetry
from ase.filters import FrechetCellFilter
from ase.calculators.emt import EMT
from ase.optimize import BFGS
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')
ASEはVASPやQEなどと違って,入力ファイル(python script)は自分で書くことになるので自由度がある. CrySPYでは3つのルールを設けている.
log.tote
というファイルに出力する.CrySPYはこのファイルの最後の行を読む.CONTCAR
というファイルにVASPフォーマットで出力する.out_check_opt
というファイルにdone
かnot_yet
で書き込む.CrySPYはこのファイルの最後の行を読む.ここまで準備ができたらCrySPY実行へ進む.
ここに書いてある内容は少し古いので,最近のチュートリアルはチュートリアル > ランダムサーチ(RS) > ASE on your local PCを見ること.このページの内容も動作には問題ないはず.
2025年3月6日 更新
soiapは原子間ポテンシャルを使用した計算ができるソフトウェアであり,計算が軽いのでCrySPYのテストにちょうど良い. soiapのインストールや詳細はinstructionsを参照.
このチュートリアルでは,MacやLinuxのローカルPC上でCrySPYを試す. テストシステムはSi 8原子.
ここでは次のような条件を想定している:
~/CrySPY_root/CrySPY-0.9.0/cryspy.py
job_cryspy
~/local/soiap-0.3.0/src/soiap
soiap.in
soiap.out
initial.cif
どこか適当なワーキングディレクトリに移動して,まずはexampleをコピーしてくる.下記のどちらからコピーしてきても良い.
cp -r ~/CrySPY_root/CrySPY-0.9.0/example/v0.9.0/soiap_RS_Si8 .
cd soiap_RS_Si8
tree
.
├── calc_in
│ ├── job_cryspy
│ └── soiap.in_1
└── cryspy.in
cryspy.in
がCrySPYの入力ファイル.
[basic]
algo = RS
calc_code = soiap
tot_struc = 5
nstage = 1
njob = 2
jobcmd = zsh
jobfile = job_cryspy
[structure]
atype = Si
nat = 8
[soiap]
soiap_infile = soiap.in
soiap_outfile = soiap.out
soiap_cif = initial.cif
[option]
[basic]
セクションのjobcmd = zsh
は環境に合わせてjobcmd = sh
やjobcmd = bash
等に変更する. CrySPYは内部でバックグラウンドジョブとしてzsh job_cryspy
を実行する.
soiapを使う場合は[soiap]
セクションが必要となる.下記のファイル名は好きなように変えても良い.
jobfile
soiap_infile
soiap_outfile
soiap_cif
他の入力変数については後で説明を行う.
soiapのジョブファイルや入力ファイルはこのディレクトリに準備する.
ジョブファイルの名前はcryspy.in
のjobfile
に一致させる必要がある.
ジョブファイルの例は下記の通り.
#!/bin/sh
# ---------- soiap
EXEPATH=/path/to/soiap
$EXEPATH/soiap soiap.in 2>&1 > soiap.out
# ---------- CrySPY
sed -i -e '3 s/^.*$/done/' stat_job
/path/to/soiap
はsoiapの実行ファイルのpathに変えること.
入力ファイル(soiap.in
)と出力ファイル(soiap.out
)はcryspy.in
で指定したsoiap_infile
とsoiap_outfile
に合わせること.
最後の行以外は普段使っているようなジョブスクリプトで良いが,
CrySPYではジョブファイルの最後の行はsed -i -e '3 s/^.*$/done/' stat_job
としておくルールになっている.
ジョブファイルの最後の行はsed -i -e '3 s/^.*$/done/' stat_job
と書いておく.
CrySPYのジョブファイルのCrySPY_ID
という文字列は自動的に構造IDに置き換わるようになっている.
PBSやSLURMといったジョブスケジューラーを使う場合,ジョブ名にCrySPY_ID
と書いておくとどの構造のジョブなのかが分かり便利である.
例えば,PBSでは#PBS -N Si_CrySPY_ID
のように書いておくと,ジョブをサブミットする際,#PBS -N Si_10
のように置き換わる.
注意点として,ジョブ名を数字から始めるとエラーとなることが多いので,Si_
のように何か文字列を頭につけておくこと.
ステージ数(nstage
in cryspy.in
)に応じた数のインプットファイルが必要となる.
インプットファイル名の語尾に_x
をつけて準備する.
ここでx
はステージ数.
soiapのチュートリアルではnstage = 1
を用いるので,インプットファイルはsoiap.in_1
の一つだけが必要.
soiap.in_1
は例えば下記の通り.
crystal initial.cif ! CIF file for the initial structure
symmetry 1 ! 0: not symmetrize displacements of the atoms or 1: symmetrize
md_mode_cell 3 ! cell-relaxation method
! 0: FIRE, 2: quenched MD, or 3: RFC5
number_max_relax_cell 100 ! max. number of the cell relaxation
number_max_relax 1 ! max. number of the atom relaxation
max_displacement 0.1 ! max. displacement of atoms in Bohr
external_stress_v 0.0 0.0 0.0 ! external pressure in GPa
th_force 5d-5 ! convergence threshold for the force in Hartree a.u.
th_stress 5d-7 ! convergence threshold for the stress in Hartree a.u.
force_field 1 ! force field
! 1: Stillinger-Weber for Si, 2: Tsuneyuki potential for SiO2,
! 3: ZRL for Si-O-N-H, 4: ADP for Nd-Fe-B, 5: Jmatgen, or
! 6: Lennard-Jones
1行目に書く初期構造ファイル(initial.cif
)はcryspy.in
のsoiap_cif
の値と揃える.
ここまで準備ができたらCrySPY実行へ進む.
2025年7月12日 更新
このチュートリアルでは,PBSなどのジョブスケジューラーを備えたPCクラスターを想定してCrySPYを試す.第一原理計算のVASPを用いて,Na8Cl8(16原子)の構造探索を行う.
ここでは次のような条件を想定している:
qsub
job_cryspy
どこか適当なワーキングディレクトリに移動して,まずはexampleをコピーしてくる.下記のどちらからコピーしてきても良い.
cd vasp_Na8Cl8_RS
tree
.
├── calc_in
│ ├── 1_INCAR
│ ├── 2_INCAR
│ ├── POTCAR_dummy
│ └── job_cryspy
└── cryspy.in
cryspy.in
はCrySPYの入力ファイル.
[basic]
algo = RS
calc_code = VASP
tot_struc = 5
nstage = 2
njob = 2
jobcmd = qsub
jobfile = job_cryspy
[structure]
atype = Na Cl
nat = 8 8
mindist_1 = 2.5 1.5
mindist_2 = 1.5 2.5
[VASP]
kppvol = 40 80
[option]
[basic]
セクションのjobcmd = qsub
は環境に合わせて変更する.
CrySPYは内部でバックグラウンドジョブとしてqsub job_cryspy
を実行する.
下記のファイル名は好きなように変えても良い.
jobfile
構造最適化計算はステージ制を採用しており,ここではnstage = 2
を用いている.
例えば,最初のステージでは,セルを固定し内部座標だけ緩和する設定で,k点も少ない計算を実行し,2ステージ目でセルも含めてフルに構造緩和して,精度も高めるようなことが可能となっている.
VASPを使う場合は,[VASP]
セクションが必要.
ここでは各ステージにおけるk点のグリッド密度(Å^-3)をkppvol
に指定する必要がある.
kppvol
の詳細はこちら –> Input file > Kpoint
他のインプット変数に関しては後ほど説明する.
ジョブファイルやVASPのインプットをこのディレクトリに置く.
ジョブファイルの名前はcryspy.in
のjobfile
に一致させる必要がある.
ジョブファイルの例は下記の通り.
#!/bin/sh
#$ -cwd
#$ -V -S /bin/bash
####$ -V -S /bin/zsh
#$ -N Na8Cl8_CrySPY_ID
#$ -pe smp 20
####$ -q ibis1.q
####$ -q ibis2.q
####$ -q ibis3.q
####$ -q ibis4.q
# ---------- vasp
VASPROOT=/usr/local/vasp/vasp.6.4.2/bin
mpirun -np $NSLOTS $VASPROOT/vasp_std
VASPROOT
は環境に合わせて変更する.普段VASPのジョブを流しているジョブファイルを使えば良い.
CrySPYではジョブファイルの最後の行はsed -i -e ‘3 s/^.*$/done/’ stat_jobとしておくルールになっている.
バージョン1.4.2からCrySPYがジョブファイルの末尾に自動的に下記を追記するようになった.(参考:機能 > ジョブファイルの自動書き換え)
# ---------- CrySPY
sed -i -e '3s/^sub.*/done/' stat_job
1.4.2より古いバージョンでは,ジョブファイルの最後の行はsed -i -e '3s/^sub.*/done/' stat_job
と書いておくルールになっている.自分でsedコマンド文を書いたジョブファイルを1.4.2以上のバージョンで使用しても2回実行されるだけなので問題はない.
上記sedコマンドの意味は,stat_jobというファイルの3行目のsubから始まる部分をdoneに変える処理.
(詳細:機能 > ジョブファイルの自動書き換え)
CrySPYのジョブファイルのCrySPY_ID
という文字列は自動的に構造IDに置き換わるようになっている.
PBSやSLURMといったジョブスケジューラーを使う場合,ジョブ名にCrySPY_ID
と書いておくとどの構造のジョブなのかが分かり便利である.
例えば,PBSでは#PBS -N Si_CrySPY_ID
のように書いておくと,ジョブをサブミットする際,#PBS -N Si_10
のように置き換わる.
注意点として,ジョブ名を数字から始めるとエラーとなることが多いので,Si_
のように何か文字列を頭につけておくこと.
ステージ数(nstage
in cryspy.in
)に応じた数のインプットファイルが必要となる.
インプットファイル名の先頭にx_
,または語尾に_x
をつけて準備する.
ここでx
はステージ数.
CrySPYが探すインプットファイル名の優先順位は以下の通り.
x_INCAR
INCAR_x
INCAR
各ステージで共通のインプットを使用するのであればx_
や_x
を省略できる.
今はnstage = 2
を用いているので,1_INCAR_1
と2_INCAR
が必要となる.
ここでは,1_INCAR
はセルを固定して内部座標だけ緩和する設定,2_INCAR
はセルも含めてフルに緩和する設定になっている.
1_INCAR
SYSTEM = NaCl
!!!LREAL = Auto
Algo = Fast
NSW = 40
LWAVE = .FALSE.
!LCHARG = .FALSE.
ISPIN = 1
ISMEAR = 0
SIGMA = 0.1
IBRION = 2
ISIF = 2
EDIFF = 1e-5
EDIFFG = -0.01
2_INCAR
SYSTEM = NaCl
!!LREAL = Auto
Algo = Fast
NSW = 200
ENCUT = 341
!!LWAVE = .FALSE.
!!LCHARG = .FALSE.
ISPIN = 1
ISMEAR = 0
SIGMA = 0.1
IBRION = 2
ISIF = 3
EDIFF = 1e-5
EDIFFG = -0.01
CrySPYはPOSCAR
とKPOINTS
ファイルを自動生成する.
POTCAR
ファイルはユーザーが準備する必要がある.
このexampleに含まれているPOTCAR
は空のファイルなので,各自で準備すること.
exampleに含まれているPOTCAR
は空のファイル.配布できない.
ここまで準備ができたらCrySPY実行に進む.
2025年7月18日 更新
このチュートリアルでは,PBSなどのジョブスケジューラーを備えたPCクラスターを想定してCrySPYを試す.第一原理計算のQUANTUM ESPRESSOを用いて,Si 8原子の構造探索を行う.
ここでは次のような条件を想定している:
qsub
job_cryspy
/usr/local/qe-6.5/bin/pw.x
pwscf.in
pwscf.out
どこか適当なワーキングディレクトリに移動して,まずはexampleをコピーしてくる.下記のどちらからコピーしてきても良い.
cd QE_RS_Si8
tree
.
├── calc_in
│ ├── job_cryspy
│ ├── 1_pwscf.in
│ └── 2_pwscf.in
└── cryspy.in
cryspy.in
はCrySPYの入力ファイル.
[basic]
algo = RS
calc_code = QE
tot_struc = 5
nstage = 2
njob = 2
jobcmd = qsub
jobfile = job_cryspy
[structure]
atype = Si
nat = 8
[QE]
qe_infile = pwscf.in
qe_outfile = pwscf.out
kppvol = 40 80
[option]
[basic]
セクションのjobcmd = qsub
は環境に合わせて変更する.
CrySPYは内部でバックグラウンドジョブとしてqsub job_cryspy
を実行する.
構造最適化計算はステージ制を採用しており,ここではnstage = 2
を用いている.
例えば,最初のステージでは,セルを固定し内部座標だけ緩和する設定で,k点も少ない計算を実行し,2ステージ目でセルも含めてフルに構造緩和して,精度も高めるようなことが可能となっている.
QEを使う場合は,[QE]
セクションが必要.
ここでは各ステージにおけるk点のグリッド密度(Å^-3)をkppvol
に指定する必要がある.
kppvol
の詳細はこちら –> Input file > Kpoint
下記のファイル名は好きなように変えても良い.
jobfile
qe_infile
qe_outfile
他のインプット変数に関しては後ほど説明する.
ジョブファイルやQEのインプットをこのディレクトリに置く.
ジョブファイルの名前はcryspy.in
のjobfile
に一致させる必要がある.
ジョブファイルの例は下記の通り.
#!/bin/sh
#$ -cwd
#$ -V -S /bin/bash
####$ -V -S /bin/zsh
#$ -N Si8_CrySPY_ID
#$ -pe smp 20
####$ -q ibis1.q
####$ -q ibis2.q
mpirun -np $NSLOTS /path/to/pw.x < pwscf.in > pwscf.out
if [ -e "CRASH" ]; then
sed -i -e '3 s/^.*$/skip/' stat_job
exit 1
fi
/path/to/pw.x
は環境に合わせて変更する.
入力(pwscf.in
)出力(pwscf.out
)ファイルの名前は好きに変えて良いが,cryspy.in
のqe_infile
とqe_outfile
に合わせる必要がある.
普段QEのジョブを流しているジョブファイルを使えば良い.
CrySPYではジョブファイルの最後の行はsed -i -e ‘3 s/^.*$/done/’ stat_jobとしておくルールになっている.
バージョン1.4.2からCrySPYがジョブファイルの末尾に自動的に下記を追記するようになった.(参考:機能 > ジョブファイルの自動書き換え)
# ---------- CrySPY
sed -i -e '3s/^sub.*/done/' stat_job
1.4.2より古いバージョンでは,ジョブファイルの最後の行はsed -i -e '3s/^sub.*/done/' stat_job
と書いておくルールになっている.自分でsedコマンド文を書いたジョブファイルを1.4.2以上のバージョンで使用しても2回実行されるだけなので問題はない.
上記sedコマンドの意味は,stat_jobというファイルの3行目のsubから始まる部分をdoneに変える処理.
(詳細:機能 > ジョブファイルの自動書き換え)
CrySPYのジョブファイルのCrySPY_ID
という文字列は自動的に構造IDに置き換わるようになっている.
PBSやSLURMといったジョブスケジューラーを使う場合,ジョブ名にCrySPY_ID
と書いておくとどの構造のジョブなのかが分かり便利である.
例えば,PBSでは#PBS -N Si_CrySPY_ID
のように書いておくと,ジョブをサブミットする際,#PBS -N Si_10
のように置き換わる.
注意点として,ジョブ名を数字から始めるとエラーとなることが多いので,Si_
のように何か文字列を頭につけておくこと.
ステージ数(nstage
in cryspy.in
)に応じた数のインプットファイルが必要となる.
インプットファイル名の先頭にx_
,または語尾に_x
をつけて準備する.
ここでx
はステージ数.
CrySPYが探すインプットファイル名の優先順位は以下の通り.
x_pwscf.in
pwscf.in_x
pwscf.in
各ステージで共通のインプットを使用するのであればx_
や_x
を省略できる.
今はnstage = 2
を用いているので,1_pwscf.in
と2_pwscf.in
が必要となる.
ここでは,1_pwscf.in
はセルを固定して内部座標だけ緩和する設定,2_pwscf.in
はセルも含めてフルに緩和する設定になっている.
1_pwscf.in
&control
title = 'Si8'
calculation = 'relax'
nstep = 100
restart_mode = 'from_scratch',
pseudo_dir = '/usr/local/pslibrary.1.0.0/pbe/PSEUDOPOTENTIALS/'
outdir='./out.d/'
/
&system
ibrav = 0
nat = 8
ntyp = 1
ecutwfc = 44.0
occupations = 'smearing'
degauss = 0.01
/
&electrons
/
&ions
/
&cell
/
ATOMIC_SPECIES
Si 28.086 Si.pbe-n-kjpaw_psl.1.0.0.UPF
2_pwscf.in
&control
title = 'Si8'
calculation = 'vc-relax'
nstep = 200
restart_mode = 'from_scratch',
pseudo_dir = '/usr/local/pslibrary.1.0.0/pbe/PSEUDOPOTENTIALS/'
outdir='./out.d/'
/
&system
ibrav = 0
nat = 8
ntyp = 1
ecutwfc = 44.0
occupations = 'smearing'
degauss = 0.01
/
&electrons
/
&ions
/
&cell
/
ATOMIC_SPECIES
Si 28.086 Si.pbe-n-kjpaw_psl.1.0.0.UPF
pseudo_dir
は各自の環境に合わせて変更する.
Inputs for structure data and k-point such as インプットファイルのATOMIC_POSITIONS
とK_POINTS
はCrySPYがpymatgenを用いて自動生成するのでユーザーが書く必要はない.
ここまで準備ができたらCrySPY実行に進む.
Coming soon.
Coming soon.
2025年6月16日 更新
詳細は 入力ファイルのページも見ること.
cryspy.in
をもう一度チェックしてみよう.ここでの例は選んだcalc_code
に応じて,準備したものと少し異なるかもしれない.
[basic]
algo = RS
calc_code = ASE
tot_struc = 5
nstage = 1
njob = 5
jobcmd = zsh
jobfile = job_cryspy
[structure]
atype = Cu
nat = 8
[ASE]
ase_python = ase_in.py
[option]
algo
: アルゴリズム.ランダムサーチの場合はRS
を使う.calc_code
: 構造最適化のコード. VASP
, QE
, OMX
, soiap
, LAMMPS
, ASE
から選択.tot_struc
: 構造数.この場合初回実行で5構造ランダムに生成される.nstage
: ステージ数njob
: 同時にサブミットするジョブの数.この例では2つのスロットを設定,言い換えると,2構造ずつ最適化を行う.jobcmd
: ジョブを実行または投入するコマンド. bash
, zsh
, qsub
などjobfile
: ジョブファイルのファイル名atype
: Atom type. Na8Cl8の例: atype = Na Cl
.nat
: atypeに応じた原子数. Na8Cl8の例: nat = 8 8
For version 1.0.0 or later, skip this page. The executable script is automatically installed.
Here, we assume the following condition:
~/CrySPY_root/CrySPY-0.9.0/cryspy.py
Let’s make a convenient shell script to avoid typing long commands over and over again.
Here, we create the script, cryspy
(any file name will do).
$ emacs cryspy
$ chmod 744 cryspy
$ cat cryspy
#!/bin/sh
python3 -u ~/CrySPY_root/CrySPY-0.9.0/cryspy.py 1>> log 2>> err
-u
option (unbuffered option) can be omitted.
You can put this script in your $PATH, or just use like bash ./cryspy
.
2025 March 6, updated
Make sure you have the following in your working directory.
$ ls
calc_in/ cryspy.in
Then, run CyrSPY!
cryspy
If you use old version (0.10.3 or earlier):
bash ./cryspy
At the first run, CrySPY goes into structure generation mode. CrySPY stops after 5 structure generation.
If it worked properly, the following output appears on the screen:
[2025-03-06 18:52:21,495][cryspy_init][INFO]
Start CrySPY 1.4.0
[2025-03-06 18:52:21,495][cryspy_init][INFO] # ---------- Library version info
[2025-03-06 18:52:21,495][cryspy_init][INFO] pandas version: 2.2.2
[2025-03-06 18:52:21,495][cryspy_init][INFO] pymatgen version: 2025.1.24
[2025-03-06 18:52:21,495][cryspy_init][INFO] pyxtal version: 1.0.6
[2025-03-06 18:52:21,495][cryspy_init][INFO] # ---------- Read input file, cryspy.in
[2025-03-06 18:52:21,496][write_input][INFO] [basic]
[2025-03-06 18:52:21,496][write_input][INFO] algo = RS
[2025-03-06 18:52:21,496][write_input][INFO] calc_code = ASE
[2025-03-06 18:52:21,496][write_input][INFO] tot_struc = 5
[2025-03-06 18:52:21,496][write_input][INFO] nstage = 1
[2025-03-06 18:52:21,496][write_input][INFO] njob = 2
[2025-03-06 18:52:21,496][write_input][INFO] jobcmd = zsh
[2025-03-06 18:52:21,496][write_input][INFO] jobfile = job_cryspy
...
(omitted)
...
[2025-03-06 18:52:21,497][rs_gen][INFO] # ---------- Initial structure generation
[2025-03-06 18:52:21,497][rs_gen][INFO] # ------ mindist
[2025-03-06 18:52:21,498][struc_util][INFO] Cu - Cu: 1.32
[2025-03-06 18:52:21,498][rs_gen][INFO] # ------ generate structures
[2025-03-06 18:52:21,519][gen_pyxtal][INFO] Structure ID 0: (8,) Space group: 31 --> 31 Pmn2_1
[2025-03-06 18:52:21,525][gen_pyxtal][INFO] Structure ID 1: (8,) Space group: 198 --> 198 P2_13
[2025-03-06 18:52:21,554][gen_pyxtal][INFO] Structure ID 2: (8,) Space group: 4 --> 4 P2_1
[2025-03-06 18:52:21,580][gen_pyxtal][INFO] Structure ID 3: (8,) Space group: 193 --> 191 P6/mmm
[2025-03-06 18:52:21,581][gen_pyxtal][WARNING] Compoisition [8] not compatible with symmetry 172: spg = 172 retry.
[2025-03-06 18:52:21,625][gen_pyxtal][INFO] Structure ID 4: (8,) Space group: 64 --> 64 Cmce
[2025-03-06 18:52:22,013][cryspy_init][INFO] Elapsed time for structure generation: 0:00:00.516183
Several output files are also generated.
cryspy.out
): Short log. only version 0.10.3 or earlier.cryspy.stat
: Status file.data/init_POSCARS
: Initial struture file in POSCAR format.
You can open this file using VESTAdata/pkl_data
: Directory to save pickled data.log_cryspy
: log.err_cryspy
: error and warning.Let’s take a look at cryspy.stat
file.
[status]
id_queueing = 0 1 2 3 4
Structure ID 0 – 4 are queueing because we just generated structures, and have not submitted yet.
Check the initial structures, if the distance between atoms is too close, you should set the mindist
in cryspy.in
.
2024年4月21日更新,日本語化
CrySPYはcryspy.stat
ファイルがあれば自動的に計算を再開する.
crypy.stat
があれば続きから再開.
はじめから計算をしたければcryspy.stat
を削除する.
cryspyをもう一度実行する.
cryspy
画面かlog_cryspy
ファイルに下記のように出力される.
[2023-07-10 18:52:51,859][cryspy_restart][INFO]
Restart CrySPY 1.2.0
[2023-07-10 18:52:51,869][ctrl_job][INFO] # ---------- job status
[2023-07-10 18:52:51,904][ctrl_job][INFO] ID 0: submit job, Stage 1
[2023-07-10 18:52:51,931][ctrl_job][INFO] ID 1: submit job, Stage 1
cryspy.stat
でステータスが確認できる.
...
(omit)
...
[status]
id_queueing = 2 3 4
id 0 = Stage 1
id 1 = Stage 1
cryspy.in
でnjob = 2
に設定されているので,CrySPYは構造ID 0と1の二つのジョブをサブミットした.
計算はwork
ディレクトリの中で行われる.各構造IDのディレクトリが作られる.
tree -d work
work
├── 000000
├── 000001
└── fin
二つのジョブが終了したら,もう一度cryspyを実行する.
cryspy
[2023-07-10 18:55:01,053][cryspy_restart][INFO]
Restart CrySPY 1.2.0
[2023-07-10 18:55:01,058][ctrl_job][INFO] # ---------- job status
[2023-07-10 18:55:01,058][ctrl_job][INFO] ID 0: Stage 1 Done!
[2023-07-10 18:55:01,093][ctrl_job][INFO] collect results: E = -0.00696997755502915 eV/atom
[2023-07-10 18:55:01,132][ctrl_job][INFO] ID 1: Stage 1 Done!
[2023-07-10 18:55:01,133][ctrl_job][INFO] collect results: E = 0.4934076667166454 eV/atom
[2023-07-10 18:55:01,144][cryspy][INFO]
recheck 1
[2023-07-10 18:55:01,145][ctrl_job][INFO] # ---------- job status
[2023-07-10 18:55:01,153][ctrl_job][INFO] ID 2: submit job, Stage 1
[2023-07-10 18:55:01,161][ctrl_job][INFO] ID 3: submit job, Stage 1
もしnstage = 2
のようにnstageを2以上に設定していれば,ID 0と1のstage 2のジョブがサブミットされる.
今回はnstage = 1
なので,ID 0と1の計算データを収集して,次のIDのジョブをサブミットする.
計算が終わった構造のディレクトリはfin
ディレクトリに移動される.
5構造全ての計算が終わるまでcryspy
を繰り返し実行する.
すべての計算が終わって,計算結果の詳細が必要なければwork
ディレクトリを削除しても良い.
何度も何度もcryspyを繰り返し実行する時は,自動スクリプト(repeat_cryspy)が役に立つ.
Move to data
directory. There should be a few more files.
$ cd data
$ ls
cryspy_rslt cryspy_rslt_energy_asc init_POSCARS opt_POSCARS pkl_data/
cryspy_rslt
: Result file.cryspy_rslt_energy_asc
: Result file sorted in energy ascending order.init_POSCARS
: Initial struture file in POSCAR format.opt_POSCARS
: Optimized structure file in POSCAR format.pkl_data/
: Directory to save pickled data.The results are written to text files, cryspy_rslt
and cryspy_rslt_energy_asc
(and also saved in pickle data in pkl_data
directory).
Each result appends to cryspy_rslt
file in the order in which one finished earlier.
cat cryspy_rslt
Spg_num Spg_sym Spg_num_opt Spg_sym_opt E_eV_atom Magmom Opt
0 139 I4/mmm 139 I4/mmm -3.000850 NaN done
1 98 I4_122 12 C2/m -3.978441 NaN not_yet
2 16 P222 16 P222 -3.348616 NaN not_yet
3 36 Cmc2_1 36 Cmc2_1 -3.520306 NaN not_yet
4 36 Cmc2_1 4 P2_1 -3.304168 NaN not_yet
Not ID order in cryspy_rslt
In cryspy_rslt_energy_asc
file, the results are sorted in energy ascending order.
cat cryspy_rslt_energy_asc
Spg_num Spg_sym Spg_num_opt Spg_sym_opt E_eV_atom Magmom Opt
1 98 I4_122 12 C2/m -3.978441 NaN not_yet
3 36 Cmc2_1 36 Cmc2_1 -3.520306 NaN not_yet
2 16 P222 16 P222 -3.348616 NaN not_yet
4 36 Cmc2_1 4 P2_1 -3.304168 NaN not_yet
0 139 I4/mmm 139 I4/mmm -3.000850 NaN done
Spg_num
and Spg_sym
show space group information on initial structures.
Spg_num_opt
and Spg_sym_opt
are those of optimized structures.
The last column Opt
indicates whether or not optimization reached required accuracy.
Of course only 5 structures are not enough to find stable structures. You can append structures whenever you want. Here let’s append more 5 structures.
For Si-Si mindist
, the default value of 1.11 Å is used in the first structure generation (see log_cryspy
), which is a little too close.
Let us try to set the mindist to 2.0 Å.
For mindist
, see also Features > Restriction on interatomic distances.
Edit cryspy.in
and change the value of tot_struc
into 10
, and add mindist_1 = 2.0
emacs cryspy.in
cat cryspy.in
[basic]
algo = RS
calc_code = soiap
tot_struc = 10
nstage = 1
njob = 2
jobcmd = zsh
jobfile = job_cryspy
[structure]
atype = Si
nat = 8
mindist_1 = 2.0
[soiap]
soiap_infile = soiap.in
soiap_outfile = soiap.out
soiap_cif = initial.cif
[option]
Then run cryspy, and check log_cryspy
file.
cryspy &
cat log_cryspy
...
(omit)
...
2023/03/19 00:01:47
CrySPY 1.0.0
Restart cryspy.py
Changed tot_struc from 5 to 10
Changed mindist from None to [[2.0]]
Backup data
# ---------- Append structures
# ------ mindist
Si - Si 2.0
Structure ID 5 was generated. Space group: 218 --> 221 Pm-3m
Structure ID 6 was generated. Space group: 86 --> 129 P4/nmm
Structure ID 7 was generated. Space group: 129 --> 129 P4/nmm
Structure ID 8 was generated. Space group: 191 --> 191 P6/mmm
Structure ID 9 was generated. Space group: 31 --> 31 Pmn2_1
Remember that CrySPY goes into structure generation mode whenever you change the value of tot_struc
.
In this mode, CrySPY does not do any other action such as collecting data, submitting jobs, and so on.
Structure generation mode whenever you change the value of tot_struc
.
From version 1.0.0, CrySPY automatically backs up when adding structures.
See features/backup.
Repeat cryspy &
several times until all appended structures are done.
The auto script may help you.
ここでは,CrySPYのデータをローカルPCで解析・可視化することを前提としている.
CrySPYをスーパーコンピュータやワークステーションで使用している場合は,データをローカルPCにダウンロードすること.
work
や backup
ディレクトリは,ファイルサイズが非常に大きくなる可能性があるため,不要であれば削除してよい.
先ほどダウンロードした結果の中にある data/
ディレクトリに移動する.
その後,CrySPY utilityがローカルにダウンロード してある場合は cryspy_analyzer_RS.ipynb
をコピーする.
またはGitHubから直接ダウンロードしてくる(CrySPY_utility/notebook/).
Jupyter を起動し(VScode,Jupyter Lab,Jupyter Notebook など),
セルを順番に実行するだけで,以下のような図を得ることができる.