機能のサブセクション

Logging

2023 July 10

CrySPY 1.2.0からPython標準ライブラリのloggingを採用. CrySPYのログは画面とファイル(log_cryspy and err_cryspy)の両方に出力される.

  • log –> screen and log_cryspy
  • error and warning –> screen and err_cryspy

ログの例:

[2023-07-10 18:40:54,389][cryspy_init][INFO] 


Start CrySPY 1.2.0


[2023-07-10 18:40:54,389][cryspy_init][INFO] # ---------- Read input file, cryspy.in
[2023-07-10 18:40:54,390][read_input][INFO] Save input data in cryspy.stat
[2023-07-10 18:40:54,391][cryspy_init][INFO] # ---------- Initial structure generation
[2023-07-10 18:40:54,391][cryspy_init][INFO] Number of MPI processes: 1
[2023-07-10 18:40:54,391][gen_init_struc][INFO] # ------ mindist
[2023-07-10 18:40:54,395][struc_util][INFO] Cu - Cu: 1.32
[2023-07-10 18:40:54,395][gen_init_struc][INFO] # ------ generate structures
[2023-07-10 18:40:54,481][gen_pyxtal][INFO] Structure ID      0 was generated. Space group:   1 -->   1 P1
[2023-07-10 18:40:54,493][gen_pyxtal][INFO] Structure ID      1 was generated. Space group:  28 -->  28 Pma2
[2023-07-10 18:40:54,498][gen_pyxtal][INFO] Structure ID      2 was generated. Space group:  29 -->  29 Pca2_1
[2023-07-10 18:40:54,704][gen_pyxtal][INFO] Structure ID      3 was generated. Space group: 137 --> 137 P4_2/nmc
[2023-07-10 18:40:54,725][gen_pyxtal][INFO] Structure ID      4 was generated. Space group: 212 --> 214 I4_132
[2023-07-10 18:40:54,800][cryspy_init][INFO] Elapsed time for structure generation: 0:00:00.408367

ログを画面に出力させたくないときは下記のように-n オプションをつけて実行する.

cryspy -n

バックアップ

最終更新日:2026年7月15日

CrySPYはシンプルなバックアップ機能を備えている. バックアップの対象は以下のファイルおよびディレクトリである.

  • cryspy.in
  • cryspy.stat
  • log_cryspy
  • err_cryspy
  • debug_cryspy
  • cryspy_interactive.ipynb
  • calc_in/
  • data/

work/以下はバックアップに含まれていないので注意.

  • (v1.5.0以降) バックアップディレクトリ名に進行番号と単位が付加される.手動バックアップの場合は,さらにmanualが付加される.また,backup_intervalで自動バックアップの間隔を指定できる.
  • (v1.1.0以降) 上記ファイルおよびディレクトリが,日付と時間で名前づけられたディレクトリにコピーされる.以前のバックアップは自動的には削除されない.
  • (v1.0.0) バックアップは1世代分のみであり,それより古いものは削除される.

バックアップディレクトリ名(v1.5.0以降)

v1.5.0以降では,バックアップディレクトリ名にバックアップ時点の進行番号と単位が付加される. バックアップはbackup/以下に保存される. バックアップディレクトリ名は日時を先頭にし,以下の形式とする.

  • 自動バックアップ:YYYYMMDD_HHMMSS_<進行番号>_<単位>
  • 手動バックアップ:YYYYMMDD_HHMMSS_manual_<進行番号>_<単位>

進行単位は以下のとおり.

  • RS:struc
    • 進行番号は結果登録済みの構造数
  • BO,LAQA:select
    • 進行番号は現在のselection番号
  • EA,EA-vc:gen
    • 進行番号は現在のgeneration番号

ディレクトリ名の例を以下に示す.

  • EAの第5世代完了時の自動バックアップ:backup/20260715_143052_5_gen/
  • BOの第3 selection完了時の自動バックアップ:backup/20260715_143052_3_select/
  • EAの第5世代での手動バックアップ:backup/20260715_154210_manual_5_gen/
  • BOの第3 selectionでの手動バックアップ:backup/20260715_154210_manual_3_select/
  • RSで100構造の結果登録後に行った手動バックアップ:backup/20260715_154210_manual_100_struc/

初期化前など,進行番号と進行単位を取得できない状態で手動バックアップした場合は,YYYYMMDD_HHMMSS_manualとする.

自動バックアップ

v1.5.0以降では,cryspy.inの[option]セクションにbackup_intervalを記述することで,自動バックアップの間隔を指定できる.

例えば,自動バックアップの間隔を5にする場合は次のように記述する.

[option]
backup_interval = 5

backup_intervalに指定できる値は以下のとおり.

  • 0:自動バックアップしない
  • 正数:指定した間隔で自動バックアップする

アルゴリズムごとのデフォルト値と間隔の単位は以下のとおり.

  • RS
    • デフォルトは0
    • backup_intervalによる自動バックアップは行わない
    • tot_strucで計算を区切り,完了後に手動でバックアップする
  • BO,LAQA
    • デフォルトは1
    • selection単位で自動バックアップする
    • 次のselectionに移る直前に自動バックアップする
  • EA,EA-vc
    • デフォルトは1
    • generation単位で自動バックアップする
    • 次世代構造を生成する直前に自動バックアップする

構造を追加する場合は,backup_intervalによる定期バックアップとは別に,構造追加前のバックアップを行う.

手動バックアップ

手動バックアップを行う場合は,-bまたは--backupオプションをつけてcryspyを実行する.

cryspy -b

このコマンドは通常の計算処理を行わず,バックアップのみを実行する.

クリーン

2024 Dec. 22 updated

CrySPYはシンプルなクリーン機能を備えている. 初めからやり直したい時に便利となる. 以下のファイルがクリーン(実際はファイルを移動するだけ)される.

  • cryspy.stat
  • log_cryspy
  • err_cryspy
  • lock_cryspy
  • data/*
  • work/*
  • tmp_gen_struc/*

クリーンする場合は-c または --clean オプションをつけてcryspyを実行する:

$ ls
calc_in  cryspy.in  cryspy.stat  data  err_cryspy  log_cryspy
$ cryspy -c
Are you sure you want to clean the data? 'yes' or 'no' [y/n]: y
$ ls
calc_in  cryspy.in  trash
$ ls trash
20230318_100728

calc_in/* と cryspy.in 以外のファイルがtrashの中の日付と時間で名前づけられたディレクトリに移動します. 必要なければ手動で削除してください.

初期構造の読み込み

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

あらかじめ用意した構造を,探索の初期構造として使用できる. cryspy.inの[option]セクションでload_struc_flag = Trueを指定すると,初回起動時に./data/pkl_data/init_struc_data.pklを読み込む.デフォルトはFalse. 必要な構造数に満たない場合は,不足分をランダム生成で補完する.

使い方

[option]
load_struc_flag = True

cifファイル3つからデータを作成して読み込む手順は,チュートリアル > 初期構造の読み込みを参照. 構造ファイルからinit_struc_data.pklへの変換には,CrySPY Utilityのpos2pkl.pyを使用できる.

読み込み時のチェック

読み込み時には以下の条件を確認する.条件を満たさない場合はエラーになり,初期化を停止する.

  • init_struc_data.pklのデータが辞書であること.
  • 構造IDが整数の0から始まる連番であること.例えば,3構造なら0,1,2.
  • 各構造データがpymatgenのStructureであること.
  • 構造数が以下の上限を超えないこと.
アルゴリズム構造数の上限
EA,EA-vcn_pop
RS,BO,LAQAtot_struc

データ形式の詳細はデータフォーマット > 初期構造と最適化後の構造データを参照.

原子種・原子数・組成のチェック

RS,BO,LAQA,EAでは,原子種と各原子種の原子数がatypeとnatの設定に一致する必要がある.同じ組成比でも,原子数が異なる構造は使用できない.

EA-vcでは,以下の条件を確認する.

項目条件
原子種atype以外の原子種を含まない.
原子数各原子種の原子数がll_natからul_natまでの範囲内にあり,構造全体で1個以上の原子を含む.
組成制限min_compやmax_compを指定した場合は,その組成範囲を満たす.
電荷中性条件chargeを指定した場合は,指定した価数の組合せで電荷中性条件を満たせる.

組成制限と電荷中性条件の詳細は,組成制限および電荷中性条件を参照. 読み込み時には,mindistや空間群,セル体積の制限はチェックしない.

不足分の補完

読み込んだ構造数がtot_strucまたはn_popに満たない場合は,不足分をランダム生成する. 追加する構造には,読み込んだ構造の最後のIDに続く連番が付く. 読み込んだ構造と補完された構造を合わせて,./data/pkl_data/init_struc_data.pklと./data/init_POSCARSに保存する.

原子間距離の制限

2025年6月17日 更新

構造生成時に原子間距離の制限を行うことができる. 下記はA-B 2元系における[structure]セクションの最低原子間距離の設定例.

[structure]
natot = 8
atype = A B
nat = 4 4
mindist_1 = 2.0 1.8
mindist_2 = 1.8 1.5

原子A-A,B-BおよびA-B間の最低原子間距離がそれぞれ2.0,1.8および1.5 Åに設定されている. 原子間距離がこの値よりも小さい構造は自動的に棄却される.

3元系では mindist_1,mindist_2およびmindist_3が必要になる. mindistの行列は対称行列でなければならない.

CrySPY 1.4.0以降では,この最低原子間距離のチェックは構造最適化後にも行われる. 導入した理由は,機械学習ポテンシャルなどでは時々原子がほぼ重なるような構造が得られてしまうため. cryspy.inで下記のようにすることでこの機能をオフにすることもできる(デフォルトはオン)

[option]
check_mindist_opt = False

Example: Na8Cl8

Without mindist

cryspy.in

[basic]
algo = RS
calc_code = VASP
tot_struc = 5
nstage = 2
njob = 2
jobcmd = qsub
jobfile = job_cryspy

[structure]
natot = 16
atype = Na Cl
nat = 8 8

[VASP]
kppvol = 40 80

[option]

log_cryspy

[2024-04-23 13:46:28,598][cryspy_init][INFO] 


Start CrySPY 1.2.3


[2024-04-23 13:46:28,598][cryspy_init][INFO] # ---------- Read input file, cryspy.in
[2024-04-23 13:46:28,598][read_input][INFO] Save input data in cryspy.stat
[2024-04-23 13:46:28,599][gen_init_struc][INFO] # ------ mindist
[2024-04-23 13:46:28,601][struc_util][INFO] Na - Na: 1.66
[2024-04-23 13:46:28,602][struc_util][INFO] Na - Cl: 1.3399999999999999
[2024-04-23 13:46:28,602][struc_util][INFO] Cl - Cl: 1.02
...

fig_mindist fig_mindist

PyXtalのデフォルト設定では,上の図のように原子同士が近すぎる場合があるので,mindistを設定することをすすめる. DFT計算もやりやすくなるであろう.

With mindist

cryspy.in

[basic]
algo = RS
calc_code = VASP
tot_struc = 5
nstage = 2
njob = 2
jobcmd = qsub
jobfile = job_cryspy

[structure]
natot = 16
atype = Na Cl
nat = 8 8
mindist_1 = 2.5 1.5
mindist_2 = 1.5 2.5

[VASP]
kppvol = 40 80

[option]

log_cryspy

[2024-04-23 14:06:21,955][cryspy_init][INFO] 


Start CrySPY 1.2.3


[2024-04-23 14:06:21,955][cryspy_init][INFO] # ---------- Read input file, cryspy.in
[2024-04-23 14:06:21,956][read_input][INFO] Save input data in cryspy.stat
[2024-04-23 14:06:21,956][gen_init_struc][INFO] # ------ mindist
[2024-04-23 14:06:21,956][struc_util][INFO] Na - Na: 2.5
[2024-04-23 14:06:21,956][struc_util][INFO] Na - Cl: 1.5
[2024-04-23 14:06:21,956][struc_util][INFO] Cl - Cl: 2.5

イオン結晶のような場合には,カチオン同士,アニオン同士が離れるような設定をしておくと良い.

ジョブファイルの自動書き換え

2025年7月10日 更新

CrySPYのジョブファイルで,CrySPY_IDという文字列は自動的に構造IDに置換される. PBSやSLURMなどのジョブスケジューラーを使う時,ジョブ名に構造IDを使うと便利である. 例えばPBSでは, #PBS -N Si_CrySPY_IDが#PBS -N Si_15に置き換わる 大抵の場合,ジョブ名は数字から始められないことが多いので,Si_のように英字から始めておくと良い.

また,バージョン1.4.2からは末尾に以下のコマンドを書く必要はなくなった.CrySPYが自動で追記する.

sed -i -e '3s/^sub.*/done/' stat_job

例えばこのようなジョブファイルを./calc_in/job_cryspy(job_cryspyは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 pw.x < pwscf.in > pwscf.out


if [ -e "CRASH" ]; then
    sed -i -e '3 s/^.*$/skip/' stat_job
    exit 1
fi

例えばIDが15の場合,CrySPYが./work/15/job_cryspyを下記のように書き換える. 5行目のCrySPY_IDが15に置換され,末尾にsedのコマンドが追記される.

#!/bin/sh
#$ -cwd
#$ -V -S /bin/bash
####$ -V -S /bin/zsh
#$ -N Si8_15
#$ -pe smp 20
####$ -q ibis1.q
####$ -q ibis2.q

mpirun -np $NSLOTS pw.x < pwscf.in > pwscf.out


if [ -e "CRASH" ]; then
    sed -i -e '3 s/^.*$/skip/' stat_job
    exit 1
fi

# ---------- CrySPY
sed -i -e '3s/^sub.*/done/' stat_job

MPI並列化を用いた構造生成

2023/10/21 update

CrySPYのバージョン1.1.0(1.2.3以上の利用を推奨)からは,MPIを用いたランダム構造生成が可能になった. MPIを使うにはPython環境にmpi4pyをインストールする必要がある. 当然,計算に利用するワークステーション等にMPIライブラリ(Open MPI,Intel MPI,MPICHなど)も必要である.

情報

MPIを使うのに下記が必要

  • 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で修正.

下の図にSi8原子1000構造をランダムに生成するのにかかった時間とMPIプロセス数の関係を示す.下記のセッティングを使った.

[basic]
algo = RS
calc_code = soiap
tot_struc = 1000
nstage = 1
njob = 2
jobcmd = zsh
jobfile = job_cryspy

[structure]
natot = 8
atype = Si
nat = 8
mindist_1 = 2.2

mindset_1 = 2.2のように厳し目に設定して,わざと時間がかかるようにしてある. それぞれのプロセス数において10回ずつ実行して,平均を線で結んでいる.

fig_MPI fig_MPI

Run

mpiexec -n 4 cryspy -p
情報

Enthalpy

2023/10/18

情報

Requirements:

  • CrySPY 1.2.2 or later
  • VASP or QE

高圧化における構造探索を行う時に, エネルギーの代わりにエンタルピーを使うことができる. VASPとQE以外はまだ未対応.

cryspy_rsltやcryspy_rslt_energy_ascのE_eV_atomの箇所がエンタルピー(eV/atom)に変わる. 下記は40 GPaにおけるSr4O4の構造探索の結果の例. 高圧下ではCsCl型構造(ID 5)がNaCl型構造よりも安定になっている.

   Spg_num Spg_sym  Spg_num_opt Spg_sym_opt  E_eV_atom  Magmom      Opt
5       26  Pmc2_1          221       Pm-3m  -2.276790     NaN     done
6      225   Fm-3m          225       Fm-3m  -2.244800     NaN     done
1      101  P4_2cm          107        I4mm  -2.181115     NaN     done
4      123  P4/mmm          123      P4/mmm  -2.034509     NaN  not_yet
3       20  C222_1           63        Cmcm  -0.686541     NaN     done
2       75      P4           75          P4  -0.008713     NaN  not_yet
9       51    Pmma           47        Pmmm   0.096430     NaN     done
8       65    Cmmm          123      P4/mmm   1.099657     NaN     done
0      187   P-6m2          187       P-6m2   1.292124     NaN     done
7       53    Pmna           53        Pmna   5.153504     NaN  not_yet

VASP

CrySPYではOSZICARからエネルギー(エンタルピー)を読んでいる. これはPSTRESSがINCAR_xで以下のようにセットされると自動的にエンタルピーに変わる:

PSTRESS = 400

cryspy.inでは特に何もする必要はない. energy_step_flagのオプションも使用可能でエンタルピーを読み込める.

Example: CrySPY utility > examples > qe_Sr4O4_RS_pv_term

QE

エンタルピーを読むためにはcryspy.inのQEセクションでpv_term = Trueをつける:

[QE]
qe_infile = pwscf.in
qe_outfile = pwscf.out
kppvol =  40  80
pv_term = True

QEの入力ファイルでもpressの設定を忘れずに:

 &cell
    press = 400
 /
警告

QEではenergy_step_flagオプションでエンタルピーを読むことにまだ未対応.

Interactive Mode

2025年3月6日

情報

動作環境:

  • CrySPY 1.4.0以上
  • Jupyter
  • ASE対応の構造最適化計算ソフト(汎用機械学習ポテンシャルなど)
  • nglview (optional)

PCクラスタやスパコンなどの利用に慣れてない人でも使えるように,Jupyter Notebookを用いたインタラクティブモードが利用可能になった. ASEを使った構造最適化計算を想定しているので,ASE対応の汎用機械学習ポテンシャルなどが使える.

詳細な使い方はチュートリアル > インタラクティブモード(Jupyter Notebook)を見ること.

fig_struc_visu fig_struc_visu fig_eplot fig_eplot fig_convplot fig_convplot

fig_conv_plotly3d_ternary fig_conv_plotly3d_ternary fig_conv_plotly3d_ternary fig_conv_plotly3d_ternary fig_conv_plotly3d_ternary fig_conv_plotly3d_ternary

fig_convplotmat fig_convplotmat fig_convplotmat fig_convplotmat

エネルギープロット

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

Automatic Energy Plot

EAおよび2元系,3元系のEA-vcでは,デフォルトで各世代の計算終了時に図が自動生成される.

アルゴリズム図出力ファイル
EAエネルギープロット./data/energy_plot/energy_EA_gen_{gen}.{fig_format}
EA-vc(2元系,3元系)凸包プロット./data/convex_hull/conv_hull_gen_{gen}.{fig_format}

左はEAのエネルギープロット,右はEA-vcの凸包プロットの例.いずれも第3世代終了時点の図.

EAのエネルギープロット EAのエネルギープロット EA-vcの凸包プロット EA-vcの凸包プロット

ここで,genは世代数,fig_formatは画像ファイル形式(デフォルトはsvg). マーカーサイズや画像ファイル形式などの表示設定は,cryspy.inの[visual]セクションで指定する. 詳細は入力ファイル > [visual] Sectionを参照.

EA,EA-vcの出力間隔は,[option]セクションのenergy_output_intervalで変更できる. デフォルトは1(毎世代)で,0にするとEAのエネルギープロット,EA-vcの凸包の図と凸包からの距離のファイルの自動出力を無効にする. EA-vcの凸包と凸包からの距離の計算自体は毎世代行われる. 入力ファイル > [option] Sectionを参照.

図や入力設定の例は,チュートリアル > EA > 解析と可視化およびチュートリアル > EA-vc > 解析と可視化を参照.

cryspy-Eplot Command

cryspy-Eplotは,探索結果の可視化や図の調整に使用するコマンド.主に以下のことができる.

  • RS,EAのエネルギープロットやEA-vcの凸包を描画する.
  • マーカーサイズ,軸の上限や配置,画像ファイル形式などを変更して再描画する.
  • EA,EA-vcで,描画対象の世代範囲や基準となる世代を指定する.
  • 組成制限による許容範囲を描画して確認する.
  • 基準となる化合物組成を指定し,擬2元系や擬3元系として凸包を描画する.

使い方と設定例は,コマンド > cryspy-Eplotを参照.

電荷中性条件

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

Single-Valence Species

バージョン1.4.1からEA-vcにおいて,構造生成の際に電荷中性条件を課すことが可能になった. ランダム構造生成にも進化的操作による構造生成にも適用できる.

cryspy.inでそれぞれのatypeに対応する電荷をchargeとして入力する.

以下の例では,Li–Ca–Clのような電荷の組合せを想定し,Cu,Ag,Auにそれぞれ仮想的に+1,+2,-1の電荷を割り当てる. ASEのチュートリアルと同様に,計算が軽いASEのPure Python EMT calculatorで簡単に動作確認できるよう,Cu–Ag–Auを代わりに使用する.

cryspy.inの例:

...
[structure]
atype = Cu Ag Au
ll_nat = 0 0 0
ul_nat = 10 10 10
charge = 1 2 -1
...

例えばこの場合,(Cu, Ag, Au) = (4, 0, 4)や(Cu, Ag, Au) = (4, 2, 8)などの電荷中性条件を満たす構造のみ生成される.

下記のようにadd_maxやelim_maxが小さすぎると,原子を追加,削除する際に電荷中性条件を満たす原子数の組合せがゼロになって構造生成できなくなるので注意.

...
[structure]
atype = Cu Ag Au
ll_nat = 0 0 0
ul_nat = 10 10 10
charge = 1 2 -1
...
...
[EA]
add_max = 1
elim_max = 1

例えば上記の場合,add_max = 1の場合,電荷中性条件を満たす原子数の組合せはゼロ.add_max = 2の場合,(Cu, Ag, Au) = (1, 0, 1),つまりCuとAuを1個ずつ追加する組合せは(+1) + (-1) = 0で電荷中性条件を満たす.add_max = 3であれば(Cu, Ag, Au) = (1, 0, 1), (0, 1, 2)の組合せがある.

add_max,elim_max,subs_maxのデフォルト値はそれぞれ5,5および3.

単価元素種を用いた3元系の例 単価元素種を用いた3元系の例

Multi-Valence Species

バージョン1.5.0からは複数の価数を取りうる元素に対応した. chargeで複数の価数を丸括弧または角括弧でまとめて指定できる.

単価の例と同様に,Fe–Oのような電荷の組合せを想定し,計算が軽いASEのPure Python EMT calculatorで簡単に動作確認できるよう,Cu–Auを代わりに使用する. Cuには仮想的に+2または+3,Auには-2の電荷を割り当てる.

cryspy.inの例:

...
[structure]
atype = Cu Au
ll_nat = 0 0
ul_nat = 8 12
charge = (2 3) -2
...

例えば原子数が(Cu, Au) = (1, 1)では,Cuを2価とみなすことで電荷中性条件を満たす. (Cu, Au) = (2, 3)の場合は2個のCuをどちらも3価とみなすことで電荷中性条件を満たすことができる.

多価元素種を指定した場合でも,atypeとしては1つの元素種として扱われる. したがって,ll_natとul_natは各価数ごとの原子数ではなく,その元素種の合計原子数に対する下限・上限を指定する. また,生成される構造中でCu²⁺とCu³⁺のように価数ごとの原子種が区別されるわけではない.電荷中性条件の判定において,指定した価数の組合せのいずれかで中性化できるかを判定する.

多価元素種を用いた2元系の例 多価元素種を用いた2元系の例

原子数の組合せの列挙とサンプリング

v1.5.0以降では,ランダム構造生成で用いる電荷中性な原子数の組合せの決め方を,[structure]セクションのcn_modeで指定できる.chargeを指定した場合のみ有効.

cn_mode動作
autoデフォルト.総当たりで調べる組合せ数がmax_cn_grid_points以下ならenumerate,上限を超える場合はsampleを使用する.
enumerate電荷中性条件を満たす原子数の組合せを事前に列挙し,その中からランダムに選ぶ.総当たりで調べる組合せ数が上限を超える場合はエラーになる.
sample全組合せを事前に列挙せず,電荷中性条件を満たす原子数の組合せを必要に応じて生成する.

列挙では,電荷中性条件を使って原子数の変数を1つ消去し,残りの変数について取りうる整数値の組合せを総当たりで調べる.各組合せについて消去した変数の値を計算し,原子数が整数値であり,上下限の範囲内にあるかを確認する.max_cn_grid_pointsは,この総当たりで調べる組合せ数の上限で,デフォルトは200000000.

例えば,charge = 1 2 -1でCu,Ag,Auの原子数をそれぞれ0から10までとした場合,Agの原子数を表す変数を消去する.CuとAuの原子数をそれぞれ11通りずつ調べ,各組合せに対してAgの原子数を(Auの原子数 − Cuの原子数) / 2として計算する.総当たりで調べる組合せ数は11 × 11 = 121となる.多価の場合は,内部で価数ごとに分けた原子種について同様に数える.

原子種数や原子数の範囲が大きい場合,サンプリングによって列挙に必要な計算量とメモリ使用量を抑えられる.

[structure]
...
charge = 1 2 -1
cn_mode = auto
max_cn_grid_points = 200000000

enumerateでは列挙された原子数の組合せから等確率で選ぶ.sampleでは,各組合せが選ばれる確率は一様とは限らない.

組成制限との併用

バージョン1.5.0以降では,電荷中性条件に加えて,min_compとmax_compで探索する組成範囲を制限できる. ここではSingle-Valence Speciesの例と同じく,Cu,Ag,Auに仮想的に+1,+2,-1の電荷を割り当て,組成制限を追加する.

[structure]
atype = Cu Ag Au
ll_nat = 0 0 0
ul_nat = 10 10 10
charge = 1 2 -1
min_comp = 0.0  0.1  0.4
max_comp = 0.3  0.4  0.7

この電荷の組合せでは,Cuの原子数 + 2 × Agの原子数 = Auの原子数となる構造が電荷中性条件を満たす. 組成制限を併用すると,この条件に加え,Cuの組成が0.0以上0.3以下,Agが0.1以上0.4以下,Auが0.4以上0.7以下である必要がある.

例えば,原子数が(Cu, Ag, Au) = (4, 0, 4)の構造は電荷中性条件を満たすが,Agの組成が0なので,上記の組成制限では生成されない. 一方,(Cu, Ag, Au) = (1, 2, 5)の構造は,電荷の合計が1 × (+1) + 2 × (+2) + 5 × (-1) = 0であり,組成(0.125, 0.25, 0.625)も許容範囲内にある.

左は組成制限による許容範囲,右は両方の条件を課した第3世代までの探索結果である.

電荷中性条件に組み合わせる組成の許容範囲 電荷中性条件に組み合わせる組成の許容範囲 電荷中性条件と組成制限を課した第3世代までの探索結果 電荷中性条件と組成制限を課した第3世代までの探索結果

青色の領域は組成制限のみを表す. この例では,電荷中性条件を満たす組成は三角形の組成図の直線上にあり,探索対象はその直線と青色の領域が重なる範囲内で,原子数の条件も満たすものに限られる. 組成制限の設定や許容範囲の図については,組成制限を参照.

組成制限

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

バージョン1.5.0から,EA-vcにおいて,探索する組成範囲を制限できるようになった. cryspy.inの[structure]セクションでmin_compとmax_compを指定する. ランダム構造生成にも進化的操作による構造生成にも適用される. 2元系・3元系に加え,4元系以上でも組成制限を利用できる. ただし,組成の許容範囲や探索結果の図の出力は2元系・3元系に対応している.

設定方法

各原子種の組成は,その原子種の原子数をセル内の総原子数で割った値であり,0から1の範囲をとる. 例えば,原子数が(Cu, Au) = (2, 6)の場合,組成は(Cu, Au) = (0.25, 0.75)となる.

min_compは組成の下限,max_compは上限を表す. どちらもatypeと同じ順序・要素数で指定し,境界の値も許容範囲に含まれる.

  • min_compのみを指定した場合,max_compは全原子種について1.0に補完される.
  • max_compのみを指定した場合,min_compは全原子種について0.0に補完される.
  • 両方を省略した場合,組成制限は課されない.

ll_natとul_natは各原子種の原子数を制限するのに対し,min_compとmax_compは各原子種の原子数の割合を制限する. これらを併用した場合,すべての条件を満たす原子数の組合せが探索対象となる. 入力変数の一覧は入力ファイル > [structure]セクションを参照.

2元系の例

cryspy.inの[structure]セクションの例:

[structure]
atype = Cu Au
ll_nat = 0 0
ul_nat = 8 8
min_comp = 0.0 0.0
max_comp = 0.6 0.5

この場合,Cuの組成は0.6以下,Auの組成は0.5以下に制限される. 2元系ではCuとAuの組成の和が1になるため,Auの上限0.5からCuの下限は0.5,Cuの上限0.6からAuの下限は0.4となる. したがって,Cuの組成が0.5以上0.6以下,Auの組成が0.4以上0.5以下となる構造のみ生成される. 例えば,原子数が(Cu, Au) = (4, 4),(3, 2),(6, 4)の構造は条件を満たすが,(2, 6),(6, 2)やCuのみ,Auのみからなる構造は条件を満たさない.

上記のmin_compとmax_compを次のように変更しても,同じ組成範囲になる.

min_comp = 0.5 0.4
max_comp = 0.6 0.5

CrySPYを初めて実行すると,組成の許容範囲が自動的にプロットされ,./data/convex_hull/composition_window_1.svgに保存される. ファイル名の1は,この組成制限を適用する世代番号を表す. 拡張子は[visual]セクションのfig_formatに従い,デフォルトはsvgである. 最初の入力例に対応する図を以下に示す.

Cu-Au系の組成制限による許容範囲 Cu-Au系の組成制限による許容範囲

2元系の組成範囲の図の横軸は,convex hullの図と対応するように,[visual]セクションのaxis_orderに従って原子種を配置している. この図の横軸はAuの組成を表す. 下側の青色の帯はCuの組成制限,上側の橙色の帯はAuの組成制限に対応し,両方を満たす範囲が濃い色と破線で示される. この例では,Auの組成が0.4以上0.5以下の範囲が許容される.

この組成制限を用いた,第3世代までの探索結果の例を以下に示す.

組成制限を用いたCu-Au系の第3世代までの探索結果 組成制限を用いたCu-Au系の第3世代までの探索結果

この図の横軸はAuの組成を表し,青色の領域が組成の許容範囲(0.4以上0.5以下)に対応する.

3元系の例

cryspy.inの[structure]セクションの例:

[structure]
atype = Cu Ag Au
ll_nat = 0 0 0
ul_nat = 8 8 8
#------- input 1
min_comp = 0.0  0.2  0.2
max_comp = 0.6  0.5  0.7
#------- input 2
#min_comp = 0.4  0.2  0.2
#max_comp = 0.6  0.4  0.4
#------- input 3
#min_comp = 0.6  0.2  0.2
#max_comp = 0.6  0.5  0.7

上記ではinput 1が有効になっている. input 2やinput 3を使用する場合は,input 1のmin_compとmax_compをコメントアウトし,使用する組の2行の先頭にある#を外す.

各原子種の組成の和は常に1である. そのため,3元系の許容領域は,三角形の組成図の中で,各原子種の下限・上限をすべて満たす領域となる. 2元系と同様に,初回実行時には./data/convex_hull/composition_window_1.<fig_format>に図が自動的に保存される. 以下の3枚は,各入力についてcryspy-Eplot -cで描画した例である. 各図では上の頂点がCu,左下の頂点がAg,右下の頂点がAuに対応し,破線は指定した組成の下限・上限を表す. 左からinput 1,input 2,input 3の順に示す.

Cu-Ag-Au系の組成制限:input 1 Cu-Ag-Au系の組成制限:input 1 Cu-Ag-Au系の組成制限:input 2 Cu-Ag-Au系の組成制限:input 2 Cu-Ag-Au系の組成制限:input 3 Cu-Ag-Au系の組成制限:input 3

input 1

Cuの組成を0.0以上0.6以下,Agを0.2以上0.5以下,Auを0.2以上0.7以下に制限する. 青色の領域が,これらの条件をすべて満たす組成の許容範囲を表す. 例えば,原子数が(Cu, Ag, Au) = (3, 2, 5)の場合,組成は(0.3, 0.2, 0.5)となり,条件を満たす.

input 2

Cuの組成を0.4以上0.6以下,AgとAuをそれぞれ0.2以上0.4以下に制限する. この場合,許容領域は,組成(Cu, Ag, Au) = (0.6, 0.2, 0.2),(0.4, 0.4, 0.2),(0.4, 0.2, 0.4)を頂点とする三角形になる. 例えば,原子数が(Cu, Ag, Au) = (4, 3, 3)の場合,組成は(0.4, 0.3, 0.3)となり,条件を満たす.

input 3

Cuの組成の下限・上限をともに0.6とし,Agを0.2以上0.5以下,Auを0.2以上0.7以下に制限する. Cuの組成が0.6に固定されるため,AgとAuの組成の和は0.4になる. AgとAuの下限はそれぞれ0.2なので,許容される組成は(Cu, Ag, Au) = (0.6, 0.2, 0.2)の1点のみとなり,図では青色の点で示される. この場合も,原子数は固定されない. 例えば,原子数が(Cu, Ag, Au) = (3, 1, 1)と(6, 2, 2)の構造は,同じ組成を持ち,ll_natとul_natの条件も満たす.

探索結果の例

input 1の組成制限を用いた,第3世代までの探索結果の例を以下に示す. 青色の領域が組成の許容範囲に対応する.

組成制限を用いたCu-Ag-Au系の第3世代までの探索結果 組成制限を用いたCu-Ag-Au系の第3世代までの探索結果

電荷中性条件との併用

chargeと組成制限を併用することもできる. この場合,原子数制限,組成制限,電荷中性条件をすべて満たす構造が生成される.

[structure]
atype = Cu Ag Au
ll_nat = 0 0 0
ul_nat = 10 10 10
charge = 1 2 -1
min_comp = 0.0  0.1  0.4
max_comp = 0.3  0.4  0.7

電荷中性条件の例と同様に,Cu,Ag,Auにそれぞれ仮想的に+1,+2,-1の電荷を割り当てている. 組成はCuを0.0以上0.3以下,Agを0.1以上0.4以下,Auを0.4以上0.7以下に制限する. 例えば,原子数が(Cu, Ag, Au) = (1, 2, 5)の場合,組成は(0.125, 0.25, 0.625)となり,組成制限を満たす. 電荷の合計も1 × (+1) + 2 × (+2) + 5 × (-1) = 0となるため,電荷中性条件も満たす.

左は組成の許容範囲,右は組成制限と電荷中性条件を併用した第3世代までの探索結果の例である.

電荷中性条件と併用する組成制限の許容範囲 電荷中性条件と併用する組成制限の許容範囲 組成制限と電荷中性条件を併用した第3世代までの探索結果 組成制限と電荷中性条件を併用した第3世代までの探索結果

青色の領域は組成制限による許容範囲を表し,電荷中性条件は反映されない. 実際に生成される構造は,この領域内でさらに電荷中性条件を満たす組成に限られる.

許容される組成範囲の確認

2元系・3元系では,組成制限を指定してCrySPYを初めて実行すると,許容領域の図が./data/convex_hull/composition_window_1.<fig_format>に自動的に保存される. ファイル名の番号は,組成制限を適用する世代番号を表す.

探索の途中でmin_compやmax_compを変更した場合,変更後の制約は,次の世代交代における親候補の絞り込みと構造生成から適用される. 画像は世代交代を待たず,入力変更後にCrySPYを再実行した時点で,現在の世代番号に1を加えた名前で保存される. 例えば,第3世代の計算途中で変更して再実行すると,./data/convex_hull/composition_window_4.<fig_format>が出力され,変更後の制約は第4世代を作る際に適用される.

axis_orderやfig_formatを変更した場合も,次世代の番号を用いて画像が保存される. これらの設定に変更がなければ,毎世代画像が出力されるわけではない.

探索を開始せずに入力した組成制限による許容領域を確認するには,cryspy.inがあるディレクトリで次のコマンドを実行する.

cryspy-Eplot -c

図は./data/convex_hull/composition_window_input.<fig_format>に保存される. fig_formatやaxis_orderは[visual]セクションで指定できる. 詳細はcryspy-Eplotおよび入力ファイル > [visual]セクションを参照.

この図はmin_compとmax_compから求めた連続的な組成領域を表す. ll_nat・ul_natによる整数の原子数の制約や,chargeによる電荷中性条件は反映されないため,実際に生成可能な組成は図の領域の一部となる場合がある.

注意点

各原子種についてmin_compはmax_comp以下である必要がある. また,各原子種の組成の和が1になる組合せが存在する必要があるため,min_compの合計は1以下,max_compの合計は1以上でなければならない.

連続的な組成領域が存在しても,ll_nat・ul_natの範囲内で条件を満たす整数の原子数の組合せが存在しない場合は,構造を生成できない. chargeを併用する場合は,電荷中性条件を満たす組合せも存在するように設定すること.

探索の途中で組成制限を変更した場合,次世代の親候補およびエリート候補は,変更後の原子数制限・組成制限で絞り込まれる. 条件を厳しくしすぎて候補がすべて除外されると,探索を継続できなくなるので注意すること.

計算のスキップ

2025年7月15日

計算途中でskip

DFT計算などで電子状態がどうしても収束しない場合や,明らかに不安定な構造で途中で計算をやめたい場合,下記の手順でskipできる.

  1. qdelなどでジョブを止める
  2. ./work/xxx/stat_jobの3行目をskipに書き換える
  3. 通常通りcryspyを実行

これで,この構造は切り捨てられて,計算が次へ進む.

cryspy_rslt (rslt_data.pkl) に記録された後にskip

CrySPY version 1.4.2以上

正しくない電子状態等で計算が終わった場合,エネルギーが過剰に低く出力されて,rslt_dataに記録されてしまうことがある.例えば下記の結果は,ID 198のエネルギーが低くなりすぎてしまっている.

cryspy_rslt_energy_asc

     Gen  ...  E_eV_atom  Ef_eV_atom ...
198   10  ...  -5.542899   -1.800631 ...
157    8  ...  -5.598984   -0.356639 ...
186   10  ...  -6.323099   -0.330717 ...
95     5  ...  -6.317931   -0.325549 ...

このデータを取り消してskipするためには,バージョン1.4.2から自動でインストールされるコマンドを使う.

cryspy-skip 198

もしskipさせたい構造が複数あるなら,複数のIDを入力する.

cryspy-skip 198 157

これでデータが更新される.

EAまたはEA-vcの場合

EAやEA-vcの場合,skipする構造がエリート構造として登録されている可能性もある.cryspy-skipコマンドを使うとelite_struc.pklとelite_fitness.pklに保存されているデータからskipする構造を取り除く.

EA-vcの凸包の再計算

EA-vcの場合,skipする構造のエネルギーが凸包計算に影響を与える場合がある.そのため,skipさせたあとは,下記コマンドで凸包の再計算を行っておく.

cryspy-calc-convex-hull 10

上記入力の10は世代を表し,10世代時点での凸包の再計算,凸包プロットを行う.