Subsections of Random Search (RS)
ASE on your local PC
2025 June 16, updated
ASE provides interfaces to different codes.
ASE also includes Pure Python EMT calculator, which is suitable for testing CrySPY because of its fast and easy structure optimization.
In this tutorial, we try to use CrySPY in your local PC (Mac or Linux).
The target system is Cu 8 atoms.
Assumption
Here, we assume the following conditions:
- CrySPY 1.2.0 or later in your local PC
- CrySPY job filename:
job_cryspy
- ase input filename:
ase_in.py
Move to your working directory, and copy the example files by one of the following methods.
.
├── calc_in
│ ├── ase_in.py_1
│ └── job_cryspy
└── cryspy.in
cryspy.in
cryspy.in
is the input file of 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]
In [basic]
section, jobcmd = zsh
can be changed to jobcmd = sh
or jobcmd = bash
in accordance with your environment.
CrySPY runs zsh job_cryspy
as a background job internally.
[ASE]
section is required when you use ASE.
You can name the following files whatever you want:
jobfile
: job_cryspy
ase_python
: ase_in.py
The other input variables are discussed later.
calc_in directory
The job file and input files for ASE are prepared in this directory.
Job file
The name of the job file must match the value of jobfile
in cryspy.in
.
The example of job file (here, job_cryspy
) is shown below.
#!/bin/sh
# ---------- ASE
python3 ase_in.py
# ---------- CrySPY
sed -i -e '3 s/^.*$/done/' stat_job
You can specify the input (ase_in.py
) file names,
but it must match the values of ase_python
in cryspy.in
.
You must add sed -i -e '3 s/^.*$/done/' stat_job
at the end of the file in CrySPY.
Note
sed -i -e '3 s/^.*$/done/' stat_job
is required at the end of the job file.
Tip
In the job file of CrySPY, the string CrySPY_ID
is automatically replaced with the structure ID.
When you use a job scheduler such as PBS and SLURM, it is useful to set the structure ID to the job name.
For example, in the PBS system, #PBS -N Si_CrySPY_ID
in ID 10 is replaced with #PBS -N Si_10
.
Note that starting with a number will result in an error.
You should add a prefix like Si_
.
Input files based on the number of stages (nstage
in cryspy.in
) are required.
Name the input file(s) with a suffix _x
.
Here x
means the stage number.
We are using nstage = 1
in this ASE tutorial, so we need only ase_in.py_1
.
ase_in.py_1
is listed below.
Refer to the ASE documentation for details.
from ase.constraints import FixSymmetry
from ase.filters import FrechetCellFilter
from ase.calculators.emt import EMT
from ase.optimize import BFGS
import numpy as np
from ase.io import read, write
# ---------- input structure
# CrySPY outputs 'POSCAR' as an input file in work/xxxxxx directory
atoms = read('POSCAR', format='vasp')
# ---------- setting and run
atoms.calc = EMT()
atoms.set_constraint([FixSymmetry(atoms)])
cell_filter = FrechetCellFilter(atoms, hydrostatic_strain=False)
opt = BFGS(cell_filter)
opt.run(fmax=0.01, steps=2000)
# ---------- opt. structure and energy
# [rule in ASE interface]
# output file for energy: 'log.tote' in eV/cell
# CrySPY reads the last line of 'log.tote'
# output file for structure: 'CONTCAR' in vasp format
e = cell_filter.atoms.get_total_energy()
with open('log.tote', mode='w') as f:
f.write(str(e))
# ------ write structure
opt_atoms = cell_filter.atoms.copy()
opt_atoms.set_constraint(None) # remove constraint for pymatgen
write('CONTCAR', opt_atoms, format='vasp', direct=True)
Unlike VASP and QE, the ASE input (python script) is more flexible.
CrySPY has two rules:
- Energy is output in units of eV/cell to
log.tote
file. CrySPY reads the last line of it. - Optimized structure is output to
CONTCAR
file in the VASP format.
Running CrySPY
Go to Running CrySPY
soiap on your local PC
2025 March 6 update
soiap is Structure Optimization with InterAtomic Potential.
It is suitable for testing CrySPY because of its fast structure optimization.
See instructions to install soiap.
In this tutorial, we try to use CrySPY in your local PC (Mac or Linux).
The target system is Si 8 atoms.
Assumption
Here, we assume the following conditions:
- (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
Move to your working directory, and copy input example files by one of the following methods.
- 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
is the input file of 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]
In [basic]
section, jobcmd = zsh
can be changed to jobcmd = sh
or jobcmd = bash
in accordance with your environment.
CrySPY runs zsh job_cryspy
as a background job internally.
[soiap]
section is required when you use soiap.
You can name the following files whatever you want:
jobfile
soiap_infile
soiap_outfile
soiap_cif
The other input variables are discussed later.
calc_in directory
The job file and input files for soiap are prepared in this directory.
Job file
The name of the job file must match the value of jobfile
in cryspy.in
.
The example of job file (here, job_cryspy
) is shown below.
#!/bin/sh
# ---------- soiap
EXEPATH=/path/to/soiap
$EXEPATH/soiap soiap.in 2>&1 > soiap.out
# ---------- CrySPY
sed -i -e '3 s/^.*$/done/' stat_job
Change /path/to/soiap
into right path suitable for your environment.
You can specify the input (soiap.in
) and output (soiap.out
) file names,
but they must match the values of soiap_infile
and soiap_outfile
in cryspy.in
.
The job file is written in the same way as the one you usually use except for the last line.
You must add sed -i -e '3 s/^.*$/done/' stat_job
at the end of the file in CrySPY.
Note
sed -i -e '3 s/^.*$/done/' stat_job
is required at the end of the job file.
Tip
In the job file of CrySPY, the string “CrySPY_ID” is automatically replaced with the structure ID.
When you use a job scheduler such as PBS and SLURM, it is useful to set the structure ID to the job name.
For example, in the PBS system, #PBS -N Si_CrySPY_ID
in ID 10 is replaced with #PBS -N Si_10
.
Note that starting with a number will result in an error.
You should add a prefix like Si_
.
Input files based on the number of stages (nstage
in cryspy.in
) are required.
Name the input file(s) with a suffix _x
.
Here x
means the stage number.
We are using nstage = 1
, so we need only soiap.in_1
.
soiap.in_1
is listed below.
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
The input structure file is specified at the first line.
Use the same name as the value of soiap_cif
in cryspy.in
.
Running CrySPY
Go to Running CrySPY
VASP
2025 March 6 update
In this tutorial, we try to use CrySPY in a PC cluster with a job scheduler system such as PBS.
Here we employ VASP.
The target system is Na8Cl8, 16 atoms.
Assumption
Here, we assume the following conditions:
- 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
Move to your working directory, and copy the example files by one of the following methods.
.
├── calc_in
│ ├── INCAR_1
│ ├── INCAR_2
│ ├── POTCAR
│ ├── POTCAR_is_dummy
│ └── job_cryspy
└── cryspy.in
cryspy.in
cryspy.in
is the input file of 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]
In [basic]
section, jobcmd = qsub
can be changed in accordance with your environment.
CrySPY runs qsub job_cryspy
as a background job internally in this setting.
You can name the following file whatever you want:
We adopt a stage-based system for structure optimization calculations.
Here, we use nstage = 2
.
For example, users can configure the following settings.
In the first stage, only the ionic positions are relaxed, fixing the cell shape, with low k-point grid density.
Next, the ionic positions and cell shape are fully relaxed with high accuracy in the second stage.
[VASP]
section is required when you use VASP.
You have to specify k-point grid density (Å^-3) for each stage in kppvol
.
The other input variables are discussed later.
calc_in directory
The job file and input files for VASP are prepared in this directory.
Job file
The name of the job file must match the value of jobfile
in cryspy.in
.
The example of job file (here, job_cryspy
) is shown below.
#!/bin/sh
#$ -cwd
#$ -V -S /bin/bash
####$ -V -S /bin/zsh
#$ -N Na8Cl8_CrySPY_ID
#$ -pe smp 20
####$ -q ibis1.q
####$ -q ibis2.q
####$ -q ibis3.q
####$ -q ibis4.q
# ---------- vasp
VASPROOT=/usr/local/vasp/vasp.6.4.2/bin
mpirun -np $NSLOTS $VASPROOT/vasp_std
# ---------- CrySPY
sed -i -e '3 s/^.*$/done/' stat_job
Change VASPROOT
to the appropriate path suitable for your environment.
The job file is written in the same way as the one you usually use except for the last line.
You must add sed -i -e '3 s/^.*$/done/' stat_job
at the end of the file in CrySPY.
Note
sed -i -e '3 s/^.*$/done/' stat_job
is required at the end of the job file.
Tip
In the job file of CrySPY, the string “CrySPY_ID” is automatically replaced with the structure ID.
When you use a job scheduler such as PBS and SLURM, it is useful to set the structure ID to the job name.
For example, in the PBS system, #PBS -N Si_CrySPY_ID
in ID 10 is replaced with #PBS -N Si_10
.
Note that starting with a number will result in an error.
You should add a prefix like Si_
.
Input files based on the number of stages (nstage
in cryspy.in
) are required.
Name the input file(s) with a suffix _x
.
Here x
means the stage number.
We are using nstage = 2
, so we need INCAR_1
and INCAR_2
.
Here, INCAR_1
is set to fix the cell and relax only the ionic positions, while INCAR_2
is configured to fully relax both the cell and ionic positions.
INCAR_1
SYSTEM = NaCl
!!!LREAL = Auto
Algo = Fast
NSW = 40
LWAVE = .FALSE.
!LCHARG = .FALSE.
ISPIN = 1
ISMEAR = 0
SIGMA = 0.1
IBRION = 2
ISIF = 2
EDIFF = 1e-5
EDIFFG = -0.01
INCAR_2
SYSTEM = NaCl
!!LREAL = Auto
Algo = Fast
NSW = 200
ENCUT = 341
!!LWAVE = .FALSE.
!!LCHARG = .FALSE.
ISPIN = 1
ISMEAR = 0
SIGMA = 0.1
IBRION = 2
ISIF = 3
EDIFF = 1e-5
EDIFFG = -0.01
CrySPY automatically generates POSCAR
and KPOINTS
files.
You have to prepare POTCAR
file yourself.
The POTCAR
included in this example file is empty, so please be aware of that.
Warning
POTCAR
in this example is empty. We cannot distribute it.
Running CrySPY
Go to Running CrySPY
QE
2025 March 6, updated
In this tutorial, we try to use CrySPY in a machine with a job scheduler system such as PBS.
Here we employ QUANTUM ESPRESSO. (QE).
The target system is Si 8 atoms.
Assumption
Here, we assume the following conditions:
- 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
Move to your working directory, and copy input example files by one of the following methods.
- Download from CrySPY_utility/examples/qe_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/QE_Si8_RS .
.
├── calc_in
│ ├── job_cryspy
│ ├── pwscf.in_1
│ └── pwscf.in_2
└── cryspy.in
cryspy.in
cryspy.in
is the input file of 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]
In [basic]
section, jobcmd = qsub
can be changed in accordance with your environment.
CrySPY runs qsub job_cryspy
as a background job internally in this setting.
We adopt a stage-based system for structure optimization calculations.
Here, we use nstage = 2
.
For example, users can configure the following settings.
In the first stage, only the ionic positions are relaxed, fixing the cell shape, with low k-point grid density.
Next, the ionic positions and cell shape are fully relaxed with high accuracy in the second stage.
[QE]
section is required when you use QE.
You have to specify k-point grid density (Å^-3) for each stage in kppvol
.
You can name the following files whatever you want:
jobfile
qe_infile
qe_outfile
The other input variables are discussed later.
calc_in directory
The job file and input files for QE are prepared in this directory.
Job file
The name of the job file must match the value of jobfile
in cryspy.in
.
The example of job file (here, job_cryspy
) is shown below.
#!/bin/sh
#$ -cwd
#$ -V -S /bin/bash
####$ -V -S /bin/zsh
#$ -N Si8_CrySPY_ID
#$ -pe smp 20
####$ -q ibis1.q
####$ -q ibis2.q
mpirun -np $NSLOTS /path/to/pw.x < pwscf.in > pwscf.out
if [ -e "CRASH" ]; then
sed -i -e '3 s/^.*$/skip/' stat_job
exit 1
fi
sed -i -e '3 s/^.*$/done/' stat_job
Change /path/to/pw.x
to the appropriate path suitable for your environment.
You can specify the input (pwscf.in
) and output (pwscf.out
) file names,
but they must match the values of qe_infile
and qe_outfile
in cryspy.in
.
The job file is written in the same way as the one you usually use except for the last line.
You must add sed -i -e '3 s/^.*$/done/' stat_job
at the end of the file in CrySPY.
Note
sed -i -e '3 s/^.*$/done/' stat_job
is required at the end of the job file.
Tip
In the job file of CrySPY, the string “CrySPY_ID” is automatically replaced with the structure ID.
When you use a job scheduler such as PBS and SLURM, it is useful to set the structure ID to the job name.
For example, in the PBS system, #PBS -N Si_CrySPY_ID
in ID 10 is replaced with #PBS -N Si_10
.
Note that starting with a number will result in an error.
You should add a prefix like Si_
.
Input files based on the number of stages (nstage
in cryspy.in
) are required.
Name the input file(s) with a suffix _x
.
Here x
means the stage number.
We are using nstage = 2
, so we need pwscf.in_1
and pwscf.in_2
.
Here, pwscf.in_1
is set to fix the cell and relax only the ionic positions, while pwscf.in_2
is configured to fully relax both the cell and ionic positions.
pwscf.in_1
&control
title = 'Si8'
calculation = 'relax'
nstep = 100
restart_mode = 'from_scratch',
pseudo_dir = '/usr/local/pslibrary.1.0.0/pbe/PSEUDOPOTENTIALS/'
outdir='./out.d/'
/
&system
ibrav = 0
nat = 8
ntyp = 1
ecutwfc = 44.0
occupations = 'smearing'
degauss = 0.01
/
&electrons
/
&ions
/
&cell
/
ATOMIC_SPECIES
Si 28.086 Si.pbe-n-kjpaw_psl.1.0.0.UPF
pwscf.in_2
&control
title = 'Si8'
calculation = 'vc-relax'
nstep = 200
restart_mode = 'from_scratch',
pseudo_dir = '/usr/local/pslibrary.1.0.0/pbe/PSEUDOPOTENTIALS/'
outdir='./out.d/'
/
&system
ibrav = 0
nat = 8
ntyp = 1
ecutwfc = 44.0
occupations = 'smearing'
degauss = 0.01
/
&electrons
/
&ions
/
&cell
/
ATOMIC_SPECIES
Si 28.086 Si.pbe-n-kjpaw_psl.1.0.0.UPF
Change pseudo_dir
to your suitable directory.
Inputs for structure data and k-point such as ATOMIC_POSITIONS
and K_POINTS
are automatically appended by CrySPY with pymatgen.
Users do not have to prepare them in pwscf.in_x
.
Running CrySPY
Go to Running CrySPY
OpenMX
Coming soon.
LAMMPS
Coming soon.
Check cryspy.in
2025 June 16, updated
See Input file in detail.
Let’s take a look at cryspy.in
again.
This may be slightly different depending on calc_code
you chose.
[basic]
algo = RS
calc_code = ASE
tot_struc = 5
nstage = 1
njob = 5
jobcmd = zsh
jobfile = job_cryspy
[structure]
atype = Cu
nat = 8
[ASE]
ase_python = ase_in.py
[option]
[basic] section
algo
: Algorithm. Set RS
for Random Search.calc_code
: Structure optimizer. Choose from VASP
, QE
, OMX
, soiap
, LAMMPS
, ASE
tot_struc
: The total number of structures. In this case, 5 random structures are generated at 1st run.nstage
: The number of stages. It’s up to you.njob
: The number of jobs running at the same time. In this example, CrySPY sets 2 slots for structure optimization, in other words, optimizes every 2 structures.jobcmd
: Command for jobs. Use bash
, zsh
, qsub
, and so on.jobfile
: File name of the job file.
[structure] section
atype
: Atom type. e.g. for Na8Cl8: atype = Na Cl
.nat
: The number of atoms corresponding to each atype. e.g. for Na8Cl8: nat = 8 8
Script to run
Note
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
.
Firsrt 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.0b10
[2025-03-06 18:52:21,495][cryspy_init][INFO] # ---------- Library version info
[2025-03-06 18:52:21,495][cryspy_init][INFO] pandas version: 2.2.2
[2025-03-06 18:52:21,495][cryspy_init][INFO] pymatgen version: 2025.1.24
[2025-03-06 18:52:21,495][cryspy_init][INFO] pyxtal version: 1.0.6
[2025-03-06 18:52:21,495][cryspy_init][INFO] # ---------- Read input file, cryspy.in
[2025-03-06 18:52:21,496][write_input][INFO] [basic]
[2025-03-06 18:52:21,496][write_input][INFO] algo = RS
[2025-03-06 18:52:21,496][write_input][INFO] calc_code = ASE
[2025-03-06 18:52:21,496][write_input][INFO] tot_struc = 5
[2025-03-06 18:52:21,496][write_input][INFO] nstage = 1
[2025-03-06 18:52:21,496][write_input][INFO] njob = 2
[2025-03-06 18:52:21,496][write_input][INFO] jobcmd = zsh
[2025-03-06 18:52:21,496][write_input][INFO] jobfile = job_cryspy
...
(omitted)
...
[2025-03-06 18:52:21,497][rs_gen][INFO] # ---------- Initial structure generation
[2025-03-06 18:52:21,497][rs_gen][INFO] # ------ mindist
[2025-03-06 18:52:21,498][struc_util][INFO] Cu - Cu: 1.32
[2025-03-06 18:52:21,498][rs_gen][INFO] # ------ generate structures
[2025-03-06 18:52:21,519][gen_pyxtal][INFO] Structure ID 0: (8,) Space group: 31 --> 31 Pmn2_1
[2025-03-06 18:52:21,525][gen_pyxtal][INFO] Structure ID 1: (8,) Space group: 198 --> 198 P2_13
[2025-03-06 18:52:21,554][gen_pyxtal][INFO] Structure ID 2: (8,) Space group: 4 --> 4 P2_1
[2025-03-06 18:52:21,580][gen_pyxtal][INFO] Structure ID 3: (8,) Space group: 193 --> 191 P6/mmm
[2025-03-06 18:52:21,581][gen_pyxtal][WARNING] Compoisition [8] not compatible with symmetry 172: spg = 172 retry.
[2025-03-06 18:52:21,625][gen_pyxtal][INFO] Structure ID 4: (8,) Space group: 64 --> 64 Cmce
[2025-03-06 18:52:22,013][cryspy_init][INFO] Elapsed time for structure generation: 0:00:00.516183
Several output files are also generated.
- (
cryspy.out
): Short log. only version 0.10.3 or earlier. cryspy.stat
: Status file.data/init_POSCARS
: Initial struture file in POSCAR format.
You can open this file using VESTAdata/pkl_data
: Directory to save pickled data.log_cryspy
: log.err_cryspy
: error and warning.
Let’s take a look at cryspy.stat
file.
[status]
id_queueing = 0 1 2 3 4
Structure ID 0 – 4 are queueing because we just generated structures, and have not submitted yet.
Tip
Check the initial structures, if the distances between atoms are too close, you should set the mindist
in cryspy.in
.
Submit job
2023 July 10, update
Continue
CrySPY continues the simulation if you have cryspy.stat
file.
Tip
Continue if you have crypy.stat
Start from the beginning if you don’t have cryspy.stat
Submit job
Run CyrSPY again.
Check the screen or log_cryspy
file.
[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
And also cryspy.stat
file.
...
(omit)
...
[status]
id_queueing = 2 3 4
id 0 = Stage 1
id 1 = Stage 1
CrySPY submitted two jobs for structure ID 0 and 1 as you set njob = 2
in cryspy.in
.
Calculations are performed in the work
directory.
These directory names correspond to their structure ID.
work
├── 000000
├── 000001
└── fin
When the two jobs are done, run CrySPY again.
[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
If you set nstage = 2
(more than 2), new jobs on stage 2 for ID 0 and 1 are submitted.
If you set nstage = 1
, CrySPY collects calculation data of ID 0 and 1, then submits next ID’s jobs.
Directories of the finished structure are moved to the fin
directory.
Repeat cryspy
several times until all 5 structures are done.
You can delete the work
directory when the simulation is done if you do not need it.
The auto script (repeat_cryspy) may help you.
Check results
Move to data
directory. There should be a few more files.
$ cd data
$ ls
cryspy_rslt cryspy_rslt_energy_asc init_POSCARS opt_POSCARS pkl_data/
cryspy_rslt
: Result file.cryspy_rslt_energy_asc
: Result file sorted in energy ascending order.init_POSCARS
: Initial struture file in POSCAR format.opt_POSCARS
: Optimized structure file in POSCAR format.pkl_data/
: Directory to save pickled data.
The results are written to text files, cryspy_rslt
and cryspy_rslt_energy_asc
(and also saved in pickle data in pkl_data
directory).
Each result appends to cryspy_rslt
file in the order in which one finished earlier.
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
Info
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
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]
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.
Note
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 (repeat_cryspy) may help you.
Analysis and visualization
Download data
It is assumed here that you analyze and visualize CrySPY data on your local PC.
If you use CrySPY on a supercomputer or workstation, download the data to your local machine.
You can delete the work
and backup
directories if they are not needed, as their file size can be very large.
Jupyter notebook
Move to the data/
directory in the results you downloaded earlier.
Then, if the CrySPY utility has already been downloaded locally, copy cryspy_analyzer_RS.ipynb
.
Alternatively, you can download it directly from GitHub (CrySPY_utility/notebook/).
Launch Jupyter (e.g., VS Code, Jupyter Lab, or Jupyter Notebook),
and simply run the cells in order to obtain a figure like the one shown below.
