ランダムサーチ (RS)のサブセクション ASE on Your Local PC 最終更新日:2026年10月16日
ASE は様々なコードのインターフェースを提供しているPythonライブラリであり,
Pure Python EMT calculator というシンプルなEMTの計算も実行できる.CrySPYさえインストールしてあれば,精度はともかく簡単に計算できるので,CrySPYのテストにちょうど良い.
このチュートリアルでは,MacやLinuxなどのOSのローカルPCを用いてCu 8原子の構造探索を試す.
Assumption ここでは次のような条件を想定している:
CrySPY 1.2.0 or later in your local PC CrySPY job filename: job_cryspy ase input filename: ase_in.py どこか適当なワーキングディレクトリに移動して,まずはexampleをコピーしてくる.下記のどちらからコピーしてきても良い.
.
├── calc_in
│ ├── ase_in.py
│ └── job_cryspy
└── cryspy.in 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]
rslt_out = always [basic] セクションのjobcmd = zshは環境に合わせてjobcmd = shやjobcmd = bash等に変更する.
CrySPYは内部でバックグラウンドジョブとしてzsh job_cryspyを実行する.
ASEを使う場合は,[ASE]セクションが必要.
下記の二つのファイル名は好きなように変えても良い.
jobfile: job_cryspyase_python: ase_in.py他の入力変数については後で説明を行う.
calc_in Directory ASEのジョブファイルや入力ファイルはこのディレクトリに準備する.
Job File ジョブファイルの名前は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.pyase_in.py_xase_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つのルールを設けている.
エネルギーはeV/cellの単位でlog.toteというファイルに出力する.CrySPYはこのファイルの最後の行を読む. 最適化後の構造データはCONTCARというファイルにVASPフォーマットで出力する. 最適化の収束判定結果をout_check_optというファイルにdoneかnot_yetで書き込む.CrySPYはこのファイルの最後の行を読む. CrySPY実行 ここまで準備ができたらCrySPY実行 へ進む.
soiap on Your Local PC
情報ここに書いてある内容は少し古いので,最近のチュートリアルはチュートリアル > ランダムサーチ(RS) > ASE on your local PC を見ること.このページの内容も動作には問題ないはず.
最終更新日:2026年10月16日
soiap は原子間ポテンシャルを使用した計算ができるソフトウェアであり,計算が軽いのでCrySPYのテストにちょうど良い.
soiapのインストールや詳細はinstructions を参照.
このチュートリアルでは,MacやLinuxのローカルPC上でCrySPYを試す.
テストシステムはSi 8原子.
Assumption ここでは次のような条件を想定している:
(only version 0.10.3 or earlier) CrySPY main script: ~/CrySPY_root/CrySPY-0.9.0/cryspy.py CrySPY job filename: job_cryspy soiap executable file: ~/local/soiap-0.3.0/src/soiap soiap input filename: soiap.in soiap output filename: soiap.out soiap input structure filename: initial.cif どこか適当なワーキングディレクトリに移動して,まずはexampleをコピーしてくる.下記のどちらからコピーしてきても良い.
Download from Cryspy_utility/examples/soiap_Si8_RS Copy from CrySPY utility that you installed (only version 0.10.3 or earlier) cp -r ~/CrySPY_root/CrySPY-0.9.0/example/v0.9.0/soiap_RS_Si8 . .
├── calc_in
│ ├── job_cryspy
│ └── soiap.in_1
└── cryspy.in 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]
rslt_out = always [basic] セクションのjobcmd = zshは環境に合わせてjobcmd = shやjobcmd = bash等に変更する. CrySPYは内部でバックグラウンドジョブとしてzsh job_cryspyを実行する.
soiapを使う場合は[soiap]セクションが必要となる.下記のファイル名は好きなように変えても良い.
jobfilesoiap_infilesoiap_outfilesoiap_cif他の入力変数については後で説明を行う.
calc_in Directory soiapのジョブファイルや入力ファイルはこのディレクトリに準備する.
Job File ジョブファイルの名前は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実行 ここまで準備ができたらCrySPY実行 へ進む.
VASP 最終更新日:2026年10月16日
このチュートリアルでは,PBSなどのジョブスケジューラーを備えたPCクラスターを想定してCrySPYを試す.第一原理計算のVASPを用いて,Na8Cl8(16原子)の構造探索を行う.
Assumption ここでは次のような条件を想定している:
CrySPY 1.2.0 or later in your PC cluster CrySPY job command: qsub CrySPY job filename: job_cryspy executable file, vasp_std in your PC cluster どこか適当なワーキングディレクトリに移動して,まずはexampleをコピーしてくる.下記のどちらからコピーしてきても良い.
.
├── calc_in
│ ├── 1_INCAR
│ ├── 2_INCAR
│ ├── POTCAR_dummy
│ └── job_cryspy
└── cryspy.in 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]
rslt_out = always [basic] セクションのjobcmd = qsubは環境に合わせて変更する.
CrySPYは内部でバックグラウンドジョブとしてqsub job_cryspyを実行する.
下記のファイル名は好きなように変えても良い.
構造最適化計算はステージ制を採用しており,ここではnstage = 2を用いている.
例えば,最初のステージでは,セルを固定し内部座標だけ緩和する設定で,k点も少ない計算を実行し,2ステージ目でセルも含めてフルに構造緩和して,精度も高めるようなことが可能となっている.
VASPを使う場合は,[VASP]セクションが必要.
ここでは各ステージにおけるk点のグリッド密度(Å^-3)をkppvolに指定する必要がある.
情報他のインプット変数に関しては後ほど説明する.
calc_in Directory ジョブファイルやVASPのインプットをこのディレクトリに置く.
Job File ジョブファイルの名前は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_INCARINCAR_xINCAR各ステージで共通のインプットを使用するのであれば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実行 ここまで準備ができたらCrySPY実行 に進む.
QE 最終更新日:2026年10月16日
このチュートリアルでは,PBSなどのジョブスケジューラーを備えたPCクラスターを想定してCrySPYを試す.第一原理計算のQUANTUM ESPRESSOを用いて,Si 8原子の構造探索を行う.
Assumption ここでは次のような条件を想定している:
CrySPY job command: qsub CrySPY job filename: job_cryspy QE executable file: /usr/local/qe-6.5/bin/pw.x QE input filename: pwscf.in QE output filename: pwscf.out どこか適当なワーキングディレクトリに移動して,まずはexampleをコピーしてくる.下記のどちらからコピーしてきても良い.
.
├── calc_in
│ ├── job_cryspy
│ ├── 1_pwscf.in
│ └── 2_pwscf.in
└── cryspy.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]
rslt_out = always [basic] セクションのjobcmd = qsubは環境に合わせて変更する.
CrySPYは内部でバックグラウンドジョブとしてqsub job_cryspyを実行する.
構造最適化計算はステージ制を採用しており,ここではnstage = 2を用いている.
例えば,最初のステージでは,セルを固定し内部座標だけ緩和する設定で,k点も少ない計算を実行し,2ステージ目でセルも含めてフルに構造緩和して,精度も高めるようなことが可能となっている.
QEを使う場合は,[QE]セクションが必要.
ここでは各ステージにおけるk点のグリッド密度(Å^-3)をkppvolに指定する必要がある.
情報下記のファイル名は好きなように変えても良い.
jobfileqe_infileqe_outfile他のインプット変数に関しては後ほど説明する.
calc_in Directory ジョブファイルやQEのインプットをこのディレクトリに置く.
Job File ジョブファイルの名前は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.inpwscf.in_xpwscf.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実行 ここまで準備ができたらCrySPY実行 に進む.
OpenMX Coming soon.
LAMMPS Coming soon.
Check cryspy.in 最終更新日:2026年10月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]
rslt_out = always [basic] Section algo: アルゴリズム.ランダムサーチの場合はRSを使う.calc_code: 構造最適化のコード. VASP, QE, OMX, soiap, LAMMPS, ASEから選択.tot_struc: 構造数.この場合初回実行で5構造ランダムに生成される.nstage: ステージ数njob: 同時にサブミットするジョブの数.この例では2つのスロットを設定,言い換えると,2構造ずつ最適化を行う.jobcmd: ジョブを実行または投入するコマンド. bash, zsh, qsubなどjobfile: ジョブファイルのファイル名[structure] Section atype: Atom type. Na8Cl8の例: atype = Na Cl.nat: atypeに応じた原子数. Na8Cl8の例: nat = 8 8Script to Run
メモFor version 1.0.0 or later, skip this page. The executable script is automatically installed.
Assumption Here, we assume the following condition:
CrySPY main script: ~/CrySPY_root/CrySPY-0.9.0/cryspy.py Make Script 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.
First Run 2025 March 6, updated
Make sure you have the following in your working directory.
calc_in/ (cryspy) cryspy.in Then, run CyrSPY!
If you use old version (0.10.3 or earlier):
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 VESTA data/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.
Submit Job 2024年4月21日更新,日本語化
計算再開 CrySPYはcryspy.statファイルがあれば自動的に計算を再開する.
ヒントcrypy.statがあれば続きから再開. はじめから計算をしたければcryspy.statを削除する.
ジョブの投入 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のディレクトリが作られる.
work
├── 000000
├── 000001
└── fin 二つのジョブが終了したら,もう一度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 )が役に立つ.
Check Results 最終更新日:2026年10月16日
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).
v1.5.0以降は,[option]セクションのrslt_outでcryspy_rsltとcryspy_rslt_energy_ascの出力タイミングを変更できる.デフォルトはalways.詳細は入力ファイル > [option] Section を参照.
Each result appends to cryspy_rslt file in the order in which one finished earlier.
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.
Append Structures 最終更新日:2026年10月16日
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 Å.
情報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]
rslt_out = always Then run cryspy, and check log_cryspy file.
...
(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.
repeat_cryspy
解析と可視化 Last updated: February 9, 2026
エネルギープロット バージョン1.4.4からは,下記のように cryspy-Eplot を実行することで簡単に結果が出力できるようになった.
ファイルは./data/energy_plot/energy_RS_{tot_struc}.{fig_fotmat}に出力される.
cryspy.inの[visual]セクションで,下記入力変数を指定することもできる.
CrySPY > 入力ファイル > [visual] section も参考のこと.
...
[visual]
ymax = 0.2
markersize = 10
fig_format = svg
... より詳細なデータ解析や,図の編集がしたければ,次に書いてあるようにファイルをダウンロードしてJupyter notebookを使うと良い.
データのダウンロード ここでは,CrySPYのデータをローカルPCで解析・可視化することを前提としている.
CrySPYをスーパーコンピュータやワークステーションで使用している場合は,データをローカルPCにダウンロードすること.
work や backup ディレクトリは,ファイルサイズが非常に大きくなる可能性があるため,不要であれば削除してよい.
Jupyter Notebook 先ほどダウンロードした結果の中にある data/ ディレクトリに移動する.
その後,CrySPY utilityがローカルにダウンロード してある場合は cryspy_analyzer_RS.ipynb をコピーする.
またはGitHubから直接ダウンロードしてくる(CrySPY_utility/notebook/ ).
Jupyter を起動し(VScode,Jupyter Lab,Jupyter Notebook など),
セルを順番に実行するだけで,以下のような図を得ることができる.
進化的アルゴリズム(EA)のサブセクション ASE on Your Local PC 最終更新日:2026年10月16日
ここで利用しているファイルはCrySPY_utility/examples/ase_Cu8Au8_EA からダウンロードできる.
このチュートリアルでは,計算が軽いASEのPure Python EMT calculator を用いてローカルPCで動作確認を行う.対象となるシステムはCu8Au8.
cryspy.in cryspy.inの例.
[basic]
algo = EA
calc_code = ASE
nstage = 1
njob = 5
jobcmd = zsh
jobfile = job_cryspy
[structure]
atype = Cu Au
nat = 8 8
[EA]
n_pop = 10
n_crsov = 5
n_perm = 2
n_strain = 2
n_rand = 1
n_elite = 1
n_fittest = 5
slct_func = TNM
t_size = 2
maxgen_ea = 0
[ASE]
ase_python = ase_in. py
[option]
rslt_out = always
energy_output_interval = 1
backup_interval = 1 algo = EA を使用.v1.5.0以降は,[option]セクションのenergy_output_intervalでエネルギープロットの出力間隔(世代数)を指定できる.デフォルトは1(毎世代),0で自動出力を無効化. v1.5.0以降は,[option]セクションのbackup_intervalで自動バックアップの間隔(世代数)を指定できる.デフォルトは1,0で自動バックアップを無効化.詳細は機能 > バックアップ を参照. bash環境ではjobcmdをbashに変更. EAではtot_strucは使用しない.構造数はn_popで決まる. n_pop = n_crsov + n_perm + n_strain + n_rand[EA]セクションのパラメータについては,入力ファイル > [EA] section および探索アルゴリズム > 進化的アルゴリズム(EA) を見ること. 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
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 次世代の生成 最終更新日:2026年10月16日
初回実行 cryspyを実行すると,構造生成モードになり,第一世代のランダム構造が生成されて,一旦プログラムは終了する.
出力
...
[2025-04-06 09:15:34,720][ea_init][INFO] # ---------- Initialize evolutionary algorithm
[2025-04-06 09:15:34,720][ea_init][INFO] # ------ Generation 1
[2025-04-06 09:15:34,720][ea_init][INFO] 10 structures by random cryspy.statを見ると,EAでは現在の世代の情報が追加されている.
[status]
generation = 1
id_queueing = 0 1 2 3 4 5 6 7 8 9 構造最適化 何度かcryspyを実行して,第一世代の構造最適化を終わらせると,下記のように出力される.
...
[2025-04-06 09:20:26,218][ctrl_job][INFO] Done generation 1
[2025-04-06 09:20:26,218][ctrl_job][INFO]
EA is ready 次世代生成 準備ができた状態でもう一度cryspyを実行すると,次世代構造の生成が始まる.
デフォルト(backup_interval = 1)では,次世代構造を生成する直前に自動バックアップが実行される.
v1.5.0以降は,[option]セクションのbackup_intervalで間隔(世代数)を変更でき,0で自動バックアップを無効にする.詳細は機能 > バックアップ を参照.
...
[2025-04-06 09:35:11,546][cryspy_restart][INFO] read input, cryspy.in
[2025-04-06 09:35:11,554][ctrl_job][INFO] # ---------- job status
[2025-04-06 09:35:11,554][ctrl_job][INFO] Done generation 1
[2025-04-06 09:35:11,554][utility][INFO] Backup data
[2025-04-06 09:35:11,611][ea_next_gen][INFO] # ---------- Evolutionary algorithm
[2025-04-06 09:35:11,611][ea_next_gen][INFO] Generation 2
[2025-04-06 09:35:11,613][ea_next_gen][INFO] # ------ natural selection
[2025-04-06 09:35:11,687][ea_next_gen][INFO] ranking without duplication (including elite):
[2025-04-06 09:35:11,687][ea_next_gen][INFO] Structure ID 1, fitness: -0.00530
[2025-04-06 09:35:11,687][ea_next_gen][INFO] Structure ID 3, fitness: 0.01490
[2025-04-06 09:35:11,687][ea_next_gen][INFO] Structure ID 4, fitness: 0.04485
[2025-04-06 09:35:11,687][ea_next_gen][INFO] Structure ID 7, fitness: 0.11501
[2025-04-06 09:35:11,687][ea_next_gen][INFO] Structure ID 8, fitness: 0.15254
[2025-04-06 09:35:11,687][ea_next_gen][INFO] # ------ Generate children
[2025-04-06 09:35:11,687][ea_child][INFO] # -- mindist
[2025-04-06 09:35:11,689][struc_util][INFO] Cu - Cu: 1.32
[2025-04-06 09:35:11,689][struc_util][INFO] Cu - Au: 1.34
[2025-04-06 09:35:11,689][struc_util][INFO] Au - Au: 1.36
[2025-04-06 09:35:11,740][crossover][INFO] Structure ID 10 (8, 8) was generated from 3 and 1 by crossover. Space group: 1 P1
[2025-04-06 09:35:11,764][crossover][WARNING] remove_within_mindist: some atoms within mindist. retry.
[2025-04-06 09:35:11,774][crossover][INFO] Structure ID 11 (8, 8) was generated from 3 and 1 by crossover. Space group: 1 P1
[2025-04-06 09:35:11,789][crossover][INFO] Structure ID 12 (8, 8) was generated from 1 and 4 by crossover. Space group: 1 P1
[2025-04-06 09:35:11,833][crossover][INFO] Structure ID 13 (8, 8) was generated from 1 and 3 by crossover. Space group: 1 P1
[2025-04-06 09:35:11,852][crossover][WARNING] mindist in _add_border_line: Cu - Cu, 0.567032320824818. retry.
[2025-04-06 09:35:11,861][crossover][INFO] Structure ID 14 (8, 8) was generated from 7 and 1 by crossover. Space group: 1 P1
[2025-04-06 09:35:11,875][permutation][INFO] Structure ID 15 (8, 8) was generated from 1 by permutation. Space group: 146 R3
[2025-04-06 09:35:11,888][permutation][INFO] Structure ID 16 (8, 8) was generated from 3 by permutation. Space group: 1 P1
[2025-04-06 09:35:11,890][strain][WARNING] mindist in strain: Cu - Cu, 1.3050485787603692. retry.
[2025-04-06 09:35:11,903][strain][INFO] Structure ID 17 (8, 8) was generated from 3 by strain. Space group: 1 P1
[2025-04-06 09:35:11,917][strain][INFO] Structure ID 18 (8, 8) was generated from 1 by strain. Space group: 1 P1
[2025-04-06 09:35:12,513][ea_child][INFO] # ------ Random structure generation
[2025-04-06 09:35:12,513][rs_gen][INFO] # ------ mindist
[2025-04-06 09:35:12,515][struc_util][INFO] Cu - Cu: 1.32
[2025-04-06 09:35:12,515][struc_util][INFO] Cu - Au: 1.34
[2025-04-06 09:35:12,515][struc_util][INFO] Au - Au: 1.36
[2025-04-06 09:35:12,516][rs_gen][INFO] # ------ generate structures
[2025-04-06 09:35:12,530][gen_pyxtal][INFO] Structure ID 19: (8, 8) Space group: 86 --> 86 P4_2/n
[2025-04-06 09:35:12,533][ea_next_gen][INFO] # ------ Select elites
[2025-04-06 09:35:12,533][ea_next_gen][INFO] Structure ID 9 keeps as the elite あとはcryspyの実行を繰り返せば,探索が進む.
結果の確認 最終更新日:2026年10月16日
cryspy_rslt 以下は第3世代まで計算を終えたcryspy_rsltの例である.EAでは世代の情報(Gen)も追加される.
v1.5.0以降は,[option]セクションのrslt_outでcryspy_rsltとcryspy_rslt_energy_ascの出力タイミングを変更できる.デフォルトはalways.詳細は入力ファイル > [option] Section を参照.
Gen Spg_num Spg_sym Spg_num_opt Spg_sym_opt E_eV_atom Magmom Opt
0 1 214 I4_132 230 Ia-3d 1.168743 NaN no_file
1 1 198 P2_13 198 P2_13 -0.005303 NaN no_file
2 1 95 P4_322 95 P4_322 0.389566 NaN no_file
3 1 27 Pcc2 27 Pcc2 0.014898 NaN no_file
4 1 60 Pbcn 60 Pbcn 0.044852 NaN no_file
5 1 116 P-4c2 116 P-4c2 0.403246 NaN no_file
6 1 187 P-6m2 187 P-6m2 1.054706 NaN no_file
7 1 161 R3c 160 R3m 0.115009 NaN no_file
8 1 146 R3 146 R3 0.152535 NaN no_file
9 1 60 Pbcn 47 Pmmm -0.005676 NaN no_file
10 2 1 P1 1 P1 0.026070 NaN no_file
11 2 1 P1 7 Pc 0.005898 NaN no_file
12 2 1 P1 1 P1 0.005208 NaN no_file
13 2 1 P1 1 P1 0.005506 NaN no_file
14 2 1 P1 1 P1 0.024364 NaN no_file
15 2 146 R3 146 R3 0.011525 NaN no_file
16 2 1 P1 1 P1 0.014590 NaN no_file
17 2 1 P1 1 P1 0.015236 NaN no_file
18 2 1 P1 2 P-1 -0.012335 NaN no_file
19 2 86 P4_2/n 140 I4/mcm 0.274548 NaN no_file
20 3 1 P1 1 P1 0.013611 NaN no_file
21 3 1 P1 10 P2/m -0.014166 NaN no_file
22 3 1 P1 1 P1 0.019472 NaN no_file
23 3 1 P1 1 P1 0.011641 NaN no_file
24 3 1 P1 1 P1 0.000297 NaN no_file
25 3 1 P1 1 P1 0.005596 NaN no_file
26 3 1 P1 1 P1 0.013374 NaN no_file
27 3 1 P1 2 P-1 0.005055 NaN no_file
28 3 2 P-1 12 C2/m -0.012396 NaN no_file
29 3 182 P6_322 182 P6_322 0.711472 NaN no_file ea_info 各世代ごとに用いたEAのパラメーターがea_infoに出力される.
Gen Population Crossover Permutation Strain Random Elite crs_lat slct_func
1 10 0 0 0 10 0 random TNM
2 10 5 2 2 1 1 random TNM
3 10 5 2 2 1 1 random TNM ea_origin 構造生成手法や親個体の情報が,ea_originに出力される.
Gen Struc_ID Operation Parent
1 0 random None
1 1 random None
1 2 random None
1 3 random None
1 4 random None
1 5 random None
1 6 random None
1 7 random None
1 8 random None
1 9 random None
2 10 crossover (3, 1)
2 11 crossover (3, 1)
2 12 crossover (1, 4)
2 13 crossover (1, 3)
2 14 crossover (7, 1)
2 15 permutation (1,)
2 16 permutation (3,)
2 17 strain (3,)
2 18 strain (1,)
2 19 random None
2 9 elite elite
3 20 crossover (18, 12)
3 21 crossover (12, 9)
3 22 crossover (12, 18)
3 23 crossover (18, 9)
3 24 crossover (13, 18)
3 25 permutation (18,)
3 26 permutation (9,)
3 27 strain (18,)
3 28 strain (18,)
3 29 random None
3 18 elite elite 解析と可視化 最終更新日:2026年10月16日
自動エネルギープロット バージョン1.4.4からは,デフォルトで各世代の計算終了時に自動的にエネルギープロットが行われ,
ファイルは下記に保存される.
./data/energy_plot/energy_EA_gen_{gen}.{fig_fotmat}.
バージョン1.5.0以降は,[option]セクションのenergy_output_intervalで出力間隔(世代数)を変更できる.デフォルトは1(毎世代)で,0なら自動出力を無効にする.詳細は入力ファイル > [option] Section を参照.
cryspy.inの[visual]セクションで以下の入力変数が指定可能となっている.
入力変数の詳細はこちら CrySPY > Input file > [visual] section .
...
[visual]
ymax = 0.2
markersize = 10
fig_format = svg
... cryspy-Eplotを用いた再プロット もしプロットされた図を調整して再プロットしたい場合は,cryspy-Eplot コマンドを使えば簡単に実行できる.
cryspy-Eplot コマンドを用いる場合は,専用の以下の入力変数も利用可能となっている.
plot_min_genplot_max_genref_gen例えば,2世代目における図を再プロットするには,[visual]セクションを下記のように書く.
...
[visual]
plot_max_gen = 2
... cryspy-Eplotを実行すると
この場合,CrysPYは ./data/energy_plot/energy_EA_gen_{gen}.{fig_fotmat}にファイルを上書き保存する.
plot_min_genとplot_max_genを用いることで,プロットする世代の範囲を指定することも可能である.
plot_min_genに値が設定された場合,たとえそれが1であっても普段と異なる次のファイルに図が保存される.
./data/energy_plot/energy_EA_gen_{plot_min_gen}-{plot_max_gen}.{fig_fotmat}.
例えば,第2世代時点での結果から,2世代目だけの結果を抜き出すには下記のように行う.
...
[visual]
plot_min_gen = 2
plot_max_gen = 2
...
どの時点での世代の結果を用いるか(x軸の最大値に関係)は,ref_genで指定できる.
例えば,ページ最上部の図にあるように,第3世代までの結果から,第2世代目の結果だけ抜き出すには,以下のように設定する.
...
[visual]
plot_max_gen = 2
plot_min_gen = 2
ref_gen = 3
... ref_genが指定されている場合は,ファイル名は以下のようになる.
energy_EA_gen_{plot_min_gen}-{plot_max_gen}_ref_{ref_gen}.{fig_format}.
より詳細なデータ解析や,図の編集がしたければ,次に書いてあるようにファイルをダウンロードしてJupyter notebookを使うと良い.
データのダウンロード ここでは,CrySPYのデータをローカルPCで解析・可視化することを前提としている.
CrySPYをスーパーコンピュータやワークステーションで使用している場合は,データをローカルPCにダウンロードすること.
work や backup ディレクトリは,ファイルサイズが非常に大きくなる可能性があるため,不要であれば削除してよい.
Jupyter Notebook 先ほどダウンロードした結果の中にある data/ ディレクトリに移動する.
その後,CrySPY utilityがローカルにダウンロード してある場合は cryspy_analyzer_EA.ipynb をコピーする.
またはGitHubから直接ダウンロードしてくる(CrySPY_utility/notebook/ ).
Jupyter を起動し(VScode,Jupyter Lab,Jupyter Notebook など),
セルを順番に実行するだけで,以下のような図を得ることができる.
組成可変型進化的アルゴリズム(EA-vc)のサブセクション ASE on Your Local PC (Cu-Ag-Au) 最終更新日:2026年10月16日
ここで利用しているファイルは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
n_elite = 2
n_fittest = 10
slct_func = TNM
t_size = 2
ref_energies = 0.0 0.0 0.0
maxgen_ea = 0
[option]
rslt_out = always
energy_output_interval = 1
backup_interval = 1 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 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_subsref_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 VASP(Fe-Al) 最終更新日:2026年10月16日
バージョン1.4.2でEA-vcはVASPに対応.
ここで利用しているファイルはCrySPY_utility/examples/vasp_Fe-Al_EA-vc からダウンロードできる.
このチュートリアルでは,VASPを用いてジョブスケジューラーを備えた計算機クラスタで行うことを想定している.
対象となるシステムは2元系のFe-Alで,強磁性を仮定した計算を行う.
事前計算 EA-vcではcryspy.inでref_energies(ver. 1.4.3以下では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
n_elite = 2
n_fittest = 10
slct_func = TNM
t_size = 2
maxgen_ea = 0
ref_energies = - 8.24249611 - 3.74226843
[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で自動バックアップを無効化.詳細は機能 > バックアップ を参照. jobcmdは計算機環境に合わせて変更すること.[structure]セクションでは,ll_natで各元素の原子数の最小値,ul_natで最大値を指定. n_pop = n_crsov + n_perm + n_strain + n_rand + n_add + n_elim + n_subsref_energies(ver. 1.4.3以下ではend_point)には事前計算しておいた,FeおよびAlにおける各単体の1原子当たりのエネルギー(eV/atom)を入力.atypeの順番.[EA]セクションのパラメータについては,入力ファイル > [EA] section および探索アルゴリズム > 組成可変型進化的アルゴリズム(EA-vc) を見ること. 自動的にプロットされる凸包グラフのパラメータはチュートリアル > 組成可変型進化的アルゴリズム(EA-VC) > 解析と可視化 も参考にすること. 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) 最終更新日:2026年10月16日
バージョン1.4.2でEA-vcはQEに対応.
ここで利用しているファイルはCrySPY_utility/examples/qe_Fe-Al_EA-vc からダウンロードできる.
このチュートリアルでは,QEを用いてジョブスケジューラーを備えた計算機クラスタで行うことを想定している.
対象となるシステムは2元系のFe-Alで,強磁性を仮定した計算を行う.
事前計算 EA-vcではcryspy.inでref_energies(ver. 1.4.3以下では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
n_elite = 2
n_fittest = 10
slct_func = TNM
t_size = 2
maxgen_ea = 6
ref_energies = - 3406.14117375 - 91.25463006
[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で自動バックアップを無効化.詳細は機能 > バックアップ を参照. jobcmdは計算機環境に合わせて変更すること.[structure]セクションでは,ll_natで各元素の原子数の最小値,ul_natで最大値を指定. n_pop = n_crsov + n_perm + n_strain + n_rand + n_add + n_elim + n_subsref_energies(ver. 1.4.3以下ではend_point)には事前計算しておいた,FeおよびAlにおける各単体の1原子当たりのエネルギー(eV/atom)を入力.atypeの順番.[EA]セクションのパラメータについては,入力ファイル > [EA] section および探索アルゴリズム > 組成可変型進化的アルゴリズム(EA-vc) を見ること. 自動的にプロットされる凸包グラフのパラメータはチュートリアル > 組成可変型進化的アルゴリズム(EA-VC) > 解析と可視化 も参考にすること. 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 次世代の生成 最終更新日:2026年10月16日
初回実行 cryspyを実行すると,構造生成モードになり,第一世代のランダム構造が生成されて,一旦プログラムは終了する.
出力をみると,ll_natとul_natの範囲の原子数で構造が生成されているのが確認できる.
...
[2026-07-07 15:18:02,548][cryspy_init][INFO] # ---------- Initial structure generation
[2026-07-07 15:18:02,548][rs_gen][INFO] # ------ mindist
[2026-07-07 15:18:02,549][struc_util][INFO] Cu - Cu: 1.32
[2026-07-07 15:18:02,549][struc_util][INFO] Cu - Ag: 1.385
[2026-07-07 15:18:02,549][struc_util][INFO] Cu - Au: 1.34
[2026-07-07 15:18:02,549][struc_util][INFO] Ag - Ag: 1.45
[2026-07-07 15:18:02,549][struc_util][INFO] Ag - Au: 1.405
[2026-07-07 15:18:02,549][struc_util][INFO] Au - Au: 1.36
[2026-07-07 15:18:02,549][rs_gen][INFO] # ------ Generate random structures
[2026-07-07 15:18:02,712][gen_pyxtal][INFO] Structure ID 0: (6, 6, 2) Space group: 196 --> 216 F-43m
[2026-07-07 15:18:02,721][gen_pyxtal][WARNING] Compoisition [7 5 3] not compatible with symmetry 224: spg = 224 retry.
[2026-07-07 15:18:02,726][gen_pyxtal][WARNING] Compoisition [3 3] not compatible with symmetry 134: spg = 134 retry.
[2026-07-07 15:18:02,733][gen_pyxtal][WARNING] Compoisition [ 6 4 16] not compatible with symmetry 140: spg = 140 retry.
[2026-07-07 15:18:02,822][gen_pyxtal][INFO] Structure ID 1: (1, 4, 3) Space group: 23 --> 71 Immm
[2026-07-07 15:18:02,839][gen_pyxtal][INFO] Structure ID 2: (2, 2, 8) Space group: 150 --> 150 P321
... 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を実行して,第一世代の構造最適化を終わらせると,下記のように出力される.
...
[2026-07-07 15:21:18,273][ea_next_gen][INFO] Done generation 1
[2026-07-07 15:21:18,273][ea_next_gen][INFO] Calculate convex hull for generation 1
Ignoring fixed y limits to fulfill fixed data aspect with adjustable data limits.
[2026-07-07 15:21:18,772][ea_next_gen][INFO]
EA is ready 凸包 この時点で,./data/convex_hull/にhull distanceの情報とconvex hullのグラフが出力されている.
ID hull distance (eV/atom) Num_atom
14 0.000000 (0, 1, 3)
9 0.088493 (2, 8, 8)
15 0.105278 (8, 7, 5)
10 0.200962 (8, 0, 7)
8 0.210806 (0, 3, 3)
13 0.247862 (5, 6, 8)
19 0.258563 (6, 6, 1)
5 0.261977 (2, 6, 4)
6 0.269711 (7, 7, 2)
18 0.290792 (1, 6, 6)
11 0.292541 (8, 3, 1)
16 0.356158 (6, 2, 4)
2 0.373888 (2, 2, 8)
7 0.514507 (0, 4, 4)
12 0.548770 (3, 4, 4)
1 0.617685 (1, 4, 3)
3 0.761585 (1, 0, 8)
17 0.934091 (6, 4, 7)
4 0.955053 (2, 8, 4)
0 1.019078 (6, 6, 2) conv_hull_gen_1.svg
次世代生成 準備ができた状態でもう一度cryspyを実行すると,次世代構造の生成が始まる.
デフォルト(backup_interval = 1)では,次世代構造を生成する直前に自動バックアップが実行される.
v1.5.0以降は,[option]セクションのbackup_intervalで間隔(世代数)を変更でき,0で自動バックアップを無効にする.詳細は機能 > バックアップ を参照.
...
[2026-07-07 15:29:32,182][ea_next_gen][INFO] Done generation 1
[2026-07-07 15:29:32,505][utility][INFO] Backup data
[2026-07-07 15:29:32,512][ea_next_gen][INFO] # ---------- Evolutionary algorithm
[2026-07-07 15:29:32,512][ea_next_gen][INFO] Generation 2
[2026-07-07 15:29:32,512][ea_next_gen][INFO] # ------ Apply nat/composition constraints
[2026-07-07 15:29:32,512][ea_next_gen][INFO] Current candidates after constraint filter: 20
[2026-07-07 15:29:32,513][ea_next_gen][INFO] Elite structures after constraint filter: 0
[2026-07-07 15:29:32,513][ea_next_gen][INFO] # ------ natural selection
[2026-07-07 15:29:32,515][ea_next_gen][INFO] ranking without duplication (including elite):
[2026-07-07 15:29:32,515][ea_next_gen][INFO] Structure ID 14, fitness: 0.00000
[2026-07-07 15:29:32,515][ea_next_gen][INFO] Structure ID 9, fitness: 0.08849
[2026-07-07 15:29:32,515][ea_next_gen][INFO] Structure ID 15, fitness: 0.10528
[2026-07-07 15:29:32,515][ea_next_gen][INFO] Structure ID 10, fitness: 0.20096
[2026-07-07 15:29:32,515][ea_next_gen][INFO] Structure ID 8, fitness: 0.21081
[2026-07-07 15:29:32,515][ea_next_gen][INFO] Structure ID 13, fitness: 0.24786
[2026-07-07 15:29:32,515][ea_next_gen][INFO] Structure ID 19, fitness: 0.25856
[2026-07-07 15:29:32,515][ea_next_gen][INFO] Structure ID 5, fitness: 0.26198
[2026-07-07 15:29:32,515][ea_next_gen][INFO] Structure ID 6, fitness: 0.26971
[2026-07-07 15:29:32,515][ea_next_gen][INFO] Structure ID 18, fitness: 0.29079
[2026-07-07 15:29:32,515][ea_next_gen][INFO] # ------ Generate children
[2026-07-07 15:29:32,515][ea_child][INFO] # -- mindist
[2026-07-07 15:29:32,517][struc_util][INFO] Cu - Cu: 1.32
[2026-07-07 15:29:32,517][struc_util][INFO] Cu - Ag: 1.385
[2026-07-07 15:29:32,517][struc_util][INFO] Cu - Au: 1.34
[2026-07-07 15:29:32,517][struc_util][INFO] Ag - Ag: 1.45
[2026-07-07 15:29:32,517][struc_util][INFO] Ag - Au: 1.405
[2026-07-07 15:29:32,517][struc_util][INFO] Au - Au: 1.36
[2026-07-07 15:29:32,521][ea_child][INFO] eligible candidates for crossover and strain: 10
[2026-07-07 15:29:32,521][ea_child][INFO] eligible candidates for permutation: 10
[2026-07-07 15:29:32,521][ea_child][INFO] eligible candidates for addition: 10
[2026-07-07 15:29:32,522][ea_child][INFO] eligible candidates for elimination: 10
[2026-07-07 15:29:32,522][ea_child][INFO] eligible candidates for substitution: 10
[2026-07-07 15:29:32,527][crossover][WARNING] remove_within_mindist: some atoms within mindist. retry.
[2026-07-07 15:29:32,532][crossover][WARNING] remove_within_mindist: some atoms within mindist. retry.
[2026-07-07 15:29:32,537][crossover][WARNING] remove_within_mindist: some atoms within mindist. retry.
[2026-07-07 15:29:32,541][crossover][WARNING] remove_within_mindist: some atoms within mindist. retry.
[2026-07-07 15:29:32,547][crossover][WARNING] remove_within_mindist: some atoms within mindist. retry.
[2026-07-07 15:29:32,551][crossover][WARNING] remove_within_mindist: some atoms within mindist. retry.
[2026-07-07 15:29:32,556][crossover][WARNING] remove_within_mindist: some atoms within mindist. retry.
[2026-07-07 15:29:32,561][crossover][WARNING] remove_within_mindist: some atoms within mindist. retry.
[2026-07-07 15:29:32,564][crossover][WARNING] remove_within_mindist: some atoms within mindist. retry.
[2026-07-07 15:29:32,569][crossover][WARNING] remove_within_mindist: some atoms within mindist. retry.
[2026-07-07 15:29:32,592][crossover][WARNING] remove_within_mindist: some atoms within mindist. retry.
[2026-07-07 15:29:32,622][crossover][WARNING] remove_within_mindist: some atoms within mindist. retry.
[2026-07-07 15:29:32,644][crossover][WARNING] remove_within_mindist: some atoms within mindist. retry.
[2026-07-07 15:29:32,667][crossover][INFO] Structure ID 20 (8, 3, 5) was generated from 10 and 15 by crossover. Space group: 1 P1
[2026-07-07 15:29:32,668][crossover][INFO] Structure ID 21 (0, 1, 5) was generated from 14 and 8 by crossover. Space group: 1 P1
...
...
...
[2026-07-07 15:29:33,401][ea_next_gen][INFO] # ------ Apply nat/composition constraints to elite candidates
[2026-07-07 15:29:33,401][ea_next_gen][INFO] Elite candidates after constraint filter: 20
[2026-07-07 15:29:33,401][ea_next_gen][INFO] Structure ID 14 keeps as the elite
[2026-07-07 15:29:33,401][ea_next_gen][INFO] Structure ID 9 keeps as the elite あとはcryspyの実行を繰り返せば,探索が進む.
結果の確認 最終更新日:2026年10月16日
ここでは,EAと異なるところを中心に述べる.
cryspy_rslt 以下は第3世代まで計算を終えたcryspy_rsltの例である.EA-vcでは,形成エネルギー(Ef_eV_atom)と原子数(Num_atom)も追加される.
v1.5.0以降は,[option]セクションのrslt_outでcryspy_rsltとcryspy_rslt_energy_ascの出力タイミングを変更できる.デフォルトはalways.詳細は入力ファイル > [option] Section を参照.
Gen Spg_num Spg_sym Spg_num_opt Spg_sym_opt E_eV_atom Ef_eV_atom Num_atom Magmom Opt
0 1 216 F-43m 216 F-43m 1.016698 1.016698 (6, 6, 2) NaN done
1 1 71 Immm 71 Immm 0.611438 0.611438 (1, 4, 3) NaN done
2 1 150 P321 150 P321 0.365560 0.365560 (2, 2, 8) NaN done
3 1 191 P6/mmm 191 P6/mmm 0.761585 0.761585 (1, 0, 8) NaN done
4 1 139 I4/mmm 139 I4/mmm 0.950294 0.950294 (2, 8, 4) NaN done
5 1 59 Pmmn 59 Pmmn 0.256424 0.256424 (2, 6, 4) NaN done
6 1 16 P222 16 P222 0.267629 0.267629 (7, 7, 2) NaN done
7 1 183 P6mm 191 P6/mmm 0.506178 0.506178 (0, 4, 4) NaN done
8 1 35 Cmm2 35 Cmm2 0.202477 0.202477 (0, 3, 3) NaN done
9 1 32 Pba2 32 Pba2 0.081089 0.081089 (2, 8, 8) NaN done
10 1 148 R-3 148 R-3 0.200962 0.200962 (8, 0, 7) NaN done 組成を指定して結果を確認 v1.5.0以降では,cryspy-print の-c(--composition)オプションで,rslt_data.pklから特定の組成比の結果だけを表示できる.
組成比はatypeの順に指定する.この例ではatype = Cu Ag Auなので,Cuを含まずAgとAuが1:1の構造を確認するには,次のように実行する.
cryspy-print data/pkl_data/rslt_data.pkl -c 0 1 1 --all 組成比は約分して比較されるため,上の表ではNum_atomが(0, 4, 4)のID 7と(0, 3, 3)のID 8が該当する.
該当する結果を形成エネルギー(Ef_eV_atom)の昇順で表示する.--allは該当する全行を表示する指定で,エネルギーが低い先頭10件だけを確認したい場合は--head 10に置き換える.
上の表のデータに対する表示結果:
Gen Spg_num Spg_sym Spg_num_opt Spg_sym_opt E_eV_atom Ef_eV_atom Num_atom Magmom Opt
8 1 35 Cmm2 35 Cmm2 0.202477 0.202477 (0, 3, 3) NaN done
7 1 183 P6mm 191 P6/mmm 0.506178 0.506178 (0, 4, 4) NaN done nat_data 原子数,組成の情報はnat_dataにも出力される.
ID ('Cu', 'Ag', 'Au') Composition
0 ( 6, 6, 2) (0.429, 0.429, 0.143)
1 ( 1, 4, 3) (0.125, 0.500, 0.375)
2 ( 2, 2, 8) (0.167, 0.167, 0.667)
3 ( 1, 0, 8) (0.111, 0.000, 0.889)
4 ( 2, 8, 4) (0.143, 0.571, 0.286)
5 ( 2, 6, 4) (0.167, 0.500, 0.333)
6 ( 7, 7, 2) (0.438, 0.438, 0.125)
7 ( 0, 4, 4) (0.000, 0.500, 0.500)
8 ( 0, 3, 3) (0.000, 0.500, 0.500)
9 ( 2, 8, 8) (0.111, 0.444, 0.444)
10 ( 8, 0, 7) (0.533, 0.000, 0.467)
... hull_dist_all_gen_x デフォルト設定では,例えば第3世代終了時点のhull distanceのデータは./data/convex_hull/hull_dist_all_gen_3というファイルに出力される.
出力間隔は[option]セクションのenergy_output_intervalで指定する.デフォルトは1(毎世代),0でファイルの自動出力を無効化.詳細は入力ファイル > [option] Section を参照.
ID hull distance (eV/atom) Num_atom
21 0.000000 (0, 1, 5)
46 0.000000 (0, 1, 3)
49 0.000000 (0, 2, 3)
56 0.000000 (3, 0, 1)
14 0.000000 (0, 1, 3)
28 0.000001 (0, 1, 3)
48 0.002585 (0, 1, 3)
45 0.006762 (2, 8, 8)
26 0.007389 (2, 8, 8)
... conv_hull_gen_x.svg デフォルト設定では,例えば第3世代終了時点の凸包プロットの画像データは./data/convex_hull/conv_hull_gen_3.svgに出力される.
凸包図の自動出力も同じenergy_output_intervalの設定に従う.
デフォルトはsvg形式であるが,入力ファイルでfig_formatを変更していればpdfやpngで出力される.
解析と可視化 最終更新日:2026年10月16日
自動凸包プロット EA-vcでは2元系および3元系の探索シミュレーションの場合,デフォルトで各世代の計算終了時に凸包のグラフが自動プロットされる.
画像は ./data/convex_hull/conv_hull_gen_{gen}.{fig_fotmat}に保存される。
バージョン1.5.0以降は,[option]セクションのenergy_output_intervalで出力間隔(世代数)を変更できる.デフォルトは1(毎世代)で,0なら凸包の図と凸包からの距離のファイルの自動出力を無効にする.凸包と凸包からの距離の計算自体は毎世代行われる.詳細は入力ファイル > [option] Section を参照.
2元系
上の図は第3世代まで探索した時の例であり,cryspy.inの[visual]セクションで,下記のような入力変数を設定できる.
詳細は CrySPY > Input file > [visual] section .
...
[visual]
ymax = 0.2
markersize = 10
fig_format = svg
label_stable = True
vmax = 0.2
bottom_margin = 0.04
axis_order = lr
... ここで,vmaxはhull distanceのカラーバーの最大値,bottom_marginは形成エネルギーの最小値とy軸の最小値の間のマージンを表す.
左の図に示すように,axis_order = lr(デフォルト設定)としたとき,atype[0]が左端,aypte[1]が右端になるように描画される.
右の図はaxis_order = rlにしたもの,つまり,atype = Cu Auの場合, 純Cu結晶がグラフの右端,純Au結晶が左端に配置される.
3元系
上の図は3元系の例であり,cryspy.inの[visual]セクションで,下記のような入力変数を設定できる.
詳細は CrySPY > Input file > [visual] section .
...
[visual]
markersize = 10
fig_format = svg
###show_max = 0.4
label_stable = True
vmax = 0.2
axis_order = tlr
... ここで,show_maxはプロットするhull distanceの最大値であり,上記の例ではコメントアウトしてあるので
デフォルト値のNoneが適用されている.
左の図に示すように,axis_order = tlr(デフォルト設定)としたとき,atype[0]が上,aypte[1]が左,atype[2]が右のendpointになる.
trlやltrなど配置したい順番で指定できる.
右の図は axis_order = ltrのとした時の例で,
atype = Cu Ag Auの場合だと,Cuが左,Agが上,Auが右のendpointに配置される.
電荷中性条件 chargeを指定して電荷中性条件を課した場合の凸包プロットを以下に示す.
入力例や電荷の指定方法は機能 > 電荷中性条件 を参照.
2元系(左:single-valence,右:multi-valence).
single-valence:(Cu, Au) = (+1, -1) multi-valence:(Cu, Au) = ((+2, +3), -2)
3元系(左:single-valence,右:multi-valence).
single-valence:(Cu, Ag, Au) = (+1, +2, -1) multi-valence:(Cu, Ag, Au) = (+1, (+2, +3), -2)
組成制限 バージョン1.5.0以降では,min_compとmax_compで探索する組成範囲を制限できる.
組成制限を設定した場合,凸包プロットでは組成の許容範囲が青色の領域で示される.
入力例や図の見方は機能 > 組成制限 を参照.
2元系(左)と3元系(右)の第3世代までの探索結果の例.
探索結果を使わずに入力した組成範囲を確認するには,cryspy-Eplotの-cオプション を利用できる.
電荷中性条件と組成制限の併用 組成制限はchargeによる電荷中性条件とも併用できる.
その場合,青色の領域は組成制限のみを表し,生成される構造はその領域内で電荷中性条件も満たすものに限られる.
入力例は機能 > 組成制限 を参照.
両方の条件を課した3元系の第3世代までの探索結果の例.
cryspy-Eplotを用いた再プロット もしプロットされた図を調整して再プロットしたい場合は,cryspy-Eplot コマンドを使えば簡単に実行できる.
世代を指定した再プロット cryspy-Eplot コマンドを用いる場合は,専用の以下の入力変数も利用可能となっている.
plot_min_genplot_max_genref_gen例えば,2世代目における図を再プロットするには,[visual]セクションを下記のように書く.
...
[visual]
plot_max_gen = 2
... cryspy-Eplotを実行すると
この場合,CrysPYは ./data/convex_hull/conv_hull_gen_{gen}.{fig_fotmat}にファイルを上書き保存する.
plot_min_genとplot_max_genを用いることで,プロットする世代の範囲を指定することも可能である.
plot_min_genに値が設定された場合,たとえそれが1であっても普段と異なる次のファイルに図が保存される.
./data/convex_hull/conv_hull_gen_{plot_min_gen}-{plot_max_gen}.{fig_fotmat}.
例えば上の図は左から,第1世代.第2世代,第3世代の構造だけを抜き出してきたものである.
ただし,ref_gen = 3を使って,凸包(実線)は第3世代ものを常に用いて描いている.
ref_genの値はplot_max_gen以上に設定する必要がある.
中央の図のように第2世代だけ抜き出したい場合は,[visual]セクションで下記のように設定する.
...
[visual]
plot_min_gen = 2
plot_max_gen = 2
ref_gen = 3
... もしref_genが指定された場合は,出力されるファイル名は次のようになる.
conv_hull_gen_{plot_min_gen}-{plot_max_gen}_ref_{ref_gen}.{fig_format}.
化合物を基準とした凸包 [visual]セクションのterminalsで基準となる化合物組成を指定すると,化合物を基準とした凸包も描画できる.設定例はコマンド > cryspy-Eplot > 化合物を基準とした凸包 を参照.
以下は,電荷中性条件を課したLi–Al–O系の第30世代までの探索結果の例.左は元素を基準とした3元系の凸包,右はLi2OとAl2O3を基準とした擬2元系の凸包.
データのダウンロード ここでは,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を用いたインタラクティブプロットができる.
LAQA 最終更新日:2026年10月16日
情報CrySPYの基本的な使い方に関してははじめにTutorial > Random Search (RS) を見ること. ここではCrySPY 1.1.0以上を想定している.
ここで利用しているファイルはCrySPY_utility/examples/qe_Si16_LAQA からダウンロードできる.
このチュートリアルでは,50個だけ初期構造を生成しているが,本来LAQAでは,もっと多くの構造を生成しておいてそこから良い候補を選択することでシミュレーションを進める.
cryspy.in cryspy.inの例.
[basic]
algo = LAQA
calc_code = QE
tot_struc = 50
nstage = 1
njob = 10
jobcmd = qsub
jobfile = job_cryspy
[structure]
atype = Si
nat = 16
mindist_1 = 1.5
[QE]
qe_infile = pwscf.in
qe_outfile = pwscf.out
kppvol = 80
[LAQA]
nselect_laqa = 4
[option]
rslt_out = always
backup_interval = 1 LAQAではnstageは1にする必要がある. v1.5.0以降は,[option]セクションのbackup_intervalで自動バックアップの間隔(選択回数)を指定できる.デフォルトは1,0で自動バックアップを無効化.詳細は機能 > バックアップ を参照. [LAQA]セクションのnselect_laqaだけ新しく設定する必要がある. nselect_laqaは一回の選択で選ばれる候補の数. 下記のようにwfやwsを指定すれば,LAQAのスコアにおける重みも変えられる.
省略した場合,デフォルトでは0.1と10.0がそれぞれ使われる.
スコアの詳細についてはSearch algorithms > LAQA を見ること.
[LAQA]
nselect_laqa = 4
wf = 0.1
ws = 10.0 calc_in/pwscf.in_1 &control
calculation = 'vc-relax'
pseudo_dir = '/usr/local/gbrv/all_pbe_UPF_v1.5/'
outdir='./outdir/'
nstep = 10
/
&system
ibrav = 0
nat = 16
ntyp = 1
ecutwfc = 40
ecutrho = 200
occupations = 'smearing'
degauss = 0.01
/
&electrons
/
&ions
/
&cell
/
ATOMIC_SPECIES
Si -1.0 si_pbe_v1.uspp.F.UPF nstepで1回の選択で何ステップ構造最適化を進めるかをコントロールする.(VASPではNSW)calc_in/job_cryspy #!/bin/sh
#$ -cwd
#$ -V -S /bin/bash
####$ -V -S /bin/zsh
#$ -N Si_CrySPY_ID
#$ -pe smp 20
####$ -q ibis1.q
####$ -q ibis2.q
mpirun -np $NSLOTS pw.x -nk 4 < 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 Run
ヒント自動化スクリプトも用意してある.このページの最下部参照.
cryspyと打って1回目の実行.
この入力ファイルではまず50構造生成されるのでlog_cryspyを見て確認する.
2023/05/13 13:02:07
CrySPY 1.1.0
Start cryspy.py
Number of MPI processes: 1
Read input file, cryspy.in
Save input data in cryspy.stat
# --------- Generate initial structures
# ------ mindist
Si - Si 1.5
Structure ID 0 was generated. Space group: 165 --> 165 P-3c1
Structure ID 1 was generated. Space group: 66 --> 66 Cccm
Structure ID 2 was generated. Space group: 146 --> 146 R3
Structure ID 3 was generated. Space group: 82 --> 82 I-4
Structure ID 4 was generated. Space group: 162 --> 162 P-31m
...
...
...
Structure ID 47 was generated. Space group: 90 --> 90 P42_12
Structure ID 48 was generated. Space group: 214 --> 214 I4_132
Structure ID 49 was generated. Space group: 23 --> 23 I222
Elapsed time for structure generation: 0:00:10.929030
# ---------- Initialize LAQA
# ---------- Selection 0
selected_id: 50 IDs LAQAでは,はじめに全ての初期構造の最適化ジョブを実行する.
完全に最適化を終わらせるわけではなく,ここではnstep = 10にしているので,10ステップだけ実行される.
cryspyコマンドを繰り返して,初期構造全てについて10ステップの最適化を完了させる.
必要であれば,njobの値を上げておけば一度に多くのジョブがサブミットされる.
初めの最適化が全て終わると, log_cryspyの最後にLAQA is readyと表示される.
2023/05/13 13:23:31
CrySPY 1.1.0
Restart cryspy.py
Number of MPI processes: 1
# ---------- job status
ID 41: Stage 1 Done!
LAQA is ready この状態でcryspy を実行すると,最初の選択が始まる.
2023/05/13 13:23:33
CrySPY 1.1.0
Restart cryspy.py
Number of MPI processes: 1
# ---------- job status
Backup data
# ---------- Selection 1
selected_id: 37 8 10 48 nselect_laqaで設定された構造の数だけ選択される.
cryspyをもう一度実行するとそれらのジョブ(次の10ステップ)がサブミットされる.
2023/05/13 13:23:36
CrySPY 1.1.0
Restart cryspy.py
Number of MPI processes: 1
# ---------- job status
ID 37: submit job, Stage 1
ID 8: submit job, Stage 1
ID 10: submit job, Stage 1
ID 48: submit job, Stage 1 あとはこれを何度も繰り返し行うことでスコアに応じて選択された構造の最適化が10ステップずつ進行する.
ある程度の構造の最適化が完全に完了するまで進めて,止めたいタイミングでストップする.
Status シミュレーションの途中でスコアの確認がしたければ次のファイルを見ると良い:
他にもLAQAに関数ファイルがいくつか出力される:
./data_LAQA_bias ./data_LAQA_energy ./data_LAQA_score ./data_LAQA_selected_id ./data_LAQA_step Analysis and Visualization ここではCrySPYのデータをローカルPCで解析する.
スパコンやワークステーションで計算を行ったら,ローカルPCにデータをダウンロードしておく.
今後必要なければ,ファイルサイズが大きいworkとbackupディレクトリは削除しておいて良い.
pklデータはgzipしておくとファイルサイズを減らすことができる.
Jupyter Notebook ダウンロードした結果のdata/ディレクトリに移動して,cryspy_analyzer_LAQA.ipynbをCrySPY utility からコピーする.
このjupyter notebookを順番に実行していけば下記のようなグラフとgif画像が作成できる.
この例では,アニメーションのために全ての構造の最適化を完全に完了させた.
(全て最適化を完了させるとランダムサーチと計算量が変わらないのでLAQAの優位性はない)
このグラフはエネルギーを最適化ステップの関数として示している.
赤い線は最終的にエネルギーが低かった3つの構造を表しており,中でも一番安定だった構造はダイアモンド構造に到達している.
安定になる構造はかなり早い段階で選択されて構造最適化が完了していることがわかる.
情報algo = LAQAでは[option]セクションの下記の二つは自動的にTrueになる.
force_step_flag = True stress_step_flag = True 原子に働く力とストレスのデータは1ステップごとに収集される.
エネルギーと構造データは1ステップごとではなく,選択ごとに収集される.
つまり,この場合は10ステップおきにエネルギーと構造データは保存される.
もし1ステップごとのデータが欲しいのであれば,手動で下記の設定を追加すること.
[option]
energy_step_flag = True
struc_step_flag = True Auto Script 何度も繰り返しcryspyを実行するのは面倒に感じたかもしれない.
下記のようなスクリプトを使えば自動化できる.
repeat_cryspy
初期構造の読み込み 最終更新日:2026年10月16日
ここでは,cifファイル3つからinit_struc_data.pklを作成し,初期構造として読み込む.
RSによるCu 8原子の探索を例に,3構造を読み込み,不足する2構造をランダム生成して,合計5構造で探索を開始する.
読み込み時のチェックの詳細は,機能 > 初期構造の読み込み を参照.
準備 チュートリアル > ランダムサーチ(RS) > ASE on Your Local PC と同様に,cryspy.inとcalc_in/を新しい作業ディレクトリに用意する.
calc_in/のase_in.pyとjob_cryspyは,そのチュートリアルと同じものを使用する.まだcryspyは実行しない.
変換にはCrySPY Utilityのpos2pkl.pyを用いる.以下では,pos2pkl.pyにPATHが通っていることを想定する.設定方法はインストール > CrySPY Utility を参照.
動作確認用のcifファイルをダウンロードし,作業ディレクトリに置く.いずれもCuを8原子含む構造.
.
├── Cu8_1.cif
├── Cu8_2.cif
├── Cu8_3.cif
├── calc_in
│ ├── ase_in.py
│ └── job_cryspy
└── cryspy.in 構造データの変換 作業ディレクトリで次のコマンドを実行する.cifのように1ファイルに1構造を保存したデータには,-sを付ける.
pos2pkl.py -s Cu8_1.cif Cu8_2.cif Cu8_3.cif Composition: Cu8
Converted. The number of structures: 3
Save init_struc_data.pkl カレントディレクトリにinit_struc_data.pklが作成される.入力順に構造IDが割り振られ,Cu8_1.cif,Cu8_2.cif,Cu8_3.cifのIDはそれぞれ0,1,2となる.
変換方法の詳細はCrySPY Utility > pos2pkl.py を参照.
cryspy.in cryspy.inを次のように設定する.
[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]
load_struc_flag = True atype = Cu,nat = 8は,読み込む3構造の原子種と原子数に合わせている.tot_struc = 5とし,読み込んだ3構造にランダム生成した2構造を加える.load_struc_flag = Trueで初期構造の読み込みを有効にする.jobcmdは計算機環境に合わせて変更する.データの配置と実行 初回のcryspy実行前に,作成した構造データを配置する.
mkdir -p data/pkl_data
cp init_struc_data.pkl data/pkl_data/
cryspy 3構造が読み込まれ,不足する2構造がランダム生成される.初期構造の準備が完了すると,一旦終了する.
以降は通常のRSと同様に,再びcryspyを実行して構造最適化を進める.
読み込み結果の確認 ./data/init_POSCARSに,読み込んだ構造とランダム生成した構造を合わせた5構造が保存される.
構造ID 初期構造 0Cu8_1.cifから読み込んだ構造1Cu8_2.cifから読み込んだ構造2Cu8_3.cifから読み込んだ構造3,4ランダム生成した構造
./data/pkl_data/init_struc_data.pklも,この5構造を含む内容に更新される.
構造数や原子種・組成などの条件を満たさない場合はエラーになる.詳細は機能 > 初期構造の読み込み > 読み込み時のチェック を参照.
分子結晶の構造予測 最終更新日:2026年10月16日
情報CrySPYの基本的な使い方については,はじめにチュートリアル > ランダムサーチ(RS) を参照.
ここでは,分子結晶の構造生成のみを扱う.
本ページでは,構造生成の際に分子や原子団をユニットとして配置する結晶を「分子結晶」と呼ぶ.Li3PS4の例のように,単原子や多原子イオンをユニットとして扱う場合も含む.
バージョン0.9.0以降では,PyXtal を用いた分子結晶のランダム構造生成が可能.
PyXtalのデータベースに登録された分子を使用するか,分子構造を定義したファイルを用意する.
PyXtalの分子データについては,PyXtalのドキュメント を参照.
登録済みの分子 PyXtalに登録された分子には,C60,H2O,CH4,NH3,benzene,naphthalene,anthracene,tetracene,pentacene,coumarin,resorcinol,benzamide,aspirin,ddt,lindane,glycine,glucose,ROYがある.
ここでは,ベンゼン分子2個からなる分子結晶の構造を生成する.
作業ディレクトリに移動し,以下のいずれかの方法で入力ファイルの例を用意する.
cryspy.inを確認する.
$ cat cryspy.in
[basic]
algo = RS
calc_code = QE
tot_struc = 6
nstage = 2
njob = 2
jobcmd = qsub
jobfile = job_cryspy
[structure]
struc_mode = mol
atype = H C
nat = 12 12
mol_file = benzene
nmol = 2
[QE]
qe_infile = pwscf.in
qe_outfile = pwscf.out
kppvol = 40 60
[option]
rslt_out = always 分子結晶の構造生成では,[structure]セクションでstruc_mode = molを指定する.
使用する分子と分子数は,以下のように指定する.
mol_file = benzenenmol = 2v1.5.0でtimeout_molは削除された.
CrySPYを実行し,初期構造(./data/init_POSCARS)を確認する.
ユーザー定義の分子 作業ディレクトリに移動し,Li3PS4の2化学式単位分の入力ファイルの例をコピーする.
バージョン1.0.0以降 バージョン0.10.3以前cp -r ~/CrySPY_root/CrySPY-0.9.0/example/QE_Li3PS4_2fu_RS_mol . $ cd QE_Li3PS4_2fu_RS_mol
$ ls
Li.xyz PS4.xyz calc_in/ cryspy.in LiとPS4の分子ファイルが含まれている.PyXtalでは,.xyz,.gjf,.g03,.g09,.com,.inp,.out形式,およびpymatgenの分子データをJSON形式で保存したファイルを使用できる.
$ cat Li.xyz
1
New structure
Li 0.000 0.000 0.000 $ cat PS4.xyz
5
New structure
P 0.000000 0.000000 0.000000
S 1.200000 1.200000 -1.200000
S 1.200000 -1.200000 1.200000
S -1.200000 1.200000 1.200000
S -1.200000 -1.200000 -1.200000 cryspy.inを確認する.
$ cat cryspy.in
[basic]
algo = RS
calc_code = QE
tot_struc = 4
nstage = 2
njob = 1
jobcmd = qsub
jobfile = job_cryspy
[structure]
struc_mode = mol
atype = Li P S
nat = 6 2 8
mol_file = ./Li.xyz ./PS4.xyz
nmol = 6 2
[QE]
qe_infile = pwscf.in
qe_outfile = pwscf.out
kppvol = 40 60
[option]
rslt_out = always 分子結晶の構造生成モードでは,単一の原子(この例ではLi原子)も1つの分子として扱う.
この例では,以下の指定により,Li原子6個とPS4分子2個からなる分子結晶のランダム構造を生成する.
mol_file = ./Li.xyz ./PS4.xyznmol = 6 2mol_fileには,cryspy.inがあるディレクトリからの相対パスを指定する.
この例では,分子ファイルをcryspy.inと同じディレクトリに置いている.
CrySPYを実行し,初期構造(./data/init_POSCARS)を確認する.
セル体積 cryspy.inのvol_factorで体積スケーリング係数を指定できる.
デフォルトは1.1.正の数値を1つ指定する.
例えば,係数を1.5にする場合は以下のように記述する.
struc_mode = mol
atype = Li P S
nat = 6 2 8
mol_file = ./Li.xyz ./PS4.xyz
nmol = 6 2
vol_factor = 1.5 Random Structure Generation with MPI 最終更新日:2026年10月16日
情報
情報動作環境:
CrySPY 1.1.0 1.2.3 or later mpi4py MPI library (Open MPI, Intel MPI, MPICH, etc.)
警告1.1.0 <= CrySPY <=1.2.2ではバグがあった.
MPIを使ったジョブをbashやzshで実行するとき(e.g., jobcmd = zsh, jobfile = job_cryspy),MPIのジョブが流れない.
qsubやsbatchでジョブスケジューラーを使う場合は問題ない。
このバグはバージョン1.2.3で修正.
mpi4py mpi4pyのインストールがまだであればインストールする.
入力ファイル cryspy.inはいつもと同じで変更する必要はない.ここでは下記の設定でMPIを使った構造生成を行う.
[basic]
algo = RS
calc_code = soiap
tot_struc = 100
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]
rslt_out = always tot_struc,atype,nat以外の変数は構造生成に関係がないのでここでは無視して良い.
実行 4並列で実行する場合,mpiexec -nを使う.-pオプションも必要.
In 1.1.0 <= CrySPY <= 1.2.2では下記のコマンド (-pオプションは使用しない)
ジョブスケジューラーなどにサブミットするときは自分でジョブファイルを作る.下記は一例.
#!/bin/sh
#$ -cwd
#$ -V -S /bin/bash
#$ -N n_nproc
#$ -pe smp 4
mpirun -np $NSLOTS ~/.local/bin/cryspy 実行スクリプトcryspyのpathなどは適宜編集すること.
結果 CrySPYはシンプルに構造生成タスクをプロセス数で分割している.
Rank 0: IDs 0 – 24 Rank 1: IDs 25 – 49 Rank 2: IDs 50 – 74 Rank 3: IDs 75 – 99 構造が生成された順番でログが出力される.
2023/04/24 22:47:51
CrySPY 1.1.0
Start cryspy.py
Number of MPI processes: 4
Read input file, cryspy.in
Save input data in cryspy.stat
# --------- Generate initial structures
# ------ mindist
Si - Si 1.11
Structure ID 25 was generated. Space group: 138 --> 123 P4/mmm
Structure ID 75 was generated. Space group: 99 --> 99 P4mm
Structure ID 0 was generated. Space group: 127 --> 123 P4/mmm
Structure ID 1 was generated. Space group: 61 --> 61 Pbca
Structure ID 50 was generated. Space group: 38 --> 38 Amm2
Structure ID 51 was generated. Space group: 134 --> 123 P4/mmm
Structure ID 26 was generated. Space group: 111 --> 123 P4/mmm
Structure ID 2 was generated. Space group: 9 --> 9 Cc
Structure ID 3 was generated. Space group: 80 --> 80 I4_1
Structure ID 4 was generated. Space group: 107 --> 107 I4mm
Structure ID 5 was generated. Space group: 75 --> 75 P4
Structure ID 76 was generated. Space group: 108 --> 108 I4cm
Structure ID 77 was generated. Space group: 100 --> 100 P4bm
Structure ID 27 was generated. Space group: 207 --> 221 Pm-3m しかし,init_POSCARSでは,構造生成が全て終わった後に出力しているのでID順になっている.
ID_0
1.0
2.9636956737951818 0.0000000000000002 0.0000000000000002
0.0000000000000000 2.9636956737951818 0.0000000000000002
0.0000000000000000 0.0000000000000000 6.2634106638053080
Si
8
direct
-0.1602734164607877 -0.1602734164607877 -0.0000000000000000 Si
0.1602734164607877 0.1602734164607877 0.5000000000000000 Si
0.6602734164607877 0.3397265835392123 0.7500000000000000 Si
0.3397265835392122 0.6602734164607877 0.2500000000000000 Si
0.4469739273741755 0.4469739273741755 -0.0000000000000000 Si
0.5530260726258245 0.5530260726258244 0.5000000000000000 Si
0.0530260726258245 0.9469739273741754 0.7500000000000000 Si
0.9469739273741754 0.0530260726258245 0.2500000000000000 Si
ID_1
1.0
7.2751506682509657 0.0000000000000004 0.0000000000000004
0.0000000000000000 7.2751506682509657 0.0000000000000004
0.0000000000000000 0.0000000000000000 5.1777634169924873
Si
8
direct
-0.3845341807505553 -0.3845341807505553 0.4999999999999999 Si
0.3845341807505553 0.3845341807505553 0.5000000000000000 Si
0.3845341807505553 -0.3845341807505553 0.0000000000000000 Si
-0.3845341807505553 0.3845341807505553 -0.0000000000000000 Si
0.0000000000000000 0.5000000000000000 0.2500000000000000 Si
0.5000000000000000 0.0000000000000000 0.7500000000000000 Si
0.0000000000000000 0.5000000000000000 0.7500000000000000 Si
0.5000000000000000 0.0000000000000000 0.2500000000000000 Si
ID_2
1.0
-4.3660398676292269 -4.3660398676292269 0.0000000000000000
-4.3660398676292269 -0.0000000000000003 -4.3660398676292269
0.0000000000000000 -4.3660398676292269 -4.3660398676292269
Si
8
direct
0.8700001548800920 0.8700001548800920 0.1299998451199080 Si
0.1299998451199080 0.1299998451199080 0.8700001548800920 Si
0.8700001548800920 0.1299998451199080 0.8700001548800920 Si
0.1299998451199080 0.8700001548800920 0.1299998451199080 Si
0.1299998451199080 0.8700001548800920 0.8700001548800920 Si
0.8700001548800920 0.1299998451199080 0.1299998451199080 Si
0.7500000000000000 0.7500000000000000 0.7500000000000000 Si
0.2500000000000000 0.2500000000000000 0.2500000000000000 Si
メモランダム構造生成以外の部分はMPIを使っても並列化されていないので意味はない.
情報インタラクティブモード (Jupyter Notebook) 最終更新日:2026年10月16日
情報動作環境:
CrySPY 1.4.0以上 Jupyter ASE対応の構造最適化計算ソフト(汎用機械学習ポテンシャルなど) nglview (optional)準備 CrySPYをインストールすればASE は自動的にインストールされている.
ワークステーションやローカルPCでJupyter を使えるようにしておく.
このチュートリアルでは,構造最適化にPure Python EMT calculator を用いる.このEMTポテンシャルの精度は悪く,デモ用のものなので注意.
exampleのノートブックには汎用機械学習ポテンシャルのCHGNet を使用するコードも書いてあるので,CHGNetを試したい場合は事前にpipでインストールしておく.
入力ファイル どこか適当なワーキングディレクトリに移動して,まずはexampleをコピーしてくる.下記のどちらからコピー
してきても良い.
インタラクティブモードでも,cryspy.inを入力ファイルとして使用する.
インタラクティブモードではcalc_inディレクトリは使用しない.
input_examplesディレクトリの中に,いくつかの入力ファイル例が入っているので参考にしてほしい.
ここではEA-vcを用いた下記のcryspy.inを使用する.EA-vcについてはEA-vcのチュートリアルを見ること.
[basic]
algo = EA- vc
calc_code = ASE
nstage = 1
njob = 10
jobcmd = zsh
jobfile = job_cryspy
[structure]
atype = Cu Au
ll_nat = 0 0
ul_nat = 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
n_elite = 2
n_fittest = 10
slct_func = TNM
t_size = 2
maxgen_ea = 5
ref_energies = 0.0 0.0
[option]
rslt_out = always ノートブック cryspy_interactive.ipynbを開いて,上から実行していく.
Check Current Working Directory 最初のセルはファイルやcryspy.inの中身を確認しているだけ.
! pwd
print()
! ls
print()
! cat cryspy. in Import コメントアウトされているものは今回は無視して,CrySPYのインタラクティブモードで核となるライブラリをインポートするセルを実行する.
# ---------- import
from cryspy.interactive import actionInitialize CrySPY このセルは通常の初回実行に対応している.cryspy.inを読み込んで初期構造が生成される.
# ---------- initial structure generation
action. initialize() Set Calculator このセルでASEのcalculatorをセットする.ここではASEのEMTを用いる.
# ---------- EMT in ASE
from ase.calculators.emt import EMT
calculator = EMT()
# ---------- CHGNet
#from chgnet.model import CHGNetCalculator
#calculator = CHGNetCalculator() Restart CrySPY このセルを実行すると,先ほど生成した初期構造の最適化が始まる.
インタラクティブモードでは一つ一つ順番に構造最適化計算を行う.その際に進捗バーも表示される.
# ---------- structure optimization
action. restart(
njob= 20 , # njob=0: njob in cryspy.in will be used
calculator= calculator,
optimizer= 'BFGS' , # 'FIRE', 'BFGS' or 'LBFGS'
symmetry= True , # default: True
fmax= 0.01 , # default: 0.01 eV/Å
steps= 2000 , # default: 2000
) njob: 一度の実行で最適化計算を行う構造数.0の場合はcryspy.inに書いてある値が使用される. calculator: 先に設定したcalculatorを代入 optimizer: FIRE, BFGS, LBFGSから選択.文字列で指定する. symmetry: Trueなら対称性を維持した構造最適化を行う fmax: 収束判定に使われる原子に働く力の最大値(eV/Å) steps: 最大最適化ステップ数 njobの値を小さくしている場合は,何度かこのセルを実行して,全ての初期構造の最適化を終了させる.
EA-vcを用いている場合,すべて終わると以下のように表示される.
もう一度このセルを実行すると世代交代が行われるので,次世代の構造生成が終了したら,あとは同様にこのセルの実行を繰り返す.
Show Results このセルを実行すると,cryspy_rslt_energy_ascなどのファイルを表示できる.
# ---------- show results
#!cat ./data/cryspy_rslt # Order of structure optimization completion
!cat ./data/cryspy_rslt_energy_asc # show energy ascending order
#!sed -n 2,4p ./data/cryspy_rslt # show i--jth lines
#!tail -n 5 ./data/cryspy_rslt # show last 5 lines Structure Visualization 初期構造や最適化済みの構造をインタラクティブに可視化できる.
from ase.visualize import view
atoms = action. get_atoms('opt' , cid= 0 ) # 'init' or 'opt'
view(atoms, viewer= 'ngl' ) # viewer = 'ngl', 'ase', or 'x3d' action.get_atoms('opt', cid=0)のところでoptをinitに変えると,初期構造が確認できる.
cidで構造IDを指定する.
ASEの機能を使用しているのでviewerにはngl, ase, x3dが利用できる.
nglを使うにはnglview のインストールが必要なのでpipでインストールしておく.
Energy Plot for RS, EA ランダムサーチ(RS)や進化的アルゴリズム(EA)の場合,下記画像のようなエネルギーグラフを表示できる.
EA-vcの場合は原子数が異なるので単純にエネルギーを比較できないので,後述のconvex hullプロットを使う.
fig, ax = action. plot_E(
title= None ,
ymax= 2.0 ,
ymin=- 0.5 ,
markersize= 12 ,
marker_edge_width= 1.0 ,
marker_edge_color= 'black' ,
alpha= 1.0 ,
)
Convex Hull Plot for EA-vc Interactive Plot Using Plotly EA-vcの場合はPlotly を用いたconvex hullのインタラクティブプロットが利用できる.
CrySPYをインストールすればPlotlyは自動的にインストールされている.
このconvex hullプロットはpymatgenの機能を用いている.
action. interactive_plot_convex_hull(cgen= None , show_unstable= 0.2 , ternary_style= '2d' ) cgen: どの世代までプロットするかを指定.Noneであれば最新の世代までプロットされる. show_unstable: 描画するhull distanceの最大値. ternary_style2元系: ternary_style = ‘2d’ 3元系: ternary_style = ‘2d’, ‘3d’ 4元系: ternary_style = ‘3d’
2元系ではなく,3元系や4元系で計算しているときは下記のようなインタラクティブプロットが得られる.
左から順に,3元系(ternary_style = ‘2d’),3元系(ternary_style = ‘3d’),4元系(ternary_style = ‘3d’)のプロット
Binary System Using matplotlib このセルを実行すると,matplotlibを用いて2元系のconvex hullをプロットできる.
fig, ax = action. plot_convex_hull_binary(
cgen= None ,
show_max= 0.2 ,
label_stable= True ,
vmax= 0.2 ,
bottom_margin= 0.02 ,
)
fig # to show plot in jupyter cgen: どの世代までプロットするかを指定.Noneであれば最新の世代までプロットされる. show_max: 描画するhull distanceの最大値. label_stable: 安定相のラベルを表示するかどうか. vmax: カラーバーのhull distaceの最大値. bottom_margin: y軸の下部のマージン.
Ternary System Using matplotlib もし3元系の探索をしている場合は,このセルを実行することでmatplotlibを使ったconvex hullのプロットができる.
fig, ax = action. plot_convex_hull_ternary(
cgen= None ,
show_max= 0.2 ,
label_stable= True ,
vmax= 0.2 ,
)
fig # to show plot in jupyter cgen: どの世代までプロットするかを指定.Noneであれば最新の世代までプロットされる. show_max: 描画するhull distanceの最大値. label_stable: 安定相のラベルを表示するかどうか. vmax: カラーバーのhull distaceの最大値. 例えば以下のようなプロットが得られる.