mirror of https://github.com/phonopy/phono3py.git
Merge branch 'develop'
This commit is contained in:
commit
b828d78241
|
@ -7,8 +7,8 @@ repos:
|
|||
- id: trailing-whitespace
|
||||
- id: end-of-file-fixer
|
||||
- id: check-yaml
|
||||
exclude: ^conda/
|
||||
- id: check-added-large-files
|
||||
exclude: ^example/AlN-LDA/
|
||||
|
||||
- repo: https://github.com/astral-sh/ruff-pre-commit
|
||||
rev: v0.5.6
|
||||
|
|
|
@ -39,7 +39,7 @@ Let's compute lattice thermal conductivity of Si using the `Si-PBEsol` example
|
|||
found in the example directory.
|
||||
|
||||
```bash
|
||||
% phono3py --mesh="11 11 11" --sym-fc --br
|
||||
% phono3py --mesh="11 11 11" --fc-symmetry --br
|
||||
```
|
||||
|
||||
Then using the output file, `kappa-m111111.hdf5`, run `phono3py-kaccum` as
|
||||
|
|
|
@ -2,7 +2,12 @@
|
|||
|
||||
# Change Log
|
||||
|
||||
## Jul-22-2024: Version 3.3.3
|
||||
## Aug-8-2024: Version 3.3.4
|
||||
|
||||
- Fix of command line user interface.
|
||||
- Fix of phono3py yaml parser.
|
||||
|
||||
## Aug-6-2024: Version 3.3.3
|
||||
|
||||
- Provide functionality by `--cf3` and `--cf2` command options to create force
|
||||
constants from displacement-force dataset of random displacements when
|
||||
|
|
|
@ -2,6 +2,10 @@
|
|||
|
||||
# Command options / Setting tags
|
||||
|
||||
(use_config_with_option)=
|
||||
|
||||
## Use of configuration file
|
||||
|
||||
Phono3py is operated with command options or with a configuration file that
|
||||
contains setting tags. In this page, the command options are explained. Most of
|
||||
command options have their respective setting tags.
|
||||
|
@ -27,13 +31,19 @@ CELL_FILENAME = POSCAR-unitcell
|
|||
where the setting tag names are case insensitive. This is run by
|
||||
|
||||
```bash
|
||||
% phono3py setting.conf [command options]
|
||||
% phono3py setting.conf [OPTIONS]
|
||||
```
|
||||
|
||||
or
|
||||
|
||||
```bash
|
||||
% phono3py [command options] -- setting.conf
|
||||
% phono3py [OPTIONS] -- setting.conf
|
||||
```
|
||||
|
||||
When using `phono3py-load` (see also {ref}`phono3py_load_command`)
|
||||
|
||||
```bash
|
||||
% phono3py-load --config setting.conf [OPTIONS]
|
||||
```
|
||||
|
||||
```{contents}
|
||||
|
@ -201,15 +211,32 @@ When using with `--cf2`, `--cf3` has to be specified simultaneously as below,
|
|||
|
||||
### `--dim` (`DIM`)
|
||||
|
||||
**`phono3py-load` doesn't have this option.**
|
||||
|
||||
Supercell dimension is specified. See the detail at
|
||||
<http://phonopy.github.io/phonopy/setting-tags.html#dim>. When a proper
|
||||
`phono3py_disp.yaml` exists in the current directory, this is unnecessary to be
|
||||
specified.
|
||||
<http://phonopy.github.io/phonopy/setting-tags.html#dim>. When
|
||||
`phono3py_disp.yaml` is found in the current directory, it is read
|
||||
automatically. Since supercell dimension is written in this file, `--dim` is
|
||||
unnecessary to specify. For example, just
|
||||
|
||||
```bash
|
||||
% phono3py --fc-symmetry
|
||||
```
|
||||
|
||||
or
|
||||
|
||||
```bash
|
||||
% phono3py --symfc
|
||||
```
|
||||
|
||||
can be used to calculate force constants.
|
||||
|
||||
(dim_fc2_option)=
|
||||
|
||||
### `--dim-fc2` (`DIM_FC2`)
|
||||
|
||||
**`phono3py-load` doesn't have this option.**
|
||||
|
||||
Supercell dimension for 2nd order force constants (for harmonic phonons) is
|
||||
specified. This is optional. When a proper `phono3py_disp.yaml` exists in the
|
||||
current directory, this is unnecessary to be specified.
|
||||
|
@ -228,7 +255,7 @@ supercell size and these force calculations have to be done in addition to the
|
|||
usual force calculations for 3rd order force constants.
|
||||
|
||||
```bash
|
||||
% phono3py -d --dim="2 2 2" --dim-fc2="4 4 4" -c POSCAR-unitcell
|
||||
% phono3py -d --dim 2 2 2 --dim-fc2 4 4 4 --pa auto -c POSCAR-unitcell
|
||||
```
|
||||
|
||||
After the force calculations, `--cf2` option is used to create `FORCES_FC2`.
|
||||
|
@ -253,10 +280,11 @@ that created in the usual phono3py run without `--dim-fc2` option.
|
|||
### `--pa`, `--primitive-axes` (`PRIMITIVE_AXES`)
|
||||
|
||||
Transformation matrix from a non-primitive cell to the primitive cell. See
|
||||
phonopy `PRIMITIVE_AXES` tag (`--pa` option) at
|
||||
<http://phonopy.github.io/phonopy/setting-tags.html#primitive-axis>. When a proper
|
||||
`phono3py_disp.yaml` exists in the current directory, this is unnecessary to be
|
||||
specified.
|
||||
phonopy `PRIMITIVE_AXES` tag (`--pa` option) at [primitive-axis
|
||||
(phonopy)](https://phonopy.github.io/phonopy/setting-tags.html#primitive-axes-or-primitive-axis).
|
||||
When `phono3py_disp.yaml` contains this information and `phono3py_disp.yaml` is
|
||||
read when running `phono3py` or `phono3py-load` command, this is unnecessary to
|
||||
be specified.
|
||||
|
||||
### `--mass` (`MASS`)
|
||||
|
||||
|
@ -273,24 +301,45 @@ web page](https://phonopy.github.io/phonopy/setting-tags.html#magmom).
|
|||
(create_displacements_option)=
|
||||
### `-d` (`CREATE_DISPLACEMENTS = .TRUE.`)
|
||||
|
||||
Supercell with displacements are created. Using with `--amplitude` option,
|
||||
atomic displacement distances are controlled. With this option, files for
|
||||
supercells with displacements and `phono3py_disp.yaml` file are created. `--pa`
|
||||
should be specified if the input unit cell structure is not a primitive cell,
|
||||
e.g., `--pa="F"` if the input unit cell has F-centring.
|
||||
**`phono3py-load` doesn't have this option.**
|
||||
|
||||
Supercells with displacements and `phono3py_disp.yaml` are created. Using with
|
||||
`--amplitude` option, atomic displacement distances are controlled. With this
|
||||
option, files for supercells with displacements and `phono3py_disp.yaml` file
|
||||
are created.
|
||||
|
||||
It is recommended to use this option with `--pa auto` option to store
|
||||
information about primitive cell (`primitive_matrix` key) in
|
||||
`phono3py_disp.yaml`, e.g.,
|
||||
|
||||
```bash
|
||||
% phono3py -c POSCAR-unitcell -d --dim 2 2 2 --dim-fc2 4 4 4 --pa auto
|
||||
```
|
||||
|
||||
(random_displacements_option)=
|
||||
### `--rd` (`RANDOM_DISPLACEMENTS`), `--rd-fc2` (`RANDOM_DISPLACEMENTS_FC2`) and `--random-seed` (`RANDOM_SEED`)
|
||||
|
||||
**`phono3py-load` doesn't have this option.**
|
||||
|
||||
See also {ref}`random-displacements`.
|
||||
|
||||
Random directional displacements are generated for fc3 and fc2 supercells by
|
||||
`--rd` and `--rd-fc2`, respectively. `--amplitude` and `--random-seed` options
|
||||
may be used together. These are used in the equivalent way to [`--rd` of
|
||||
phonopy](https://phonopy.github.io/phonopy/setting-tags.html#random-displacements).
|
||||
|
||||
Like `-d` option, it is recommended to specify `--pa auto` together with `--rd`
|
||||
and/or `--rd-fc2`,
|
||||
|
||||
```bash
|
||||
% phono3py -c POSCAR-unitcell --dim 2 2 2 --dim-fc2 4 4 4 --rd 100 --rd-fc2 2 --pa auto
|
||||
```
|
||||
|
||||
(amplitude_option)=
|
||||
### `--amplitude` (`DISPLACEMENT_DISTANCE`)
|
||||
|
||||
**`phono3py-load` doesn't have this option.**
|
||||
|
||||
Atomic displacement distance is specified. This value may be increased for the
|
||||
weak interaction systems and decreased when the force calculator is numerically
|
||||
very accurate.
|
||||
|
@ -303,13 +352,13 @@ The default value depends on calculator. See
|
|||
|
||||
Choice of force constants calculator.
|
||||
|
||||
```
|
||||
% phono3py --fc-calc symfc ...
|
||||
```bash
|
||||
% phono3py-load --fc-calc symfc ...
|
||||
```
|
||||
|
||||
To use different force constants calculators for fc2 and fc3
|
||||
```
|
||||
% phono3py --fc-calc "symfc|" ...
|
||||
```bash
|
||||
% phono3py-load --fc-calc "symfc|" ...
|
||||
```
|
||||
Those for fc2 and fc3 are seprated by `|` such as `symfc|` . Blank means to
|
||||
employ the finite difference method for systematic displacements generated by
|
||||
|
@ -320,8 +369,8 @@ the option `-d`.
|
|||
|
||||
Special options for force constants calculators.
|
||||
|
||||
```
|
||||
% phono3py --fc-calc-opt "cutoff=8" ...
|
||||
```bash
|
||||
% phono3py-load --fc-calc-opt "cutoff=8" ...
|
||||
```
|
||||
|
||||
Similarly to `--fc-calc`, `|` can be used to separated those for fc2 and fc3.
|
||||
|
@ -336,6 +385,9 @@ Similarly to `--fc-calc`, `|` can be used to separated those for fc2 and fc3.
|
|||
|
||||
These are shortcuts of `--fc-calc symfc` and `--fc-calc alm`, respectively.
|
||||
|
||||
Please be careful that `--symfc` and `--sym-fc` (deprecated) are similar, but
|
||||
different.
|
||||
|
||||
## Force constants
|
||||
|
||||
(compact_fc_option)=
|
||||
|
@ -352,16 +404,16 @@ data size becomes large. If the input crystal structure has centring
|
|||
{ref}`--pa <pa_option>` is necessary to have smallest data size. In this case,
|
||||
`--pa` option has to be specified on reading. Otherwise phono3py can recognize
|
||||
if `fc2.hdf5` and `fc3.hdf5` are compact or full automatically. When using with
|
||||
`--sym-fc`, the calculated results will become slightly different due to
|
||||
`--fc-symmetry`, the calculated results will become slightly different due to
|
||||
imperfect symmetrization scheme that phono3py employs.
|
||||
|
||||
```bash
|
||||
% phono3py --dim="2 2 2" --cfc --pa="F" -c POSCAR-unitcell
|
||||
% phono3py-load --compact-fc
|
||||
```
|
||||
|
||||
(symmetrization_option)=
|
||||
|
||||
### `--sym-fc` (`FC_SYMMETRY = .TRUE.`)
|
||||
### `--fc-symmetry` (`FC_SYMMETRY = .TRUE.`)
|
||||
|
||||
Second- and third-order force constants are symmetrized. The index exchange of
|
||||
real space force constants and translational invariance symmetry are applied in a
|
||||
|
@ -390,15 +442,16 @@ supercell size and the second choice is using `--cutoff-pair` option.
|
|||
|
||||
### `--cutoff-pair` or `--cutoff-pair-distance` (`CUTOFF_PAIR_DISTANCE`)
|
||||
|
||||
This option works differently for the `-d` and `--rd` options.
|
||||
This option works in two ways.
|
||||
|
||||
For `-d`, A cutoff pair-distance in a supercell is used to reduce the number of
|
||||
necessary supercells with displacements to obtain third order force constants.
|
||||
As the drawback, a certain number of third-order-force-constants elements are
|
||||
abandoned or computed with less numerical accuracy. More details are found at
|
||||
{ref}`command_cutoff_pair`.
|
||||
When using with `-d` options, a cutoff pair-distance in a supercell is used to
|
||||
reduce the number of necessary supercells with displacements to obtain third
|
||||
order force constants. As the drawback, a certain number of
|
||||
third-order-force-constants elements are abandoned or computed with less
|
||||
numerical accuracy. More details are found at {ref}`command_cutoff_pair`.
|
||||
|
||||
For `--rd`, `--cutoff-pair VAL` is equivalent to `--fc-calc-opt "cutoff=VAL"`.
|
||||
When using with an external force constants calculator, `--cutoff-pair VAL` works
|
||||
equivalent to `--fc-calc-opt "cutoff=VAL"`.
|
||||
|
||||
### `--alm`
|
||||
|
||||
|
@ -436,10 +489,10 @@ The mapping table between grid points to its indices is obtained by running with
|
|||
`--loglevel=2` option.
|
||||
|
||||
```bash
|
||||
% phono3py --dim="2 2 2" --pa="F" -c POSCAR-unitcell --mesh="19 19 19" --fc3 --fc2 --br --write-gamma --gp="0 1 2 3 4 5"
|
||||
% phono3py-load --mesh 19 19 19 --br --write-gamma --gp 0 1 2 3 4 5
|
||||
```
|
||||
|
||||
where `--gp="0 1 2 3 4 5"` can be also written `--gp="0,1,2,3,4,5"`. `--ga`
|
||||
where `--gp 0 1 2 3 4 5` can be also written `--gp="0,1,2,3,4,5"`. `--ga`
|
||||
option below can be used similarly for the same purpose.
|
||||
|
||||
(ga_option)=
|
||||
|
@ -447,10 +500,10 @@ option below can be used similarly for the same purpose.
|
|||
### `--ga` (`GRID_ADDRESSES`)
|
||||
|
||||
This is used to specify grid points like `--gp` option but in their addresses
|
||||
represented by integer numbers. For example with `--mesh="16 16 16"`, a q-point
|
||||
of (0.5, 0.5, 0.5) is given by `--ga="8 8 8"`. The values have to be integers.
|
||||
represented by integer numbers. For example with `--mesh 16 16 16`, a q-point
|
||||
of (0.5, 0.5, 0.5) is given by `--ga 8 8 8`. The values have to be integers.
|
||||
If you want to specify the point on a path,
|
||||
`--ga="0 0 0 1 1 1 2 2 2 3 3 3 ..."`, where each three values are recognized as
|
||||
`--ga 0 0 0 1 1 1 2 2 2 3 3 3 ...`, where each three values are recognized as
|
||||
a grid point. The grid points given by `--ga` option are translated to grid
|
||||
point indices as given by `--gp` option, and the values given by `--ga` option
|
||||
will not be shown in log files.
|
||||
|
@ -466,7 +519,7 @@ band indices where the values are calculated and summed and averaged over those
|
|||
bands.
|
||||
|
||||
```bash
|
||||
% phono3py --fc3 --fc2 --dim="2 2 2" --mesh="16 16 16" -c POSCAR-unitcell --nac --gp="34" --bi="4 5, 6"
|
||||
% phono3py-load --mesh 16 16 16 --nac --gp 34 --bi "4 5, 6"
|
||||
```
|
||||
|
||||
This option may be also useful to distribute the computational demand such like
|
||||
|
@ -489,7 +542,7 @@ calculated divided these integers by sampling mesh numbers for respective
|
|||
reciprocal axes.
|
||||
|
||||
```bash
|
||||
% phono3py --dim="2 2 2" --pa="F" -c POSCAR-unitcell --mesh="19 19 19" --wgp
|
||||
% phono3py-load --mesh 19 19 19 --wgp
|
||||
```
|
||||
|
||||
(stp_option)=
|
||||
|
@ -502,7 +555,7 @@ large a calculation is. Only those for specific grid points are shown by using
|
|||
with `--gp` or `--ga` option.
|
||||
|
||||
```bash
|
||||
% phono3py --dim="2 2 2" --pa="F" -c POSCAR-unitcell --mesh="19 19 19" --stp --gp 20
|
||||
% phono3py-load --mesh 19 19 19 --stp --gp 20
|
||||
```
|
||||
|
||||
## Brillouin zone integration
|
||||
|
@ -533,7 +586,7 @@ This is used when we want to test several $\sigma$ values simultaneously.
|
|||
The tails of the Gaussian functions that are used to replace delta functions in
|
||||
the equation shown at {ref}`--full-pp <full_pp_option>` are cut with this
|
||||
option. The value is specified in number of standard deviation.
|
||||
`--sigma-cutoff=5` gives the Gaussian functions to be cut at $5\sigma$. Using
|
||||
`--sigma-cutoff 5` gives the Gaussian functions to be cut at $5\sigma$. Using
|
||||
this option scarifies the numerical accuracy. So the number has to be carefully
|
||||
tested. But computation of phonon-phonon interaction strength becomes much
|
||||
faster in exchange for it.
|
||||
|
@ -614,27 +667,27 @@ database of the natural abundance data for elements, which refers Laeter _et
|
|||
al._, Pure Appl. Chem., **75**, 683 (2003).
|
||||
|
||||
```bash
|
||||
% phono3py --dim="3 3 2" -v --mesh="32 32 20" -c POSCAR-unitcell --br --isotope
|
||||
% phono3py-load -v --mesh 32 32 20 --br --isotope
|
||||
```
|
||||
|
||||
### `--mass-variances` or `--mv` (`MASS_VARIANCES`)
|
||||
|
||||
Mass variance parameters are specified by this option to include phonon-isotope
|
||||
scattering effect in the same way as `--isotope` option. For example of GaN,
|
||||
this may be set like `--mv="1.97e-4 1.97e-4 0 0"`. The number of elements has to
|
||||
this may be set like `--mv 1.97e-4 1.97e-4 0 0`. The number of elements has to
|
||||
correspond to the number of atoms in the primitive cell.
|
||||
|
||||
Isotope effect to thermal conductivity may be checked first running without
|
||||
isotope calculation:
|
||||
|
||||
```bash
|
||||
% phono3py --dim="3 3 2" -v --mesh="32 32 20" -c POSCAR-unitcell --br
|
||||
% phono3py-load -v --mesh 32 32 20 --br
|
||||
```
|
||||
|
||||
Then running with isotope calculation:
|
||||
|
||||
```bash
|
||||
% phono3py --dim="3 3 2" -v --mesh="32 32 20" -c POSCAR-unitcell --br --read-gamma --mv="1.97e-4 1.97e-4 0 0"
|
||||
% phono3py -v --mesh 32 32 20 --br --read-gamma --mv 1.97e-4 1.97e-4 0 0
|
||||
```
|
||||
|
||||
In the result hdf5 file, currently isotope scattering strength is not written
|
||||
|
@ -648,7 +701,7 @@ A most simple phonon boundary scattering treatment is included. $v_g/L$ is just
|
|||
used as the scattering rate, where $v_g$ is the group velocity and $L$ is the
|
||||
boundary mean free path. The value is given in micrometre. The default value, 1
|
||||
metre, is just used to avoid divergence of phonon lifetime and the contribution
|
||||
to the thermal conducitivity is considered negligible.
|
||||
to the thermal conductivity is considered negligible.
|
||||
|
||||
(ave_pp_option)=
|
||||
|
||||
|
@ -691,13 +744,13 @@ option is strongly recommended.
|
|||
First, run full conductivity calculation,
|
||||
|
||||
```bash
|
||||
% phono3py --dim="3 3 2" -v --mesh="32 32 20" -c POSCAR-unitcell --br
|
||||
% phono3py-load -v --mesh 32 32 20 --br
|
||||
```
|
||||
|
||||
Then
|
||||
|
||||
```bash
|
||||
% phono3py --dim="3 3 2" -v --mesh="32 32 20" -c POSCAR-unitcell --br --read-gamma --ave-pp -o ave_pp
|
||||
% phono3py-load -v --mesh 32 32 20 --br --read-gamma --ave-pp -o ave_pp
|
||||
```
|
||||
|
||||
### `--const-ave-pp` (`CONST_AVE_PP = .TRUE.`)
|
||||
|
@ -715,7 +768,7 @@ $\text{eV}^2$.
|
|||
See also {ref}`reference papers <ave_pp_reference>`.
|
||||
|
||||
```bash
|
||||
% phono3py --dim="3 3 2" -v --mesh="32 32 20" -c POSCAR-unitcell --br --const-ave-pp=1e-10
|
||||
% phono3py-load -v --mesh 32 32 20 --br --const-ave-pp 1e-10
|
||||
```
|
||||
|
||||
(normal_umklapp_option)=
|
||||
|
@ -739,7 +792,7 @@ The data are stored in `kappa-mxxx(-gx-sx-sdx).hdf5` file and accessed by
|
|||
below:
|
||||
|
||||
```bash
|
||||
% phono3py --dim="2 2 2" --pa="F" -c POSCAR-unitcell --mesh="11 11 11" --fc3 --fc2 --br --nu
|
||||
% phono3py-load --mesh 11 11 11 --fc3 --fc2 --br --nu
|
||||
...
|
||||
% ipython
|
||||
|
||||
|
@ -820,7 +873,7 @@ $$
|
|||
Specific temperatures are specified by `--ts`.
|
||||
|
||||
```bash
|
||||
% phono3py --fc3 --fc2 --dim="2 2 2" -v --mesh="11 11 11" -c POSCAR-unitcell --br --ts="200 300 400"
|
||||
% phono3py-load -v --mesh 11 11 11 -c POSCAR-unitcell --br --ts 200 300 400
|
||||
```
|
||||
|
||||
### `--tmax`, `--tmin`, `--tstep` (`TMAX`, `TMIN`, `TSTEP`)
|
||||
|
@ -830,7 +883,7 @@ See phonopy's document for the same tags at
|
|||
<http://phonopy.github.io/phonopy/setting-tags.html#tprop-tmin-tmax-tstep>.
|
||||
|
||||
```bash
|
||||
% phono3py --fc3 --fc2 --dim="2 2 2" -v --mesh="11 11 11" -c POSCAR-unitcell --br --tmin=100 --tmax=1000 --tstep=50
|
||||
% phono3py-load -v --mesh 11 11 11 --br --tmin 100 --tmax 1000 --tstep 50
|
||||
```
|
||||
|
||||
## Non-analytical term correction
|
||||
|
@ -918,7 +971,7 @@ to `gammas-mxxx-gx(-sx)-tx-bx.dat` in THz (without $2\pi$) with respect to
|
|||
samplied frequency points of $\omega$ in THz (without $2\pi$).
|
||||
|
||||
```bash
|
||||
% phono3py --fc3 --fc2 --dim="2 2 2" --mesh="16 16 16" -c POSCAR-unitcell --nac --q-direction="1 0 0" --gp=0 --ise --bi="4 5, 6"
|
||||
% phono3py-load --mesh 16 16 16 --nac --q-direction 1 0 0 --gp 0 --ise --bi "4 5, 6"
|
||||
```
|
||||
|
||||
(rse_option)=
|
||||
|
@ -945,7 +998,7 @@ $\Delta_\lambda(\omega)$ is written to `deltas-mxxx-gx-sx-tx-bx.dat` in THz
|
|||
(without $2\pi$).
|
||||
|
||||
```bash
|
||||
% phono3py --fc3 --fc2 --dim="2 2 2" --mesh="16 16 16" -c POSCAR-unitcell --nac --q-direction="1 0 0" --gp=0 --rse --sigma="0.1" --bi="4 5, 6"
|
||||
% phono3py-load --mesh 16 16 16 --nac --q-direction 1 0 0 --gp 0 --rse --sigma 0.1 --bi "4 5, 6"
|
||||
```
|
||||
|
||||
(spectral_function_option)=
|
||||
|
@ -982,7 +1035,7 @@ THz (without $2\pi$) with respect to samplied frequency points of $\omega$ in
|
|||
THz (without $2\pi$), and `spectral-mxxx-gx.hdf5`.
|
||||
|
||||
```bash
|
||||
% phono3py --fc3 --fc2 --dim="2 2 2" --mesh="16 16 16" -c POSCAR-unitcell --nac --q-direction="1 0 0" --gp=0 --spf
|
||||
% phono3py-load --mesh 16 16 16 --nac --q-direction 1 0 0 --gp 0 --spf
|
||||
```
|
||||
|
||||
```{note}
|
||||
|
@ -1026,7 +1079,7 @@ $$
|
|||
See also {ref}`reference papers <spectral_function_reference>`.
|
||||
|
||||
```bash
|
||||
% phono3py --fc2 --dim="2 2 2" --pa="F" -c POSCAR-unitcell --mesh="16 16 16" --jdos --ga="0 0 0 8 8 8"
|
||||
% phono3py-load --mesh 16 16 16 --jdos --ga 0 0 0 8 8 8
|
||||
```
|
||||
|
||||
When temperatures are specified, two classes of weighted JDOS are calculated.
|
||||
|
@ -1052,7 +1105,7 @@ $$
|
|||
See also {ref}`reference papers <spectral_function_reference>`.
|
||||
|
||||
```bash
|
||||
% phono3py --fc2 --dim="2 2 2" --pa="F" -c POSCAR-unitcell --mesh="16 16 16" --jdos --ga="0 0 0 8 8 8" --ts=300
|
||||
% phono3py-load --mesh 16 16 16 --jdos --ga 0 0 0 8 8 8 --ts 300
|
||||
```
|
||||
|
||||
This is an example of `Si-PBEsol`.
|
||||
|
@ -1081,13 +1134,13 @@ Mode-Gruneisen-parameters are calculated from fc3.
|
|||
Mesh sampling mode:
|
||||
|
||||
```bash
|
||||
% phono3py --fc3 --fc2 --dim="2 2 2" -v --mesh="16 16 16" -c POSCAR-unitcell --nac --gruneisen
|
||||
% phono3py-load -v --mesh 16 16 16 --nac --gruneisen
|
||||
```
|
||||
|
||||
Band path mode:
|
||||
|
||||
```bash
|
||||
% phono3py --fc3 --fc2 --dim="2 2 2" -v -c POSCAR-unitcell --nac --gruneisen --band="0 0 0 0 0 1/2"
|
||||
% phono3py-load -v --nac --gruneisen --band "0 0 0 0 0 1/2"
|
||||
```
|
||||
|
||||
## File I/O
|
||||
|
@ -1199,7 +1252,7 @@ Phonon frequencies, eigenvectors, and grid point addresses are stored in
|
|||
may be required depending on calculation setting.
|
||||
|
||||
```bash
|
||||
% phono3py --fc2 --dim="2 2 2" --pa="F" --mesh="11 11 11" -c POSCAR-unitcell --nac --write-phoonon
|
||||
% phono3py-load --mesh 11 11 11 --nac --write-phoonon
|
||||
```
|
||||
|
||||
Contents of `phonon-mxxx.hdf5` are watched by:
|
||||
|
@ -1248,7 +1301,7 @@ different CPU architectures. {ref}`--pa <pa_option>` and
|
|||
{ref}`--nac <nac_option>` may be required depending on calculation setting.
|
||||
|
||||
```bash
|
||||
% phono3py --fc2 --fc3 --dim="2 2 2" --pa="F" --mesh="11 11 11" -c POSCAR-unitcell --nac --read-phoonon --br
|
||||
% phono3py-load --mesh 11 11 11 --nac --read-phoonon --br
|
||||
```
|
||||
|
||||
(write_read_pp_option)=
|
||||
|
@ -1266,11 +1319,11 @@ calculation, in writing and reading, ph-ph interaction strength has to be stored
|
|||
in memory, so there is overhead in memory than usual RTA calculation.
|
||||
|
||||
```bash
|
||||
% phono3py --fc2 --fc3 --dim="2 2 2" --pa="F" --mesh="11 11 11" -c POSCAR-unitcell --nac --write-pp --br --gp=1
|
||||
% phono3py-load --mesh 11 11 11 --nac --write-pp --br --gp 1
|
||||
```
|
||||
|
||||
```bash
|
||||
% phono3py --fc2 --dim="2 2 2" --pa="F" --mesh="11 11 11" -c POSCAR-unitcell --nac --read-pp --br --gp=1
|
||||
% phono3py-load --mesh 11 11 11 --nac --read-pp --br --gp 1
|
||||
```
|
||||
|
||||
(hdf5_compression_option)=
|
||||
|
|
|
@ -60,7 +60,7 @@ copyright = "2015, Atsushi Togo"
|
|||
# The short X.Y version.
|
||||
version = "3.3"
|
||||
# The full version, including alpha/beta/rc tags.
|
||||
release = "3.3.3"
|
||||
release = "3.3.4"
|
||||
|
||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||
# for a list of supported languages.
|
||||
|
|
|
@ -78,10 +78,10 @@ so the -c crystal.o parameter is not needed.
|
|||
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
|
||||
% phono3py --crystal --dim="2 2 2" --dim-fc2="4 4 4" --fc-symmetry
|
||||
```
|
||||
|
||||
`--sym-fc` is used to symmetrize second- and third-order force constants.
|
||||
`--fc-symmetry` is used to symmetrize second- and third-order force constants.
|
||||
|
||||
5) Thermal conductivity calculation:
|
||||
|
||||
|
|
|
@ -1,17 +1,14 @@
|
|||
(command_cutoff_pair)=
|
||||
|
||||
# Force constants calculation with cutoff pair-distance
|
||||
|
||||
Since this calculation is a little bit tricky. It may be recommended to try
|
||||
```{note}
|
||||
Since usage of this calculation is complicated. It is recommended to try
|
||||
{ref}`random-displacements` with `--fc-calc-opt "cutoff = VAL"` before trying
|
||||
this option.
|
||||
```
|
||||
|
||||
Here the detail of the command option {ref}`--cutoff-pair <cutoff_pair_option>`
|
||||
is explained.
|
||||
|
||||
<!-- See also reference {cite}`Mizokami-PRB-2018`. -->
|
||||
|
||||
See also {ref}`a reference paper <cutoff_pair_reference>`.
|
||||
is explained. See also {ref}`a reference paper <cutoff_pair_reference>`.
|
||||
|
||||
```{contents}
|
||||
:depth: 2
|
||||
|
@ -329,7 +326,7 @@ number_of_pairs_in_cutoff: 110
|
|||
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 cp phono3py_disp.$i.yaml phono3py_disp.yaml; phono3py --fc-symmetry --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
|
||||
|
|
22
doc/index.md
22
doc/index.md
|
@ -20,28 +20,16 @@ the Wigner transport equation <LTC_options>`
|
|||
Papers that may introduce phono3py:
|
||||
|
||||
- Theoretical background is summarized in this paper:
|
||||
<http://dx.doi.org/10.1103/PhysRevB.91.094306> (arxiv
|
||||
<http://arxiv.org/abs/1501.00691>).
|
||||
[PRB.91.094306](http://dx.doi.org/10.1103/PhysRevB.91.094306) (arxiv
|
||||
[1501.00691](http://arxiv.org/abs/1501.00691>)).
|
||||
- Introduction to phono3py application:
|
||||
<https://journals.jps.jp/doi/10.7566/JPSJ.92.012001> (open access),
|
||||
[JPSJ.92.012001](https://journals.jps.jp/doi/10.7566/JPSJ.92.012001) (open access),
|
||||
and phono3py inputs for 103 compounds found in Fig.17
|
||||
<https://github.com/atztogo/phonondb/blob/main/mdr/phono3py_103compounds_fd/README.md>
|
||||
- Implementation of phono3py:
|
||||
<https://iopscience.iop.org/article/10.1088/1361-648X/acd831> (open access)
|
||||
[JPCM.35.353001](https://iopscience.iop.org/article/10.1088/1361-648X/acd831)
|
||||
(open access)
|
||||
|
||||
A set of pre-calculated data for phono3py in
|
||||
|
||||
```{image} Si-kaccum.png
|
||||
:width: 20%
|
||||
```
|
||||
|
||||
```{image} Si-kaccum-MFP.png
|
||||
:width: 20%
|
||||
```
|
||||
|
||||
```{image} Si-kdeplot.png
|
||||
:width: 22%
|
||||
```
|
||||
|
||||
## Documentation
|
||||
|
||||
|
|
|
@ -8,31 +8,42 @@ module. The main aim of introducing this command is to provide uniform usage
|
|||
over many different force calculators. Once `phono3py_disp.yaml` is created, the
|
||||
following operations will be the same using this command.
|
||||
|
||||
The following default behaviours are different from that of those of `phono3py`
|
||||
command:
|
||||
This is used almost in the same way as `phono3py` command, e.g., but there are
|
||||
some differences. The following default behaviours are different from that of
|
||||
those of `phono3py` command:
|
||||
|
||||
1. `phono3py_xxx.yaml` type file is always necessary in either of two ways:
|
||||
|
||||
- `phono3py_xxx.yaml` type file is given as the first argument of the
|
||||
command.
|
||||
- `phono3py_xxx.yaml` type file is put in the current directory with one of
|
||||
the default filenames of `phono3py_params.yaml`, `phono3py_disp.yaml`,
|
||||
`phono3py.yaml`. The searching preference order is `phono3py_params.yaml` >
|
||||
`phono3py_disp.yaml` > `phono3py.yaml`.
|
||||
command, e.g.,
|
||||
|
||||
```bash
|
||||
% phono3py-load phono3py_xxx.yaml --br --ts 300 --mesh 50
|
||||
```
|
||||
|
||||
- With first argument unspecified, `phono3py_disp.yaml` or `phono3py.yaml`
|
||||
file is read if it is found in the current directory. If both found,
|
||||
`phono3py_disp.yaml` is read. For example, having `phono3py_disp.yaml`
|
||||
under the current directory,
|
||||
|
||||
```bash
|
||||
% phono3py-load --br --ts 300 --mesh 50
|
||||
```
|
||||
|
||||
2. `-c` option (read crystal structure) does not exist.
|
||||
|
||||
3. `-d` option (create displacements) does not exist.
|
||||
3. `-d` option (create displacements) does not exist. Please use `phono3py`
|
||||
command.
|
||||
|
||||
4. Use of command options is recommended, but phono3py configuration file can be
|
||||
read through `--config` option.
|
||||
4. Phono3py configuration file can be read through `--config` option. See
|
||||
{ref}`use_config_with_option`.
|
||||
|
||||
5. If parameters for non-analytical term correction (NAC) are found, NAC is
|
||||
automatically enabled. This can be disabled by `--nonac` option.
|
||||
|
||||
6. When force constants are calculated from displacements and forces dataset,
|
||||
force constants are automatically symmetrized. To disable this, `--no-sym-fc`
|
||||
option is used.
|
||||
option can be used.
|
||||
|
||||
7. `-o` option works differently from `phono3py` command. This option requires
|
||||
one argument of string. The string is used as the output yaml filename that
|
||||
|
|
|
@ -67,10 +67,10 @@ only limited number of keywords that are shown in the phonopy web site
|
|||
`fc3.hdf5` and `fc2.hdf5` files are created by:
|
||||
|
||||
```bash
|
||||
% phono3py --sym-fc
|
||||
% phono3py --fc-symmetry
|
||||
```
|
||||
|
||||
where `--sym-fc` symmetrizes fc3 and fc2.
|
||||
where `--fc-symmetry` symmetrizes fc3 and fc2.
|
||||
|
||||
5) Calculate lattice thermal conductivity, e.g., by:
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ displacement-force dataset for computing force constants. This requires an
|
|||
external force constants calculator, e.g., symfc or ALM. Here, examples are
|
||||
presented with using symfc that can be installed via pip or conda easily.
|
||||
|
||||
## Related setting tags
|
||||
## Related command options
|
||||
|
||||
- {ref}`random_displacements_option` (`--rd`, `--random-seed`)
|
||||
- {ref}`fc_calculator_option` (`--fc-calc`)
|
||||
|
@ -81,6 +81,18 @@ If `phono3py_disp.yaml` is located in current directory, force constants are
|
|||
calculated from `FORCES_FC3` (and optionally `FORCES_FC2`) and
|
||||
`phono3py_disp.yaml` by
|
||||
|
||||
```bash
|
||||
% phono3py-load --symfc -v
|
||||
```
|
||||
|
||||
or
|
||||
|
||||
```bash
|
||||
% phono3py-load phono3py_params.yaml --symfc -v
|
||||
```
|
||||
|
||||
Similarly, it is performed by also using `phono3py` command,
|
||||
|
||||
```bash
|
||||
% phono3py --symfc -v
|
||||
```
|
||||
|
@ -91,17 +103,6 @@ or with `phono3py_params.yaml`
|
|||
% phono3py -c phono3py_params.yaml --symfc -v
|
||||
```
|
||||
|
||||
Similarly, it is performed by also using `phono3py-load` command,
|
||||
|
||||
```bash
|
||||
% phono3py-load --symfc -v
|
||||
```
|
||||
|
||||
or
|
||||
|
||||
```bash
|
||||
% phono3py-load phono3py_params.yaml --symfc -v
|
||||
```
|
||||
|
||||
## Cutoff pair-distance for fc3 calculation
|
||||
|
||||
|
@ -113,7 +114,7 @@ introducing cutoff distance for pairs of atoms. It is performed by
|
|||
`--fc-calc-opt` option as
|
||||
|
||||
```bash
|
||||
% phono3py --symfc -v --fc-calc-opt "cutoff=8"
|
||||
% phono3py-load --symfc -v --fc-calc-opt "cutoff=8"
|
||||
```
|
||||
|
||||
The shortcut of `--fc-calc-opt "cutoff=8"` is `--cutoff-pair 8`.
|
||||
|
|
|
@ -69,7 +69,7 @@ so the `-c control` parameter is not needed.
|
|||
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
|
||||
% phono3py --turbomole --dim="2 2 2" --dim-fc2="3 3 3" --fc-symmetry
|
||||
```
|
||||
|
||||
`--sym-fc` is used to symmetrize second- and third-order force constants.
|
||||
|
|
|
@ -61,10 +61,10 @@
|
|||
4. Create `fc2.hdf` and `fc3.hdf`
|
||||
|
||||
```bash
|
||||
% phono3py --sym-fc
|
||||
% phono3py --fc-symmetry
|
||||
```
|
||||
|
||||
`--sym-fc` symmetrizes fc3 and fc2. `fc2.hdf5` and `fc3.hdf5`
|
||||
`--fc-symmetry` 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
|
||||
|
|
|
@ -38,7 +38,7 @@ As discussed in the references above, the term $\kappa_{\rm P}^{\alpha \beta}$ c
|
|||
To compute the Wigner conductivity with scattering in the RTA approximation, specify `--br` and `--wigner`. For `example/Wigner_La2Zr2O7`, the command is:
|
||||
|
||||
```bash
|
||||
phono3py --nac --cell POSCAR --fc2 --dim="2 2 2" --dim-fc2="4 4 4" --mesh="19 19 19" --tmin=300 --tmax=1000 --tstep=700 --sym-fc --isotope --br --wigner --read-gamma > tc_La2Zr2O7.out
|
||||
phono3py --nac --cell POSCAR --fc2 --dim="2 2 2" --dim-fc2="4 4 4" --mesh="19 19 19" --tmin=300 --tmax=1000 --tstep=700 --fc-symmetry --isotope --br --wigner --read-gamma > tc_La2Zr2O7.out
|
||||
```
|
||||
The example above uses the `--read-gamma` option to read the phonon linewidths stored in the file `kappa-m191919.hdf5`. The calculation of these linewidths is computationally expensive, more details are reported in the {ref}`paper on the Wigner formulation <citation_wigner_formulation>`, and in this example the linewidths are provided.
|
||||
To learn how to compute the linewidths, the reader is referred to the documentation of the `--write-gamma` option.
|
||||
|
|
|
@ -28,14 +28,14 @@ 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
|
||||
% phono3py-load
|
||||
```
|
||||
|
||||
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
|
||||
% phono3py-load --mesh 19 19 19 --br --wgp
|
||||
```
|
||||
|
||||
and they are stored in `ir_grid_points.yaml`.
|
||||
|
@ -51,7 +51,7 @@ 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
|
||||
% phono3py-load --mesh 19 19 19 --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
|
||||
|
@ -63,7 +63,7 @@ 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
|
||||
% phono3py-load --mesh 19 19 19 --br --read-gamma
|
||||
```
|
||||
|
||||
## A convenient script
|
||||
|
@ -96,7 +96,7 @@ with open("ir_grid_points.yaml") as f:
|
|||
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
|
||||
% phono3py-load --mesh 19 19 19 --wgp
|
||||
...
|
||||
% python divide_gps.py 20
|
||||
0,30,52,82,120,402,434,468,524,844,1206
|
||||
|
@ -138,5 +138,5 @@ with `job.sh` (here for grid-engine):
|
|||
#$ -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
|
||||
phono3py-load --mesh 19 19 19 --br --gp "gps" --write-gamma
|
||||
```
|
||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -14,52 +14,56 @@ from all displaced supercell forces.
|
|||
|
||||
Perfect and displaced supercells were created by
|
||||
|
||||
```
|
||||
```bash
|
||||
% phono3py --dim 3 3 2 -c POSCAR-unitcell -d
|
||||
```
|
||||
|
||||
In the example directory, `FORCES_FC3` is compressed to `FORCES_FC3.lzma`. After
|
||||
unzipping `FORCES_FC3.lzma` (e.g., using `tar xvfz` or `tar xvfa`), to obtain
|
||||
`fc3.hdf5` and normal `fc2.hdf5`,
|
||||
In the example directory, `FORCES_FC3` is compressed to `FORCES_FC3.xz`. After
|
||||
unzipping `FORCES_FC3.xz` (e.g., using `xz -d`), to obtain `fc3.hdf5` and
|
||||
`fc2.hdf5` using symfc (the results without using symfc, i.e., finite difference
|
||||
method, are shown at the bottom of this README)
|
||||
|
||||
```
|
||||
% phono3py --sym-fc
|
||||
```bash
|
||||
% phono3py-load --symfc -v
|
||||
```
|
||||
|
||||
Using 13x13x9 sampling mesh, lattice thermal conductivity is calculated by
|
||||
Lattice thermal conductivity is calculated by
|
||||
|
||||
```
|
||||
% phono3py --mesh 13 13 9 --fc3 --fc2 --br
|
||||
```bash
|
||||
% phono3py-load --mesh 40 --br --ts 300
|
||||
```
|
||||
|
||||
`kappa-m13139.hdf5` is written as the result. The lattice thermal conductivity
|
||||
is calculated as k_xx=228.2 and k_zz=224.1 W/m-K at 300 K.
|
||||
`kappa-m15158.hdf5` is written as the result. Parameters for non-analytical term
|
||||
correction (NAC) is automatically read from those stored in `phono3py_disp.yaml` or
|
||||
`BORN` file. The lattice thermal conductivity is calculated as k_xx=242.8 and
|
||||
k_zz=226.5 W/m-K at 300 K. Without NAC, k_xx=233.6 and k_zz=222.2.
|
||||
|
||||
With `--nac` option, non-analytical term correction is applied reading the Born
|
||||
effective charges and dielectric constant from `BORN` file:
|
||||
Use of larger supercell for fc2 may change the shape of phonon band structure.
|
||||
To see it, first regenerate `phono3py_disp.yaml` with `--dim-fc2` option,
|
||||
|
||||
```
|
||||
% phono3py --mesh 13 13 9 --fc3 --fc2 --br --nac
|
||||
```
|
||||
|
||||
This changes thermal conductivity at 300 K to k_xx=235.7 and k_zz=219.1. The
|
||||
shape of phonon band structure is important to fullfil energy and momentum
|
||||
conservations.
|
||||
|
||||
Use of larger supercell of fc2 may change the shape of phonon band structure. To
|
||||
see it, first regenerate `phono3py_disp.yaml` with `--dim-fc2` option,
|
||||
|
||||
```
|
||||
```bash
|
||||
% phono3py --dim 3 3 2 --dim-fc2 5 5 3 -c POSCAR-unitcell -d
|
||||
```
|
||||
|
||||
Then re-create force constants and calculate thermal conductivity,
|
||||
|
||||
```
|
||||
% phono3py --sym-fc
|
||||
% phono3py --mesh="13 13 9" --fc3 --fc2 --br --nac
|
||||
```bash
|
||||
% phono3py-load --symfc -v
|
||||
% phono3py-load --br --mesh=40 --ts 300
|
||||
```
|
||||
|
||||
k_xx=236.0 and k_zz=222.2 are obtained. In the case of this example, we can see
|
||||
If `phono3py_disp.yaml` is renamed to `phono3py_disp_dimfc2.yaml`, it can be
|
||||
specified at the first argument of `phono3py-load` command:
|
||||
|
||||
```bash
|
||||
% phono3py-load phono3py_disp_dimfc2.yaml --symfc -v
|
||||
% phono3py-load phono3py_disp_dimfc2.yaml --br --mesh=40 --ts 300
|
||||
```
|
||||
|
||||
k_xx=240.2 and k_zz=230.1 are obtained. In the case of this example, we can see
|
||||
that the larger fc2 supercell contributes little, which means that the 3x3x2
|
||||
supercell was good enough to obtain a good shape of phonon band structure.
|
||||
|
||||
Using the finite difference method implemented in phono3py, lattice thermal
|
||||
conductivities are obtained as k_xx=251.2 and k_zz=233,4 without using the large
|
||||
fc2 supercell and k_xx=249.4 k_zz=236.9 using the large fc2 supercell.
|
||||
|
|
|
@ -29,4 +29,4 @@ lattice thermal conductivity at 300 K is calculated by
|
|||
% phono3py-load phono3py_params_NaCl222.yaml.xz --mesh 50 --ts 300 --br
|
||||
```
|
||||
|
||||
The result is ~7.2 W/m-K at 300 K.
|
||||
The result is ~7.3 W/m-K at 300 K.
|
||||
|
|
|
@ -23,7 +23,7 @@ for the CRYSTAL interface, so the -c crystal.o parameter is not needed
|
|||
|
||||
4) Create force constant files fc2.hdf5 and fc3.hdf5:
|
||||
|
||||
phono3py --crystal --dim="2 2 2" --dim-fc2="4 4 4" --sym-fc
|
||||
phono3py --crystal --dim="2 2 2" --dim-fc2="4 4 4" --fc-symmetry
|
||||
|
||||
5) Thermal conductivity calculation:
|
||||
|
||||
|
|
|
@ -13,18 +13,18 @@ conventional unit cell to the primitive cell.
|
|||
To create `fc3.hdf5` and `fc2.hdf5`,
|
||||
|
||||
```
|
||||
% phono3py --sym-fc
|
||||
% phono3py-load
|
||||
```
|
||||
|
||||
Using 11x11x11 sampling mesh, lattice thermal conductivity is calculated by
|
||||
|
||||
```
|
||||
% phono3py --mesh 11 11 11 --fc3 --fc2 --br
|
||||
% phono3py-load --mesh 11 11 11 --br --ts 300
|
||||
```
|
||||
|
||||
`kappa-m111111.hdf5` is written as the result. The lattice thermal conductivity
|
||||
is calculated as 112.5 W/m-K at 300 K. This becomes, with 19x19x19 sampling
|
||||
mesh, 127.0 W/m-K.
|
||||
is calculated as 112.4 W/m-K at 300 K. This becomes, with 19x19x19 sampling
|
||||
mesh, 128.2 W/m-K.
|
||||
|
||||
Accumulated lattice thermal conductivity is calculated using `phono3py-kaccum`
|
||||
script.
|
||||
|
|
|
@ -13,18 +13,18 @@ conventional unit cell to the primitive cell.
|
|||
To create `fc3.hdf5` and `fc2.hdf5`,
|
||||
|
||||
```
|
||||
% phono3py --sym-fc
|
||||
% phono3py-load
|
||||
```
|
||||
|
||||
Using 11x11x11 sampling mesh, lattice thermal conductivity is calculated by
|
||||
|
||||
```
|
||||
% phono3py --mesh 11 11 11 --fc3 --fc2 --br
|
||||
% phono3py-load --mesh 11 11 11 --fc3 --fc2 --br
|
||||
```
|
||||
|
||||
`kappa-m111111.hdf5` is written as the result. The lattice thermal conductivity
|
||||
is calculated as 119.3 W/m-K at 300 K. This becomes, with 19x19x19 sampling
|
||||
mesh, 132.4 W/m-K.
|
||||
is calculated as 119.5 W/m-K at 300 K. This becomes, with 19x19x19 sampling
|
||||
mesh, 130.1 W/m-K.
|
||||
|
||||
Accumulated lattice thermal conductivity is calculated using `phono3py-kaccum`
|
||||
script.
|
||||
|
|
|
@ -13,18 +13,18 @@ the conventional unit cell to the primitive cell.
|
|||
To create `fc3.hdf5` and `fc2.hdf5`,
|
||||
|
||||
```
|
||||
% phono3py --sym-fc
|
||||
% phono3py-load
|
||||
```
|
||||
|
||||
Using 11x11x11 sampling mesh, lattice thermal conductivity is calculated by
|
||||
|
||||
```
|
||||
% phono3py --mesh 11 11 11 --fc3 --fc2 --br
|
||||
% phono3py-load --mesh 11 11 11 --br
|
||||
```
|
||||
|
||||
`kappa-m111111.hdf5` is written as the result. The lattice thermal conductivity
|
||||
is calculated as 109.0 W/m-K at 300 K. This becomes, with 19x19x19 sampling
|
||||
mesh, 123.2 W/m-K.
|
||||
is calculated as 109.1 W/m-K at 300 K. This becomes, with 19x19x19 sampling
|
||||
mesh, 124.4 W/m-K.
|
||||
|
||||
Accumulated lattice thermal conductivity is calculated using `phono3py-kaccum`
|
||||
script.
|
||||
|
@ -80,11 +80,11 @@ In this example directory, the dataset is renamed to
|
|||
at `vasprun_xml_fc2/disp-fc2-00001/vasprun.xml`. `FORCES_FC2` is generated by
|
||||
|
||||
```
|
||||
% phono3py phono3py_disp_dimfc2.yaml --cf2 vasprun_xml_fc2/disp-fc2-00001/vasprun.xml
|
||||
% phono3py -c phono3py_disp_dimfc2.yaml --cf2 vasprun_xml_fc2/disp-fc2-00001/vasprun.xml
|
||||
```
|
||||
|
||||
A lattice thermal conductivity calculation is performed by, e.g.,
|
||||
```
|
||||
% phono3py-load phono3py_disp_dimfc2.yaml --mesh 11 11 11 --br --ts 300
|
||||
```
|
||||
The result is 108.0 W/m-K, and with the 19x19x19 mesh, 125.4 W/m-K.
|
||||
The result is 107.9 W/m-K, and with the 19x19x19 mesh, 125.4 W/m-K.
|
||||
|
|
|
@ -13,18 +13,18 @@ the conventional unit cell to the primitive cell.
|
|||
To create `fc3.hdf5` and `fc2.hdf5`,
|
||||
|
||||
```
|
||||
% phono3py --sym-fc
|
||||
% phono3py-load
|
||||
```
|
||||
|
||||
Using 11x11x11 sampling mesh, lattice thermal conductivity is calculated by
|
||||
|
||||
```
|
||||
% phono3py --mesh 11 11 11 --fc3 --fc2 --br
|
||||
% phono3py-load --mesh 11 11 11 --br --ts 300
|
||||
```
|
||||
|
||||
`kappa-m111111.hdf5` is written as the result. The lattice thermal conductivity
|
||||
is calculated as 118.9 W/m-K at 300 K. This becomes, with 19x19x19 sampling
|
||||
mesh, 129.9 W/m-K.
|
||||
is calculated as 121.3 W/m-K at 300 K. This becomes, with 19x19x19 sampling
|
||||
mesh, 135.4 W/m-K.
|
||||
|
||||
The .out files for supercells are found in `supercell_out.tar.lzma`. If phono3py
|
||||
is properly installed, the following command should work.
|
||||
|
|
|
@ -1487,6 +1487,9 @@ class Phono3py:
|
|||
fc2 = None
|
||||
if fc_calculator_options is not None and "|" in fc_calculator_options:
|
||||
fc2 = None
|
||||
# fc2 should not be set if phonon_supercell_matrix is available.
|
||||
if self._phonon_supercell_matrix is not None:
|
||||
fc2 = None
|
||||
|
||||
# Normally self._fc2 is overwritten in produce_fc2
|
||||
if self._fc2 is None:
|
||||
|
@ -1527,6 +1530,9 @@ class Phono3py:
|
|||
else:
|
||||
disp_dataset = self._phonon_dataset
|
||||
|
||||
if not forces_in_dataset(disp_dataset):
|
||||
raise RuntimeError("Forces are not set in the dataset.")
|
||||
|
||||
if is_compact_fc:
|
||||
p2s_map = self._phonon_primitive.p2s_map
|
||||
else:
|
||||
|
@ -1548,10 +1554,7 @@ class Phono3py:
|
|||
)
|
||||
else:
|
||||
if "displacements" in disp_dataset:
|
||||
msg = (
|
||||
"fc_calculator has to be set to produce force "
|
||||
"constans from this dataset for fc2."
|
||||
)
|
||||
msg = "fc_calculator to solve fc2 has to be set."
|
||||
raise RuntimeError(msg)
|
||||
self._fc2 = get_phonopy_fc2(
|
||||
self._phonon_supercell,
|
||||
|
|
|
@ -37,11 +37,10 @@
|
|||
from __future__ import annotations
|
||||
|
||||
import copy
|
||||
import os
|
||||
import pathlib
|
||||
import sys
|
||||
from dataclasses import asdict
|
||||
from typing import Optional, Union
|
||||
from typing import Literal, Optional, Union
|
||||
|
||||
import numpy as np
|
||||
from phonopy.cui.phonopy_script import file_exists, print_error
|
||||
|
@ -81,6 +80,7 @@ def create_phono3py_force_constants(
|
|||
settings,
|
||||
ph3py_yaml: Optional[Phono3pyYaml] = None,
|
||||
phono3py_yaml_filename: Optional[str] = None,
|
||||
calculator: Optional[str] = None,
|
||||
input_filename: Optional[str] = None,
|
||||
output_filename: Optional[str] = None,
|
||||
log_level=1,
|
||||
|
@ -118,15 +118,12 @@ def create_phono3py_force_constants(
|
|||
if settings.read_fc3:
|
||||
_read_phono3py_fc3(phono3py, symmetrize_fc3r, input_filename, log_level)
|
||||
else: # fc3 from FORCES_FC3 or ph3py_yaml
|
||||
_create_phono3py_fc3(
|
||||
_read_dataset_fc3(
|
||||
phono3py,
|
||||
ph3py_yaml,
|
||||
phono3py_yaml_filename,
|
||||
symmetrize_fc3r,
|
||||
settings.is_compact_fc,
|
||||
settings.cutoff_pair_distance,
|
||||
fc_calculator,
|
||||
fc_calculator_options,
|
||||
calculator,
|
||||
settings.use_pypolymlp,
|
||||
settings.mlp_params,
|
||||
settings.displacement_distance,
|
||||
|
@ -134,6 +131,14 @@ def create_phono3py_force_constants(
|
|||
settings.random_seed,
|
||||
log_level,
|
||||
)
|
||||
phono3py.produce_fc3(
|
||||
symmetrize_fc3r=symmetrize_fc3r,
|
||||
is_compact_fc=settings.is_compact_fc,
|
||||
fc_calculator=extract_fc2_fc3_calculators(fc_calculator, 3),
|
||||
fc_calculator_options=extract_fc2_fc3_calculators(
|
||||
fc_calculator_options, 3
|
||||
),
|
||||
)
|
||||
|
||||
cutoff_distance = settings.cutoff_fc3_distance
|
||||
if cutoff_distance is not None and cutoff_distance > 0:
|
||||
|
@ -168,15 +173,20 @@ def create_phono3py_force_constants(
|
|||
if settings.read_fc2:
|
||||
_read_phono3py_fc2(phono3py, symmetrize_fc2, input_filename, log_level)
|
||||
else:
|
||||
_create_phono3py_fc2(
|
||||
phono3py,
|
||||
ph3py_yaml,
|
||||
symmetrize_fc2,
|
||||
settings.is_compact_fc,
|
||||
fc_calculator,
|
||||
fc_calculator_options,
|
||||
log_level,
|
||||
if phono3py.dataset is None or phono3py.phonon_supercell_matrix is not None:
|
||||
_read_dataset_fc2(
|
||||
phono3py,
|
||||
ph3py_yaml,
|
||||
calculator,
|
||||
log_level,
|
||||
)
|
||||
phono3py.produce_fc2(
|
||||
symmetrize_fc2=symmetrize_fc2,
|
||||
is_compact_fc=settings.is_compact_fc,
|
||||
fc_calculator=extract_fc2_fc3_calculators(fc_calculator, 2),
|
||||
fc_calculator_options=extract_fc2_fc3_calculators(fc_calculator_options, 2),
|
||||
)
|
||||
|
||||
if output_filename is None:
|
||||
filename = "fc2.hdf5"
|
||||
else:
|
||||
|
@ -201,7 +211,8 @@ def parse_forces(
|
|||
cutoff_pair_distance=None,
|
||||
force_filename: str = "FORCES_FC3",
|
||||
phono3py_yaml_filename: Optional[str] = None,
|
||||
fc_type=None,
|
||||
fc_type: Literal["fc3", "phonon_fc2"] = "fc3",
|
||||
calculator: Optional[str] = None,
|
||||
log_level=0,
|
||||
):
|
||||
"""Read displacements and forces.
|
||||
|
@ -215,53 +226,39 @@ def parse_forces(
|
|||
"""
|
||||
filename_read_from: Optional[str] = None
|
||||
dataset = None
|
||||
calculator = phono3py.calculator
|
||||
|
||||
# Get dataset from ph3py_yaml. dataset can be None.
|
||||
# physical_units can be overwritten if calculator is found in ph3py_yaml.
|
||||
if ph3py_yaml:
|
||||
dataset = _extract_dataset_from_ph3py_yaml(ph3py_yaml, fc_type)
|
||||
if dataset and ph3py_yaml.calculator:
|
||||
calculator = ph3py_yaml.calculator
|
||||
|
||||
physical_units = get_default_physical_units(calculator)
|
||||
|
||||
if phono3py.phonon_supercell is None or fc_type == "fc3":
|
||||
natom = len(phono3py.supercell)
|
||||
else:
|
||||
natom = len(phono3py.phonon_supercell)
|
||||
|
||||
if dataset:
|
||||
filename_read_from = phono3py_yaml_filename
|
||||
# Get dataset from ph3py_yaml. dataset can be None.
|
||||
# physical_units can be overwritten if calculator is found in ph3py_yaml.
|
||||
if ph3py_yaml:
|
||||
dataset = _extract_dataset_from_ph3py_yaml(ph3py_yaml, fc_type)
|
||||
if dataset:
|
||||
filename_read_from = phono3py_yaml_filename
|
||||
|
||||
# Units of displacements and forces are converted. If forces don't
|
||||
# exist, the convesion will not be performed for forces.
|
||||
if calculator is not None:
|
||||
_convert_unit_in_dataset(
|
||||
dataset,
|
||||
distance_to_A=physical_units["distance_to_A"],
|
||||
force_to_eVperA=physical_units["force_to_eVperA"],
|
||||
physical_units = get_default_physical_units(calculator)
|
||||
|
||||
# Forces are not yet found in dataset. Then try to read from FORCES_FC3 or
|
||||
# FORCES_FC2.
|
||||
if force_filename is not None:
|
||||
if dataset is None or (dataset is not None and not forces_in_dataset(dataset)):
|
||||
dataset = _read_FORCES_FC3_or_FC2(
|
||||
natom, dataset, fc_type, filename=force_filename, log_level=log_level
|
||||
)
|
||||
if dataset:
|
||||
filename_read_from = force_filename
|
||||
|
||||
# Try to read FORCES_FC* if type-2 and return dataset.
|
||||
# None is returned unless type-2.
|
||||
# can emit FileNotFoundError.
|
||||
if dataset is None or (dataset is not None and not forces_in_dataset(dataset)):
|
||||
_dataset = read_type2_dataset(
|
||||
natom, filename=force_filename, log_level=log_level
|
||||
# Units of displacements and forces are converted. If forces don't
|
||||
# exist, the convesion will not be performed for forces.
|
||||
if calculator is not None:
|
||||
_convert_unit_in_dataset(
|
||||
dataset,
|
||||
distance_to_A=physical_units["distance_to_A"],
|
||||
force_to_eVperA=physical_units["force_to_eVperA"],
|
||||
)
|
||||
# Do not overwrite dataset when _dataset is None.
|
||||
if _dataset:
|
||||
filename_read_from = force_filename
|
||||
dataset = _dataset
|
||||
|
||||
# Units of displacements and forces are converted.
|
||||
if calculator is not None:
|
||||
_convert_unit_in_dataset(
|
||||
dataset,
|
||||
distance_to_A=physical_units["distance_to_A"],
|
||||
force_to_eVperA=physical_units["force_to_eVperA"],
|
||||
)
|
||||
|
||||
assert dataset is not None
|
||||
|
||||
|
@ -286,29 +283,6 @@ def parse_forces(
|
|||
if log_level:
|
||||
print("Cutoff-pair-distance: %f" % cutoff_pair_distance)
|
||||
|
||||
# Type-1 FORCES_FC*.
|
||||
# dataset comes either from disp_fc*.yaml or phono3py*.yaml.
|
||||
if not forces_in_dataset(dataset):
|
||||
if force_filename is not None:
|
||||
if fc_type == "fc3":
|
||||
parse_FORCES_FC3(dataset, filename=force_filename)
|
||||
else:
|
||||
parse_FORCES_FC2(dataset, filename=force_filename)
|
||||
|
||||
if log_level:
|
||||
print(
|
||||
f'Sets of supercell forces were read from "{force_filename}".',
|
||||
flush=True,
|
||||
)
|
||||
|
||||
# Unit of displacements is already converted.
|
||||
# Therefore, only unit of forces is converted.
|
||||
if calculator is not None:
|
||||
_convert_unit_in_dataset(
|
||||
dataset,
|
||||
force_to_eVperA=physical_units["force_to_eVperA"],
|
||||
)
|
||||
|
||||
return dataset
|
||||
|
||||
|
||||
|
@ -437,32 +411,49 @@ def _read_phono3py_fc2(phono3py, symmetrize_fc2, input_filename, log_level):
|
|||
phono3py.fc2 = phonon_fc2
|
||||
|
||||
|
||||
def read_type2_dataset(natom, filename="FORCES_FC3", log_level=0) -> Optional[dict]:
|
||||
"""Read type-2 FORCES_FC3."""
|
||||
def _read_FORCES_FC3_or_FC2(
|
||||
natom: int,
|
||||
dataset: Optional[dict],
|
||||
fc_type: str,
|
||||
filename: str = "FORCES_FC3",
|
||||
log_level: int = 0,
|
||||
) -> Optional[dict]:
|
||||
"""Read FORCES_FC3 or FORCES_FC2.
|
||||
|
||||
Read the first line of forces file to determine the type of the file.
|
||||
|
||||
"""
|
||||
if filename is None or not pathlib.Path(filename).exists():
|
||||
return None
|
||||
|
||||
with open(filename, "r") as f:
|
||||
len_first_line = get_length_of_first_line(f)
|
||||
if len_first_line == 6:
|
||||
dataset = get_dataset_type2(f, natom)
|
||||
if len_first_line == 6: # Type-2
|
||||
_dataset = get_dataset_type2(f, natom)
|
||||
if log_level:
|
||||
n_disp = len(dataset["displacements"])
|
||||
n_disp = len(_dataset["displacements"])
|
||||
print(f'{n_disp} snapshots were found in "{filename}".')
|
||||
else:
|
||||
dataset = None
|
||||
return _dataset
|
||||
|
||||
# Type-1
|
||||
if fc_type == "fc3":
|
||||
parse_FORCES_FC3(dataset, filename)
|
||||
else:
|
||||
parse_FORCES_FC2(dataset, filename)
|
||||
if log_level:
|
||||
print(
|
||||
f'Sets of supercell forces were read from "{filename}".',
|
||||
flush=True,
|
||||
)
|
||||
return dataset
|
||||
|
||||
|
||||
def _create_phono3py_fc3(
|
||||
def _read_dataset_fc3(
|
||||
phono3py: Phono3py,
|
||||
ph3py_yaml: Optional[Phono3pyYaml],
|
||||
phono3py_yaml_filename: Optional[str],
|
||||
symmetrize_fc3r: bool,
|
||||
is_compact_fc: bool,
|
||||
cutoff_pair_distance: Optional[float],
|
||||
fc_calculator: Optional[str],
|
||||
fc_calculator_options: Optional[str],
|
||||
calculator: Optional[str],
|
||||
use_pypolymlp: bool,
|
||||
mlp_params: Union[str, dict, PypolymlpParams],
|
||||
displacement_distance: Optional[float],
|
||||
|
@ -484,16 +475,15 @@ def _create_phono3py_fc3(
|
|||
when the former value is smaller than the later.
|
||||
|
||||
"""
|
||||
_ph3py_yaml = _get_default_ph3py_yaml(ph3py_yaml)
|
||||
|
||||
try:
|
||||
dataset = parse_forces(
|
||||
phono3py,
|
||||
ph3py_yaml=_ph3py_yaml,
|
||||
ph3py_yaml=ph3py_yaml,
|
||||
cutoff_pair_distance=cutoff_pair_distance,
|
||||
force_filename="FORCES_FC3",
|
||||
phono3py_yaml_filename=phono3py_yaml_filename,
|
||||
fc_type="fc3",
|
||||
calculator=calculator,
|
||||
log_level=log_level,
|
||||
)
|
||||
except RuntimeError as e:
|
||||
|
@ -518,12 +508,6 @@ def _create_phono3py_fc3(
|
|||
)
|
||||
else:
|
||||
phono3py.dataset = dataset
|
||||
phono3py.produce_fc3(
|
||||
symmetrize_fc3r=symmetrize_fc3r,
|
||||
is_compact_fc=is_compact_fc,
|
||||
fc_calculator=extract_fc2_fc3_calculators(fc_calculator, 3),
|
||||
fc_calculator_options=extract_fc2_fc3_calculators(fc_calculator_options, 3),
|
||||
)
|
||||
|
||||
|
||||
def run_pypolymlp_to_compute_forces(
|
||||
|
@ -653,13 +637,10 @@ def run_pypolymlp_to_compute_phonon_forces(
|
|||
ph3py.evaluate_phonon_mlp()
|
||||
|
||||
|
||||
def _create_phono3py_fc2(
|
||||
def _read_dataset_fc2(
|
||||
phono3py: Phono3py,
|
||||
ph3py_yaml: Optional[Phono3pyYaml],
|
||||
symmetrize_fc2,
|
||||
is_compact_fc,
|
||||
fc_calculator,
|
||||
fc_calculator_options,
|
||||
calculator,
|
||||
log_level,
|
||||
):
|
||||
"""Read forces and produce fc2.
|
||||
|
@ -667,19 +648,22 @@ def _create_phono3py_fc2(
|
|||
force_filename is either "FORCES_FC2" or "FORCES_FC3".
|
||||
|
||||
"""
|
||||
if phono3py.phonon_supercell_matrix is None:
|
||||
# _ph3py_yaml = _get_default_ph3py_yaml(ph3py_yaml)
|
||||
|
||||
if phono3py.phonon_supercell_matrix is not None:
|
||||
force_filename = "FORCES_FC2"
|
||||
elif phono3py.dataset is None:
|
||||
force_filename = "FORCES_FC3"
|
||||
else:
|
||||
force_filename = "FORCES_FC2"
|
||||
|
||||
_ph3py_yaml = _get_default_ph3py_yaml(ph3py_yaml)
|
||||
raise RuntimeError("Force filename is not determined.")
|
||||
|
||||
try:
|
||||
dataset = parse_forces(
|
||||
phono3py,
|
||||
ph3py_yaml=_ph3py_yaml,
|
||||
ph3py_yaml=ph3py_yaml,
|
||||
force_filename=force_filename,
|
||||
fc_type="phonon_fc2",
|
||||
calculator=calculator,
|
||||
log_level=log_level,
|
||||
)
|
||||
except RuntimeError as e:
|
||||
|
@ -690,18 +674,15 @@ def _create_phono3py_fc2(
|
|||
except FileNotFoundError as e:
|
||||
file_exists(e.filename, log_level)
|
||||
|
||||
phono3py.phonon_dataset = dataset
|
||||
phono3py.produce_fc2(
|
||||
symmetrize_fc2=symmetrize_fc2,
|
||||
is_compact_fc=is_compact_fc,
|
||||
fc_calculator=extract_fc2_fc3_calculators(fc_calculator, 2),
|
||||
fc_calculator_options=extract_fc2_fc3_calculators(fc_calculator_options, 2),
|
||||
)
|
||||
if phono3py.phonon_supercell_matrix is not None:
|
||||
phono3py.phonon_dataset = dataset
|
||||
elif phono3py.dataset is None:
|
||||
phono3py.dataset = dataset
|
||||
|
||||
|
||||
def _get_default_ph3py_yaml(ph3py_yaml: Optional[Phono3pyYaml]):
|
||||
_ph3py_yaml = ph3py_yaml
|
||||
if _ph3py_yaml is None and os.path.isfile("phono3py_disp.yaml"):
|
||||
if _ph3py_yaml is None and pathlib.Path("phono3py_disp.yaml").exists():
|
||||
_ph3py_yaml = Phono3pyYaml()
|
||||
_ph3py_yaml.read("phono3py_disp.yaml")
|
||||
return _ph3py_yaml
|
||||
|
|
|
@ -46,6 +46,7 @@ from phonopy.harmonic.force_constants import show_drift_force_constants
|
|||
from phonopy.interface.calculator import get_default_physical_units
|
||||
from phonopy.structure.atoms import PhonopyAtoms
|
||||
from phonopy.structure.cells import determinant
|
||||
from phonopy.units import VaspToTHz
|
||||
|
||||
from phono3py import Phono3py
|
||||
from phono3py.cui.create_force_constants import (
|
||||
|
@ -261,6 +262,7 @@ def load(
|
|||
or unitcell is not None
|
||||
or unitcell_filename is not None
|
||||
):
|
||||
_calculator = calculator
|
||||
cell, smat, pmat = load_helper.get_cell_settings(
|
||||
supercell_matrix=supercell_matrix,
|
||||
primitive_matrix=primitive_matrix,
|
||||
|
@ -268,7 +270,7 @@ def load(
|
|||
supercell=supercell,
|
||||
unitcell_filename=unitcell_filename,
|
||||
supercell_filename=supercell_filename,
|
||||
calculator=calculator,
|
||||
calculator=_calculator,
|
||||
symprec=symprec,
|
||||
)
|
||||
if phonon_supercell_matrix is not None:
|
||||
|
@ -286,7 +288,8 @@ def load(
|
|||
elif phono3py_yaml is not None:
|
||||
ph3py_yaml = Phono3pyYaml()
|
||||
ph3py_yaml.read(phono3py_yaml)
|
||||
cell = ph3py_yaml.unitcell
|
||||
cell = ph3py_yaml.unitcell.copy()
|
||||
_calculator = ph3py_yaml.calculator
|
||||
smat = ph3py_yaml.supercell_matrix
|
||||
ph_smat = ph3py_yaml.phonon_supercell_matrix
|
||||
if smat is None:
|
||||
|
@ -303,10 +306,13 @@ def load(
|
|||
else:
|
||||
_nac_params = None
|
||||
|
||||
# units keywords: factor, nac_factor, distance_to_A
|
||||
physical_units = get_default_physical_units(calculator)
|
||||
# Convert distance unit of unit cell to Angstrom
|
||||
physical_units = get_default_physical_units(_calculator)
|
||||
factor_to_A = physical_units["distance_to_A"]
|
||||
cell.cell = cell.cell * factor_to_A
|
||||
|
||||
if factor is None:
|
||||
_factor = physical_units["factor"]
|
||||
_factor = VaspToTHz
|
||||
else:
|
||||
_factor = factor
|
||||
ph3py = Phono3py(
|
||||
|
@ -320,7 +326,6 @@ def load(
|
|||
is_mesh_symmetry=is_mesh_symmetry,
|
||||
use_grg=use_grg,
|
||||
make_r0_average=make_r0_average,
|
||||
calculator=calculator,
|
||||
log_level=log_level,
|
||||
)
|
||||
|
||||
|
@ -343,6 +348,7 @@ def load(
|
|||
forces_fc3_filename=forces_fc3_filename,
|
||||
forces_fc2_filename=forces_fc2_filename,
|
||||
phono3py_yaml_filename=phono3py_yaml,
|
||||
calculator=_calculator,
|
||||
use_pypolymlp=use_pypolymlp,
|
||||
log_level=log_level,
|
||||
)
|
||||
|
@ -379,6 +385,7 @@ def set_dataset_and_force_constants(
|
|||
forces_fc2_filename: Optional[Union[os.PathLike, Sequence]] = None,
|
||||
phono3py_yaml_filename: Optional[os.PathLike] = None,
|
||||
cutoff_pair_distance: Optional[float] = None,
|
||||
calculator: Optional[str] = None,
|
||||
use_pypolymlp: bool = False,
|
||||
log_level: int = 0,
|
||||
) -> dict:
|
||||
|
@ -404,6 +411,7 @@ def set_dataset_and_force_constants(
|
|||
forces_fc3_filename=forces_fc3_filename,
|
||||
phono3py_yaml_filename=phono3py_yaml_filename,
|
||||
cutoff_pair_distance=cutoff_pair_distance,
|
||||
calculator=calculator,
|
||||
log_level=log_level,
|
||||
)
|
||||
if not read_fc["fc3"]:
|
||||
|
@ -416,6 +424,7 @@ def set_dataset_and_force_constants(
|
|||
ph3py_yaml=ph3py_yaml,
|
||||
fc2_filename=fc2_filename,
|
||||
forces_fc2_filename=forces_fc2_filename,
|
||||
calculator=calculator,
|
||||
log_level=log_level,
|
||||
)
|
||||
if not read_fc["fc2"]:
|
||||
|
@ -475,17 +484,23 @@ def compute_force_constants_from_datasets(
|
|||
if log_level and symmetrize_fc and fc_calculator is None:
|
||||
print("fc3 was symmetrized.")
|
||||
|
||||
if not read_fc["fc2"] and (
|
||||
forces_in_dataset(ph3py.dataset) or forces_in_dataset(ph3py.phonon_dataset)
|
||||
):
|
||||
ph3py.produce_fc2(
|
||||
symmetrize_fc2=symmetrize_fc,
|
||||
is_compact_fc=is_compact_fc,
|
||||
fc_calculator=fc2_calculator,
|
||||
fc_calculator_options=extract_fc2_fc3_calculators(fc_calculator_options, 2),
|
||||
)
|
||||
if log_level and symmetrize_fc and fc_calculator is None:
|
||||
print("fc2 was symmetrized.")
|
||||
if not read_fc["fc2"]:
|
||||
if (
|
||||
ph3py.phonon_supercell_matrix is None and forces_in_dataset(ph3py.dataset)
|
||||
) or (
|
||||
ph3py.phonon_supercell_matrix is not None
|
||||
and forces_in_dataset(ph3py.phonon_dataset)
|
||||
):
|
||||
ph3py.produce_fc2(
|
||||
symmetrize_fc2=symmetrize_fc,
|
||||
is_compact_fc=is_compact_fc,
|
||||
fc_calculator=fc2_calculator,
|
||||
fc_calculator_options=extract_fc2_fc3_calculators(
|
||||
fc_calculator_options, 2
|
||||
),
|
||||
)
|
||||
if log_level and symmetrize_fc and fc_calculator is None:
|
||||
print("fc2 was symmetrized.")
|
||||
|
||||
|
||||
def _get_dataset_or_fc3(
|
||||
|
@ -495,6 +510,7 @@ def _get_dataset_or_fc3(
|
|||
forces_fc3_filename: Optional[Union[os.PathLike, Sequence]] = None,
|
||||
phono3py_yaml_filename: Optional[os.PathLike] = None,
|
||||
cutoff_pair_distance: Optional[float] = None,
|
||||
calculator: Optional[str] = None,
|
||||
log_level: int = 0,
|
||||
) -> tuple[bool, dict]:
|
||||
p2s_map = ph3py.primitive.p2s_map
|
||||
|
@ -523,6 +539,7 @@ def _get_dataset_or_fc3(
|
|||
None,
|
||||
phono3py_yaml_filename,
|
||||
cutoff_pair_distance,
|
||||
calculator,
|
||||
log_level,
|
||||
)
|
||||
elif forces_fc3_filename is not None or pathlib.Path("FORCES_FC3").exists():
|
||||
|
@ -536,6 +553,7 @@ def _get_dataset_or_fc3(
|
|||
force_filename,
|
||||
phono3py_yaml_filename,
|
||||
cutoff_pair_distance,
|
||||
calculator,
|
||||
log_level,
|
||||
)
|
||||
elif ph3py_yaml is not None and ph3py_yaml.dataset is not None:
|
||||
|
@ -547,6 +565,7 @@ def _get_dataset_or_fc3(
|
|||
None,
|
||||
phono3py_yaml_filename,
|
||||
cutoff_pair_distance,
|
||||
calculator,
|
||||
log_level,
|
||||
)
|
||||
|
||||
|
@ -558,6 +577,7 @@ def _get_dataset_phonon_dataset_or_fc2(
|
|||
ph3py_yaml: Optional[Phono3pyYaml] = None,
|
||||
fc2_filename: Optional[os.PathLike] = None,
|
||||
forces_fc2_filename: Optional[Union[os.PathLike, Sequence]] = None,
|
||||
calculator: Optional[str] = None,
|
||||
log_level: int = 0,
|
||||
) -> tuple[bool, dict, dict]:
|
||||
phonon_p2s_map = ph3py.phonon_primitive.p2s_map
|
||||
|
@ -584,6 +604,7 @@ def _get_dataset_phonon_dataset_or_fc2(
|
|||
ph3py_yaml,
|
||||
None,
|
||||
"phonon_fc2",
|
||||
calculator,
|
||||
log_level,
|
||||
)
|
||||
elif (
|
||||
|
@ -598,6 +619,7 @@ def _get_dataset_phonon_dataset_or_fc2(
|
|||
ph3py_yaml,
|
||||
force_filename,
|
||||
"phonon_fc2",
|
||||
calculator,
|
||||
log_level,
|
||||
)
|
||||
elif ph3py_yaml is not None and ph3py_yaml.phonon_dataset is not None:
|
||||
|
@ -608,6 +630,7 @@ def _get_dataset_phonon_dataset_or_fc2(
|
|||
ph3py_yaml,
|
||||
None,
|
||||
"phonon_fc2",
|
||||
calculator,
|
||||
log_level,
|
||||
)
|
||||
|
||||
|
@ -620,6 +643,7 @@ def _get_dataset_for_fc3(
|
|||
force_filename,
|
||||
phono3py_yaml_filename,
|
||||
cutoff_pair_distance,
|
||||
calculator,
|
||||
log_level,
|
||||
) -> dict:
|
||||
dataset = parse_forces(
|
||||
|
@ -629,6 +653,7 @@ def _get_dataset_for_fc3(
|
|||
force_filename=force_filename,
|
||||
phono3py_yaml_filename=phono3py_yaml_filename,
|
||||
fc_type="fc3",
|
||||
calculator=calculator,
|
||||
log_level=log_level,
|
||||
)
|
||||
return dataset
|
||||
|
@ -639,6 +664,7 @@ def _get_dataset_for_fc2(
|
|||
ph3py_yaml: Optional[Phono3pyYaml],
|
||||
force_filename,
|
||||
fc_type,
|
||||
calculator,
|
||||
log_level,
|
||||
):
|
||||
dataset = parse_forces(
|
||||
|
@ -646,6 +672,7 @@ def _get_dataset_for_fc2(
|
|||
ph3py_yaml=ph3py_yaml,
|
||||
force_filename=force_filename,
|
||||
fc_type=fc_type,
|
||||
calculator=calculator,
|
||||
log_level=log_level,
|
||||
)
|
||||
return dataset
|
||||
|
|
|
@ -59,13 +59,14 @@ def get_parser(fc_symmetry=False, is_nac=False, load_phono3py_yaml=False):
|
|||
default=False,
|
||||
help=("Use ALM for generating 2nd and 3rd force constants " "in one fitting"),
|
||||
)
|
||||
parser.add_argument(
|
||||
"--amplitude",
|
||||
dest="displacement_distance",
|
||||
type=float,
|
||||
default=None,
|
||||
help="Distance of displacements",
|
||||
)
|
||||
if not load_phono3py_yaml:
|
||||
parser.add_argument(
|
||||
"--amplitude",
|
||||
dest="displacement_distance",
|
||||
type=float,
|
||||
default=None,
|
||||
help="Distance of displacements",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--ave-pp",
|
||||
dest="use_ave_pp",
|
||||
|
|
|
@ -38,6 +38,7 @@ from __future__ import annotations
|
|||
|
||||
import argparse
|
||||
import datetime
|
||||
import pathlib
|
||||
import sys
|
||||
from typing import Optional
|
||||
|
||||
|
@ -92,6 +93,7 @@ from phono3py.file_IO import (
|
|||
)
|
||||
from phono3py.interface.phono3py_yaml import Phono3pyYaml
|
||||
from phono3py.phonon.grid import get_grid_point_from_address, get_ir_grid_points
|
||||
from phono3py.phonon3.dataset import forces_in_dataset
|
||||
from phono3py.phonon3.fc3 import show_drift_fc3
|
||||
from phono3py.phonon3.gruneisen import run_gruneisen_parameters
|
||||
from phono3py.version import __version__
|
||||
|
@ -485,7 +487,6 @@ def init_phono3py(
|
|||
use_grg=settings.use_grg,
|
||||
make_r0_average=settings.is_fc3_r0_average,
|
||||
symprec=symprec,
|
||||
calculator=interface_mode,
|
||||
log_level=log_level,
|
||||
)
|
||||
phono3py.masses = settings.masses
|
||||
|
@ -541,15 +542,16 @@ def create_supercells_with_displacements(
|
|||
log_level=log_level,
|
||||
)
|
||||
|
||||
store_nac_params(
|
||||
phono3py,
|
||||
settings,
|
||||
cell_info["phonopy_yaml"],
|
||||
unitcell_filename,
|
||||
log_level,
|
||||
nac_factor=Hartree * Bohr,
|
||||
load_phonopy_yaml=load_phono3py_yaml,
|
||||
)
|
||||
if pathlib.Path("BORN").exists():
|
||||
store_nac_params(
|
||||
phono3py,
|
||||
settings,
|
||||
cell_info["phonopy_yaml"],
|
||||
unitcell_filename,
|
||||
log_level,
|
||||
nac_factor=Hartree * Bohr,
|
||||
load_phonopy_yaml=load_phono3py_yaml,
|
||||
)
|
||||
|
||||
if log_level:
|
||||
if phono3py.supercell.magnetic_moments is None:
|
||||
|
@ -574,6 +576,7 @@ def store_force_constants(
|
|||
settings,
|
||||
ph3py_yaml: Phono3pyYaml,
|
||||
phono3py_yaml_filename,
|
||||
calculator,
|
||||
input_filename,
|
||||
output_filename,
|
||||
load_phono3py_yaml,
|
||||
|
@ -590,6 +593,7 @@ def store_force_constants(
|
|||
phono3py_yaml_filename=phono3py_yaml_filename,
|
||||
cutoff_pair_distance=settings.cutoff_pair_distance,
|
||||
use_pypolymlp=settings.use_pypolymlp,
|
||||
calculator=calculator,
|
||||
log_level=log_level,
|
||||
)
|
||||
(fc_calculator, fc_calculator_options) = get_fc_calculator_params(
|
||||
|
@ -616,10 +620,18 @@ def store_force_constants(
|
|||
if log_level:
|
||||
if phono3py.fc3 is None:
|
||||
print("fc3 could not be obtained.")
|
||||
if not forces_in_dataset(phono3py.dataset):
|
||||
print("Forces were not found.")
|
||||
else:
|
||||
show_drift_fc3(phono3py.fc3, primitive=phono3py.primitive)
|
||||
if phono3py.fc2 is None:
|
||||
print("fc2 could not be obtained.")
|
||||
if phono3py.phonon_supercell_matrix is None:
|
||||
if not forces_in_dataset(phono3py.dataset):
|
||||
print("Forces were not found.")
|
||||
else:
|
||||
if not forces_in_dataset(phono3py.phonon_dataset):
|
||||
print("Forces for dim-fc2 were not found.")
|
||||
else:
|
||||
show_drift_force_constants(
|
||||
phono3py.fc2, primitive=phono3py.phonon_primitive, name="fc2"
|
||||
|
@ -661,6 +673,7 @@ def store_force_constants(
|
|||
settings,
|
||||
ph3py_yaml=ph3py_yaml,
|
||||
phono3py_yaml_filename=phono3py_yaml_filename,
|
||||
calculator=calculator,
|
||||
input_filename=input_filename,
|
||||
output_filename=output_filename,
|
||||
log_level=log_level,
|
||||
|
@ -1129,6 +1142,7 @@ def main(**argparse_control):
|
|||
settings,
|
||||
cell_info["phonopy_yaml"],
|
||||
unitcell_filename,
|
||||
interface_mode,
|
||||
input_filename,
|
||||
output_filename,
|
||||
load_phono3py_yaml,
|
||||
|
|
|
@ -133,10 +133,34 @@ class Phono3pyYamlLoader(PhonopyYamlLoaderBase):
|
|||
|
||||
This method override PhonopyYaml._parse_dataset.
|
||||
|
||||
Phonon_displacements in type1 in old format is represented in yaml by
|
||||
|
||||
displacements:
|
||||
|
||||
But displacements (for fc3) in type2 in old format is also represented
|
||||
by
|
||||
|
||||
displacements:
|
||||
|
||||
Therefore, these have to be distinguished by phonon_supercell_matrix.
|
||||
|
||||
In new format of type1
|
||||
|
||||
displacements: -> phonon_displacements:
|
||||
|
||||
and displacements: of type2 is put under phonon_dataset: block.
|
||||
|
||||
"""
|
||||
self._data.phonon_dataset = self._get_dataset(
|
||||
self._data.phonon_supercell, key_prefix="phonon_"
|
||||
)
|
||||
if (
|
||||
self._data.phonon_supercell_matrix is not None
|
||||
and "phonon_displacements" not in self._yaml
|
||||
and "displacements" in self._yaml
|
||||
): # old type1
|
||||
self._data.phonon_dataset = self._get_dataset(self._data.phonon_supercell)
|
||||
else:
|
||||
self._data.phonon_dataset = self._get_dataset(
|
||||
self._data.phonon_supercell, key_prefix="phonon_"
|
||||
)
|
||||
|
||||
def _parse_fc3_dataset(self):
|
||||
"""Parse force dataset for fc3.
|
||||
|
|
|
@ -34,4 +34,4 @@
|
|||
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
# POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
__version__ = "3.3.3"
|
||||
__version__ = "3.3.4"
|
||||
|
|
Loading…
Reference in New Issue