Subsections of Random Search (RS)
ASE in your local PC
2023 July 10
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 = 2
jobcmd = zsh
jobfile = job_cryspy
[structure]
natot = 8
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 ExpCellFilter, StrainFilter
from ase.calculators.emt import EMT
from ase.calculators.lj import LennardJones
from ase.optimize.sciopt import SciPyFminCG
from ase.optimize import BFGS
from ase.spacegroup.symmetrize import FixSymmetry
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)])
atoms = ExpCellFilter(atoms, hydrostatic_strain=False)
opt = BFGS(atoms)
#opt=SciPyFminCG(atoms)
opt.run()
# ---------- 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 = atoms.atoms.get_total_energy()
with open('log.tote', mode='w') as f:
f.write(str(e))
write('CONTCAR', atoms.atoms, format='vasp')
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 in your local PC
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]
natot = 8
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
2024 April 24
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]
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]
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
2024 April 24, 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]
natot = 8
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.
External program
Available from CrySPY 0.11.0.
If you use an external program not supported by CrySPY, the optimized energy and structure data can be loaded semi-manually in CrySPY.
You have to prepare two files, ext_opt_struc_data.pkl
and ext_energy_data.pkl
.
Assumption
Here, we assume the following conditions:
- (version 0.10.3 or earlier) CrySPY main script:
~/CrySPY_root/CrySPY-0.11.0/cryspy.py
(calc_in
directory is not required.)
Move to your working directory, and copy input example files.
- version 1.0.0 or later
- version 0.10.3 or earlier
cp -r ~/CrySPY_root/CrySPY-0.9.0/example/ext_Si8_RS .
cryspy.in
cryspy.in
is the input file of CrySPY.
[basic]
algo = RS
calc_code = ext
tot_struc = 5
[structure]
natot = 8
atype = Si
nat = 8
[option]
If calc_code == ext
, nstage
, njob
, jobcmd
, and jobfile
are ignored.
Running CrySPY
This mode is different from the normal use of CrySPY.
Go to Load external data.
Check cryspy.in
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 = soiap
tot_struc = 5
nstage = 1
njob = 2
jobcmd = zsh
jobfile = job_cryspy
[structure]
natot = 8
atype = Si
nat = 8
[soiap]
soiap_infile = soiap.in
soiap_outfile = soiap.out
soiap_cif = initial.cif
[option]
[basic] section
algo
: Algorithm. Set RS
for Random Search.calc_code
: Structure optimizer. Choose from VASP
, QE
, OMX
, soiap
, LAMMPS
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
natot
: The total number of atoms. e.g. for Na8Cl8: natot = 16
.atype
: Atom type. e.g. for Na8Cl8: atype = Na Cl
.nat
: The number of each atom. 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
2023 July 10, update
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:
[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
cryspy 4.35s user 1.04s system 145% cpu 3.697 total
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.
...
(omit)
...
[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]
natot = 8
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 the data
It is assumed here that you analyze and visualize CrySPY data in your local PC.
If you use CrySPY in super computers or workstations, download the data in your local PC.
You can delete the work
and backup
directory if you do not need it because the file size could be very large.
jupyter notebook
Move to the data/
directory in results you just download.
Then copy cryspy_analyzer_RS.ipynb
from CrySPY utility.
$ ls
calc_in/ cryspy.in cryspy.stat data/ err_cryspy log_cryspy
$ cd data
$ ls
cryspy_rslt cryspy_rslt_energy_asc init_POSCARS opt_CIFS.cif opt_POSCARS pkl_data/
cp /path/to/CrySPY_utility/cryspy_analyzer_RS.ipynb .
Run jupyter. (VScode, jupyter lab, jupyter notebook, and so on.)
You can get the following figure by simply running the steps in order.
Load external data
You need only cryspy.in
.
Then, run CyrSPY.
At the first run, CrySPY goes into structure generation mode as usual.
CrySPY stops after 5 structure generation.
If it worked properly, log_cryspy
would look like this.
2022/07/14 19:41:41
CrySPY 1.0.0
Start cryspy.py
Read input file, cryspy.in
Write input data in cryspy.out
Save input data in cryspy.stat
# --------- Generate initial structures
# ------ mindist
Si - Si 1.11
Structure ID 0 was generated. Space group: 88 --> 141 I4_1/amd
Structure ID 1 was generated. Space group: 101 --> 101 P4_2cm
Structure ID 2 was generated. Space group: 204 --> 229 Im-3m
Structure ID 3 was generated. Space group: 199 --> 199 I2_13
Structure ID 4 was generated. Space group: 12 --> 12 C2/m
Unlike normal use, a directory named ext
was created.
Only the stat_job
file exists in ext/
.
If you run cryspy when “out” is written in the stat_job
file, queueing structure files (cif format) are exported in ext/queue
.
$ ls ext/queue
0.cif 1.cif 2.cif 3.cif 4.cif
The number in the file name is structure ID.
The fist line of stat_job
was automatically changed.
$ cat ext/stat_job
submitted
Perform structure optimization and energy evaluation in an external program using the output cif files.
Once that calculation is done, prepare the optimized structure and energy data in the pickle data format, ext_opt_struc_data.pkl
and ext_energy_data.pkl
.
The data format of ext_opt_struc_data.pkl
is the same as init_struc_data.pkl
and opt_struc_data.pkl
, see Data format/Initial and optimized structure data.
The data format of ext_energy_data.pkl
is similar to ext_opt_struc_data.pkl
. Just change the value from the structure data into the energy.
An example of the energy data (dict type) is shown below.
- key: structure ID
- value: energy
{0: -0.7139331910805997,
1: -0.5643404689832622,
2: -0.5832404287259171,
3: -0.535037327286169,
4: -0.6316663459586607}
The ext/calc_data
directory should be automatically generated, so put the two pickle files here.
$ ls ext/calc_data
ext_energy_data.pkl ext_opt_struc_data.pkl
When ready, replace the first line of the stat_job
file with “done” and run CrySPY.
$ emacs /ext/stat_job
$ cat /ext/stat_job
done
CrySPY collects the result data.