ランダムサーチ (RS)
ASE は初心者にとって始めやすいツールである. CrySPYのインストール時に,ASEも自動的にインストールされるためである. 高い精度はないが,非常に軽量で高速な原子間ポテンシャルを備えており,ノートPCなどの低スペックな環境でも動作確認に適している.
入力ファイルの準備
下記のどれか一つに従い,その後CrySPY実行のセクションに移ること.
ASE は初心者にとって始めやすいツールである. CrySPYのインストール時に,ASEも自動的にインストールされるためである. 高い精度はないが,非常に軽量で高速な原子間ポテンシャルを備えており,ノートPCなどの低スペックな環境でも動作確認に適している.
下記のどれか一つに従い,その後CrySPY実行のセクションに移ること.
2026年6月16日 更新
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_1
│ └── 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
# ---------- CrySPY
sed -i -e '3 s/^.*$/done/' stat_job
ase_in.py
というファイル名も自由に変えられるが, cryspy.in
のase_python
の値と一致させておく必要がある.
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
はステージ数.
ASEのチュートリアルではnstage = 1
を用いるので,ASEのインプットファイルはase_in.py_1
の一つだけが必要.
ase_in.py_1
は例えば下記の通り(ASEの使い方の詳細は公式のドキュメントを見ること).
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)
opt.run(fmax=0.01, steps=2000)
# ---------- opt. structure and energy
# [rule in ASE interface]
# output file for energy: 'log.tote' in eV/cell
# CrySPY reads the last line of 'log.tote'
# output file for structure: 'CONTCAR' in vasp format
e = cell_filter.atoms.get_total_energy()
with open('log.tote', mode='w') as f:
f.write(str(e))
# ------ write structure
opt_atoms = cell_filter.atoms.copy()
opt_atoms.set_constraint(None) # remove constraint for pymatgen
write('CONTCAR', opt_atoms, format='vasp', direct=True)
ASEはVASPやQEなどと違って,入力ファイル(python script)は自分で書くことになるので自由度がある. CrySPYでは2つのルールを設けている.
log.tote
というファイルに出力する.CrySPYはこのファイルの最後の行を読む.CONTCAR
というファイルにVASPフォーマットで出力する.ここまで準備ができたらCrySPY実行へ進む.
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年3月6日 更新
このチュートリアルでは,PBSなどのジョブスケジューラーを備えたPCクラスターを想定してCrySPYを試す.第一原理計算のVASPを用いて,Na8Cl8(16原子)の構造探索を行う.
ここでは次のような条件を想定している:
qsub
job_cryspy
どこか適当なワーキングディレクトリに移動して,まずはexampleをコピーしてくる.下記のどちらからコピーしてきても良い.
cd vasp_Na8Cl8_RS
tree
.
├── calc_in
│ ├── INCAR_1
│ ├── INCAR_2
│ ├── POTCAR
│ ├── POTCAR_is_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
# ---------- CrySPY
sed -i -e '3 s/^.*$/done/' stat_job
VASPROOT
は環境に合わせて変更する.普段VASPのジョブを流しているジョブファイルを使えば良い.ただし,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
はステージ数.
今はnstage = 2
を用いているので,INCAR_1
とINCAR_2
が必要となる.
ここでは,INCAR_1
はセルを固定して内部座標だけ緩和する設定,INCAR_2
はセルも含めてフルに緩和する設定になっている.
INCAR_1
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
INCAR_2
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年3月6日 更新
このチュートリアルでは,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
│ ├── pwscf.in_1
│ └── pwscf.in_2
└── 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
sed -i -e '3 s/^.*$/done/' stat_job
/path/to/pw.x
は環境に合わせて変更する.
入力(pwscf.in
)出力(pwscf.out
)ファイルの名前は好きに変えて良いが,cryspy.in
のqe_infile
とqe_outfile
に合わせる必要がある.
普段VASPのジョブを流しているジョブファイルを使えば良い.ただし,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
はステージ数.
今はnstage = 2
を用いているので,pwscf.in_1
とpwscf.in_2
が必要となる.
ここでは,pwscf.in_1
はセルを固定して内部座標だけ緩和する設定,pwscf.in_2
はセルも含めてフルに緩和する設定になっている.
pwscf.in_1
&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
pwscf.in_2
&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 など),
セルを順番に実行するだけで,以下のような図を得ることができる.