mirror of https://github.com/phonopy/phono3py.git
Update document for v2.0.0
This commit is contained in:
parent
4e30cf8e7c
commit
86897db8ce
|
@ -0,0 +1,368 @@
|
|||
(auxiliary_tools)=
|
||||
# Auxiliary tools
|
||||
|
||||
```{contents}
|
||||
:depth: 3
|
||||
:local:
|
||||
```
|
||||
|
||||
(auxiliary_tools_kaccum)=
|
||||
## `phono3py-kaccum`
|
||||
|
||||
Cumulative physical properties with respect to frequency or mean free
|
||||
path are calculated using this command.
|
||||
|
||||
For example, cumulative thermal conductivity is defined by
|
||||
|
||||
$$
|
||||
\kappa^\text{c}(\omega) =
|
||||
\int^\omega_0 \frac{1}{N} \sum_\lambda
|
||||
\kappa_\lambda \delta(\omega_\lambda - \omega') d\omega'
|
||||
$$
|
||||
|
||||
$\kappa_\lambda$ is the contribution to $\kappa$ from the
|
||||
phonon mode $\lambda$, which is defined as
|
||||
|
||||
$$
|
||||
\kappa_\lambda = \frac{1}{V_0}
|
||||
C_\lambda \mathbf{v}_\lambda \otimes \mathbf{v}_\lambda
|
||||
\tau_\lambda.
|
||||
$$
|
||||
|
||||
(The notations are found in http://arxiv.org/abs/1501.00691.)
|
||||
|
||||
### How to use `phono3py-kaccum`
|
||||
|
||||
Let's computer lattice thermal conductivity of Si using the `Si-PBEsol`
|
||||
example found in the example directory.
|
||||
|
||||
```bash
|
||||
% phono3py --dim="2 2 2" --pa="F" -c POSCAR-unitcell --mesh="11 11 11" --sym-fc --br
|
||||
```
|
||||
|
||||
Then using the output file, `kappa-m111111.hdf5`, run
|
||||
`phono3py-kaccum` as follows:
|
||||
|
||||
```bash
|
||||
% phono3py-kaccum --pa="F" -c POSCAR-unitcell kappa-m111111.hdf5 |tee kaccum.dat
|
||||
```
|
||||
|
||||
Here `--pa` is optional. The definition of `--pa` option is same
|
||||
as {ref}`pa_option`. `POSCAR-unitcell` is the unit cell filename
|
||||
that is specified with `-c` option. `kappa-m111111.hdf5` is the
|
||||
output file of thermal conductivity calculation, which is passed to
|
||||
`phono3py-kaccum` as the first argument.
|
||||
|
||||
The format of the output is as follows: The first column gives
|
||||
frequency in THz, and the second to seventh columns give the
|
||||
cumulative lattice thermal conductivity of 6 elements, xx, yy, zz, yz,
|
||||
xz, xy. The eighth to 13th columns give the derivatives. There are
|
||||
sets of frequencies, which are separated by blank lines. Each set is
|
||||
for a temperature. There are the groups corresponding to the number of
|
||||
temperatures calculated.
|
||||
|
||||
To plot the output by gnuplot at temperature index 30 that may
|
||||
correspond to 300 K,
|
||||
|
||||
```bash
|
||||
% gnuplot
|
||||
...
|
||||
gnuplot> p "kaccum.dat" i 30 u 1:2 w l, "kaccum.dat" i 30 u 1:8 w l
|
||||
```
|
||||
|
||||
The plot like below is displayed.
|
||||
|
||||
```{image} Si-kaccum.png
|
||||
:width: 50%
|
||||
```
|
||||
|
||||
With $19\times 19\times 19$ mesh:
|
||||
|
||||
```{image} Si-kaccum-m191919.png
|
||||
:width: 25%
|
||||
```
|
||||
|
||||
###General options
|
||||
|
||||
#### `--pa`
|
||||
|
||||
See {ref}`pa_option`.
|
||||
|
||||
#### `-c`
|
||||
|
||||
Unit cell filename is specified with this option, e.g., `-c
|
||||
POSCAR-unitcell`.
|
||||
|
||||
#### `--qe`
|
||||
|
||||
Let `phono3py-kaccum` read a QE (pw) unit cell file with `-c`
|
||||
option, for example:
|
||||
|
||||
```bash
|
||||
% phono3py-kaccum --qe --pa="F" -c Si.in kappa-m191919.hdf5
|
||||
```
|
||||
|
||||
```{image} Si-kaccum-pwscf.png
|
||||
:width: 25%
|
||||
```
|
||||
|
||||
#### `--crystal`
|
||||
|
||||
Analogous to `--qe`, but to be used with the CRYSTAL interface.
|
||||
|
||||
#### `--turbomole`
|
||||
|
||||
Analogous to `--qe`, but to be used with the TURBOMOLE interface
|
||||
|
||||
#### `--temperature`
|
||||
|
||||
Pick up one temperature point. For example, `--temperature=300` for
|
||||
300 K, which works only if thermal conductivity is calculated at
|
||||
temperatures including 300 K.
|
||||
|
||||
#### `--nsp`
|
||||
|
||||
Number of points to be sampled in the x-axis.
|
||||
|
||||
### Options for tensor properties
|
||||
|
||||
For cummulative thermal conductivity, the last value is given as the
|
||||
thermal conductivity in W/mK. For the other properties, the last value
|
||||
is effectively the sum of values on all mesh grids divided by number
|
||||
of mesh grids. This is understood as normalized for one primitive
|
||||
cell. Before version 1.11.13.1, the last value for `gv_by_gv` (--gv
|
||||
option) was further divided by the primitive cell volume.
|
||||
|
||||
Number of columns of output data is 13 as explained above. With
|
||||
`--average` and `--trace` options, number of columns of output
|
||||
data becomes 3.
|
||||
|
||||
#### `--mfp`
|
||||
|
||||
Mean free path (MFP) is used instead of frequency for the x-axis. MFP
|
||||
is defined in the single-mode RTA by a vector
|
||||
|
||||
$$
|
||||
\mathbf{l}_\lambda = \mathbf{v}_\lambda \tau_\lambda.
|
||||
$$
|
||||
|
||||
The MFP cumulative $\kappa^\text{c}(l)$ is given by
|
||||
|
||||
$$
|
||||
\kappa^\text{c}(l) =
|
||||
\int^l_0 \frac{1}{N} \sum_\lambda
|
||||
\kappa_\lambda \delta(l_\lambda - l') dl'
|
||||
$$
|
||||
|
||||
where $l_\lambda = |\mathbf{l}_\lambda|$ and
|
||||
$\kappa_\lambda$ is the contribution to $\kappa$ from the
|
||||
phonon mode $\lambda$ in the single-mode RTA, which is defined
|
||||
as
|
||||
|
||||
$$
|
||||
\kappa_\lambda = \frac{1}{V_0} C_\lambda \mathbf{v}_\lambda \otimes
|
||||
\mathbf{v}_\lambda \tau_\lambda = \frac{1}{V_0} C_\lambda
|
||||
\mathbf{v}_\lambda \otimes \mathbf{l}_\lambda.
|
||||
$$
|
||||
|
||||
The physical unit of MFP is Angstrom.
|
||||
|
||||
The figure below shows the results of Si example with the
|
||||
$19\times 19\times 19$ and $11\times 11\times 11$ sampling
|
||||
meshes used for the lattice thermal conductivity calculation. They look
|
||||
differently. Especially for the result of the $11\times 11\times
|
||||
11$ sampling mesh, the MFP seems converging but we can see it's not
|
||||
true to look at that of the $19\times 19\times 19$ sampling
|
||||
mesh. To show this type of plot, be careful about the sampling mesh
|
||||
convergence.
|
||||
|
||||
```{image} Si-kaccum-MFP.png
|
||||
:width: 50%
|
||||
```
|
||||
|
||||
(This plot is based on the `Si-PBEsol` example.)
|
||||
|
||||
#### `--gv`
|
||||
|
||||
Outer product of group velocities $\mathbf{v}_\lambda \otimes
|
||||
\mathbf{v}_\lambda$ divided by primitive cell volume (in $\text{THz}^2 /
|
||||
\text{Angstrom}$).
|
||||
|
||||
#### `--average`
|
||||
|
||||
Output the traces of the tensors divided by 3 rather than the unique
|
||||
elements.
|
||||
|
||||
#### `--trace`
|
||||
|
||||
Output the traces of the tensors rather than the unique elements.
|
||||
|
||||
### Options for scalar properties
|
||||
|
||||
For the following properties, those values are normalized by the
|
||||
number of full grid points. This is understood as normalized for one
|
||||
primitive cell.
|
||||
|
||||
Number of columns of output data is three,
|
||||
frequency, cumulative property, and derivative of cumulative property
|
||||
such like DOS.
|
||||
|
||||
#### `--gamma`
|
||||
|
||||
$\Gamma_\lambda(\omega_\lambda)$ (in THz).
|
||||
|
||||
#### `--tau`
|
||||
|
||||
Lifetime $\tau_\lambda = \frac{1}{2\Gamma_\lambda(\omega_\lambda)}$ (in ps)
|
||||
|
||||
#### `--cv`
|
||||
|
||||
Modal heat capacity $C_\lambda$ (in eV/K).
|
||||
|
||||
#### `--gv-norm`
|
||||
|
||||
Absolute value of group velocity $|\mathbf{v}_\lambda|$ (in
|
||||
$\text{THz}\cdot\text{Angstrom}$).
|
||||
|
||||
#### `--pqj`
|
||||
|
||||
Averaged phonon-phonon interaction $P_{\mathbf{q}j}$ (in $\text{eV}^2$).
|
||||
|
||||
#### `--dos`
|
||||
|
||||
Constant value of 1. This results in phonon DOS.
|
||||
|
||||
(auxiliary_tools_kdeplot)=
|
||||
## `phono3py-kdeplot`
|
||||
|
||||
**This script is under the development and may contain bugs.** But a
|
||||
feature is briefly introduced below since it may be useful. Scipy is
|
||||
needed to use this script.
|
||||
|
||||
This script draws density of phonon modes in the frequency-lifetime
|
||||
plane. Its density is estimated using Gaussian-KDE using [scipy](https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.gaussian_kde.html).
|
||||
Then (frequency, lifetime)-data points are superimposed on the density
|
||||
plot.
|
||||
|
||||
`phono3py-kdeplot` reads a result of the thermal conductivity
|
||||
calculation as the first argument:
|
||||
|
||||
```bash
|
||||
% phono3py-kdeplot kappa-m111111.hdf5
|
||||
```
|
||||
|
||||
This calculation takes some time from minutes to hours depending on
|
||||
mesh numbers and nbins. Therefore it is recommended to start with
|
||||
smaller mesh and gradually to increase mesh numbers and nbins up to
|
||||
satisfaction.
|
||||
|
||||
After finishing the calculation, the plot is saved in
|
||||
`lifetime.png`. The black dots show original data points. The
|
||||
drawing area is automatically set to make the look good, where its
|
||||
higher lifetime side is not drawn if all density beyond a lifetime
|
||||
value is smaller than some ratio (see
|
||||
{ref}`kdeplot_density_ratio`) of the maximum density.
|
||||
|
||||
The following plot is drawn with a $19 \times 19 \times 19$ mesh and nbins=200 and the
|
||||
`Si-PBEsol` example is used to generate the data. The colormap of
|
||||
'jet' in matplotlib is used.
|
||||
|
||||
```{image} Si-kdeplot.png
|
||||
:width: 50%
|
||||
```
|
||||
|
||||
### Options
|
||||
|
||||
#### `--temperature`
|
||||
|
||||
Pick up one temperature point. For example, `--temperature=300` for
|
||||
300 K, which works only if thermal conductivity is calculated at
|
||||
temperatures including 300 K.
|
||||
|
||||
Without specifying this option, the 31st temperature index is
|
||||
chosen. This often corresponds to 300 K if phono3py ran without
|
||||
setting temperature range and step.
|
||||
|
||||
#### `--nbins`
|
||||
|
||||
This option controls the resolution of the density plot. The default
|
||||
value is 100. With larger nbins, the resolution of the plot becomes
|
||||
better, but the computation will take more time.
|
||||
|
||||
```bash
|
||||
% phono3py-kdeplot --nbins=200 kappa-m111111.hdf5
|
||||
```
|
||||
|
||||
#### `--cutoff`, `--fmax`
|
||||
|
||||
The option `--cutoff` (`--fmax`) sets the maximum value of
|
||||
lifetime (frequency) to be included as data points **before**
|
||||
Gaussian-KDE. Normally increasing this value from the chosen value
|
||||
without specifying this option does nothing since automatic control of
|
||||
drawing area cuts high lifetime (frequency) side if the density is low.
|
||||
|
||||
#### `--xmax` and `--ymax`
|
||||
|
||||
Maximum values of drawing region of phonon frequency (x-axis) and
|
||||
lifetime (y-axis) are specified by `--xmax` and `--ymax`,
|
||||
respectively.
|
||||
|
||||
`--ymax` switches off automatic determination of maximum value
|
||||
of drawing region along y-axis, therefore as a side effect, the
|
||||
computation will be roughly twice faster.
|
||||
|
||||
```bash
|
||||
% phono3py-kdeplot --ymax=60 kappa-m111111.hdf5
|
||||
```
|
||||
|
||||
#### `--zmax`
|
||||
|
||||
Maximum value of the density is specified with this option. The color
|
||||
along colorbar saturates by choosing a smaller value than the maximum value
|
||||
of density in the data.
|
||||
|
||||
(kdeplot_density_ratio)=
|
||||
#### `--dr`, `--density-ratio`
|
||||
|
||||
The density threshold is specified by the ratio with respect to
|
||||
maximum density. Normally smaller value results in larger drawing
|
||||
region. The default value is 0.1. When `--ymax` is specified
|
||||
together, this option is ignored.
|
||||
|
||||
```bash
|
||||
% phono3py-kdeplot --dr=0.01 kappa-m111111.hdf5
|
||||
```
|
||||
|
||||
#### `--cmap`
|
||||
|
||||
Color map to be used for the density plot. It's given by the name
|
||||
presented at the matplotlib documentation,
|
||||
https://matplotlib.org/users/colormaps.html. The default colormap
|
||||
depends on your matplotlib environment.
|
||||
|
||||
```bash
|
||||
% phono3py-kdeplot --cmap="OrRd" kappa-m111111.hdf5
|
||||
```
|
||||
|
||||
The following figures are those drawn with `jet`, `bwr`,
|
||||
`seismic`, `gnuplot`, `hsv`, and `OrRd` colormaps.
|
||||
|
||||
|
||||
```{image} Si-kdeplot-jet.png
|
||||
:width: 25%
|
||||
```
|
||||
```{image} Si-kdeplot-bwr.png
|
||||
:width: 25%
|
||||
```
|
||||
```{image} Si-kdeplot-seismic.png
|
||||
:width: 25%
|
||||
```
|
||||
```{image} Si-kdeplot-gnuplot.png
|
||||
:width: 25%
|
||||
```
|
||||
```{image} Si-kdeplot-hsv.png
|
||||
:width: 25%
|
||||
```
|
||||
```{image} Si-kdeplot-OrRd.png
|
||||
:width: 25%
|
||||
```
|
|
@ -0,0 +1,408 @@
|
|||
(changelog)=
|
||||
# Change Log
|
||||
|
||||
## Jul-22-2021: Version 2.0.0
|
||||
|
||||
This is a major version release. There are some backword-incompatible changes.
|
||||
|
||||
1. Grid point indexing system to address grid points of q-points
|
||||
is changed.
|
||||
2. Most of integer array data type is changed to
|
||||
`dtype='int_'` from `dtype='intc'`.
|
||||
|
||||
To emulate the version 1.x behaviour in `phono3py` command,
|
||||
try `--v1` option. To emurate the version 1.x behaviour in API,
|
||||
specify `store_dense_gp_map=False`
|
||||
and `store_dense_svecs=False` in instatiation of `Phono3py` class
|
||||
or phon3py loader.
|
||||
|
||||
## Mar-17-2021: Version 1.22.3
|
||||
|
||||
- Fix `--read-gamma` option to work.
|
||||
|
||||
## Feb-21-2021: Version 1.22.2
|
||||
|
||||
- Fix PyPI source distribution package
|
||||
|
||||
## Feb-21-2021: Version 1.22.1
|
||||
|
||||
- `phono3py` command didn't work. This was fixed.
|
||||
- Fix behaviour when specifying `--thm` and `--sigma` simultaneously.
|
||||
|
||||
## Jan-29-2021: Version 1.22.0
|
||||
|
||||
- Maintenance release to follow phonopy v2.9.0.
|
||||
|
||||
## Sep-30-2020: Version 1.21.0
|
||||
|
||||
- Maintenance release to follow the change of phonopy at v2.8.1
|
||||
- Improvements of phono3py loader (`phono3py.load`), `phono3py-load`
|
||||
command, API, and `phono3py_disp.yaml`.
|
||||
- Harmonic phonon calculation on mesh was multithreaded. This is
|
||||
effective when using very dense mesh with non-analytical term
|
||||
correction (probably rare case).
|
||||
- Real and imaginary parts of self energy and spectral function of
|
||||
bubble diagram at API level
|
||||
|
||||
## Mar-3-2020: Version 1.20.0
|
||||
|
||||
- `phono3py_disp.yaml` is made when creating displacements in
|
||||
addition to `disp_fc3.yaml` and
|
||||
`disp_fc2.yaml`. `phono3py_disp.yaml` will be used instead of
|
||||
`disp_fc3.yaml` and `disp_fc2.yaml` in the future major release
|
||||
(v2.0).
|
||||
|
||||
## Mar-3-2020: Version 1.19.1
|
||||
|
||||
- Release for pypi and conda (atztogo channel) packagings
|
||||
|
||||
## Mar-2-2020: Version 1.19.0
|
||||
|
||||
- Improvements of phono3py loader and API.
|
||||
- Improvement of interfaces to calculators. Now it is expected to be
|
||||
much easier to implement calculator interface if it exists in
|
||||
phonopy.
|
||||
- Fixed dependency to phonopy v2.6.0.
|
||||
|
||||
## Dec-22-2019: Version 1.18.2
|
||||
|
||||
- Initial version of phono3py loader (`phono3py.load`) was
|
||||
implemented. See docstring of `phono3py.load`.
|
||||
|
||||
## Oct-17-2019: Version 1.18.1
|
||||
|
||||
- Fix of phono3py-kaccum to follow the latest phonopy.
|
||||
|
||||
## Oct-9-2019: Version 1.18.0
|
||||
|
||||
- Maintenance release
|
||||
|
||||
## Apr-18-2019: Version 1.17.0
|
||||
|
||||
- `--cfz` option was made to subtract residual forces. See
|
||||
{ref}`cfz_option`.
|
||||
- `--cutoff-pair` was made to override the cutoff pair distance
|
||||
written in `disp_fc3.yaml` when using on calculating force
|
||||
constants. This is useful when checking cutoff distance
|
||||
dependency. So the use case of having fully computed `FORCES_FC3`
|
||||
is assumed.
|
||||
- TURBOMOLE interface is provided by Antti Karttunen
|
||||
(`--turbomole`).
|
||||
- Compatibility of `fc2.hdf5` and `force_constants.hdf5` was
|
||||
improved for all calculators to store physical unit information in
|
||||
the hdf5 file. See {ref}`file_format_compatibility`.
|
||||
|
||||
## Mar-24-2019: Version 1.16.0
|
||||
|
||||
- Bug fixes and catching up the updates of phonopy.
|
||||
- Most of hdf5 output files are compressed by `gzip` as
|
||||
default. This compression can be set off, see
|
||||
{ref}`hdf5_compression_option`.
|
||||
- (Experimental) `phono3py` command accepts `phono3py.yaml` type
|
||||
file as an input crystal structure by `-c` option. When `DIM`
|
||||
and any structure file are not given, `phono3py_disp.yaml`
|
||||
(primary) or `phono3py.yaml` (secondary) is searched in the current
|
||||
directory. Then `phono3py.yaml` type file is used as the input.
|
||||
By this, semi-automatic phono3py mode is invocked, which acts as
|
||||
|
||||
1. `supercell_matrix` corresponding to `DIM` in the
|
||||
`phono3py.yaml` type file is used if it exists.
|
||||
2. `phonon_supercell_matrix` corresponding to `DIM_FC2` in the
|
||||
`phono3py.yaml` type file is used if it exists.
|
||||
3. `primitive_matrix` in the `phono3py.yaml` type file
|
||||
is used if it exists. Otherwise, set `PRIMITIVE_AXES = AUTO`
|
||||
when `PRIMITIVE_AXES` is not given.
|
||||
4. NAC params are read (`NAC = .TRUE.`) if NAC params are
|
||||
contained (primary) in the `phono3py.yaml` type file or if
|
||||
`BORN` file exists in the current directory (secondary).
|
||||
|
||||
## Nov-22-2018: version 1.14.3
|
||||
|
||||
- Update to work with phonopy v1.14.2.
|
||||
- Ph-ph interaction can be read (`--read-pp`) and write
|
||||
(`--write-pp`) in RTA thermal conductivity calculation, too. Mind
|
||||
that the data stored are different with and without
|
||||
`--full-pp`. Wihtout `--full-pp` the data are stored in
|
||||
complicated way to save data side, so it is not considered readable
|
||||
by usual users.
|
||||
|
||||
## June-20-2018: version 1.13.3
|
||||
|
||||
- `--lw` (linewidth) option was removed. Use `--br` option and
|
||||
find 2*gamma values as linewidths in `kappa-xxx.hdf5` file.
|
||||
- Documentation of `--lbte` option is available at
|
||||
{ref}`direct_solution`.
|
||||
- This version is dependent on phonopy>=1.13.2.
|
||||
|
||||
## May-17-2018: version 1.13.1
|
||||
|
||||
- Compact force constants are implemented (See {ref}`compact_fc_option`).
|
||||
|
||||
## Mar-16-2018: version 1.12.9
|
||||
|
||||
- Definition of `mode_kappa` values in output hdf5 file is
|
||||
changed. Previously they were divided by number of grid points, but
|
||||
now not. Therefore users who compute `kappa` from `mode_kappa`
|
||||
need to be careful about this change. This does not affect to
|
||||
`phono3py-kaccum` results.
|
||||
|
||||
## Feb-1-2018: version 1.12.7
|
||||
|
||||
- `--tsym` option is removed. Now with `--sym-fc3r` and
|
||||
`--sym-fc2` options,
|
||||
translational invariance symmetry is also applied.
|
||||
- `--sym-fc` option is added. This is just an alias to specify both
|
||||
`--sym-fc3r` and `--sym-fc2` together.
|
||||
- Documentation on `--write-phonon` and `--read-phonon` options is
|
||||
written. These options are used to save harmonic phonon infromation
|
||||
on strage.
|
||||
|
||||
## Nov-22-2017: version 1.12.5
|
||||
|
||||
- Bug fix of RTA thermal conductivity. This bug exists from version
|
||||
1.10.11.18 (git e40cd059). This bug exhibits when all the following
|
||||
conditions are met:
|
||||
|
||||
1. RTA thermal conductivity calculation.
|
||||
2. Tetrahedron method for Brillouin zone integration is used.
|
||||
3. Number of triplets is smaller than number of bands at each grid point.
|
||||
4. Without using `--full-pp`.
|
||||
|
||||
|
||||
(3) happens when the primitive cell is relatively large. Number of
|
||||
triplets can be shown using `--stp` option. A race condition of
|
||||
OpenMP multithreading is the source of the bug. Therefore, if it
|
||||
occurs, the same calculation comes up with the different thermal
|
||||
conductivity value in every run time, for whcih it behaves like
|
||||
randomly.
|
||||
|
||||
- RTA thermal conductivity with smearing method (`--sigma`) is made
|
||||
to run with smaller memory consumption as similar as tetrahedron
|
||||
method (`--thm`).
|
||||
|
||||
## Nov-17-2017: version 1.12.3
|
||||
|
||||
- Command option parser of the phonopy tools is replaced from
|
||||
`optparse` to `argparse`.
|
||||
- The filenames used with these options were the positional arguments
|
||||
previously. Now they are the command-line arguments, i.e., filenames
|
||||
have to be put just after the option name like `-f vasprun.xml-001
|
||||
vasprun.xml-002 ...`.
|
||||
- The names of auxiliary tools (`kdeplot` and `kaccum`) are
|
||||
changed, for which the prefix phono3py- is added to the old names to
|
||||
avoid accidental conflict with other script names already existing
|
||||
under bin directory.
|
||||
- {ref}`sigma_cutoff_option` option was created.
|
||||
|
||||
## Jun-18-2017: version 1.11.13
|
||||
|
||||
- {ref}`normal_umklapp_option` option was made.
|
||||
- Many minor updates: fixing bugs, improving usabilities.
|
||||
- Improve of {ref}`auxiliary_tools_kaccum` and {ref}`auxiliary_tools_kdeplot`.
|
||||
|
||||
## Mar-31-2017: version 1.11.11
|
||||
|
||||
- Abinit code interface is implemented and now under the testing.
|
||||
- Reduction of memory usage in RTA thermal conductivity
|
||||
calculation. This is especially effective for larger unit cell
|
||||
case. Currently combinations with --full_pp, --write_gamma_detail,
|
||||
and --simga(smearing method) are not supported for this. Performance
|
||||
tuning is under going. In some case, computation can be slower than
|
||||
the previous versions.
|
||||
|
||||
## Feb-9-2017: version 1.11.9
|
||||
|
||||
- This version works coupled with phonopy-1.11.8 or later.
|
||||
- CRYSTAL code interface is implemented by Antti J. Karttunen.
|
||||
|
||||
## Dec-14-2016: version 1.11.7
|
||||
|
||||
- This is a maintenance release. This version must be used with
|
||||
phonopy-1.11.6 or later.
|
||||
|
||||
## Nov-27-2016: version 1.11.5
|
||||
|
||||
- `gaccum` is merged to `kaccum`. `gaccum` is removed. See
|
||||
{ref}`auxiliary_tools_kaccum`.
|
||||
- `kdeplot` is added. See {ref}`auxiliary_tools_kdeplot`.
|
||||
|
||||
## Apr-24-2016: version 1.10.9
|
||||
|
||||
- Failure of writing `kappa-mxxx-gx.hdf5` was fixed.
|
||||
|
||||
## Apr-16-2016: version 1.10.7
|
||||
|
||||
- API example is prepared and it is found in `Si` example. No
|
||||
doucment yet.
|
||||
- Si pwscf example was placed in `example-phono3py` directory.
|
||||
- User interface bug fix.
|
||||
|
||||
## Mar-15-2016: version 1.10.5
|
||||
|
||||
- Numbering way of phono3py version was just changed (No big updates
|
||||
were made against previous version.) The number is given based on
|
||||
the phonopy version. For example, the harmonic part of
|
||||
phono3py-1.10.5 is based on the code close to phonopy-1.10.4.
|
||||
- Python3 support
|
||||
- For the RTA thermal conductivity calculation mode with using the
|
||||
linear tetrahedron method, only necessary part of phonon-phonon
|
||||
interaction strengh among phonons. This improves lifetime
|
||||
calculation performance, but as the drawback, averaged ph-ph
|
||||
interaction strength can not be given. See {ref}`full_pp_option`.
|
||||
- Pwscf interface ({ref}`calculator_interfaces`)
|
||||
|
||||
## Oct-10-2015: version 0.9.14
|
||||
|
||||
- Computational performance tuning for phonon-phonon interaction
|
||||
strength calculation was made by Jonathan Skelton. Depending on
|
||||
systems, but 10-20% performance improvement may be possible.
|
||||
- `--stp` option is created to show numbers of q-point triplets to
|
||||
be calculated. See {ref}`command_options`.
|
||||
- `--write_gamma` and `--read_gamma` support using with `--bi`
|
||||
option. Therefore a thermal conductivity calculation can be
|
||||
distributed over band index, too. This may be useful for the system
|
||||
whose unit cell is large.
|
||||
|
||||
## Sep-26-2015: version 0.9.13
|
||||
|
||||
- Changed so that `--wgp` option writes `grid_address-mxxx.hdf5`
|
||||
instead of `grid_address-mxxx.dat`.
|
||||
- `--write_detailed_gamma` is implemented. See {ref}`command_options`.
|
||||
- When running without setting `--thm` and `--sigma` options,
|
||||
linear tetrahedron method corresponding to `--thm` is used as the
|
||||
default behavior.
|
||||
- `--ise` options is created.
|
||||
|
||||
## Aug-12-2015: version 0.9.12
|
||||
|
||||
- Spglib update to version 1.8.2.1.
|
||||
- Improve computational performance of `kaccum` and `gaccum`.
|
||||
|
||||
## Jun-18-2015: version 0.9.10.1
|
||||
|
||||
- Bug fix of `gcaccum`
|
||||
|
||||
## Jun-17-2015: version 0.9.10
|
||||
|
||||
- Fix bug in `kaccum`. When using with `--pa` option, irreducible
|
||||
q-points were incorrectly indexed.
|
||||
- `gaccum` is implemented. `gaccum` is very similar to `kaccum`,
|
||||
but for $\Gamma_\lambda(\omega_\lambda)$.
|
||||
- spglib update.
|
||||
|
||||
## Changes in version 0.9.7
|
||||
|
||||
- The definition of MSPP is modified so as to be averaged ph-ph
|
||||
interaction defined as $P_{\mathbf{q}j}$ in the arXiv
|
||||
manuscript. The key in the kappa hdf5 file is changed from `mspp`
|
||||
to `ave_pp`. The physical unit of $P_{\mathbf{q}j}$ is set
|
||||
to $\text{eV}^2$.
|
||||
|
||||
## Changes in version 0.9.6
|
||||
|
||||
- Silicon example is put in `example-phono3py` directory.
|
||||
- Accumulated lattice thermal conductivity is calculated by `kaccum`
|
||||
script.
|
||||
- JDOS output format was changed.
|
||||
|
||||
## Changes in version 0.9.5
|
||||
|
||||
- In `kappa-xxx.hdf5` file, `heat_capacity` format was changed
|
||||
from `(irreducible q-point, temperature, phonon band)` to
|
||||
`(temperature, irreducible q-point, phonon band)`. For `gamma`,
|
||||
previous document was wrong in the array shape. It is
|
||||
`(temperature, irreducible q-point, phonon band)`
|
||||
|
||||
|
||||
## Changes in version 0.9.4
|
||||
|
||||
- The option of `--cutoff_mfp` is renamed to `--boundary_mfp` and
|
||||
now it's on the document.
|
||||
- Detailed contribution of `kappa` at each **q**-point and phonon
|
||||
mode is output to .hdf5 with the keyword `mode_kappa`.
|
||||
|
||||
## Changes in version 0.8.11
|
||||
|
||||
- A new option of `--cutoff_mfp` for including effective boundary
|
||||
mean free path.
|
||||
- The option name `--cutfc3` is changed to `--cutoff_fc3`.
|
||||
- The option name `--cutpair` is changed to `--cutoff_pair`.
|
||||
- A new option `--ga` is created.
|
||||
- Fix spectrum plot of joint dos and imaginary part of self energy
|
||||
|
||||
## Changes in version 0.8.10
|
||||
|
||||
- Different supercell size of fc2 from fc3 can be specified using
|
||||
`--dim_fc2` option.
|
||||
- `--isotope` option is implemented. This is used instead of
|
||||
`--mass_variances` option without specifying the values. Mass
|
||||
variance parameters are read from database.
|
||||
|
||||
## Changes in version 0.8.2
|
||||
|
||||
- Phono3py python interface is rewritten and a lot of changes are
|
||||
introduced.
|
||||
- `FORCES_SECOND` and `FORCES_THIRD` are no more used. Instead just
|
||||
one file of `FORCES_FC3` is used. Now `FORCES_FC3` is generated
|
||||
by `--cf3` option and the backward compatibility is simple: `cat
|
||||
FORCES_SECOND FORCES_THIRD > FORCES_FC3`.
|
||||
- `--multiple_sigmas` is removed. The same behavior is achieved by
|
||||
`--sigma`.
|
||||
|
||||
## Changes in version 0.8.0
|
||||
|
||||
- `--q_direction` didn't work. Fix it.
|
||||
- Implementation of tetrahedron method whcih is activated by
|
||||
`--thm`.
|
||||
- Grid addresses are written out by `--wgp` option.
|
||||
|
||||
## Changes in version 0.7.6
|
||||
|
||||
- Cut-off distance for fc3 is implemented. This is activated by
|
||||
`--cutfc3` option. FC3 elements where any atomic pair has larger
|
||||
distance than cut-off distance are set zero.
|
||||
- `--cutpair` works only when creating displacements. The cut-off
|
||||
pair distance is written into `disp_fc3.yaml` and FC3 is created
|
||||
from `FORCES_THIRD` with this information. Usually sets of pair
|
||||
displacements are more redundant than that needed for creating fc3
|
||||
if index permutation symmetry is considered. Therefore using index
|
||||
permutation symmetry, some elements of fc3 can be recovered even if
|
||||
some of supercell force calculations are missing. In paticular, all
|
||||
pair distances among triplet atoms are larger than cutoff pair
|
||||
distance, any fc3 elements are not recovered, i.e., the element will
|
||||
be zero.
|
||||
|
||||
## Changes in version 0.7.2
|
||||
|
||||
- Default displacement distance is changed to 0.03.
|
||||
- Files names of displacement supercells now have 5 digits numbering,
|
||||
`POSCAR-xxxxx`.
|
||||
- Cutoff distance between pair displacements is implemented. This is
|
||||
triggered by `--cutpair` option. This option works only for
|
||||
calculating atomic forces in supercells with configurations of pairs
|
||||
of displacements.
|
||||
|
||||
## Changes in version 0.7.1
|
||||
|
||||
- It is changed to sampling q-points in Brillouin zone. Previously
|
||||
q-points are sampled in reciprocal primitive lattice. Usually this
|
||||
change affects very little to the result.
|
||||
- q-points of phonon triplets are more carefully sampled when a
|
||||
q-point is on Brillouin zone boundary. Usually this
|
||||
change affects very little to the result.
|
||||
- Isotope effect to thermal conductivity is included.
|
||||
|
||||
## Changes in version 0.6.0
|
||||
|
||||
- `disp.yaml` is renamed to `disp_fc3.yaml`. Old calculations with
|
||||
`disp.yaml` can be used without any problem just by changing the
|
||||
file name.
|
||||
- Group velocity is calculated from analytical derivative of dynamical
|
||||
matrix.
|
||||
- Group velocities at degenerate phonon modes are better handled.
|
||||
This improves the accuracy of group velocity and thus for thermal
|
||||
conductivity.
|
||||
- Re-implementation of third-order force constants calculation from
|
||||
supercell forces, which makes the calculation much faster
|
||||
- When any phonon of triplets can be on the Brillouin zone boundary, i.e.,
|
||||
when a mesh number is an even number, it is more carefully treated.
|
|
@ -1,433 +0,0 @@
|
|||
.. _changelog:
|
||||
|
||||
Change Log
|
||||
==========
|
||||
|
||||
Mar-17-2021: Version 1.22.3
|
||||
---------------------------
|
||||
- Fix ``--read-gamma`` option to work.
|
||||
|
||||
Feb-21-2021: Version 1.22.2
|
||||
---------------------------
|
||||
- Fix PyPI source distribution package
|
||||
|
||||
Feb-21-2021: Version 1.22.1
|
||||
---------------------------
|
||||
- ``phono3py`` command didn't work. This was fixed.
|
||||
- Fix behaviour when specifying ``--thm`` and ``--sigma`` simultaneously.
|
||||
|
||||
Jan-29-2021: Version 1.22.0
|
||||
---------------------------
|
||||
- Maintenance release to follow phonopy v2.9.0.
|
||||
|
||||
Sep-30-2020: Version 1.21.0
|
||||
---------------------------
|
||||
|
||||
- Maintenance release to follow the change of phonopy at v2.8.1
|
||||
- Improvements of phono3py loader (``phono3py.load``), ``phono3py-load``
|
||||
command, API, and ``phono3py_disp.yaml``.
|
||||
- Harmonic phonon calculation on mesh was multithreaded. This is
|
||||
effective when using very dense mesh with non-analytical term
|
||||
correction (probably rare case).
|
||||
- Real and imaginary parts of self energy and spectral function of
|
||||
bubble diagram at API level
|
||||
|
||||
Mar-3-2020: Version 1.20.0
|
||||
--------------------------
|
||||
|
||||
- ``phono3py_disp.yaml`` is made when creating displacements in
|
||||
addition to ``disp_fc3.yaml`` and
|
||||
``disp_fc2.yaml``. ``phono3py_disp.yaml`` will be used instead of
|
||||
``disp_fc3.yaml`` and ``disp_fc2.yaml`` in the future major release
|
||||
(v2.0).
|
||||
|
||||
Mar-3-2020: Version 1.19.1
|
||||
--------------------------
|
||||
|
||||
- Release for pypi and conda (atztogo channel) packagings
|
||||
|
||||
Mar-2-2020: Version 1.19.0
|
||||
--------------------------
|
||||
|
||||
- Improvements of phono3py loader and API.
|
||||
- Improvement of interfaces to calculators. Now it is expected to be
|
||||
much easier to implement calculator interface if it exists in
|
||||
phonopy.
|
||||
- Fixed dependency to phonopy v2.6.0.
|
||||
|
||||
Dec-22-2019: Version 1.18.2
|
||||
---------------------------
|
||||
|
||||
- Initial version of phono3py loader (``phono3py.load``) was
|
||||
implemented. See docstring of ``phono3py.load``.
|
||||
|
||||
Oct-17-2019: Version 1.18.1
|
||||
---------------------------
|
||||
|
||||
- Fix of phono3py-kaccum to follow the latest phonopy.
|
||||
|
||||
Oct-9-2019: Version 1.18.0
|
||||
---------------------------
|
||||
|
||||
- Maintenance release
|
||||
|
||||
Apr-18-2019: Version 1.17.0
|
||||
---------------------------
|
||||
- ``--cfz`` option was made to subtract residual forces. See
|
||||
:ref:`cfz_option`.
|
||||
- ``--cutoff-pair`` was made to override the cutoff pair distance
|
||||
written in ``disp_fc3.yaml`` when using on calculating force
|
||||
constants. This is useful when checking cutoff distance
|
||||
dependency. So the use case of having fully computed ``FORCES_FC3``
|
||||
is assumed.
|
||||
- TURBOMOLE interface is provided by Antti Karttunen
|
||||
(``--turbomole``).
|
||||
- Compatibility of ``fc2.hdf5`` and ``force_constants.hdf5`` was
|
||||
improved for all calculators to store physical unit information in
|
||||
the hdf5 file. See :ref:`file_format_compatibility`.
|
||||
|
||||
Mar-24-2019: Version 1.16.0
|
||||
---------------------------
|
||||
- Bug fixes and catching up the updates of phonopy.
|
||||
- Most of hdf5 output files are compressed by ``gzip`` as
|
||||
default. This compression can be set off, see
|
||||
:ref:`hdf5_compression_option`.
|
||||
- (Experimental) ``phono3py`` command accepts ``phono3py.yaml`` type
|
||||
file as an input crystal structure by ``-c`` option. When ``DIM``
|
||||
and any structure file are not given, ``phono3py_disp.yaml``
|
||||
(primary) or ``phono3py.yaml`` (secondary) is searched in the current
|
||||
directory. Then ``phono3py.yaml`` type file is used as the input.
|
||||
By this, semi-automatic phono3py mode is invocked, which acts as
|
||||
|
||||
(1) ``supercell_matrix`` corresponding to ``DIM`` in the
|
||||
``phono3py.yaml`` type file is used if it exists.
|
||||
(2) ``phonon_supercell_matrix`` corresponding to ``DIM_FC2`` in the
|
||||
``phono3py.yaml`` type file is used if it exists.
|
||||
(3) ``primitive_matrix`` in the ``phono3py.yaml`` type file
|
||||
is used if it exists. Otherwise, set ``PRIMITIVE_AXES = AUTO``
|
||||
when ``PRIMITIVE_AXES`` is not given.
|
||||
(4) NAC params are read (``NAC = .TRUE.``) if NAC params are
|
||||
contained (primary) in the ``phono3py.yaml`` type file or if
|
||||
``BORN`` file exists in the current directory (secondary).
|
||||
|
||||
Nov-22-2018: version 1.14.3
|
||||
----------------------------
|
||||
- Update to work with phonopy v1.14.2.
|
||||
- Ph-ph interaction can be read (``--read-pp``) and write
|
||||
(``--write-pp``) in RTA thermal conductivity calculation, too. Mind
|
||||
that the data stored are different with and without
|
||||
``--full-pp``. Wihtout ``--full-pp`` the data are stored in
|
||||
complicated way to save data side, so it is not considered readable
|
||||
by usual users.
|
||||
|
||||
June-20-2018: version 1.13.3
|
||||
----------------------------
|
||||
|
||||
- ``--lw`` (linewidth) option was removed. Use ``--br`` option and
|
||||
find 2*gamma values as linewidths in ``kappa-xxx.hdf5`` file.
|
||||
- Documentation of ``--lbte`` option is available at
|
||||
:ref:`direct_solution`.
|
||||
- This version is dependent on phonopy>=1.13.2.
|
||||
|
||||
May-17-2018: version 1.13.1
|
||||
----------------------------
|
||||
|
||||
- Compact force constants are implemented (See :ref:`compact_fc_option`).
|
||||
|
||||
Mar-16-2018: version 1.12.9
|
||||
----------------------------
|
||||
|
||||
- Definition of ``mode_kappa`` values in output hdf5 file is
|
||||
changed. Previously they were divided by number of grid points, but
|
||||
now not. Therefore users who compute ``kappa`` from ``mode_kappa``
|
||||
need to be careful about this change. This does not affect to
|
||||
``phono3py-kaccum`` results.
|
||||
|
||||
Feb-1-2018: version 1.12.7
|
||||
----------------------------
|
||||
|
||||
- ``--tsym`` option is removed. Now with ``--sym-fc3r`` and
|
||||
``--sym-fc2`` options,
|
||||
translational invariance symmetry is also applied.
|
||||
- ``--sym-fc`` option is added. This is just an alias to specify both
|
||||
``--sym-fc3r`` and ``--sym-fc2`` together.
|
||||
- Documentation on ``--write-phonon`` and ``--read-phonon`` options is
|
||||
written. These options are used to save harmonic phonon infromation
|
||||
on strage.
|
||||
|
||||
Nov-22-2017: version 1.12.5
|
||||
-----------------------------
|
||||
|
||||
- Bug fix of RTA thermal conductivity. This bug exists from version
|
||||
1.10.11.18 (git e40cd059). This bug exhibits when all the following
|
||||
conditions are met:
|
||||
|
||||
1. RTA thermal conductivity calculation.
|
||||
2. Tetrahedron method for Brillouin zone integration is used.
|
||||
3. Number of triplets is smaller than number of bands at each grid point.
|
||||
4. Without using ``--full-pp``.
|
||||
|
||||
|
||||
(3) happens when the primitive cell is relatively large. Number of
|
||||
triplets can be shown using ``--stp`` option. A race condition of
|
||||
OpenMP multithreading is the source of the bug. Therefore, if it
|
||||
occurs, the same calculation comes up with the different thermal
|
||||
conductivity value in every run time, for whcih it behaves like
|
||||
randomly.
|
||||
|
||||
- RTA thermal conductivity with smearing method (``--sigma``) is made
|
||||
to run with smaller memory consumption as similar as tetrahedron
|
||||
method (``--thm``).
|
||||
|
||||
Nov-17-2017: version 1.12.3
|
||||
----------------------------
|
||||
|
||||
- Command option parser of the phonopy tools is replaced from
|
||||
``optparse`` to ``argparse``.
|
||||
- The filenames used with these options were the positional arguments
|
||||
previously. Now they are the command-line arguments, i.e., filenames
|
||||
have to be put just after the option name like ``-f vasprun.xml-001
|
||||
vasprun.xml-002 ...``.
|
||||
- The names of auxiliary tools (``kdeplot`` and ``kaccum``) are
|
||||
changed, for which the prefix phono3py- is added to the old names to
|
||||
avoid accidental conflict with other script names already existing
|
||||
under bin directory.
|
||||
- :ref:`sigma_cutoff_option` option was created.
|
||||
|
||||
Jun-18-2017: version 1.11.13
|
||||
----------------------------
|
||||
|
||||
- :ref:`normal_umklapp_option` option was made.
|
||||
- Many minor updates: fixing bugs, improving usabilities.
|
||||
- Improve of :ref:`auxiliary_tools_kaccum` and :ref:`auxiliary_tools_kdeplot`.
|
||||
|
||||
Mar-31-2017: version 1.11.11
|
||||
----------------------------
|
||||
|
||||
- Abinit code interface is implemented and now under the testing.
|
||||
- Reduction of memory usage in RTA thermal conductivity
|
||||
calculation. This is especially effective for larger unit cell
|
||||
case. Currently combinations with --full_pp, --write_gamma_detail,
|
||||
and --simga(smearing method) are not supported for this. Performance
|
||||
tuning is under going. In some case, computation can be slower than
|
||||
the previous versions.
|
||||
|
||||
Feb-9-2017: version 1.11.9
|
||||
---------------------------
|
||||
|
||||
- This version works coupled with phonopy-1.11.8 or later.
|
||||
- CRYSTAL code interface is implemented by Antti J. Karttunen.
|
||||
|
||||
Dec-14-2016: version 1.11.7
|
||||
------------------------------
|
||||
|
||||
- This is a maintenance release. This version must be used with
|
||||
phonopy-1.11.6 or later.
|
||||
|
||||
Nov-27-2016: version 1.11.5
|
||||
------------------------------
|
||||
|
||||
- ``gaccum`` is merged to ``kaccum``. ``gaccum`` is removed. See
|
||||
:ref:`auxiliary_tools_kaccum`.
|
||||
- ``kdeplot`` is added. See :ref:`auxiliary_tools_kdeplot`.
|
||||
|
||||
Apr-24-2016: version 1.10.9
|
||||
------------------------------
|
||||
|
||||
- Failure of writing ``kappa-mxxx-gx.hdf5`` was fixed.
|
||||
|
||||
Apr-16-2016: version 1.10.7
|
||||
------------------------------
|
||||
|
||||
- API example is prepared and it is found in ``Si`` example. No
|
||||
doucment yet.
|
||||
- Si pwscf example was placed in ``example-phono3py`` directory.
|
||||
- User interface bug fix.
|
||||
|
||||
Mar-15-2016: version 1.10.5
|
||||
------------------------------
|
||||
|
||||
- Numbering way of phono3py version was just changed (No big updates
|
||||
were made against previous version.) The number is given based on
|
||||
the phonopy version. For example, the harmonic part of
|
||||
phono3py-1.10.5 is based on the code close to phonopy-1.10.4.
|
||||
- Python3 support
|
||||
- For the RTA thermal conductivity calculation mode with using the
|
||||
linear tetrahedron method, only necessary part of phonon-phonon
|
||||
interaction strengh among phonons. This improves lifetime
|
||||
calculation performance, but as the drawback, averaged ph-ph
|
||||
interaction strength can not be given. See :ref:`full_pp_option`.
|
||||
- Pwscf interface (:ref:`calculator_interfaces`)
|
||||
|
||||
Oct-10-2015: version 0.9.14
|
||||
------------------------------
|
||||
|
||||
- Computational performance tuning for phonon-phonon interaction
|
||||
strength calculation was made by Jonathan Skelton. Depending on
|
||||
systems, but 10-20% performance improvement may be possible.
|
||||
- ``--stp`` option is created to show numbers of q-point triplets to
|
||||
be calculated. See :ref:`command_options`.
|
||||
- ``--write_gamma`` and ``--read_gamma`` support using with ``--bi``
|
||||
option. Therefore a thermal conductivity calculation can be
|
||||
distributed over band index, too. This may be useful for the system
|
||||
whose unit cell is large.
|
||||
|
||||
Sep-26-2015: version 0.9.13
|
||||
------------------------------
|
||||
|
||||
- Changed so that ``--wgp`` option writes ``grid_address-mxxx.hdf5``
|
||||
instead of ``grid_address-mxxx.dat``.
|
||||
- ``--write_detailed_gamma`` is implemented. See :ref:`command_options`.
|
||||
- When running without setting ``--thm`` and ``--sigma`` options,
|
||||
linear tetrahedron method corresponding to ``--thm`` is used as the
|
||||
default behavior.
|
||||
- ``--ise`` options is created.
|
||||
|
||||
Aug-12-2015: version 0.9.12
|
||||
------------------------------
|
||||
|
||||
- Spglib update to version 1.8.2.1.
|
||||
- Improve computational performance of ``kaccum`` and ``gaccum``.
|
||||
|
||||
Jun-18-2015: version 0.9.10.1
|
||||
------------------------------
|
||||
|
||||
- Bug fix of ``gcaccum``
|
||||
|
||||
Jun-17-2015: version 0.9.10
|
||||
----------------------------
|
||||
|
||||
- Fix bug in ``kaccum``. When using with ``--pa`` option, irreducible
|
||||
q-points were incorrectly indexed.
|
||||
- ``gaccum`` is implemented. ``gaccum`` is very similar to ``kaccum``,
|
||||
but for :math:`\Gamma_\lambda(\omega_\lambda)`.
|
||||
- spglib update.
|
||||
|
||||
Changes in version 0.9.7
|
||||
-------------------------
|
||||
|
||||
- The definition of MSPP is modified so as to be averaged ph-ph
|
||||
interaction defined as :math:`P_{\mathbf{q}j}` in the arXiv
|
||||
manuscript. The key in the kappa hdf5 file is changed from ``mspp``
|
||||
to ``ave_pp``. The physical unit of :math:`P_{\mathbf{q}j}` is set
|
||||
to :math:`\text{eV}^2`.
|
||||
|
||||
Changes in version 0.9.6
|
||||
------------------------
|
||||
|
||||
- Silicon example is put in ``example-phono3py`` directory.
|
||||
- Accumulated lattice thermal conductivity is calculated by ``kaccum``
|
||||
script.
|
||||
- JDOS output format was changed.
|
||||
|
||||
Changes in version 0.9.5
|
||||
-------------------------
|
||||
|
||||
- In ``kappa-xxx.hdf5`` file, ``heat_capacity`` format was changed
|
||||
from ``(irreducible q-point, temperature, phonon band)`` to
|
||||
``(temperature, irreducible q-point, phonon band)``. For ``gamma``,
|
||||
previous document was wrong in the array shape. It is
|
||||
``(temperature, irreducible q-point, phonon band)``
|
||||
|
||||
|
||||
Changes in version 0.9.4
|
||||
------------------------
|
||||
|
||||
- The option of ``--cutoff_mfp`` is renamed to ``--boundary_mfp`` and
|
||||
now it's on the document.
|
||||
- Detailed contribution of ``kappa`` at each **q**-point and phonon
|
||||
mode is output to .hdf5 with the keyword ``mode_kappa``.
|
||||
|
||||
Changes in version 0.8.11
|
||||
-------------------------
|
||||
|
||||
- A new option of ``--cutoff_mfp`` for including effective boundary
|
||||
mean free path.
|
||||
- The option name ``--cutfc3`` is changed to ``--cutoff_fc3``.
|
||||
- The option name ``--cutpair`` is changed to ``--cutoff_pair``.
|
||||
- A new option ``--ga`` is created.
|
||||
- Fix spectrum plot of joint dos and imaginary part of self energy
|
||||
|
||||
Changes in version 0.8.10
|
||||
-------------------------
|
||||
|
||||
- Different supercell size of fc2 from fc3 can be specified using
|
||||
``--dim_fc2`` option.
|
||||
- ``--isotope`` option is implemented. This is used instead of
|
||||
``--mass_variances`` option without specifying the values. Mass
|
||||
variance parameters are read from database.
|
||||
|
||||
Changes in version 0.8.2
|
||||
------------------------
|
||||
|
||||
- Phono3py python interface is rewritten and a lot of changes are
|
||||
introduced.
|
||||
- ``FORCES_SECOND`` and ``FORCES_THIRD`` are no more used. Instead just
|
||||
one file of ``FORCES_FC3`` is used. Now ``FORCES_FC3`` is generated
|
||||
by ``--cf3`` option and the backward compatibility is simple: ``cat
|
||||
FORCES_SECOND FORCES_THIRD > FORCES_FC3``.
|
||||
- ``--multiple_sigmas`` is removed. The same behavior is achieved by
|
||||
``--sigma``.
|
||||
|
||||
Changes in version 0.8.0
|
||||
------------------------
|
||||
|
||||
- ``--q_direction`` didn't work. Fix it.
|
||||
- Implementation of tetrahedron method whcih is activated by
|
||||
``--thm``.
|
||||
- Grid addresses are written out by ``--wgp`` option.
|
||||
|
||||
Changes in version 0.7.6
|
||||
------------------------
|
||||
|
||||
- Cut-off distance for fc3 is implemented. This is activated by
|
||||
``--cutfc3`` option. FC3 elements where any atomic pair has larger
|
||||
distance than cut-off distance are set zero.
|
||||
- ``--cutpair`` works only when creating displacements. The cut-off
|
||||
pair distance is written into ``disp_fc3.yaml`` and FC3 is created
|
||||
from ``FORCES_THIRD`` with this information. Usually sets of pair
|
||||
displacements are more redundant than that needed for creating fc3
|
||||
if index permutation symmetry is considered. Therefore using index
|
||||
permutation symmetry, some elements of fc3 can be recovered even if
|
||||
some of supercell force calculations are missing. In paticular, all
|
||||
pair distances among triplet atoms are larger than cutoff pair
|
||||
distance, any fc3 elements are not recovered, i.e., the element will
|
||||
be zero.
|
||||
|
||||
Changes in version 0.7.2
|
||||
------------------------
|
||||
|
||||
- Default displacement distance is changed to 0.03.
|
||||
- Files names of displacement supercells now have 5 digits numbering,
|
||||
``POSCAR-xxxxx``.
|
||||
- Cutoff distance between pair displacements is implemented. This is
|
||||
triggered by ``--cutpair`` option. This option works only for
|
||||
calculating atomic forces in supercells with configurations of pairs
|
||||
of displacements.
|
||||
|
||||
Changes in version 0.7.1
|
||||
------------------------
|
||||
|
||||
- It is changed to sampling q-points in Brillouin zone. Previously
|
||||
q-points are sampled in reciprocal primitive lattice. Usually this
|
||||
change affects very little to the result.
|
||||
- q-points of phonon triplets are more carefully sampled when a
|
||||
q-point is on Brillouin zone boundary. Usually this
|
||||
change affects very little to the result.
|
||||
- Isotope effect to thermal conductivity is included.
|
||||
|
||||
Changes in version 0.6.0
|
||||
------------------------
|
||||
|
||||
- ``disp.yaml`` is renamed to ``disp_fc3.yaml``. Old calculations with
|
||||
``disp.yaml`` can be used without any problem just by changing the
|
||||
file name.
|
||||
- Group velocity is calculated from analytical derivative of dynamical
|
||||
matrix.
|
||||
- Group velocities at degenerate phonon modes are better handled.
|
||||
This improves the accuracy of group velocity and thus for thermal
|
||||
conductivity.
|
||||
- Re-implementation of third-order force constants calculation from
|
||||
supercell forces, which makes the calculation much faster
|
||||
- When any phonon of triplets can be on the Brillouin zone boundary, i.e.,
|
||||
when a mesh number is an even number, it is more carefully treated.
|
|
@ -0,0 +1,50 @@
|
|||
# How to cite phono3py
|
||||
|
||||
## Citation of phono3py
|
||||
|
||||
If you have used phono3py, please cite the following article:
|
||||
|
||||
- "Distributions of phonon lifetimes in Brillouin zones",
|
||||
Atsushi Togo, Laurent Chaput, and Isao Tanaka, Phys. Rev. B, **91**, 094306 (2015)
|
||||
|
||||
```
|
||||
@article{phono3py,
|
||||
title = {Distributions of phonon lifetimes in Brillouin zones},
|
||||
author = {Togo, Atsushi and Chaput, Laurent and Tanaka, Isao},
|
||||
journal = {Phys. Rev. B},
|
||||
volume = {91},
|
||||
issue = {9},
|
||||
pages = {094306},
|
||||
numpages = {31},
|
||||
year = {2015},
|
||||
month = {Mar},
|
||||
publisher = {American Physical Society},
|
||||
doi = {10.1103/PhysRevB.91.094306},
|
||||
}
|
||||
```
|
||||
|
||||
(citation_direct_solution_lbte)=
|
||||
## Citation of direct solution of LBTE (`--lbte`)
|
||||
|
||||
If you have used direct solution of LBTE in phono3py, please cite the
|
||||
following article:
|
||||
|
||||
- "Direct Solution to the Linearized Phonon Boltzmann Equation"
|
||||
Laurent Chaput, Phys. Rev. Lett., **110**, 265506 (2013)
|
||||
|
||||
```
|
||||
@article{PhysRevLett.110.265506,
|
||||
title = {Direct Solution to the Linearized Phonon Boltzmann Equation},
|
||||
author = {Chaput, Laurent},
|
||||
journal = {Phys. Rev. Lett.},
|
||||
volume = {110},
|
||||
issue = {26},
|
||||
pages = {265506},
|
||||
numpages = {5},
|
||||
year = {2013},
|
||||
month = {Jun},
|
||||
publisher = {American Physical Society},
|
||||
doi = {10.1103/PhysRevLett.110.265506},
|
||||
url = {https://link.aps.org/doi/10.1103/PhysRevLett.110.265506}
|
||||
}
|
||||
```
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,95 @@
|
|||
(crystal_interface)=
|
||||
# CRYSTAL & phono3py calculation
|
||||
|
||||
CRYSTAL program package has a robust built-in phonon calculation
|
||||
workflow for harmonic phonon properties. However, combining CRYSTAL
|
||||
with Phono3py enables convenient access to anharmonic phonon properties.
|
||||
|
||||
An example for CRYSTAL is found in the `example/Si-CRYSTAL` directory.
|
||||
|
||||
To invoke the CRYSTAL interface, `--crystal` option has to be always
|
||||
specified:
|
||||
|
||||
```bash
|
||||
% phono3py --crystal [options] [arguments]
|
||||
```
|
||||
|
||||
When the file name of the unit cell is different from the default one
|
||||
(see {ref}`default_unit_cell_file_name_for_calculator`), `-c` option
|
||||
is used to specify the file name. CRYSTAL unit cell file parser used in
|
||||
phono3py is the same as that in phonopy. It reads a limited number of
|
||||
keywords that are documented in the phonopy web site
|
||||
(http://phonopy.github.io/phonopy/crystal.html#crystal-interface).
|
||||
|
||||
(crystal_workflow)=
|
||||
## Workflow
|
||||
|
||||
In this example (Si-CRYSTAL), the CRYSTAL output file is crystal.o.
|
||||
This is the default file name for the CRYSTAL interface,
|
||||
so the -c crystal.o parameter is not needed.
|
||||
|
||||
1) Create supercells with displacements
|
||||
(4x4x4 for 2nd order FC, 2x2x2 for 3rd order FC)
|
||||
|
||||
```bash
|
||||
% phono3py --crystal --dim="2 2 2" --dim-fc2="4 4 4" -d
|
||||
```
|
||||
|
||||
57 supercell files (`supercell-xxx.d12/.ext`) for the third order
|
||||
force constants are created. In addition, one supercell file
|
||||
(`supercell_fc2-00001.d12/.ext`) is created for the second order
|
||||
force constants.
|
||||
|
||||
2) To make valid CRYSTAL input files, there are two possible options:
|
||||
|
||||
a) Manually: modify the generated `supercell-xxx.d12` and `supercell_fc2-xxxxx.d12`
|
||||
files by replacing the line `Insert basis sets and parameters here` with the
|
||||
basis set and computational parameters.
|
||||
|
||||
b) Recommended option: before generating the supercells, include files named
|
||||
`TEMPLATE` and `TEMPLATE3` in the current directory. These files should
|
||||
contain the basis sets and computational parameters for CRYSTAL (see the example).
|
||||
When phono3py finds these files it automatically generates complete
|
||||
CRYSTAL input files in the step 1.
|
||||
|
||||
Note that supercells with displacements must not be relaxed in the
|
||||
force calculations, because atomic forces induced by a small atomic
|
||||
displacement are what we need for phonon calculation. To get accurate
|
||||
forces, TOLDEE parameter should be 10 or higher. Phono3py includes this
|
||||
parameter and the necessary GRADCAL keyword automatically in the inputs.
|
||||
|
||||
Then, CRYSTAL supercell calculations are executed to obtain forces on
|
||||
atoms, e.g., as follows:
|
||||
|
||||
```bash
|
||||
% runcry17 supercell-001.d12
|
||||
```
|
||||
|
||||
3) Collect forces in `FORCES_FC3` and `FORCES_FC2`:
|
||||
|
||||
```bash
|
||||
% phono3py --crystal --cf3 supercell-*o
|
||||
% phono3py --crystal --cf2 supercell_fc2-*o
|
||||
```
|
||||
|
||||
`disp_fc3.yaml` and `disp_fc2.yaml` are used to create `FORCES_FC3` and
|
||||
`FORCES_FC2`, therefore they must exist in current directory.
|
||||
|
||||
4) Calculate 3rd and 2nd order force constants in files `fc3.hdf5` and `fc2.hdf5`:
|
||||
|
||||
```bash
|
||||
% phono3py --crystal --dim="2 2 2" --dim-fc2="4 4 4" --sym-fc
|
||||
```
|
||||
|
||||
`--sym-fc` is used to symmetrize second- and third-order force constants.
|
||||
|
||||
5) Thermal conductivity calculation:
|
||||
|
||||
```bash
|
||||
% phono3py --crystal --fc3 --fc2 --dim="2 2 2" --dim-fc2="4 4 4" --mesh="20 20 20" --br
|
||||
```
|
||||
|
||||
`--br` invokes the Relaxation Time Approximation.
|
||||
Add `--isotope` for isotope scattering.
|
||||
Check the effect of `--nac` for polar systems.
|
||||
Carefully test the convergence with respect to `--mesh`!
|
|
@ -0,0 +1,429 @@
|
|||
(command_cutoff_pair)=
|
||||
# Force constants calculation with cutoff pair-distance
|
||||
|
||||
Here the detail of the command option {ref}`--cutoff_pair <cutoff_pair_option>` is explained.
|
||||
|
||||
```{contents}
|
||||
:depth: 2
|
||||
:local:
|
||||
```
|
||||
|
||||
## What is cutff pair-distance in phono3py?
|
||||
|
||||
Using `--cutoff-pair` option, number of supercells with
|
||||
displacements to be calculated is reduced. But of course this
|
||||
sacrifices the accuracy of third-order force constants (fc3).
|
||||
|
||||
In phono3py, to obtain supercell-fc3,
|
||||
$\Phi_{\alpha\beta\gamma}(jl, j'l', j''l'')$, forces in many
|
||||
supercells having different pairs of displaced atoms are computed
|
||||
using some force-calculator such as ab-initio code. In the phono3py
|
||||
default behaviour, full elements of supercell-fc3 are computed. In
|
||||
this case, though depending on the number of atoms in the supercell
|
||||
and the crystal symmetry, the number of atomic-pair configuration can
|
||||
be huge and beyond our computational resource.
|
||||
|
||||
Sometimes we may expect that interaction range of fc3 among triplets
|
||||
of atoms is shorter than chosen supercell size. If it is the case, we
|
||||
may be allowed to omit computing some elements of supercell-fc3. This
|
||||
is what achieved by `--cutoff-pair` option.
|
||||
|
||||
A supercell-fc3 element is specified by three atomic
|
||||
displacements. Two of three are finitely displaced
|
||||
($\Delta\mathbf{r}_1$ and $\Delta\mathbf{r}_2$) but one of
|
||||
them is included in a force given by the force calculator such as
|
||||
$\mathbf{F}_3=-\frac{\partial V}{\partial\mathbf{r}_3}$. The
|
||||
cutoff distance $d_\text{cut}$ is defined as the upper bound of
|
||||
the distance between the atoms 1 and 2. By this, the set of atomic
|
||||
pairs $\{(\mathbf{r}_1,\mathbf{r}_2)| |\mathbf{r}_1 -
|
||||
\mathbf{r}_2| < d_\text{cut}\}$ is selected for the supercell-fc3
|
||||
calculation. By this, when three distances among the three atoms of
|
||||
triplets are all larger than $d_\text{cut}$, those fc3 elements
|
||||
can not be obtained and so they are simply set zero.
|
||||
|
||||
## Usage
|
||||
|
||||
### Creating supercells with displacements
|
||||
|
||||
`--cutoff-pair` option is employed when creating supercells with
|
||||
displacements, therefore this option must be used with `-d` option
|
||||
when running phono3py, for the Si-PBEsol example:
|
||||
|
||||
```bash
|
||||
% phono3py --cutoff-pair=5 -d --dim="2 2 2" -c POSCAR-unitcell
|
||||
...
|
||||
|
||||
Unit cell was read from "POSCAR-unitcell".
|
||||
Displacement distance: 0.03
|
||||
Number of displacements: 111
|
||||
Cutoff distance for displacements: 5.0
|
||||
Number of displacement supercell files created: 51
|
||||
|
||||
Displacement dataset was written in "phono3py_disp.yaml".
|
||||
...
|
||||
|
||||
% ls POSCAR-0*
|
||||
POSCAR-00001 POSCAR-00032 POSCAR-00043 POSCAR-00080 POSCAR-00097
|
||||
POSCAR-00002 POSCAR-00033 POSCAR-00070 POSCAR-00081 POSCAR-00098
|
||||
POSCAR-00003 POSCAR-00034 POSCAR-00071 POSCAR-00082 POSCAR-00099
|
||||
POSCAR-00016 POSCAR-00035 POSCAR-00072 POSCAR-00083 POSCAR-00100
|
||||
POSCAR-00017 POSCAR-00036 POSCAR-00073 POSCAR-00084 POSCAR-00101
|
||||
POSCAR-00018 POSCAR-00037 POSCAR-00074 POSCAR-00085 POSCAR-00102
|
||||
POSCAR-00019 POSCAR-00038 POSCAR-00075 POSCAR-00086 POSCAR-00103
|
||||
POSCAR-00024 POSCAR-00039 POSCAR-00076 POSCAR-00087
|
||||
POSCAR-00025 POSCAR-00040 POSCAR-00077 POSCAR-00088
|
||||
POSCAR-00026 POSCAR-00041 POSCAR-00078 POSCAR-00089
|
||||
POSCAR-00027 POSCAR-00042 POSCAR-00079 POSCAR-00096
|
||||
% ls POSCAR-0*|wc -l
|
||||
51
|
||||
```
|
||||
|
||||
`Number of displacements: 111` shows the number of supercells with
|
||||
displacements when this is run without `--cutoff-pair`
|
||||
option. `Number of displacement supercell files created: 51` gives
|
||||
the contracted number of supercells with displacements by
|
||||
`--cutoff-pair` option. There number of `POSCAR-0xxxx` files is found 51.
|
||||
At this step, a special `phono3py_disp.yaml` is created. This
|
||||
contains information on this contraction and used in the other
|
||||
calculation step, therefore this file must be kept carefully.
|
||||
|
||||
### Supercell files
|
||||
|
||||
`POSCAR-xxxxx` (in the other calculator interface, the prefix of the
|
||||
filename is different) are not generated if distance between a pair of
|
||||
atoms to be displaced is larger than the specified cutoff pair
|
||||
distance. The indexing number (`xxxxx`) corresponds to that of the
|
||||
case without setting this option, i.e., the same `POSCAR-xxxxx`
|
||||
files are created for the same configurations of pairs of
|
||||
displacements but `POSCAR-xxxxx` files not being included are not
|
||||
generated. The reason of this indexing is that it can be useful when
|
||||
changing the cutoff-pair-distance.
|
||||
|
||||
### Special `phono3py_disp.yaml`
|
||||
|
||||
Using `--cutoff-pair` option together with `-d` option, a special
|
||||
`phono3py_disp.yaml` is created. This contains information on distances
|
||||
between displaced atomic-pairs and whether those pairs are to be
|
||||
computed or not. This special `phono3py_disp.yaml` is necessary to create
|
||||
fc3, therefore be careful not to overwrite it by running the option
|
||||
`-d` without `--cutoff-pair` or with different `--cutoff-pair`
|
||||
with different value.
|
||||
|
||||
### Making `FORCES_FC3`
|
||||
|
||||
To create `FORCES_FC3`, only output files of the supercells created
|
||||
using `--cutoff-pair` option are passed to `phono3py` as the
|
||||
arguments. The special `phono3py_disp.yaml` file is necessary to be
|
||||
located at current directory.
|
||||
|
||||
An example is shown below for the Si example. Here, it is supposed
|
||||
that forces are calculated using VASP in `disp-xxxxx`
|
||||
directories. After running force calculations, there should be the
|
||||
output file containing forces in each directory (for VASP
|
||||
`vasprun.xml`).
|
||||
|
||||
```bash
|
||||
% phono3py --cf3 disp-{00001,00002,00003,00016,00017,00018,00019,00024,00025,00026,00027,00032,00033,00034,00035,00036,00037,00038,00039,00040,00041,00042,00043,00070,00071,00072,00073,00074,00075,00076,00077,00078,00079,00080,00081,00082,00083,00084,00085,00086,00087,00088,00089,00096,00097,00098,00099,00100,00101,00102,00103}/vasprun.xml
|
||||
...
|
||||
|
||||
Displacement dataset is read from phono3py_disp.yaml.
|
||||
counter (file index): 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
||||
FORCES_FC3 has been created.
|
||||
```
|
||||
|
||||
Using {ref}`--cf3-file option <cf3_file_option>` may be recommended
|
||||
when the number of force files is large.
|
||||
|
||||
```bash
|
||||
% for i in `ls POSCAR-0*|sed s/POSCAR-//`;do echo disp-$i/vasprun.xml;done > file_list.dat
|
||||
% phono3py --cf3-file file_list.dat
|
||||
```
|
||||
|
||||
Using a python script, `phono3py_disp.yaml` is easily parsed. So
|
||||
it is also easy to create the file list by a python
|
||||
script:
|
||||
|
||||
```python
|
||||
#!/usr/bin/env python
|
||||
|
||||
from phono3py.interface.phono3py_yaml import Phono3pyYaml
|
||||
|
||||
p3yaml = Phono3pyYaml()
|
||||
p3yaml.read("phono3py_disp.yaml")
|
||||
dds = p3yaml.dataset
|
||||
file_name_tmpl = "disp-%05d/vasprun.xml"
|
||||
count = 1
|
||||
for d1 in dds['first_atoms']:
|
||||
print(file_name_tmpl % count)
|
||||
count += 1
|
||||
for d1 in dds['first_atoms']:
|
||||
for d2 in d1['second_atoms']:
|
||||
if d2['included']:
|
||||
print(file_name_tmpl % count)
|
||||
count += 1
|
||||
```
|
||||
|
||||
### Running phonon-phonon interaction calculation
|
||||
|
||||
To create fc3, `--cutoff-pair` option is not necessary but the
|
||||
special `phono3py_disp.yaml` is required.
|
||||
|
||||
```bash
|
||||
% phono3py
|
||||
...
|
||||
|
||||
----------------------------- General settings -----------------------------
|
||||
Run mode: None
|
||||
HDF5 data compression filter: gzip
|
||||
Crystal structure was read from "phono3py_disp.yaml".
|
||||
Supercell (dim): [2 2 2]
|
||||
Primitive matrix:
|
||||
[0. 0.5 0.5]
|
||||
[0.5 0. 0.5]
|
||||
[0.5 0.5 0. ]
|
||||
Spacegroup: Fd-3m (227)
|
||||
Use -v option to watch primitive cell, unit cell, and supercell structures.
|
||||
----------------------------- Force constants ------------------------------
|
||||
Imposing translational and index exchange symmetry to fc2: False
|
||||
Imposing translational and index exchange symmetry to fc3: False
|
||||
Imposing symmetry of index exchange to fc3 in reciprocal space: False
|
||||
Displacement dataset for fc3 was read from "phono3py_disp.yaml".
|
||||
Sets of supercell forces were read from "FORCES_FC3".
|
||||
Computing fc3[ 1, x, x ] using numpy.linalg.pinv with a displacement:
|
||||
[ 0.0300 0.0000 0.0000]
|
||||
Expanding fc3.
|
||||
Cutting-off fc3 (cut-off distance: 5.000000)
|
||||
Building atom mapping table...
|
||||
Creating contracted fc3...
|
||||
Writing fc3 to "fc3.hdf5".
|
||||
Max drift of fc3: 0.047748 (yxz) 0.047748 (xyz) 0.047748 (xzy)
|
||||
Displacement dataset for fc2 was read from "phono3py_disp.yaml".
|
||||
Sets of supercell forces were read from "FORCES_FC3".
|
||||
Writing fc2 to "fc2.hdf5".
|
||||
Max drift of fc2: -0.000001 (zz) -0.000001 (zz)
|
||||
----------- None of ph-ph interaction calculation was performed. -----------
|
||||
|
||||
Summary of calculation was written in "phono3py.yaml".
|
||||
...
|
||||
```
|
||||
|
||||
Once `fc3.hdf5` and `fc2.hdf5` are created, `--cutoff-pair`
|
||||
option and the special `phono3py_disp.yaml` are not needed anymore.
|
||||
|
||||
```bash
|
||||
% phono3py --mesh="11 11 11" --fc3 --fc2 --br
|
||||
...
|
||||
|
||||
300.0 108.051 108.051 108.051 0.000 0.000 -0.000
|
||||
...
|
||||
```
|
||||
|
||||
## A script extract supercell IDs from `phono3py_disp.yaml`
|
||||
|
||||
The following script is an example to collect supercell IDs
|
||||
with the cutoff-pair distance, for which `included: true` is used
|
||||
to hook them. `duplicates` in `phono3py_disp.yaml` gives the pairs of
|
||||
exactly same supercells having different IDs. Therefore one of each
|
||||
pair is necessary to calculate. As a ratio, the number is not many,
|
||||
but if we want to save very much the computational demand, it is good
|
||||
to consider.
|
||||
|
||||
```python
|
||||
#!/usr/bin/env python
|
||||
|
||||
from phono3py.interface.phono3py_yaml import Phono3pyYaml
|
||||
|
||||
p3yaml = Phono3pyYaml()
|
||||
p3yaml.read("phono3py_disp.yaml")
|
||||
data = p3yaml.dataset
|
||||
|
||||
disp_ids = []
|
||||
for data1 in data['first_atoms']:
|
||||
disp_ids.append(data1['id'])
|
||||
|
||||
for data1 in data['first_atoms']:
|
||||
for data2 in data1['second_atoms']:
|
||||
if data2['included']:
|
||||
disp_ids.append(data2['id'])
|
||||
|
||||
# To remove duplicates
|
||||
# duplicates = dict(data['duplicates'])
|
||||
# disp_ids_nodup = [i for i in disp_ids if i not in duplicates]
|
||||
|
||||
print(" ".join(["%05d" % i for i in disp_ids]))
|
||||
```
|
||||
|
||||
Even for the case that `phono3py_disp.yaml` was created without
|
||||
`--cutoff-pair` option, if we replace the line in the above script:
|
||||
|
||||
```python
|
||||
if data2['included']:
|
||||
```
|
||||
|
||||
by
|
||||
|
||||
```python
|
||||
if data2['distance'] < 5.0: # 5.0 is cutoff-pair distance
|
||||
```
|
||||
|
||||
we can find the supercell IDs almost equivalent to those obtained
|
||||
above for `--cutoff-pair="5.0"`.
|
||||
|
||||
|
||||
## Tests
|
||||
|
||||
### Si-PBE
|
||||
|
||||
For testing, thermal conductivities with respect to `--cutoff-pair`
|
||||
values are calculated as follows. Note that if `FORCES_FC3` for full
|
||||
fc3 elements exists, the same `FORCES_FC3` file can be used for
|
||||
generating contracted fc3 for each special `phono3py_disp.yaml`.
|
||||
|
||||
```bash
|
||||
% egrep '^\s+pair_distance' phono3py_disp.yaml|awk '{print $2}'|sort|uniq
|
||||
0.000000
|
||||
2.366961
|
||||
3.865232
|
||||
4.532386
|
||||
5.466263
|
||||
5.956722
|
||||
6.694777
|
||||
7.100884
|
||||
7.730463
|
||||
9.467845
|
||||
% cp phono3py_disp.yaml phono3py_disp.orig.yaml
|
||||
% for i in {2..10};do d=`grep pair_distance phono3py_disp.orig.yaml|awk '{print $2}'|sort|uniq|sed "${i}q;d"`; d=$((d+0.1)); phono3py --cutoff-pair=$d -o $i -d --pa="F" --dim="2 2 2" -c POSCAR-unitcell; mv phono3py_disp.yaml phono3py_disp.$i.yaml; done
|
||||
% ls phono3py_disp.*.yaml
|
||||
% ls phono3py_disp.*.yaml
|
||||
phono3py_disp.10.yaml phono3py_disp.5.yaml phono3py_disp.9.yaml
|
||||
phono3py_disp.2.yaml phono3py_disp.6.yaml phono3py_disp.orig.yaml
|
||||
phono3py_disp.3.yaml phono3py_disp.7.yaml
|
||||
phono3py_disp.4.yaml phono3py_disp.8.yaml
|
||||
% for i in {2..10};do grep number_of_pairs_in_cutoff phono3py_disp.$i.yaml;done
|
||||
number_of_pairs_in_cutoff: 10
|
||||
number_of_pairs_in_cutoff: 30
|
||||
number_of_pairs_in_cutoff: 50
|
||||
number_of_pairs_in_cutoff: 55
|
||||
number_of_pairs_in_cutoff: 75
|
||||
number_of_pairs_in_cutoff: 95
|
||||
number_of_pairs_in_cutoff: 103
|
||||
number_of_pairs_in_cutoff: 108
|
||||
number_of_pairs_in_cutoff: 110
|
||||
% for i in {2..10};do cp phono3py_disp.$i.yaml phono3py_disp.yaml; phono3py --mesh="11 11 11" --br|tee std.$i.out;done
|
||||
% for i in {2..10};do egrep '^\s+300' std.$i.out;done
|
||||
300.0 123.606 123.606 123.606 -0.000 -0.000 0.000
|
||||
300.0 118.617 118.617 118.617 -0.000 -0.000 0.000
|
||||
300.0 118.818 118.818 118.818 -0.000 -0.000 0.000
|
||||
300.0 118.879 118.879 118.879 -0.000 -0.000 0.000
|
||||
300.0 119.468 119.468 119.468 -0.000 -0.000 0.000
|
||||
300.0 119.489 119.489 119.489 -0.000 -0.000 0.000
|
||||
300.0 119.501 119.501 119.501 -0.000 -0.000 0.000
|
||||
300.0 119.483 119.483 119.483 -0.000 -0.000 0.000
|
||||
300.0 119.481 119.481 119.481 -0.000 -0.000 0.000
|
||||
% for i in {2..10};do cp phono3py_disp.$i.yaml phono3py_disp.yaml; phono3py --sym-fc --mesh="11 11 11" --br|tee std.sym-$i.out;done
|
||||
% for i in {2..10};do egrep '^\s+300' std.sym-$i.out;done
|
||||
300.0 124.650 124.650 124.650 -0.000 -0.000 0.000
|
||||
300.0 119.765 119.765 119.765 -0.000 -0.000 0.000
|
||||
300.0 118.847 118.847 118.847 -0.000 -0.000 0.000
|
||||
300.0 118.782 118.782 118.782 -0.000 -0.000 0.000
|
||||
300.0 119.471 119.471 119.471 -0.000 -0.000 0.000
|
||||
300.0 119.366 119.366 119.366 -0.000 -0.000 0.000
|
||||
300.0 119.350 119.350 119.350 -0.000 -0.000 0.000
|
||||
300.0 119.339 119.339 119.339 -0.000 -0.000 0.000
|
||||
300.0 119.337 119.337 119.337 -0.000 -0.000 0.000
|
||||
```
|
||||
|
||||
### AlN-LDA
|
||||
|
||||
```bash
|
||||
% egrep '^\s+pair_distance' phono3py_disp.yaml|awk '{print $2}'|sort|uniq
|
||||
0.000000
|
||||
1.889907
|
||||
1.901086
|
||||
3.069402
|
||||
3.076914
|
||||
3.111000
|
||||
3.640065
|
||||
3.645881
|
||||
4.370303
|
||||
4.375582
|
||||
4.743307
|
||||
4.743308
|
||||
4.788360
|
||||
4.978000
|
||||
5.364501
|
||||
5.388410
|
||||
5.672503
|
||||
5.713938
|
||||
5.870162
|
||||
6.205027
|
||||
6.469591
|
||||
7.335901
|
||||
% cp phono3py_disp.yaml phono3py_disp.orig.yaml
|
||||
% for i in {2..21};do d=`grep pair_distance phono3py_disp.orig.yaml|awk '{print $2}'|sort|uniq|sed "${i}q;d"`; d=$((d+0.0001)); phono3py --cutoff-pair=$d -o $i -d --dim="3 3 2" -c POSCAR-unitcell; mv phono3py_disp.yaml phono3py_disp.$i.yaml; done
|
||||
% for i in {2..21};do grep number_of_pairs_in_cutoff phono3py_disp.$i.yaml;done
|
||||
number_of_pairs_in_cutoff: 72
|
||||
number_of_pairs_in_cutoff: 92
|
||||
number_of_pairs_in_cutoff: 196
|
||||
number_of_pairs_in_cutoff: 216
|
||||
number_of_pairs_in_cutoff: 312
|
||||
number_of_pairs_in_cutoff: 364
|
||||
number_of_pairs_in_cutoff: 460
|
||||
number_of_pairs_in_cutoff: 564
|
||||
number_of_pairs_in_cutoff: 660
|
||||
number_of_pairs_in_cutoff: 712
|
||||
number_of_pairs_in_cutoff: 764
|
||||
number_of_pairs_in_cutoff: 784
|
||||
number_of_pairs_in_cutoff: 888
|
||||
number_of_pairs_in_cutoff: 928
|
||||
number_of_pairs_in_cutoff: 980
|
||||
number_of_pairs_in_cutoff: 1020
|
||||
number_of_pairs_in_cutoff: 1116
|
||||
number_of_pairs_in_cutoff: 1156
|
||||
number_of_pairs_in_cutoff: 1208
|
||||
number_of_pairs_in_cutoff: 1248
|
||||
% for i in {2..21};do cp phono3py_disp.$i.yaml phono3py_disp.yaml; phono3py --mesh="13 13 9" --br --nac --io $i|tee std.$i.out; done
|
||||
% for i in {2..21};do egrep '^\s+300\.0' std.$i.out;done
|
||||
300.0 205.550 205.550 193.665 -0.000 -0.000 -0.000
|
||||
300.0 218.963 218.963 204.942 -0.000 -0.000 -0.000
|
||||
300.0 213.624 213.624 193.863 -0.000 -0.000 -0.000
|
||||
300.0 219.932 219.932 199.819 -0.000 -0.000 -0.000
|
||||
300.0 235.516 235.516 218.843 -0.000 -0.000 -0.000
|
||||
300.0 234.750 234.750 217.384 -0.000 -0.000 -0.000
|
||||
300.0 234.355 234.355 218.030 -0.000 -0.000 -0.000
|
||||
300.0 235.381 235.381 218.609 -0.000 -0.000 -0.000
|
||||
300.0 235.996 235.996 219.785 -0.000 -0.000 -0.000
|
||||
300.0 236.220 236.220 219.867 -0.000 -0.000 -0.000
|
||||
300.0 236.161 236.161 219.298 -0.000 -0.000 -0.000
|
||||
300.0 236.096 236.096 219.313 -0.000 -0.000 -0.000
|
||||
300.0 234.602 234.602 217.064 -0.000 -0.000 -0.000
|
||||
300.0 235.914 235.914 218.689 -0.000 -0.000 -0.000
|
||||
300.0 235.049 235.049 217.935 -0.000 -0.000 -0.000
|
||||
300.0 235.877 235.877 219.065 -0.000 -0.000 -0.000
|
||||
300.0 236.133 236.133 219.364 -0.000 -0.000 -0.000
|
||||
300.0 236.207 236.207 219.595 -0.000 -0.000 -0.000
|
||||
300.0 236.035 236.035 219.463 -0.000 -0.000 -0.000
|
||||
300.0 236.104 236.104 219.348 -0.000 -0.000 -0.000
|
||||
% for i in {2..21};do cp phono3py_disp.$i.yaml phono3py_disp.yaml; phono3py --mesh="13 13 9" --br --nac --io $i|tee std.$i.out; done|tee std.sym-$i.out; done
|
||||
% for i in {2..21};do egrep '^\s+300\.0' std.sym-$i.out;done
|
||||
300.0 232.964 232.964 216.333 0.000 -0.000 -0.000
|
||||
300.0 235.442 235.442 219.602 0.000 -0.000 -0.000
|
||||
300.0 235.521 235.521 217.767 0.000 -0.000 -0.000
|
||||
300.0 235.581 235.581 217.687 0.000 -0.000 -0.000
|
||||
300.0 236.837 236.837 219.933 0.000 -0.000 -0.000
|
||||
300.0 236.020 236.020 219.324 0.000 -0.000 -0.000
|
||||
300.0 235.482 235.482 218.633 0.000 -0.000 -0.000
|
||||
300.0 236.313 236.313 219.677 0.000 -0.000 -0.000
|
||||
300.0 236.308 236.308 219.955 0.000 -0.000 -0.000
|
||||
300.0 236.074 236.074 219.882 0.000 -0.000 -0.000
|
||||
300.0 235.520 235.520 219.450 0.000 -0.000 -0.000
|
||||
300.0 235.769 235.769 219.562 0.000 -0.000 -0.000
|
||||
300.0 235.441 235.441 219.168 0.000 -0.000 -0.000
|
||||
300.0 235.892 235.892 219.590 0.000 -0.000 -0.000
|
||||
300.0 235.509 235.509 219.167 0.000 -0.000 -0.000
|
||||
300.0 235.646 235.646 219.521 0.000 -0.000 -0.000
|
||||
300.0 235.783 235.783 219.311 0.000 -0.000 -0.000
|
||||
300.0 235.887 235.887 219.301 0.000 -0.000 -0.000
|
||||
300.0 235.642 235.642 219.348 0.000 -0.000 -0.000
|
||||
300.0 235.728 235.728 219.102 0.000 -0.000 -0.000
|
||||
```
|
|
@ -0,0 +1,345 @@
|
|||
(direct_solution)=
|
||||
# Direct solution of linearized phonon Boltzmann equation
|
||||
|
||||
This page explains how to use the direct solution of LBTE by
|
||||
[L. Chaput, Phys. Rev. Lett. 110, 265506 (2013)](https://doi.org/10.1103/PhysRevLett.110.265506) ({ref}`citation <citation_direct_solution_lbte>`).
|
||||
|
||||
```{contents}
|
||||
:depth: 2
|
||||
:local:
|
||||
```
|
||||
|
||||
## How to use
|
||||
|
||||
As written in the following sections, this calculation requires large
|
||||
memory space. When running multiple temperature points, simply the
|
||||
memory space needed is multiplied by the number of the temperature
|
||||
points. Therefore it is normally recommended to specify {ref}`--ts
|
||||
option <ts_option>`. An example to run with the direct solution of
|
||||
LBTE for `example/Si-PBEsol` is as follows:
|
||||
|
||||
```bash
|
||||
% phono3py --dim="2 2 2" --sym-fc -c POSCAR-unitcell
|
||||
...
|
||||
|
||||
% phono3py --dim="2 2 2" --pa="F" -c POSCAR-unitcell --mesh="11 11 11" --fc3 --fc2 --lbte --ts=300
|
||||
...
|
||||
|
||||
=================== End of collection of collisions ===================
|
||||
- Averaging collision matrix elements by phonon degeneracy [0.031s]
|
||||
- Making collision matrix symmetric (built-in) [0.000s]
|
||||
----------- Thermal conductivity (W/m-k) with tetrahedron method -----------
|
||||
Diagonalizing by lapacke dsyev... [0.111s]
|
||||
Calculating pseudo-inv with cutoff=1.0e-08 (np.dot) [0.001s]
|
||||
# T(K) xx yy zz yz xz xy
|
||||
300.0 111.588 111.588 111.588 0.000 0.000 -0.000
|
||||
(RTA) 109.009 109.009 109.009 0.000 0.000 -0.000
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
Thermal conductivity and related properties were written into
|
||||
"kappa-m111111.hdf5".
|
||||
Eigenvalues of collision matrix were written into "coleigs-m111111.hdf5"
|
||||
|
||||
...
|
||||
```
|
||||
|
||||
## Memory usage
|
||||
|
||||
The direct solution of LBTE needs diagonalization of a large collision
|
||||
matrix, which requires large memory space. This is the largest
|
||||
limitation of using this method. The memory size needed for one
|
||||
collision matrix at a temperature point is $(\text{number of
|
||||
irreducible grid points} \times \text{number of bands} \times 3)^2$
|
||||
for the symmetrized collision matrix.
|
||||
|
||||
<!---
|
||||
and $(\text{number of grid
|
||||
points} \times \text{number of bands})^2$ for the non-symmetrized
|
||||
collision matrix.
|
||||
--->
|
||||
|
||||
These collision matrices contain real values and are supposed to be
|
||||
64bit float symmetric matrices. During the diagonalization of each
|
||||
collision matrix with LAPACK `dsyev` solver, around 1.2 times more
|
||||
memory space is consumed in total.
|
||||
|
||||
When phono3py runs with {ref}`--wgp option <wgp_option>` together with
|
||||
`--lbte` option, estimated memory space needed for storing collision
|
||||
matrix is presented. An example for `example/Si-PBEsol` is as follows:
|
||||
|
||||
```
|
||||
% phono3py --dim="2 2 2" --pa="F" -c POSCAR-unitcell --mesh="40 40 40" --wgp --lbte
|
||||
...
|
||||
|
||||
Memory requirements:
|
||||
- Piece of collision matrix at each grid point, temp and sigma: 0.00 Gb
|
||||
- Full collision matrix at each temp and sigma: 7.15 Gb
|
||||
- Phonons: 0.04 Gb
|
||||
- Grid point information: 0.00 Gb
|
||||
- Phonon properties: 0.14 Gb
|
||||
|
||||
...
|
||||
```
|
||||
|
||||
With {ref}`--stp option <stp_option>`, estimated
|
||||
memory space needed for ph-ph interaction strengths is shown.
|
||||
|
||||
|
||||
## Work load distribution
|
||||
|
||||
The other difficulty compared with RTA is the workload
|
||||
distribution. Currently there are two ways to distribute the
|
||||
calculation: (1) Collision matrix is divided and the pieces are
|
||||
distributed into computing nodes. (2) Ph-ph interaction strengths at
|
||||
grid points are distributed into computing nodes. These two can not be
|
||||
mixed, so one of them has to be chosen. In either case, the
|
||||
distribution is done simply running a set of phono3py calculations
|
||||
over grid points and optionally band indices. The data computed on
|
||||
each computing node are stored in an hdf5 file. Increasing the
|
||||
calculation size, e.g., larger mesh numbers or larger number of atoms
|
||||
in the primitive cell, large files are created.
|
||||
|
||||
(distribution_colmat)=
|
||||
### Distribution of collision matrix
|
||||
|
||||
A full collision matrix is divided into pieces at grid points of
|
||||
irreducible part of Brillouin zone. Each piece is calculated
|
||||
independently from the other pieces. After finishing the calculations
|
||||
of these pieces, the full collision matrix is diagonzalized to obtain
|
||||
the thermal conductivity.
|
||||
|
||||
File size of Each piece of the collision matrix can be
|
||||
large. Therefore it is recommended to use {ref}`--ts option
|
||||
<ts_option>` to limit the number of temperature points, e.g.,
|
||||
`--ts="100 200 300 400 500`, depending on the memory size installed
|
||||
on each computing node. To write them into files,
|
||||
`--write-collision` option must be specified, and to read them from
|
||||
files, `--read-collision` option is used. These are similarly used
|
||||
as {ref}`--write-gamma <write_gamma_option>` and {ref}`--read-gamma <read_gamma_option>` options for RTA calculation as shown in
|
||||
{ref}`workload_distribution`.
|
||||
`--read-collision` option collects the pieces and make one full
|
||||
collision matrix, then starts to diagonalize it. This option requires
|
||||
one argument to specify an index to read the collision matrix at one
|
||||
temperature point, e.g., the collision matrix at 200K is read with
|
||||
`--read-collision=1` for the (pieces of) collision matrices created
|
||||
with `--ts="100 200 300 400 500"` (corresponding to 0, 1, 2, 3,
|
||||
4). The temperature (e.g. 200K) is also read from the file, so it is
|
||||
unnecessary to specify {ref}`--ts option <ts_option>` when reading.
|
||||
|
||||
The summary of the procedure is as follows:
|
||||
|
||||
1. Running at each grid point with {ref}`--gp <gp_option>` (or
|
||||
{ref}`--ga <ga_option>`) option and
|
||||
saving the piece of the collision matrix to an hdf5 file with
|
||||
`--write-collision` option. It is probably OK to calculate and
|
||||
store the pieces of the collision matrices at multiple temperatures
|
||||
though it depends on memory size of the computer node. This
|
||||
calculation has to be done at all irreducible grid points.
|
||||
2. Collecting and creating all necessary pieces of the collision
|
||||
matrix with `--read-collision=num` (`num`: index of
|
||||
temperature). By this one full collision matrix at the selected
|
||||
temperature is created and then diagonalized. An option `-o num`
|
||||
may be used together with `--read-collision` to distinguish the
|
||||
file names of the results at different temperatures.
|
||||
|
||||
Examples of command options are shown below using `Si-PBE` example.
|
||||
Irreducible grid point indices are obtained by {ref}`--wgp option<wgp_option>`:
|
||||
|
||||
```bash
|
||||
% phono3py --dim="2 2 2" --pa="F" -c POSCAR-unitcell --mesh="19 19 19" --lbte --wgp
|
||||
```
|
||||
|
||||
and the information is given in `ir_grid_points.yaml`. For
|
||||
distribution of collision matrix calculation
|
||||
(see also {ref}`workload_distribution`):
|
||||
|
||||
```
|
||||
% phono3py --dim="2 2 2" --pa="F" -c POSCAR-unitcell --mesh="19 19 19" --fc3 --fc2 --lbte --ts=300 --write-collision --gp="grid_point_numbers..."
|
||||
```
|
||||
|
||||
To collect distributed pieces of the collision matrix:
|
||||
|
||||
```bash
|
||||
% phono3py --dim="2 2 2" --pa="F" -c POSCAR-unitcell --mesh="19 19 19" --fc3 --fc2 --lbte --ts=300 --read-collision=0
|
||||
```
|
||||
|
||||
### Distribution of phonon-phonon interaction strengths
|
||||
|
||||
The distribution of pieces of collision matrix is straightforward and
|
||||
is recommended to use if the number of temperature points is
|
||||
small. However increasing data file size, network communication
|
||||
becomes to require long time to send the files from a master node to
|
||||
computation nodes. In this case, the distribution over ph-ph
|
||||
interaction strengths can be another choice. Since, without using
|
||||
{ref}`--full-pp option <full_pp_option>`, the tetrahedron method or
|
||||
smearing approach with {ref}`--sigma-cutoff option <sigma_cutoff_option>`
|
||||
results in the sparse ph-ph interaction
|
||||
strength data array, i.e., most of the elements are zero, the data
|
||||
size can be reduced by only storing non-zero elements. Not like the
|
||||
collision matrix, the ph-ph interaction strengths in phono3py are
|
||||
independent from temperature though it is not the case if the force
|
||||
constants provided are temperature dependent. Once
|
||||
stored, they are used to create the collision matrices at
|
||||
temperatures. Using `--write-pp` and `--read-pp`, they are written
|
||||
into and read from hdf5 files at grid points.
|
||||
|
||||
It is also recommended to use {ref}`--write-phonon option <write_phonon_option>` and {ref}`--read-phonon option <read_phonon_option>` to use identical phonon eigenvectors among the
|
||||
distributed nodes.
|
||||
|
||||
The summary of the procedure is as follows:
|
||||
|
||||
1. Running at each grid point with {ref}`--gp <gp_option>` (or
|
||||
{ref}`--ga <ga_option>`) option and storing the ph-ph interaction
|
||||
strengths to an hdf5 file with `--write-pp` option. This calculation
|
||||
has to be done at all irreducible grid points.
|
||||
2. Running with `--read-pp` option and without {ref}`--gp <gp_option>` (or
|
||||
{ref}`--ga <ga_option>`) option. By this one full collision matrix at the
|
||||
selected temperature is created and then diagonalized. An option
|
||||
`-o num` may be used together with `--read-collision` to
|
||||
distinguish the file names of the results at different
|
||||
temperatures.
|
||||
|
||||
Examples of command options are shown below using `Si-PBE` example.
|
||||
Irreducible grid point indices are obtained by {ref}`--wgp option<wgp_option>`
|
||||
|
||||
```bash
|
||||
% phono3py --dim="2 2 2" --pa="F" -c POSCAR-unitcell --mesh="19 19 19" --lbte --wgp
|
||||
```
|
||||
|
||||
and the grid point information is provided in
|
||||
`ir_grid_points.yaml`. All phonons on mesh grid points are saved
|
||||
by
|
||||
|
||||
```bash
|
||||
% phono3py --dim="2 2 2" --pa="F" -c POSCAR-unitcell --mesh="19 19 19" --fc2 --write-phonon
|
||||
```
|
||||
|
||||
For distribution of ph-ph interaction strength calculation (see also
|
||||
{ref}`workload_distribution`)
|
||||
|
||||
```bash
|
||||
% phono3py --dim="2 2 2" --pa="F" -c POSCAR-unitcell --mesh="19 19 19" --fc3 --fc2 --lbte --ts=300 --write-pp --gp="grid_point_numbers..." --read-phonon
|
||||
```
|
||||
|
||||
Here one temperature has to be specified but any one of temperatures
|
||||
is OK since ph-ph interaction strength computed here is assumed to be
|
||||
temperature independent. Then the computed ph-ph interaction strengths
|
||||
are read and used to compute collision matrix and lattice thermal
|
||||
conductivity at a temperature by
|
||||
|
||||
```bash
|
||||
% phono3py --dim="2 2 2" --pa="F" -c POSCAR-unitcell --mesh="19 19 19" --fc3 --fc2 --lbte --ts=300 --read-pp --read-phonon
|
||||
```
|
||||
|
||||
This last command is repeated at different temperatures to obtain the
|
||||
properties at multiple temperatures.
|
||||
|
||||
(diagonzalization_solver)=
|
||||
## Cutoff parameter of pseudo inversion
|
||||
|
||||
To achieve a pseudo inversion, a cutoff parameter is used to find null
|
||||
space, i.e., to select the nearly zero eigenvalues. The default cutoff
|
||||
value is `1e-8`, and this hopefully works in many cases. But if a
|
||||
collision matrix is numerically not very accurate, we may have to
|
||||
carefully choose the value by `--pinv-cutoff` option. It is safer to
|
||||
plot the absolute values of eigenvalues in log scale to see if there
|
||||
is clear gap between non-zero eigenvalue and nearly-zero eigenvalues.
|
||||
After running the direct solution of LBTE, `coleigs-mxxx.hdf5` is
|
||||
created. This contains the eigenvalues of the collision matrix (either
|
||||
symmetrized or non-symmetrized). The eigenvalues are plotted using
|
||||
`phono3py-coleigplot` in the phono3py package:
|
||||
|
||||
```bash
|
||||
% phono3py-coleigplot coleigs-mxxx.hdf5
|
||||
```
|
||||
|
||||
It is assumed that only one set of eigenvalues at a temperature point
|
||||
is contained.
|
||||
|
||||
```{figure} Si-coleigplot.png
|
||||
:width: 50%
|
||||
:name: coleigplot
|
||||
|
||||
Eigenvalues are plotted in log scale (Si-PBEsol exmaple with
|
||||
15x15x15 mesh). The number in x-axis is just the index where each
|
||||
eigenvalue is stored. Normally the eigenvalues are stored ascending
|
||||
order. The bule points show the positive values, and
|
||||
the red points show the negative values as positive values
|
||||
(absolute values) to be able to plot in log scale. In this plot, we
|
||||
can see the gap between $10^{-4}$ and $10^{-16}$, which
|
||||
is a good sign. The values whose absolute values are smaller than
|
||||
$10^{-8}$ are treated as 0 and those solutions are considered
|
||||
as null spaces.
|
||||
```
|
||||
|
||||
## Installation of diagonalization solvers with multithreaded BLAS
|
||||
|
||||
Multithreaded BLAS is recommended to use for the calculation of the
|
||||
direct solution of LBTE since the diagonalization of the collision
|
||||
matrix is computationally demanding. A few examples of how to install
|
||||
multithreded BLAS libraries are presented below.
|
||||
|
||||
### MKL linked scipy
|
||||
|
||||
Scipy (also numpy) has an interface to LAPACK dsyev
|
||||
(`scipy.linalg.lapack.dsyev`). An MKL LAPACK linked scipy (also
|
||||
numpy) gives very good computing performance and is easily obtained
|
||||
using the anaconda package manager. In this choice, usual installation
|
||||
of LAPACKE is necessary for running `dgesvd` and `zheev`. When
|
||||
using anaconda, installing OpenBLAS is the easiest way to do. See
|
||||
{ref}`install_openblas_lapacke`
|
||||
|
||||
### OpenBLAS or MKL via LAPACKE
|
||||
|
||||
Using LAPACKE via python C-API is implemented. By this, phono3py can
|
||||
use LAPACK dsyev. This uses smaller memory space than using MKL linked
|
||||
scipy. Practically there are two choices, OpenBLAS and MKL. For MKL,
|
||||
proper installatin of the MKL package is necessary. The MKL
|
||||
library installed obtained from anaconda can not be used.
|
||||
|
||||
#### OpenBLAS
|
||||
|
||||
Use of OpenBLAS is an easy choice if the anaconda package is used.
|
||||
See {ref}`install_openblas_lapacke`.
|
||||
|
||||
#### MKL
|
||||
|
||||
The BLAS multithread performance may be better in that in MKL. Using
|
||||
MKL-LAPACK via MKL-LAPACKE via python C-API is also implemented if the
|
||||
link is succeeded. See {ref}`install_mkl_lapacke`.
|
||||
|
||||
## Solver choice for diagonalization
|
||||
|
||||
For larger systems, diagonalization of collision matrix takes longest
|
||||
time and requires large memory space. Phono3py relies on LAPACK for
|
||||
the diagonalization and so the performance is dependent on the choice
|
||||
of the diagonalization solver.
|
||||
|
||||
Using multithreaded BLAS with many-core computing node, computing time
|
||||
may be well reduced and the calculation can finish in a realistic
|
||||
time. Currently scipy, numpy and LAPACKE can be used as the LAPACK
|
||||
wrapper in phono3py. Scipy and numpy distributed by anaconda are MKL
|
||||
linked, therefore MKL multithread BLAS is used through
|
||||
them. Multithreaded OpenBLAS is installed by conda and can be used via
|
||||
LAPACKE in phono3py. MKL LAPACK and BLAS are also able to be used via
|
||||
LAPACKE in phono3py with appropriate setting in `setup.py`.
|
||||
|
||||
Using `--pinv-solver=[number]`, one of the following solver is
|
||||
chosen:
|
||||
|
||||
1. Lapacke `dsyev`: Smaller memory consumption than `dsyevd`, but
|
||||
slower. This is the default solver when MKL LAPACKE is integrated or
|
||||
scipy is not installed.
|
||||
2. Lapacke `dsyevd`: Larger memory consumption than `dsyev`, but
|
||||
faster. This is not recommended because sometimes a wrong result is
|
||||
obtained.
|
||||
3. Numpy's `dsyevd` (`linalg.eigh`). This is not recommended
|
||||
because sometimes a wrong result is obtained.
|
||||
4. Scipy's `dsyev`: This is the default solver when scipy is
|
||||
installed and MKL LAPACKE is not integrated.
|
||||
5. Scipy's `dsyevd`. This is not recommended because sometimes a
|
||||
wrong result is obtained.
|
||||
|
||||
The solver choices other than `--pinv-solver=1` and
|
||||
`--pinv-solver=4` are dangerous and not recommend. They exist just
|
||||
for the tests.
|
|
@ -0,0 +1,16 @@
|
|||
(examples_link)=
|
||||
# Examples
|
||||
|
||||
```{contents}
|
||||
:depth: 2
|
||||
:local:
|
||||
```
|
||||
|
||||
Example files are found at
|
||||
https://github.com/phonopy/phono3py/tree/master/example. The same are
|
||||
found in the example directory of the phono3py package downloaded at
|
||||
https://github.com/phonopy/phono3py/archive/master.zip.
|
||||
|
||||
Examples of silicon with VASP and Pwscf as calculators are given in
|
||||
the `example` directory. An example using phono3py API is found in
|
||||
the `example/Si-PBEsol/Si.py` but the API document has not yet written.
|
|
@ -0,0 +1,29 @@
|
|||
(external_tools)=
|
||||
# External tools
|
||||
|
||||
Here external tools related to phono3py but supported by the groups out
|
||||
of the phono3py project are listed.
|
||||
|
||||
Each of the tools is not supported by the phono3py project because of
|
||||
the difficulties of the maintenance and the test by main developers
|
||||
of phono3py under current style of phono3py development. However
|
||||
useful tools should be known. If developers want to use here to notify
|
||||
their tools, please contact via the phonopy mailing list.
|
||||
|
||||
## Phono3py-Power-Tools
|
||||
|
||||
Phono3py-Power-Tools is a collection of codes and scripts from the Skelton group for Phono(3)py "power users", and includes additional tools for data analysis and plotting.
|
||||
|
||||
https://github.com/skelton-group/Phono3py-Power-Tools
|
||||
|
||||
|
||||
## Kinetic Collective Model
|
||||
|
||||
The Kinetic Collective Model (KCM), developed by the nanoTransport
|
||||
group of the Universitat Autònoma de Barcelona, is a generalization of
|
||||
the Guyer and Krumhansl solution of the phonon Boltzmann Transport
|
||||
Equation. KCM allows to compute the thermal conductivity of
|
||||
semiconductors in a fast and low memory way from first principles
|
||||
calculations.
|
||||
|
||||
https://physta.github.io/
|
|
@ -0,0 +1,337 @@
|
|||
(hdf5_howto)=
|
||||
# How to read the results stored in hdf5 files
|
||||
|
||||
```{contents}
|
||||
:depth: 3
|
||||
:local:
|
||||
```
|
||||
|
||||
## How to use HDF5 python library
|
||||
|
||||
It is assumed that `python-h5py` is installed on the computer you
|
||||
interactively use. In the following, how to see the contents of
|
||||
`.hdf5` files in the interactive mode of Python. The basic usage of
|
||||
reading `.hdf5` files using `h5py` is found at [here](http://docs.h5py.org/en/latest/high/dataset.html#reading-writing-data>).
|
||||
Usually for running interactive python, `ipython` is recommended to
|
||||
use but not the plain python. In the following example, an MgO result
|
||||
of thermal conductivity calculation is loaded and thermal conductivity
|
||||
tensor at 300 K is watched.
|
||||
|
||||
```bash
|
||||
In [1]: import h5py
|
||||
|
||||
In [2]: f = h5py.File("kappa-m111111.hdf5")
|
||||
|
||||
In [3]: list(f)
|
||||
Out[3]:
|
||||
['frequency',
|
||||
'gamma',
|
||||
'group_velocity',
|
||||
'gv_by_gv',
|
||||
'heat_capacity',
|
||||
'kappa',
|
||||
'kappa_unit_conversion',
|
||||
'mesh',
|
||||
'mode_kappa',
|
||||
'qpoint',
|
||||
'temperature',
|
||||
'weight']
|
||||
|
||||
In [4]: f['kappa'].shape
|
||||
Out[4]: (101, 6)
|
||||
|
||||
In [5]: f['kappa'][:]
|
||||
Out[5]:
|
||||
array([[ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
|
||||
0.00000000e+00, 0.00000000e+00, 0.00000000e+00],
|
||||
[ 2.11702476e+05, 2.11702476e+05, 2.11702476e+05,
|
||||
6.64531043e-13, 6.92618921e-13, -1.34727352e-12],
|
||||
[ 3.85304024e+04, 3.85304024e+04, 3.85304024e+04,
|
||||
3.52531412e-13, 3.72706406e-13, -7.07290889e-13],
|
||||
...,
|
||||
[ 2.95769356e+01, 2.95769356e+01, 2.95769356e+01,
|
||||
3.01803322e-16, 3.21661793e-16, -6.05271364e-16],
|
||||
[ 2.92709650e+01, 2.92709650e+01, 2.92709650e+01,
|
||||
2.98674274e-16, 3.18330655e-16, -5.98999091e-16],
|
||||
[ 2.89713297e+01, 2.89713297e+01, 2.89713297e+01,
|
||||
2.95610215e-16, 3.15068595e-16, -5.92857003e-16]])
|
||||
|
||||
In [6]: f['temperature'][:]
|
||||
Out[6]:
|
||||
array([ 0., 10., 20., 30., 40., 50., 60., 70.,
|
||||
80., 90., 100., 110., 120., 130., 140., 150.,
|
||||
160., 170., 180., 190., 200., 210., 220., 230.,
|
||||
240., 250., 260., 270., 280., 290., 300., 310.,
|
||||
320., 330., 340., 350., 360., 370., 380., 390.,
|
||||
400., 410., 420., 430., 440., 450., 460., 470.,
|
||||
480., 490., 500., 510., 520., 530., 540., 550.,
|
||||
560., 570., 580., 590., 600., 610., 620., 630.,
|
||||
640., 650., 660., 670., 680., 690., 700., 710.,
|
||||
720., 730., 740., 750., 760., 770., 780., 790.,
|
||||
800., 810., 820., 830., 840., 850., 860., 870.,
|
||||
880., 890., 900., 910., 920., 930., 940., 950.,
|
||||
960., 970., 980., 990., 1000.])
|
||||
|
||||
In [7]: f['kappa'][30]
|
||||
Out[7]:
|
||||
array([ 1.09089896e+02, 1.09089896e+02, 1.09089896e+02,
|
||||
1.12480528e-15, 1.19318349e-15, -2.25126057e-15])
|
||||
|
||||
In [8]: f['mode_kappa'][30, :, :, :].sum(axis=0).sum(axis=0) / weight.sum()
|
||||
Out[8]:
|
||||
array([ 1.09089896e+02, 1.09089896e+02, 1.09089896e+02,
|
||||
1.12480528e-15, 1.19318349e-15, -2.25126057e-15])
|
||||
|
||||
In [9]: g = f['gamma'][30]
|
||||
|
||||
In [10]: import numpy as np
|
||||
|
||||
In [11]: g = np.where(g > 0, g, -1)
|
||||
|
||||
In [12]: lifetime = np.where(g > 0, 1.0 / (2 * 2 * np.pi * g), 0)
|
||||
```
|
||||
|
||||
(kappa_hdf5_file)=
|
||||
## Details of `kappa-*.hdf5` file
|
||||
|
||||
Files name, e.g. `kappa-m323220.hdf5`, is determined by some
|
||||
specific options. `mxxx`, show the numbers of sampling
|
||||
mesh. `sxxx` and `gxxx` appear optionally. `sxxx` gives the
|
||||
smearing width in the smearing method for Brillouin zone integration
|
||||
for phonon lifetime, and `gxxx` denotes the grid number. Using the
|
||||
command option of `-o`, the file name can be modified slightly. For
|
||||
example `-o nac` gives `kappa-m323220.nac.hdf5` to
|
||||
memorize the option `--nac` was used.
|
||||
|
||||
Currently `kappa-*.hdf5` file (not for the specific grid points)
|
||||
contains the properties shown below.
|
||||
|
||||
### mesh
|
||||
|
||||
(Versions 1.10.11 or later)
|
||||
|
||||
The numbers of mesh points for reciprocal space sampling along
|
||||
reciprocal axes, $a^*, b^*, c^*$.
|
||||
|
||||
### frequency
|
||||
|
||||
Phonon frequencies. The physical unit is THz, where THz
|
||||
is in the ordinal frequency not the angular frequency.
|
||||
|
||||
The array shape is (irreducible q-point, phonon band).
|
||||
|
||||
(kappa_hdf5_file_gamma)=
|
||||
### gamma
|
||||
|
||||
Imaginary part of self energy. The physical unit is THz, where THz
|
||||
is in the ordinal frequency not the angular frequency.
|
||||
|
||||
The array shape for all grid-points (irreducible q-points) is
|
||||
(temperature, irreducible q-point, phonon band).
|
||||
|
||||
The array shape for a specific grid-point is
|
||||
(temperature, phonon band).
|
||||
|
||||
Phonon lifetime ($\tau_\lambda=1/2\Gamma_\lambda(\omega_\lambda)$) may
|
||||
be estimated from `gamma`. $2\pi$ has to be multiplied with
|
||||
`gamma` values in the hdf5 file to convert the unit of ordinal
|
||||
frequency to angular frequency. Zeros in `gamma` values mean that
|
||||
those elements were not calculated such as for three acoustic modes at
|
||||
$\Gamma$ point. The below is the copy-and-paste from the
|
||||
previous section to show how to obtain phonon lifetime in pico
|
||||
second:
|
||||
|
||||
```bash
|
||||
In [8]: g = f['gamma'][30]
|
||||
|
||||
In [9]: import numpy as np
|
||||
|
||||
In [10]: g = np.where(g > 0, g, -1)
|
||||
|
||||
In [11]: lifetime = np.where(g > 0, 1.0 / (2 * 2 * np.pi * g), 0)
|
||||
```
|
||||
|
||||
### gamma_isotope
|
||||
|
||||
Isotope scattering of $1/2\tau^\mathrm{iso}_\lambda$.
|
||||
The physical unit is same as that of gamma.
|
||||
|
||||
The array shape is same as that of frequency.
|
||||
|
||||
### group_velocity
|
||||
|
||||
Phonon group velocity, $\nabla_\mathbf{q}\omega_\lambda$. The
|
||||
physical unit is $\text{THz}\cdot\text{Angstrom}$, where THz
|
||||
is in the ordinal frequency not the angular frequency.
|
||||
|
||||
The array shape is (irreducible q-point, phonon band, 3 = Cartesian coordinates).
|
||||
|
||||
### heat_capacity
|
||||
|
||||
Mode-heat-capacity defined by
|
||||
|
||||
$$
|
||||
C_\lambda = k_\mathrm{B}
|
||||
\left(\frac{\hbar\omega_\lambda}{k_\mathrm{B} T} \right)^2
|
||||
\frac{\exp(\hbar\omega_\lambda/k_\mathrm{B}
|
||||
T)}{[\exp(\hbar\omega_\lambda/k_\mathrm{B} T)-1]^2}.
|
||||
$$
|
||||
|
||||
The physical unit is eV/K.
|
||||
|
||||
The array shape is (temperature, irreducible q-point, phonon band).
|
||||
|
||||
(output_kappa)=
|
||||
### kappa
|
||||
|
||||
Thermal conductivity tensor. The physical unit is W/m-K.
|
||||
|
||||
The array shape is (temperature, 6 = (xx, yy, zz, yz, xz, xy)).
|
||||
|
||||
(output_mode_kappa)=
|
||||
### mode-kappa
|
||||
|
||||
Thermal conductivity tensors at k-stars (${}^*\mathbf{k}$):
|
||||
|
||||
$$
|
||||
\sum_{\mathbf{q} \in {}^*\mathbf{k}} \kappa_{\mathbf{q}j}.
|
||||
$$
|
||||
|
||||
The sum of this over ${}^*\mathbf{k}$ corresponding to
|
||||
irreducible q-points divided by number of grid points gives
|
||||
$\kappa$ ({ref}`output_kappa`), e.g.,:
|
||||
|
||||
```python
|
||||
kappa_xx_at_index_30 = mode_kappa[30, :, :, 0].sum()/ weight.sum()
|
||||
```
|
||||
|
||||
Be careful that until version 1.12.7, mode-kappa values were divided
|
||||
by number of grid points.
|
||||
|
||||
The physical unit is W/m-K. Each tensor element is the sum of tensor
|
||||
elements on the members of ${}^*\mathbf{k}$, i.e., symmetrically
|
||||
equivalent q-points by crystallographic point group and time reversal
|
||||
symmetry.
|
||||
|
||||
The array shape is (temperature, irreducible q-point, phonon band, 6 =
|
||||
(xx, yy, zz, yz, xz, xy)).
|
||||
|
||||
### gv_by_gv
|
||||
|
||||
Outer products of group velocities for k-stars
|
||||
(${}^*\mathbf{k}$) for each irreducible q-point and phonon band
|
||||
($j$):
|
||||
|
||||
$$
|
||||
\sum_{\mathbf{q} \in {}^*\mathbf{k}} \mathbf{v}_{\mathbf{q}j} \otimes
|
||||
\mathbf{v}_{\mathbf{q}j}.
|
||||
$$
|
||||
|
||||
The physical unit is
|
||||
$\text{THz}^2\cdot\text{Angstrom}^2$, where THz is in the
|
||||
ordinal frequency not the angular frequency.
|
||||
|
||||
The array shape is (irreducible q-point, phonon band, 6 = (xx, yy, zz,
|
||||
yz, xz, xy)).
|
||||
|
||||
### q-point
|
||||
|
||||
Irreducible q-points in reduced coordinates.
|
||||
|
||||
The array shape is (irreducible q-point, 3 = reduced
|
||||
coordinates in reciprocal space).
|
||||
|
||||
### temperature
|
||||
|
||||
Temperatures where thermal conductivities are calculated. The physical
|
||||
unit is K.
|
||||
|
||||
### weight
|
||||
|
||||
Weights corresponding to irreducible q-points. Sum of weights equals to
|
||||
the number of mesh grid points.
|
||||
|
||||
### ave_pp
|
||||
|
||||
Averaged phonon-phonon interaction in $\text{eV}^2,
|
||||
$P_{\mathbf{q}j}$:
|
||||
|
||||
$$
|
||||
P_{\mathbf{q}j} = \frac{1}{(3n_\mathrm{a})^2} \sum_{\lambda'\lambda''}
|
||||
|\Phi_{\lambda\lambda'\lambda''}|^2.
|
||||
$$
|
||||
|
||||
This is not going to be calculated in the RTA thermal coductivity
|
||||
calculation mode by default. To calculate this, `--full_pp` option
|
||||
has to be specified (see {ref}`full_pp_option`).
|
||||
|
||||
### kappa_unit_conversion
|
||||
|
||||
This is used to convert the physical unit of lattice thermal
|
||||
conductivity made of `heat_capacity`, `group_velocity`, and
|
||||
`gamma`, to W/m-K. In the single mode relaxation time (SMRT) method,
|
||||
a mode contribution to the lattice thermal conductivity is given by
|
||||
|
||||
$$
|
||||
\kappa_\lambda = \frac{1}{V_0} C_\lambda \mathbf{v}_\lambda \otimes
|
||||
\mathbf{v}_\lambda \tau_\lambda^{\mathrm{SMRT}}.
|
||||
$$
|
||||
|
||||
For example, $\kappa_{\lambda,{xx}}$ is calculated by:
|
||||
|
||||
```badh
|
||||
In [1]: import h5py
|
||||
|
||||
In [2]: f = h5py.File("kappa-m111111.hdf5")
|
||||
|
||||
In [3]: kappa_unit_conversion = f['kappa_unit_conversion'][()]
|
||||
|
||||
In [4]: weight = f['weight'][:]
|
||||
|
||||
In [5]: heat_capacity = f['heat_capacity'][:]
|
||||
|
||||
In [6]: gv_by_gv = f['gv_by_gv'][:]
|
||||
|
||||
In [7]: gamma = f['gamma'][:]
|
||||
|
||||
In [8]: kappa_unit_conversion * heat_capacity[30, 2, 0] * gv_by_gv[2, 0] / (2 * gamma[30, 2, 0])
|
||||
|
||||
Out[8]:
|
||||
array([ 1.02050241e+03, 1.02050241e+03, 1.02050241e+03,
|
||||
4.40486382e-15, 0.00000000e+00, -4.40486382e-15])
|
||||
|
||||
In [9]: f['mode_kappa'][30, 2, 0]
|
||||
Out[9]:
|
||||
array([ 1.02050201e+03, 1.02050201e+03, 1.02050201e+03,
|
||||
4.40486209e-15, 0.00000000e+00, -4.40486209e-15])
|
||||
```
|
||||
|
||||
## How to know grid point index number corresponding to grid address
|
||||
|
||||
Runngin with `--write-gamma`, hdf5 files are written out with file names
|
||||
such as `kappa-m202020-g4448.hdf5`. You may want to know the grid point
|
||||
index number with given grid address. This is done as follows:
|
||||
|
||||
```bash
|
||||
In [1]: import phono3py
|
||||
|
||||
In [2]: ph3 = phono3py.load("phono3py_disp.yaml")
|
||||
|
||||
In [3]: ph3.mesh_numbers = [20, 20, 20]
|
||||
|
||||
In [4]: ph3.grid.get_indices_from_addresses([0, 10, 10])
|
||||
Out[4]: 4448
|
||||
```
|
||||
|
||||
This index number is different between phono3py version 1.x and 2.x.
|
||||
To get the number corresponding to the phono3py version 1.x,
|
||||
`store_dense_gp_map=False` should be specified in `phono3py.load`,
|
||||
|
||||
```bash
|
||||
In [5]: ph3 = phono3py.load("phono3py_disp.yaml", store_dense_gp_map=False)
|
||||
|
||||
In [6]: ph3.mesh_numbers = [20, 20, 20]
|
||||
|
||||
In [7]: ph3.grid.get_indices_from_addresses([0, 10, 10])
|
||||
Out[7]: 4200
|
||||
```
|
|
@ -0,0 +1,85 @@
|
|||
# Welcome to phono3py
|
||||
|
||||
This software calculates phonon-phonon interaction and related
|
||||
properties using the supercell approach. For example, the following
|
||||
physical properties are obtained:
|
||||
|
||||
- Lattice thermal conductivity (RTA and {ref}`direct solution of LBTE<direct_solution>`)
|
||||
- Phonon lifetime/linewidth
|
||||
- Imaginary part of self energy
|
||||
- Joint density of states (JDOS) and weighted-JDOS
|
||||
|
||||
Some papers that may introduce phono3py well:
|
||||
|
||||
- Theoretical background is summarized in this paper:
|
||||
http://dx.doi.org/10.1103/PhysRevB.91.094306 (arxiv
|
||||
http://arxiv.org/abs/1501.00691).
|
||||
- Introduction to phono3py application:
|
||||
https://doi.org/10.1103/PhysRevB.97.224306 (open access).
|
||||
|
||||
The source code is found at https://github.com/phonopy/phono3py
|
||||
(BSD-3-Clause). The code is written in Python extended with C and
|
||||
written as:
|
||||
|
||||
- Works at least on Linux systems and MacOS easily.
|
||||
- Each calculation is distributed over CPU-cores by OpenMP.
|
||||
- Phonon lifetime (or ph-ph collision) calculations of respective
|
||||
phonon modes can be executed as independent calculations.
|
||||
- Thermal conductivity calculations are highly efficiently
|
||||
distributed over nodes (see {ref}`workload_distribution`).
|
||||
- User interfaces for {ref}`VASP <vasp_interface>`,
|
||||
{ref}`QE (pw) <qe_interface>`, {ref}`CRYSTAL <crystal_interface>`,
|
||||
{ref}`TURBOMOLE <turbomole_interface>`, and Abinit
|
||||
are built in (see {ref}`calculator_interfaces`).
|
||||
- API is prepared to operate phono3py from Python ([example](https://github.com/phonopy/phono3py/blob/master/example/Si-PBEsol/Si.py)).
|
||||
|
||||
Some tools to analyze the calculated results are prepared (see
|
||||
{ref}`auxiliary_tools`).
|
||||
|
||||
```{image} Si-kaccum.png
|
||||
:width: 20%
|
||||
```
|
||||
```{image} Si-kaccum-MFP.png
|
||||
:width: 20%
|
||||
```
|
||||
```{image} Si-kdeplot.png
|
||||
:width: 22%
|
||||
```
|
||||
|
||||
|
||||
## Documentation
|
||||
|
||||
```{toctree}
|
||||
:maxdepth: 1
|
||||
install
|
||||
examples
|
||||
Interfaces to calculators (VASP, QE, CRYSTAL, Abinit, TURBOMOLE) <interfaces>
|
||||
command-options
|
||||
output-files
|
||||
hdf5_howto
|
||||
auxiliary-tools
|
||||
direct-solution
|
||||
workload-distribution
|
||||
cutoff-pair
|
||||
external-tools
|
||||
tips
|
||||
citation
|
||||
changelog
|
||||
```
|
||||
|
||||
## Mailing list
|
||||
|
||||
For questions, bug reports, and comments, please visit following
|
||||
mailing list:
|
||||
|
||||
https://lists.sourceforge.net/lists/listinfo/phonopy-users
|
||||
|
||||
Message body including attached files has to be smaller than 300 KB.
|
||||
|
||||
## License
|
||||
|
||||
BSD-3-Clause (New BSD)
|
||||
|
||||
## Contact
|
||||
|
||||
- Author: [Atsushi Togo](http://atztogo.github.io/)
|
|
@ -0,0 +1,333 @@
|
|||
(install)=
|
||||
# Installation
|
||||
|
||||
The detailed installation processes for different environments
|
||||
are described below. The easiest installation with a good computation
|
||||
performance is achieved by using the phono3py conda package (see
|
||||
{ref}`install_an_example`).
|
||||
|
||||
```{contents}
|
||||
:depth: 3
|
||||
:local:
|
||||
```
|
||||
|
||||
Installation of phonopy before the installation of phono3py is
|
||||
required. See how to install phonopy at
|
||||
https://phonopy.github.io/phonopy/install.html. Phono3py relies on
|
||||
phonopy, so please use the latest release of phonopy when installing
|
||||
phono3py.
|
||||
|
||||
## Installation using conda
|
||||
|
||||
Using conda is the easiest way for installation of phono3py if you are
|
||||
using x86-64 linux system or macOS. These packages are made and
|
||||
maintained by Jan Janssen. The installation is simply done by:
|
||||
|
||||
```bash
|
||||
% conda install -c conda-forge phono3py
|
||||
```
|
||||
|
||||
All dependent packages should be installed.
|
||||
|
||||
## Installation using pip is not recommended
|
||||
|
||||
PyPI packages are prepared for phonopy and phono3py releases. When
|
||||
installing with PyPI, `setup.py` is executed locally to compile the
|
||||
part of the code written in C, so a few libraries such as
|
||||
lapacke must exist in the system. Those necessary libraries are
|
||||
explained in the next section.
|
||||
|
||||
## Installation from source code
|
||||
|
||||
When installing phono3py using `setup.py` from the source code, a
|
||||
few libraries are required before running `setup.py` script.
|
||||
|
||||
For phono3py, OpenMP library is necessary for the multithreding
|
||||
support. In additon, BLAS, LAPACK, and LAPACKE are also needed. These
|
||||
packages are probably installed using the package manager for each OS
|
||||
or conda.
|
||||
|
||||
When using gcc to compile phono3py, `libgomp1` is necessary to
|
||||
enable OpenMP multithreading support. This library is probably
|
||||
installed already in your system. If you don't have it and you use
|
||||
Ubuntu linux, it is installed by:
|
||||
|
||||
```bash
|
||||
% sudo apt-get install libgomp1
|
||||
```
|
||||
|
||||
(install_lapacke)=
|
||||
### Installation of LAPACKE
|
||||
|
||||
LAPACK library is used in a few parts of the code to diagonalize
|
||||
matrices. LAPACK*E* is the C-wrapper of LAPACK and LAPACK relies on
|
||||
BLAS. Both single-thread or multithread BLAS can be
|
||||
used in phono3py. In the following, multiple different ways of
|
||||
installation of LAPACKE are explained.
|
||||
|
||||
(install_mkl_lapacke)=
|
||||
### MKL LAPACKE (with multithread BLAS)
|
||||
|
||||
Phono3py can be compiled with MKL for using LAPACKE. If `setup.py`
|
||||
finds the file named `setup_mkl.py`, the contents of `setup_mkl.py` is read
|
||||
and those are included in the compilation setting. For example, the
|
||||
following setting prepared as `setup_mkl.py` seems working on Ubuntu 16.04
|
||||
system:
|
||||
|
||||
```python
|
||||
intel_root = "/opt/intel/composer_xe_2015.7.235"
|
||||
mkl_root = "%s/mkl" % intel_root
|
||||
compiler_root = "%s/compiler" % intel_root
|
||||
|
||||
mkl_extra_link_args_lapacke = ['-L%s/lib/intel64' % mkl_root,
|
||||
'-lmkl_rt']
|
||||
mkl_extra_link_args_lapacke += ['-L%s/lib/intel64' % compiler_root,
|
||||
'-lsvml',
|
||||
'-liomp5',
|
||||
'-limf',
|
||||
'-lpthread']
|
||||
mkl_include_dirs_lapacke = ["%s/include" % mkl_root]
|
||||
```
|
||||
|
||||
This setting considers to use `icc` but it may be compiled with
|
||||
`gcc`. With `gcc`, the compiler related setting shown above (i.e.,
|
||||
around `compiler_root`) is unnecessary. To achieve this
|
||||
installation, not only the MKL library but also the header file are
|
||||
necessary. The libraries are linked dynamically, so in most of the
|
||||
cases, `LD_LIBRARY_PATH` environment variable has to be correctly
|
||||
specified to let phono3py find those libraries.
|
||||
|
||||
(install_openblas_lapacke)=
|
||||
### OpenBLAS provided by conda (with multithread BLAS)
|
||||
|
||||
The installtion of LAPACKE is easy by conda. It is:
|
||||
|
||||
```bash
|
||||
% conda install -c conda-forge openblas libgfortran
|
||||
```
|
||||
|
||||
The recent change of openblas package provided from anaconda makes to
|
||||
install nomkl, i.e., numpy and scipy with Intel MKL cannot be used
|
||||
together with openblas. At this moment, this is avoided to install
|
||||
openblas from conda-forge channel. If the python libraries are not yet
|
||||
installed by
|
||||
|
||||
```bash
|
||||
% conda install -c conda-forge numpy scipy h5py pyyaml matplotlib
|
||||
```
|
||||
|
||||
Note that using hdf5 files on NFS mouted file system, you may have to
|
||||
disable file locking by setting
|
||||
|
||||
```bash
|
||||
export HDF5_USE_FILE_LOCKING=FALSE
|
||||
```
|
||||
|
||||
This openblas package contains BLAS, LAPACK, and LAPACKE. When this
|
||||
`libopenblas` is linked and the `else` statement of the C macro
|
||||
definition section in `setup.py` is executed, the following macro
|
||||
are activated:
|
||||
|
||||
```python
|
||||
if use_setuptools:
|
||||
extra_compile_args += ['-DMULTITHREADED_BLAS']
|
||||
else:
|
||||
define_macros += [('MULTITHREADED_BLAS', None)]
|
||||
```
|
||||
|
||||
Libraries or headers are not found at the build by `setup.py`, the
|
||||
following setting may be of the help:
|
||||
|
||||
```python
|
||||
extra_link_args_lapacke += ['-lopenblas', '-lgfortran']
|
||||
include_dirs_lapacke += [
|
||||
os.path.join(os.environ['CONDA_PREFIX'], 'include'), ]
|
||||
```
|
||||
|
||||
### Netlib LAPACKE provided by Ubuntu package manager (with single-thread BLAS)
|
||||
|
||||
In the versions of Ubuntu-12.10 or later, LAPACKE
|
||||
(http://www.netlib.org/lapack/lapacke.html) can be installed from the
|
||||
package manager (`liblapacke` and `liblapacke-dev`):
|
||||
|
||||
```bash
|
||||
% sudo apt-get install liblapack-dev liblapacke-dev
|
||||
```
|
||||
|
||||
### Compiling Netlib LAPACKE
|
||||
|
||||
The compilation procedure is found at the LAPACKE web site. After
|
||||
creating the LAPACKE library, `liblapacke.a` (or the dynamic link
|
||||
library), `setup.py` must be properly modified to link it. As an
|
||||
example, the procedure of compiling LAPACKE is shown below.
|
||||
|
||||
```bash
|
||||
% tar xvfz lapack-3.6.0.tgz
|
||||
% cd lapack-3.6.0
|
||||
% cp make.inc.example make.inc
|
||||
% make lapackelib
|
||||
```
|
||||
|
||||
BLAS, LAPACK, and LAPACKE, these all may have to be compiled
|
||||
with `-fPIC` option to use it with python.
|
||||
|
||||
## Building using setup.py
|
||||
|
||||
If package installation is not possible or you want to compile with
|
||||
special compiler or special options, phono3py is built using
|
||||
setup.py. In this case, manual modification of `setup.py` may be
|
||||
needed.
|
||||
|
||||
1. Download the latest source code at
|
||||
|
||||
https://pypi.python.org/pypi/phono3py
|
||||
|
||||
2. and extract it:
|
||||
|
||||
```
|
||||
% tar xvfz phono3py-1.11.13.39.tar.gz
|
||||
% cd phono3py-1.11.13.39
|
||||
```
|
||||
|
||||
The other option is using git to clone the phonopy repository from github:
|
||||
|
||||
```
|
||||
% git clone https://github.com/phonopy/phono3py.git
|
||||
% cd phono3py
|
||||
```
|
||||
|
||||
2. Set up C-libraries for python C-API and python codes. This can be
|
||||
done as follows:
|
||||
|
||||
Run `setup.py` script via pip:
|
||||
|
||||
```
|
||||
% pip install -e .
|
||||
```
|
||||
|
||||
3. Set :envvar:`$PATH` and :envvar:`$PYTHONPATH`
|
||||
|
||||
`PATH` and `PYTHONPATH` are set in the same way as phonopy, see
|
||||
https://phonopy.github.io/phonopy/install.html#building-using-setup-py.
|
||||
|
||||
(install_an_example)=
|
||||
## Installation instruction of latest development version of phono3py
|
||||
|
||||
When using conda, `PYTHONPATH` should not be set if possible because
|
||||
potentially wrong python libraries can be imported.
|
||||
|
||||
This installation instruction supposes linux x86-64 environment.
|
||||
|
||||
1. Download miniconda package
|
||||
|
||||
Miniconda is downloaded at https://conda.io/miniconda.html.
|
||||
|
||||
For usual 64-bit Linux system:
|
||||
|
||||
```bash
|
||||
% wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda.sh
|
||||
```
|
||||
|
||||
For macOS:
|
||||
|
||||
```bash
|
||||
% wget https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-x86_64.sh -O ~/miniconda.sh
|
||||
```
|
||||
|
||||
The installation is made by
|
||||
|
||||
```bash
|
||||
% bash ~/miniconda.sh -b -p $HOME/miniconda
|
||||
% export PATH="$HOME/miniconda/bin:$PATH"
|
||||
```
|
||||
|
||||
The detailed installation instruction is found at
|
||||
https://conda.io/projects/conda/en/latest/user-guide/install/index.html. To
|
||||
use the conda-forge channel as the default one, `~/.condarc` may be
|
||||
written following the conda-forge official documentation
|
||||
(https://conda-forge.org/docs/user/tipsandtricks.html).
|
||||
|
||||
2. Initialization of conda and setup of conda environment
|
||||
|
||||
```bash
|
||||
% conda init <your_shell>
|
||||
```
|
||||
|
||||
`<your_shell>` is often `bash` but may be something else. It is
|
||||
important that after running `conda init`, your shell is needed
|
||||
to be closed and restarted. See more information by `conda init
|
||||
--help`.
|
||||
|
||||
Then conda allows to make conda installation isolated by using conda's
|
||||
virtual environment.
|
||||
|
||||
```bash
|
||||
% conda create -n phono3py -c conda-forge python=3.8
|
||||
% conda activate phono3py
|
||||
```
|
||||
|
||||
Use of this is strongly recommended, otherwise proper settings of
|
||||
`CONDA_PREFIX`, `C_INCLUDE_PATH`, and `LD_LIBRARY_PATH` will
|
||||
be necessary.
|
||||
|
||||
2. Install necessary conda packages for phono3py
|
||||
|
||||
```bash
|
||||
% conda install -c conda-forge numpy scipy h5py pyyaml matplotlib-base compilers "libblas=*=*mkl" spglib mkl-include
|
||||
```
|
||||
|
||||
Note that using hdf5 files on NFS mouted file system, you may have to
|
||||
disable file locking by setting
|
||||
|
||||
```bash
|
||||
export HDF5_USE_FILE_LOCKING=FALSE
|
||||
```
|
||||
|
||||
Install the latest phonopy and phono3py from github sources:
|
||||
|
||||
```bash
|
||||
% mkdir dev
|
||||
% cd dev
|
||||
% git clone https://github.com/phonopy/phonopy.git
|
||||
% git clone https://github.com/phonopy/phono3py.git
|
||||
% cd phonopy
|
||||
% git checkout develop
|
||||
% python setup.py build
|
||||
% pip install -e .
|
||||
% cd ../phono3py
|
||||
% git checkout develop
|
||||
% python setup.py build
|
||||
% pip install -e .
|
||||
```
|
||||
|
||||
The conda packages dependency can often change and this recipe may
|
||||
not work properly. So if you find this instruction doesn't work, it
|
||||
is very appreciated if letting us know it in the phonopy mailing
|
||||
list.
|
||||
|
||||
## Multithreading and its controlling by C macro
|
||||
|
||||
Phono3py uses multithreading concurrency in two ways. One is that
|
||||
written in the code with OpenMP `parallel for`. The other is
|
||||
achieved by using multithreaded BLAS. The BLAS multithreading is
|
||||
depending on which BLAS library is chosen by users and the number of
|
||||
threads to be used may be controlled by the library's environment
|
||||
variables (e.g., `OPENBLAS_NUM_THREADS` or `MKL_NUM_THREADS`). In
|
||||
the phono3py C code, these two are written in a nested way, but of
|
||||
course the nested use of multiple multithreadings has to be
|
||||
avoided. The outer loop of the nesting is done by the OpenMP
|
||||
`parallel for` code. The inner loop calls LAPACKE functions and then
|
||||
the LAPACKE functions call the BLAS routines. If both of the inner and
|
||||
outer multithreadings can be activated, the inner multithreading must
|
||||
be deactivated at the compilation time. This is achieved by setting
|
||||
the C macro `MULTITHREADED_BLAS`, which can be written in
|
||||
`setup.py`. Deactivating the multithreading of BLAS using the
|
||||
environment variables is not recommended because it is used in the
|
||||
non-nested parts of the code and these multithreadings are
|
||||
unnecessary to be deactivated.
|
||||
|
||||
## Trouble shooting
|
||||
|
||||
1. Phonopy version should be the latest to use the latest phono3py.
|
||||
2. There are other pitfalls, see
|
||||
https://phonopy.github.io/phonopy/install.html#trouble-shooting.
|
|
@ -0,0 +1,74 @@
|
|||
(calculator_interfaces)=
|
||||
# Interfaces to calculators
|
||||
|
||||
Currently the built-in interfaces for VASP, QUANTUM ESPRESSO (QE),
|
||||
CRYSTAL, Abinit, and TURBOMOLE are prepared. VASP is the default interface and no
|
||||
special option is necessary to invoke it, but for the other
|
||||
interfaces, each special option has to be specified, e.g. `--qe`,
|
||||
`--crystal`, `--abinit`, or `--turbomole`
|
||||
|
||||
```{toctree}
|
||||
:maxdepth: 1
|
||||
vasp
|
||||
qe
|
||||
crystal
|
||||
turbomole
|
||||
```
|
||||
|
||||
## Calculator specific behaviors
|
||||
|
||||
### Physical unit
|
||||
|
||||
The interfaces for VASP, QE (pw), CRYSTAL, Abinit, and TURBOMOLE are
|
||||
built in to the phono3py command.
|
||||
|
||||
For each calculator, each physical unit system is used. The physical
|
||||
unit systems used for the calculators are summarized below.
|
||||
|
||||
```{table}
|
||||
| calculator | unit-cell | FORCES_FC3 | phono3py_disp.yaml |
|
||||
|------------|-----------|-------------|--------------------|
|
||||
| VASP | Angstrom | eV/Angstrom | Angstrom |
|
||||
| QE (pw) | au (bohr) | Ry/au | au |
|
||||
| CRYSTAL | Angstrom | eV/Angstrom | Angstrom |
|
||||
| Abinit | au (bohr) | eV/Angstrom | au |
|
||||
| TURBOMOLE | au (bohr) | hartree/au | au |
|
||||
```
|
||||
|
||||
`FORCES_FC3`, `FORCES_FC2`, and `phono3py_disp.yaml` have the same physical units.
|
||||
|
||||
Always (irrespective of calculator interface) the physical units of
|
||||
2nd and 3rd order force constants that are to be stored in
|
||||
`fc2.hdf5` and `fc3.hdf5` are $\text{eV}/\text{Angstrom}^2$ and
|
||||
$\text{eV}/\text{Angstrom}^3$, respectively.
|
||||
|
||||
(default_unit_cell_file_name_for_calculator)=
|
||||
### Default unit cell file name
|
||||
|
||||
Default unit cell file names are also changed according to the calculators::
|
||||
|
||||
```{table}
|
||||
| calculator| filename |
|
||||
|-----------|-------------|
|
||||
| VASP | POSCAR |
|
||||
| QE | unitcell.in |
|
||||
| CRYSTAL | crystal.o |
|
||||
| Abinit | unitcell.in |
|
||||
| TURBOMOLE | control |
|
||||
```
|
||||
|
||||
(default_displacement_distance_for_calculator)=
|
||||
### Default displacement distance created
|
||||
|
||||
Default displacement distances created by `-d` option without
|
||||
`--amplitude` option are respectively as follows::
|
||||
|
||||
```{table}
|
||||
| calculator | distance |
|
||||
|------------|----------------|
|
||||
| VASP | 0.03 Angstrom |
|
||||
| QE | 0.06 au (bohr) |
|
||||
| CRYSTAL | 0.03 Angstrom |
|
||||
| Abinit | 0.06 au (bohr) |
|
||||
| TURBOMOLE | 0.06 au (bohr) |
|
||||
```
|
|
@ -0,0 +1,132 @@
|
|||
(output_files)=
|
||||
# Output files
|
||||
|
||||
```{contents}
|
||||
:depth: 3
|
||||
:local:
|
||||
```
|
||||
|
||||
The calculation results are written into files. Mostly the data are
|
||||
stored in HDF5 format, therefore how to read the data
|
||||
from HDF5 files is also shown.
|
||||
|
||||
## Intermediate text files
|
||||
|
||||
The following files are not compatible with phonopy. But phonopy's
|
||||
`FORCE_SETS` file can be created using phono3py command options from
|
||||
the following files. See the detail at {ref}`file_format_compatibility`.
|
||||
|
||||
### `phono3py_disp.yaml`
|
||||
|
||||
This is created with `-d` option. See {ref}`create_displacements_option`.
|
||||
|
||||
### `FORCES_FC3`
|
||||
|
||||
This is created with `--cf3` option. See {ref}`cf3_option`.
|
||||
|
||||
### `FORCES_FC2`
|
||||
|
||||
This is created with `--cf2` option. See {ref}`cf2_option` and
|
||||
{ref}`dim_fc2_option`.
|
||||
|
||||
|
||||
## HDF5 files
|
||||
|
||||
### `kappa-*.hdf5`
|
||||
|
||||
See the detail at {ref}`kappa_hdf5_file`.
|
||||
|
||||
(fc3_hdf5_file)=
|
||||
### `fc3.hdf5`
|
||||
|
||||
Third order force constants (in real space) are stored in
|
||||
$\mathrm{eV}/\text{Angstrom}^3$.
|
||||
|
||||
In phono3py, this is stored in the numpy array `dtype='double'` and
|
||||
`order='C'` in the shape of:
|
||||
|
||||
```
|
||||
(num_atom, num_atom, num_atom, 3, 3, 3)
|
||||
```
|
||||
|
||||
against $\Phi_{\alpha\beta\gamma}(l\kappa, l'\kappa',
|
||||
l''\kappa'')$. The first three `num_atom` are the atom indices in supercell
|
||||
corresponding to $l\kappa$, $l'\kappa'$,
|
||||
$l''\kappa''$, respectively. The last three elements are the Cartesian
|
||||
coordinates corresponding to $\alpha$, $\beta$,
|
||||
$\gamma$, respectively.
|
||||
|
||||
If you want to import a supercell structure and its fc3, you may
|
||||
suffer from matching its atom index between the supercell and an
|
||||
expected unit cell. This may be easily dealt with by letting phono3py
|
||||
see your supercell as the unit cell (e.g., `POSCAR`,
|
||||
`unitcell.in`, etc) and find the unit (primitive) cell using
|
||||
{ref}`--pa option <pa_option>`. For example, let us assume your
|
||||
supercell is the 2x2x2 multiples of your unit cell that has no
|
||||
centring, then your `--pa` setting will be `1/2 0 0 0 1/2 0 0 1/2
|
||||
0`. If your unit cell is a conventional unit cell and has a centring,
|
||||
e.g., the face centring,
|
||||
|
||||
$$
|
||||
(\mathbf{a}_\text{p}, \mathbf{b}_\text{p}, \mathbf{c}_\text{p}) =
|
||||
(\mathbf{a}_\text{s}, \mathbf{b}_\text{s}, \mathbf{c}_\text{s})
|
||||
\begin{pmatrix}
|
||||
\frac{{1}}{2} & 0 & 0 \\
|
||||
0 & \frac{{1}}{2} & 0 \\
|
||||
0 & 0 & \frac{{1}}{2}
|
||||
\end{pmatrix}
|
||||
\begin{pmatrix}
|
||||
0 & \frac{{1}}{2} & \frac{{1}}{2} \\
|
||||
\frac{{1}}{2} & 0 & \frac{{1}}{2} \\
|
||||
\frac{{1}}{2} & \frac{{1}}{2} & 0
|
||||
\end{pmatrix} =
|
||||
(\mathbf{a}_\text{s}, \mathbf{b}_\text{s}, \mathbf{c}_\text{s})
|
||||
\begin{pmatrix}
|
||||
0 & \frac{{1}}{4} & \frac{{1}}{4} \\
|
||||
\frac{{1}}{4} & 0 & \frac{{1}}{4} \\
|
||||
\frac{{1}}{4} & \frac{{1}}{4} & 0
|
||||
\end{pmatrix}.
|
||||
$$
|
||||
|
||||
So what you have to set is `--pa="0 1/4 1/4 1/4 0 1/4 1/4 1/4 0"`.
|
||||
|
||||
(fc2_hdf5_file)=
|
||||
### `fc2.hdf5`
|
||||
|
||||
Second order force constants are stored in
|
||||
$\mathrm{eV}/\text{Angstrom}^2$.
|
||||
|
||||
In phono3py, this is stored in the numpy array `dtype='double'` and
|
||||
`order='C'` in the shape of:
|
||||
|
||||
```
|
||||
(num_atom, num_atom, 3, 3)
|
||||
```
|
||||
|
||||
against $\Phi_{\alpha\beta}(l\kappa, l'\kappa')$. More detail is
|
||||
similar to the case for {ref}`fc3_hdf5_file`.
|
||||
|
||||
### `gamma-*.hdf5`
|
||||
|
||||
Imaginary parts of self energies at harmonic phonon frequencies
|
||||
($\Gamma_\lambda(\omega_\lambda)$ = half linewidths) are stored in
|
||||
THz. See {ref}`write_gamma_option`.
|
||||
|
||||
### `gamma_detail-*.hdf5`
|
||||
|
||||
Q-point triplet contributions to imaginary parts of self energies at
|
||||
phonon frequencies (half linewidths) are stored in THz. See
|
||||
{ref}`write_detailed_gamma_option`.
|
||||
|
||||
## Simple text file
|
||||
|
||||
### `gammas-*.dat`
|
||||
|
||||
Imaginary parts of self energies with respect to frequency
|
||||
$\Gamma_\lambda(\omega)$ are stored in THz. See {ref}`ise_option`.
|
||||
|
||||
### `jdos-*.dat`
|
||||
|
||||
Joint densities of states are stored in Thz. See {ref}`jdos_option`.
|
||||
|
||||
### `linewidth-*.dat`
|
|
@ -0,0 +1,79 @@
|
|||
(qe_interface)=
|
||||
# Quantum ESPRESSO (pw) & phono3py calculation
|
||||
|
||||
Quantum espresso package itself has a set of the force constants
|
||||
calculation environment based on DFPT. But the document here explains how
|
||||
to calculate phonon-phonon interaction and related properties using
|
||||
phono3py, i.e., using the finite displacement and supercell approach.
|
||||
|
||||
An example for QE (pw) is found in the `example-phono3py/Si-QE` directory.
|
||||
|
||||
Unless a proper `phono3py_disp.yaml` containing calculator information,
|
||||
to invoke the QE (pw) interface, `--qe` option has to be specified,
|
||||
|
||||
```bash
|
||||
% phono3py --qe [options] [arguments]
|
||||
```
|
||||
|
||||
When the file name of the unit cell is different from the default one
|
||||
(see {ref}`default_unit_cell_file_name_for_calculator`), `-c` option
|
||||
is used to specify the file name. QE (pw) unit cell file parser used in
|
||||
phono3py is the same as that in phonopy. It can read
|
||||
only limited number of keywords that are shown in the phonopy web site
|
||||
(http://phonopy.github.io/phonopy/qe.html#qe-interface).
|
||||
|
||||
(qe_workflow)=
|
||||
## Workflow
|
||||
|
||||
1. Create supercells with displacements
|
||||
|
||||
```bash
|
||||
% phono3py --qe -d --dim="2 2 2" --pa="F" -c Si.in
|
||||
```
|
||||
|
||||
In this example, probably 111 different supercells with
|
||||
displacements are created. Supercell files (`supercell-xxx.in`)
|
||||
are created but they contain only the crystal
|
||||
structures. Calculation setting has to be added before running the
|
||||
calculation. In this step, the option `--qe` is necessary.
|
||||
|
||||
2. Run QE (pw) for supercell force calculations
|
||||
|
||||
Let's assume that the calculations have been made in `disp-xxx`
|
||||
directories with the file names of `Si-supercell.in`. Then after
|
||||
finishing those calculations, `Si-supercell.out` may be created
|
||||
in each directory.
|
||||
|
||||
3. Collect forces
|
||||
|
||||
`FORCES_FC3` is obtained with `--cf3` options collecting the
|
||||
forces on atoms in QE (pw) calculation results:
|
||||
|
||||
```bash
|
||||
% phono3py --cf3 disp-00001/Si-supercell.out disp-00002/Si-supercell.out ...
|
||||
```
|
||||
|
||||
or in recent bash or zsh:
|
||||
|
||||
```bash
|
||||
% phono3py --cf3 disp-{00001..00111}/Si-supercell.out
|
||||
```
|
||||
|
||||
`phono3py_disp.yaml` is used to create `FORCES_FC3`, therefore it
|
||||
must exist in current directory.
|
||||
|
||||
4) Calculate 3rd and 2nd order force constants
|
||||
|
||||
`fc3.hdf5` and `fc2.hdf5` files are created by:
|
||||
|
||||
```bash
|
||||
% phono3py --sym-fc
|
||||
```
|
||||
|
||||
where `--sym-fc` symmetrizes fc3 and fc2.
|
||||
|
||||
5) Calculate lattice thermal conductivity, e.g., by:
|
||||
|
||||
```bash
|
||||
% phono3py --mesh="11 11 11" --fc3 --fc2 --br
|
||||
```
|
|
@ -0,0 +1,111 @@
|
|||
(tips)=
|
||||
# Tips
|
||||
|
||||
```{contents}
|
||||
:depth: 2
|
||||
:local:
|
||||
```
|
||||
|
||||
(brillouinzone_sum)=
|
||||
## Brillouin zone summation
|
||||
|
||||
Brillouin zone (BZ) summations appear at different two points in
|
||||
phonon lifetime calculation. First it is used for the Fourier
|
||||
transform of force constants, and second to obtain imaginary part of
|
||||
phonon-self-energy. For the summation, usually uniform sampling meshes
|
||||
are employed. To obtain more accurate result, it is always better to
|
||||
use denser meshes. But the denser mesh requires more computational
|
||||
demand.
|
||||
|
||||
The second BZ summation contains delta functions. In
|
||||
phono3py calculation, a linear tetrahedron method ({ref}`thm option <thm_option>`, default option) and a smearing method ({ref}`sigma option <sigma_option>`) can be used for this BZ
|
||||
integration. In most cases, the tetrahedron method is better. Especially in high
|
||||
thermal conductivity materials, the smearing method results in
|
||||
underestimation of lattice thermal conductivity.
|
||||
|
||||
The figure below shows Si thermal conductivity convergence with
|
||||
respect to number of mesh points along an axis from n=19 to 65. This
|
||||
is calculated with RTA and the linear tetrahedron method. Within the
|
||||
methods and phono3py implementation, it is converging at around n=55,
|
||||
however this computational demand is not trivial. As far as observing
|
||||
this result, an extrapolation to $1/n \rightarrow 0$ seems not a
|
||||
good idea, since it gives overestimation in the case of this Si
|
||||
example. This plot tells that we have to decide how much value is
|
||||
acceptable as lattice thermal conductivity value. Therefore it
|
||||
important to describe the number of sampling mesh and method of BZ
|
||||
integration to let other people reproduce the computational results.
|
||||
|
||||
```{image} Si-convergence.png
|
||||
:width: 25%
|
||||
```
|
||||
|
||||
In case the smearing method is necessary to use, the convergence of
|
||||
q-point mesh together with smearing width has to be checked
|
||||
carefully. Since smearing parameter is used to approximate delta
|
||||
functions, small `sigma` value is better to describe the detailed
|
||||
structure of three-phonon-space, however it requires a denser sampling
|
||||
mesh to converge the result. To check the convergence with respect to
|
||||
the `sigma` value, multiple sigma values can be set. This can be
|
||||
computationally efficient, since it is avoided to re-calculate
|
||||
phonon-phonon interaction strength for different `sigma` values in
|
||||
this case. Convergence with respect to the sampling mesh and smearing
|
||||
parameter strongly depends on materials. For Si example, a
|
||||
$20\times 20\times 20$ sampling mesh (or 8000 reducible sampling
|
||||
points) and 0.1 THz smearing value for reciprocal of the volume of an
|
||||
atom may be a good starting choice. The tetrahedron method requires no
|
||||
such parameter as the smearing width.
|
||||
|
||||
## Importance of numerical quality of force constants
|
||||
|
||||
Third-order force constants (fc3) are much weaker to numerical noise
|
||||
of a force calculator than second-order force constants
|
||||
(fc2). Therefore supercell force calculations have to be done very
|
||||
carefully.
|
||||
|
||||
Numerical quality of forces given by force calculators is the most
|
||||
important factor for the numerical quality of lattice thermal
|
||||
conductivity calculation. We may be able to apply symmetry constraints
|
||||
to force constants, however even if force constants fulfill those
|
||||
symmetries, the numerical quality of force constants is not guaranteed
|
||||
since elements of force constants just suffice the symmetries but most
|
||||
of those intensities are not constrained.
|
||||
|
||||
It is important to use the best possible force calculator in the
|
||||
possibly best way. The knowledge of the force calculator from the
|
||||
theory and method to the practical usage is required to obtain
|
||||
good results of lattice thermal conductivity calculation.
|
||||
|
||||
In the following, a few things that may be good to know are
|
||||
presented.
|
||||
|
||||
### A practical way to check lattice thermal conductivity result
|
||||
|
||||
Some feeling whether our calculation result is OK or not may be
|
||||
obtained by comparing lattice thermal conductivities calculated with
|
||||
and without {ref}`symmetrizations of force constants <symmetrization_option>`. If they are enough different, e.g., more
|
||||
than twice different, it is better to re-consider about the force
|
||||
calculation. In the case of DFT calculations, the choice of input
|
||||
settings such as k-point sampling mesh, plane-wave energy cutoff, and
|
||||
exchange-correlational potential, etc, should be reconsidered.
|
||||
|
||||
### Displacement distance of atoms
|
||||
|
||||
The phono3py default displacement distance is 0.03
|
||||
$\text{Angstrom}$. In some cases, accurate result may not be obtained
|
||||
due to the numerical noise of the force calculator. Usually increasing
|
||||
the displacement distance by the {ref}`amplitude option <amplitude_option>` reduces the numerical noise, but as its drawback
|
||||
higher order anharmonicity is involved (renormalized) into fc3 and fc2.
|
||||
|
||||
(file_format_compatibility)=
|
||||
## File format compatibility with phonopy
|
||||
|
||||
- `FORCES_FC3` and `FORCES_FC2` are not
|
||||
compatible with phonopy's `FORCE_SETS`.
|
||||
- `FORCE_SETS` can be created using {ref}`--cfs <cfs_option>` from
|
||||
`FORCES_FC3` and `phono3py_disp.yaml` or `FORCES_FC2` and
|
||||
`phono3py_disp.yaml` (needs to specify `--dim-fc2`).
|
||||
- `FORCES_FC2` can be created using {ref}`--fs2f2 <fs2f2_option>` from `FORCE_SETS`.
|
||||
- `fc2.hdf5` can be used in phonopy in the `hdf5` mode when it is
|
||||
renamed to `force_constants.hdf5`. In the previous combinations of
|
||||
phonopy and phono3py, depending on the physical unit of force
|
||||
constants of calculators, the direct compatibility is not guranteed.
|
|
@ -0,0 +1,85 @@
|
|||
(turbomole_interface)=
|
||||
# TURBOMOLE & phono3py calculation
|
||||
|
||||
The riper module of TURBOMOLE can be used to study periodic structures.
|
||||
An example for TURBOMOLE is found in the `example/Si-TURBOMOLE` directory.
|
||||
|
||||
To invoke the TURBOMOLE interface, `--turbomole` option has to be always
|
||||
specified:
|
||||
|
||||
```bash
|
||||
% phono3py --turbomole [options] [arguments]
|
||||
```
|
||||
|
||||
When the file name of the unit cell is different from the default one
|
||||
(see :ref:`default_unit_cell_file_name_for_calculator`), `-c` option
|
||||
is used to specify the file name. TURBOMOLE unit cell file parser used in
|
||||
phono3py is the same as that in phonopy. It reads a limited number of
|
||||
keywords that are documented in the phonopy web site
|
||||
(http://phonopy.github.io/phonopy/turbomole.html#turbomole-interface).
|
||||
|
||||
(turbomole_workflow)=
|
||||
## Workflow
|
||||
|
||||
In the example Si-TURBOMOLE, the TURBOMOLE input file is `control`.
|
||||
This is the default file name for the TURBOMOLE interface,
|
||||
so the `-c control` parameter is not needed.
|
||||
|
||||
1) Create supercells with displacements (2x2x2 conventional cell for
|
||||
3rd order FC and 3x3x3 conventional cell for 2nd order FC)
|
||||
|
||||
```bash
|
||||
% phono3py --turbomole --dim="2 2 2" --dim-fc2="3 3 3" -d
|
||||
```
|
||||
|
||||
111 supercell directories (`supercell-00xxx`) for the third order
|
||||
force constants are created. In addition, one supercell directory
|
||||
(`supercell_fc2-00001`) is created for the second order
|
||||
force constants.
|
||||
|
||||
2) Complete TURBOMOLE inputs need to be prepared manually in the subdirectories.
|
||||
|
||||
Note that supercells with displacements must not be relaxed in the
|
||||
force calculations, because atomic forces induced by a small atomic
|
||||
displacement are what we need for the phonon calculation. To get accurate
|
||||
forces, `$scfconv` should be 10. Phono3py includes this data group automatically
|
||||
in the `control` file. You also need to choose a k-point mesh for the force
|
||||
calculations. TURBOMOLE data group $riper may need to be adjusted to improve
|
||||
SCF convergence (see example files in subdirectory supercell-00001 for
|
||||
further details)
|
||||
|
||||
Then, TURBOMOLE supercell calculations are executed to obtain forces on
|
||||
atoms, e.g., as follows:
|
||||
|
||||
```bash
|
||||
% riper > supercell-00001.out
|
||||
```
|
||||
|
||||
3) Collect forces in `FORCES_FC3` and `FORCES_FC2`::
|
||||
|
||||
```bash
|
||||
% phono3py --turbomole --cf3 supercell-*
|
||||
% phono3py --turbomole --cf2 supercell_fc2-*
|
||||
```
|
||||
|
||||
`disp_fc3.yaml` and `disp_fc2.yaml` are used to create `FORCES_FC3` and
|
||||
`FORCES_FC2`, therefore they must exist in current directory. The Si-TURBOMOLE
|
||||
example contains pre-calculated force files.
|
||||
|
||||
4) Calculate 3rd and 2nd order force constants in files `fc3.hdf5` and `fc2.hdf5`:
|
||||
|
||||
```bash
|
||||
% phono3py --turbomole --dim="2 2 2" --dim-fc2="3 3 3" --sym-fc
|
||||
```
|
||||
|
||||
`--sym-fc` is used to symmetrize second- and third-order force constants.
|
||||
|
||||
5) Thermal conductivity calculation:
|
||||
|
||||
```bash
|
||||
% phono3py --turbomole --primitive-axis="0 1/2 1/2 1/2 0 1/2 1/2 1/2 0" --fc3 --fc2 --dim="2 2 2" --dim-fc2="3 3 3" --mesh="20 20 20" --br
|
||||
```
|
||||
|
||||
`--primitive-axis` is used to get the results for the primitive 2-atom cell
|
||||
`--br` invokes the Relaxation Time Approximation.
|
||||
Carefully test the convergence with respect to `--mesh`!
|
|
@ -0,0 +1,112 @@
|
|||
(vasp_interface)=
|
||||
# VASP & phono3py calculation
|
||||
|
||||
(vasp_workflow)=
|
||||
## Workflow
|
||||
|
||||
1. Create POSCARs with displacements
|
||||
|
||||
This is the same way as usual phonopy:
|
||||
|
||||
```bash
|
||||
% phono3py -d --dim="2 2 2" --pa="F" -c POSCAR-unitcell
|
||||
```
|
||||
|
||||
`phono3py_disp.yaml` and `POSCAR-xxxxx` files are created.
|
||||
|
||||
If you want to use larger supercell size for
|
||||
second-order force constants (fc2) calculation than that
|
||||
for third-order force constants (fc3) calculation:
|
||||
|
||||
```bash
|
||||
% phono3py -d --dim-fc2="4 4 4" --dim="2 2 2" --pa="F" -c POSCAR-unitcell
|
||||
```
|
||||
|
||||
In this case, `POSCAR_FC2-xxxxx` files are also created.
|
||||
|
||||
2. Run VASP for supercell force calculations
|
||||
|
||||
To calculate forces on atoms in supercells, `POSCAR-xxxxx` (and
|
||||
`POSCAR_FC2-xxxxx` if they exist) are used as VASP (or any force
|
||||
calculator) calculations.
|
||||
|
||||
It is supposed that each force calculation is executed under the
|
||||
directory named `disp-xxxxx` (and `disp_fc2-xxxxx`), where
|
||||
`xxxxx` is sequential number.
|
||||
|
||||
3. Collect `vasprun.xml`'s
|
||||
|
||||
When VASP is used as the force calculator, force sets to calculate
|
||||
fc3 and fc2 are created as follows.
|
||||
|
||||
```bash
|
||||
% phono3py --cf3 disp-{00001..00755}/vasprun.xml
|
||||
```
|
||||
|
||||
where 0755 is an example of the index of the last displacement
|
||||
supercell. To perform this collection, `phono3py_disp.yaml` created at
|
||||
step 1 is required. Then `FORCES_FC3` is created.
|
||||
|
||||
When you use larger supercell for fc2 calculation:
|
||||
|
||||
```bash
|
||||
% phono3py --cf2 disp_fc2-{00001..00002}/vasprun.xml
|
||||
```
|
||||
`phono3py_displ.yaml` is necessary in this case and `FORCES_FC2` is
|
||||
created.
|
||||
|
||||
4. Create `fc2.hdf` and `fc3.hdf`
|
||||
|
||||
```bash
|
||||
% phono3py --sym-fc
|
||||
```
|
||||
|
||||
`--sym-fc` symmetrizes fc3 and fc2. `fc2.hdf5` and `fc3.hdf5`
|
||||
are created from `FORCES_FC3` (and
|
||||
optionally `FORCES_FC2`) and `phono3py_disp.yaml`. This step is
|
||||
not mandatory, but you can avoid calculating fc2 and fc3 at every
|
||||
run time when reading force constants from these files with
|
||||
`--fc3` and `--fc2` options.
|
||||
|
||||
5. Thermal conductivity calculation
|
||||
|
||||
An example of thermal conductivity calculation is:
|
||||
|
||||
```
|
||||
% phono3py --mesh="11 11 11" --br
|
||||
```
|
||||
|
||||
This calculation may take very long time. `--thm` invokes a
|
||||
tetrahedron method for Brillouin zone integration for phonon
|
||||
lifetime calculation, which is the default option. Instead,
|
||||
`--sigma` option can be used with the smearing widths.
|
||||
|
||||
In this command, phonon lifetimes at many grid points are
|
||||
calculated in series. The phonon lifetime calculation at each grid
|
||||
point can be separately calculated since they
|
||||
are independent and no communication is necessary at the
|
||||
computation. The procedure is as follows:
|
||||
|
||||
First run the same command with the addition option of `--wgp`:
|
||||
|
||||
```
|
||||
% phono3py --fc3 --fc2 --mesh="11 11 11" --br --wgp
|
||||
```
|
||||
|
||||
`ir_grid_points.yaml` is obtained. In this file, irreducible
|
||||
q-points are shown. Then distribute calculations of phonon
|
||||
lifetimes on grid points with `--write-gamma` option by:
|
||||
|
||||
```
|
||||
% phono3py --mesh="11 11 11" --br --write-gamma --gp="[grid ponit(s)]"
|
||||
```
|
||||
|
||||
After finishing all distributed calculations, run with
|
||||
`--read-gamma` option:
|
||||
|
||||
```
|
||||
% phono3py --fc3 --fc2 --mesh="11 11 11" --br --read-gamma
|
||||
```
|
||||
|
||||
Once this calculation runs without problem, separately calculated
|
||||
hdf5 files on grid points are no more necessary and may be deleted.
|
|
@ -0,0 +1,142 @@
|
|||
(workload_distribution)=
|
||||
# Workload distribution
|
||||
|
||||
Workload of thermal conductivity calculation can be distributed into
|
||||
computer nodes. The distribution over q-point grid points ({ref}`--gp option <gp_option>`), over phonon bands ({ref}`--bi option <bi_option>`), and over both of them are supported. Unless necessary,
|
||||
the distribution over bands is not recommended since it has some
|
||||
amount of overhead in the part of Fourier transformation of force
|
||||
constants. Therefore the distribution over grid-points is explained
|
||||
below. However since the distribution over bands works quite similarly as
|
||||
that over q-points, the usage can be easily guessed.
|
||||
|
||||
On each computer node, pieces of lattice thermal conductivity
|
||||
calculation are executed. The resulting data for each grid point are
|
||||
stored in its `kappa-mxxx-gx.hdf5` file on each node by setting
|
||||
{ref}`--write_gamma option <write_gamma_option>`. Once all data are
|
||||
obtained, those data are collected by {ref}`--read_gamma option <read_gamma_option>` and the lattice thermal conductivity is obtained.
|
||||
|
||||
```{contents}
|
||||
:depth: 2
|
||||
:local:
|
||||
```
|
||||
|
||||
## How to do it
|
||||
|
||||
The following example is executed in the `Si-PBE` example.
|
||||
|
||||
To avoid re-calculating fc3 and fc2, `fc3.hdf5` and `fc2.hdf5` are
|
||||
created on a single node:
|
||||
|
||||
```bash
|
||||
% phono3py --dim="2 2 2" --sym-fc -c POSCAR-unitcell
|
||||
```
|
||||
|
||||
The indices of the irreducible grid-points neccesarry to specify
|
||||
`--ga` option are found by {ref}`--wgp option <wgp_option>`
|
||||
|
||||
```bash
|
||||
% phono3py --dim="2 2 2" --pa="F" -c POSCAR-unitcell --mesh="19 19 19" --fc3 --fc2 --br --wgp
|
||||
```
|
||||
|
||||
and they are stored in `ir_grid_points.yaml`.
|
||||
|
||||
```bash
|
||||
% egrep '^- grid_point:' ir_grid_points.yaml|awk '{printf("%d,",$3)}'
|
||||
0,1,2,3,4,5,6,7,8,9,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,60,61,62,63,64,65,66,67,68,69,70,71,72,73,80,81,82,83,84,85,86,87,88,89,90,91,100,101,102,103,104,105,106,107,108,109,120,121,122,123,124,125,126,127,140,141,142,143,144,145,160,161,162,163,180,181,402,403,404,405,406,407,408,409,422,423,424,425,426,427,428,429,430,431,432,433,434,435,442,443,444,445,446,447,448,449,450,451,452,453,462,463,464,465,466,467,468,469,470,471,482,483,484,485,486,487,488,489,502,503,504,505,506,507,522,523,524,525,542,543,804,805,806,807,808,809,824,825,826,827,828,829,830,831,832,833,844,845,846,847,848,849,850,851,864,865,866,867,868,869,884,885,886,887,904,905,1206,1207,1208,1209,1226,1227,1228,1229,1230,1231,1246,1247,1248,1249,1266,1267,1608,1609,1628,1629,
|
||||
```
|
||||
|
||||
The calculated data on all the grid points shown above as indices are
|
||||
necessary to obtain lattice thermal conductivity. To distribute
|
||||
computational demands into computer nodes, a set of the grid-point
|
||||
indices are chosen and executed as follows:
|
||||
|
||||
```bash
|
||||
% phono3py --dim="2 2 2" --pa="F" -c POSCAR-unitcell --mesh="19 19 19" --fc3 --fc2 --br --gp="0,1,2,3,4,5,6,7,8,9,20,21,22,23,24,25" --write-gamma
|
||||
```
|
||||
|
||||
Then many `kappa-m191919-gx.hdf5` files are generated. These file
|
||||
names should not be altered because in reading the data by phono3py,
|
||||
those file names are supposed to be so, though there is a little
|
||||
freedom to arrange those file names, for which see {ref}`-o <output_filename_option>` and {ref}`-i <input_filename_option>`
|
||||
options. After completing calculations for all irreducible grid-point
|
||||
indices, the RTA thermal conductivity is computed by another run in a
|
||||
short time from the stored data:
|
||||
|
||||
```bash
|
||||
% phono3py --dim="2 2 2" --pa="F" -c POSCAR-unitcell --mesh="19 19 19" --fc3 --fc2 --br --read-gamma
|
||||
```
|
||||
|
||||
## A convenient script
|
||||
|
||||
The following short script may be useful to splitting all irreducible
|
||||
grid-point indices into of reasonable number of sets of grid-point
|
||||
indices for workload distribution.
|
||||
|
||||
```python
|
||||
#!/usr/bin/env python
|
||||
|
||||
import sys
|
||||
import yaml
|
||||
|
||||
if len(sys.argv) > 1:
|
||||
num = int(sys.argv[1])
|
||||
else:
|
||||
num = 1
|
||||
|
||||
with open("ir_grid_points.yaml") as f:
|
||||
data = yaml.load(f)
|
||||
gps = [gp['grid_point'] for gp in data['ir_grid_points']]
|
||||
gp_lists = [[] for i in range(num)]
|
||||
for i, gp in enumerate(gps):
|
||||
gp_lists[i % num].append(gp)
|
||||
for gp_set in gp_lists:
|
||||
print(",".join(["%d" % gp for gp in gp_set]))
|
||||
```
|
||||
|
||||
Supposed that this script is saved as `divide_gps.py`,
|
||||
|
||||
```bash
|
||||
% phono3py --dim="2 2 2" --pa="F" -c POSCAR-unitcell --mesh="19 19 19" --wgp
|
||||
...
|
||||
% python divide_gps.py 20
|
||||
0,30,52,82,120,402,434,468,524,844,1206
|
||||
1,31,53,83,121,403,435,469,525,845,1207
|
||||
2,32,54,84,122,404,442,470,542,846,1208
|
||||
3,33,55,85,123,405,443,471,543,847,1209
|
||||
4,34,60,86,124,406,444,482,804,848,1226
|
||||
5,35,61,87,125,407,445,483,805,849,1227
|
||||
6,36,62,88,126,408,446,484,806,850,1228
|
||||
7,37,63,89,127,409,447,485,807,851,1229
|
||||
8,40,64,90,140,422,448,486,808,864,1230
|
||||
9,41,65,91,141,423,449,487,809,865,1231
|
||||
20,42,66,100,142,424,450,488,824,866,1246
|
||||
21,43,67,101,143,425,451,489,825,867,1247
|
||||
22,44,68,102,144,426,452,502,826,868,1248
|
||||
23,45,69,103,145,427,453,503,827,869,1249
|
||||
24,46,70,104,160,428,462,504,828,884,1266
|
||||
25,47,71,105,161,429,463,505,829,885,1267
|
||||
26,48,72,106,162,430,464,506,830,886,1608
|
||||
27,49,73,107,163,431,465,507,831,887,1609
|
||||
28,50,80,108,180,432,466,522,832,904,1628
|
||||
29,51,81,109,181,433,467,523,833,905,1629
|
||||
```
|
||||
|
||||
For example distributing into 20 computer nodes using a queueing
|
||||
system,
|
||||
|
||||
```bash
|
||||
% j=1; for i in `python divide_gps.py 20`;do echo $i; sed -e s/gps/$i/g -e s/num/$j/g job.sh|qsub; j=$((j+1)); done
|
||||
```
|
||||
|
||||
with `job.sh` (here for grid-engine):
|
||||
|
||||
```bash
|
||||
#$ -S /bin/zsh
|
||||
#$ -cwd
|
||||
#$ -N phono3py-num
|
||||
#$ -pe mpi* 16
|
||||
#$ -e err-phono3py-num.log
|
||||
#$ -o std-phono3py-num.log
|
||||
|
||||
phono3py --dim="2 2 2" --pa="F" -c POSCAR-unitcell --mesh="19 19 19" --fc3 --fc2 --br --gp="gps" --write-gamma
|
||||
```
|
Loading…
Reference in New Issue