Skip to content

Latest commit

 

History

History
373 lines (275 loc) · 14.1 KB

phono3py-isotopes.md

File metadata and controls

373 lines (275 loc) · 14.1 KB

phono3py-isotopes

phono3py-isotopes is a simple script to generate Phono3py input parameters for simulating the effect of mass variation at atomic sites on the lattice thermal conductivity κlatt.

Theory

The average atomic masses mave directly affect the phonon frequencies ωλ via the dynamical matrix D(q), and also appear in the expression for the three-phonon interaction strengths Pλ used to calculate the linewidths Γλ. More details and formulae can be found in Ref. 1.

In Phono3py, the average mass at the atomic sites in the input structure can be set using the --mass command-line option or the corresponding MASS settings tag. For sites with i isotopes with fractional abundance ai and mass mi the average mass is calculated as:

The natural mass variation at atomic sites due to the presence of isotopes with different masses can introduce additional "isotope scattering" and thus reduce κlatt. In Phono3py, isotope effects can be included using the model in Ref. 2. The required parameter is the "mass variance" m>var, which is calculated using the formula:

The mass variance at the atomic sites can be set using the --mass-variances/--mv command-line parameters or the corresponding MASS_VARIANCES tag.

Brief tutorial

a. Natural isotopic abundance

To obtain the appropriate --mass-variances tag to input the natural isotopic mass variance into Phono3py, run phono3py-isotopes with the list of atoms in the crystal structure (in site order):

$ phono3py-isotopes Ga As

The program prints for each atomic site a list of isotopes with their abundance and mass, followed by the calculated average mass and mass variance. The --mass and --mass-variances tags to input into Phono3py are printed at the end of the output.

Site 1 (Ga)
-----------

  69_Ga   : a_i =  60.11 %, m_i =   68.92558
  71_Ga   : a_i =  39.89 %, m_i =   70.92471

  m_ave = 69.72307
  m_var = 1.97127e-04


Site 2 (As)
-----------

  75_As   : a_i = 100.00 %, m_i =   74.92160

  m_ave = 74.92160
  m_var = 0.00000e+00


To input this data into Phono3py:
---------------------------------
  --mass="69.72307 74.92160"
  --mass-variances="1.97127e-04 0.00000e+00"

We can now perform Phono3py calculations with and without the mass variance:

$ phono3py --dim="2 2 2" --dim-fc2="3 3 3" --pa="0 1/2 1/2  1/2 0 1/2  1/2 1/2 0" \
    --fc2 --fc3 -v --br --mesh="32 32 32"
$ phono3py --dim="2 2 2" --dim-fc2="3 3 3" --pa="0 1/2 1/2  1/2 0 1/2  1/2 1/2 0" \
    --fc2 --fc3 -v --br --mesh="32 32 32" --read-gamma \
    --mass="69.72307 74.92160" --mass-variances="1.97127e-04 0.00000e+00" -o "iso.nat.a"

This example is purely for illustrative purposes, because (a) the atomic masses used are the Phono3py defaults, so do not actually need to be set in this case, and (b) the natural isotopic mass variance can be set automatically using the --isotope tag:

$ phono3py --dim="2 2 2" --dim-fc2="3 3 3" --pa="0 1/2 1/2  1/2 0 1/2  1/2 1/2 0" \
    --fc2 --fc3 -v --br --mesh="32 32 32" --read-gamma --isotope -o "iso.nat.b"

As expected, the last two commands give practically the same result.*

Calc. κlatt [W m-1 K-1]
T = 100 K T = 300 K
No Iso. 158.9 37.89
Nat. Iso. (1) 144.6 36.90
Nat. Iso. (2) 144.6 36.90

* The results are not exactly the same. This is because Phonopy has two different databases - a list of average masses, and a higher-precision list of isotopic masses used to calculate mass variances when the --isotope flag is set. phono3py-isotopes uses the latter database for both, so the masses specified in the --mass tag will usually be slightly different to the defaults. In practice, the differences in the calculated κlatt are negligably small.

b. Site mass disorder

Suppose we replaced 1 % of the As with P. The effect of this doping/alloying on the thermal transport can be modelled approximately* by changing the average mass and mass variance at the anion site. The appropriate --mass and --mass-variances tags to input this into Phono3py can be generated with phono3py-isotopes using the --site-average option.

$ phono3py-isotopes Ga, As P --site-average --site-occupation="1.0, 0.99 0.01"

The comma in the list of atomic symbols delineates atoms at the two atomic sites - Site 1 has Ga, and Site 2 has a mix of As and P. A corresponding list of site occupation fractions is also set with the --site-occupation parameter. Note that phono3py-isotopes also includes the natural isotopic mass variation when calculating the average mass and mass variance for mixed sites.

Running the command above produces the following output:

Site 1 (Ga)
-----------

  69_Ga   : a_i =  60.11 %, m_i =   68.92558
  71_Ga   : a_i =  39.89 %, m_i =   70.92471

  m_ave = 69.72307
  m_var = 1.97127e-04


Site 2 (As, P)
--------------

  75_As   : a_i =  99.00 %, m_i =   74.92160
  31_P    : a_i =   1.00 %, m_i =   30.97376

  m_ave = 74.48212
  m_var = 3.44672e-03


To input this data into Phono3py:
---------------------------------
  --mass="69.72307 74.48212"
  --mass-variances="1.97127e-04 3.44672e-03"

We can now input these parameters into Phono3py:

$ phono3py --dim="2 2 2" --dim-fc2="3 3 3" --pa="0 1/2 1/2  1/2 0 1/2  1/2 1/2 0" \
    --fc2 --fc3 -v --br --mesh="32 32 32" \
    --mass="69.72307 74.48212" --mass-variances="1.97127e-04 3.44672e-03" -o "As99-P1"

Note that we did not use the --read-gamma tag as in the previous example. The doping changes the average mass as well as the mass variance, which will in turn affect the phonon spectrum and the linewidths.

Calc. κlatt [W m-1 K-1]
T = 100 K T = 300 K
GaAs 144.6 36.90
Ga(As0.99P0.01) 81.53 28.99

* This procedure is approximate because it does not account for changes in the 2nd- and 3rd-order force constants due to differences in chemical bonding and/or changes in cell volume - more accurate predictions for homogeneous alloys might be obtained using a virtual crystal approximation (VCA) such as that implemented in almaBTE Ref. 3.

c. Specific isotope ratios

The --site-average option can also be used to set up calculations for specific isotope ratios.

Running the script to prepare data as in the first example lists the natural abundances and masses of the two isotopes of Ga:

$ phono3py-isotopes Ga As
69_Ga   : a_i =  60.11 %, m_i =   68.92558
71_Ga   : a_i =  39.89 %, m_i =   70.92471

We want to examine the effect of isotope composition on κlatt. The required parameter sets can be prepared using phono3py-isotopes by using the --site-average option and entering the two isotope masses in place of atomic symbols in the list of atoms:

$ phono3py-isotopes 68.92558 70.92471, As --site-average --site-occupation="0.5 0.5, 1.0"

This calculates parameters for a 50/50 mixed site occupied by two (unspecified) atoms with masses of 68.92558 and 70.92471 amu at the Ga site:

Site 1 (?, ?)
-------------

  ?       : a_i =  50.00 %, m_i =   68.92558
  ?       : a_i =  50.00 %, m_i =   70.92471

  m_ave = 69.92515
  m_var = 2.04341e-04

The occupation fractions can be varied to simulate a range of isotope compositions:

% 69Ga % 71Ga Ave. Mass [amu] Mass Var.
100 0 68.92558 -
90 10 69.12549 7.52745e-05
80 20 69.32541 1.33051e-04
70 30 69.52532 1.73626e-04
60 40 69.72523 1.97294e-04
50 50 69.92515 2.04341e-04
40 60 70.12506 1.95050e-04
30 70 70.32497 1.69700e-04
20 80 70.52488 1.28563e-04
10 90 70.72480 7.19087e-05
0 100 70.92471 -

To run these calculations, a shell script is probably in order:

#!/bin/bash

function RunPhono3py() {
  phono3py --dim="2 2 2" --dim-fc2="3 3 3" --pa="0 1/2 1/2  1/2 0 1/2  1/2 1/2 0" \
    --fc2 --fc3 -v --br --mesh="32 32 32" \
    --mass="${1} 74.92160" --mass-variances="${2} 0.0" -o "${3}"
  }

RunPhono3py 68.92558 0           "iso.100-0"
RunPhono3py 69.12549 7.52745e-05 "iso.90-10"
RunPhono3py 69.32541 1.33051e-04 "iso.80-20"
RunPhono3py 69.52532 1.73626e-04 "iso.70-30"
RunPhono3py 69.72523 1.97294e-04 "iso.60-40"
RunPhono3py 69.92515 2.04341e-04 "iso.50-50"
RunPhono3py 70.12506 1.95050e-04 "iso.40-60"
RunPhono3py 70.32497 1.69700e-04 "iso.30-70"
RunPhono3py 70.52488 1.28563e-04 "iso.20-80"
RunPhono3py 70.72480 7.19087e-05 "iso.10-90"
RunPhono3py 70.92471 0           "iso.0-100"

Note again that we have not used the --read-gamma option because we are changing the average mass at each step.

Two effects are visible in these results. κlatt falls to a minimum at the 50/50 isotope ratio, which is where the mass variance at the Ga site is largest. The pure 71Ga composition is predicted to have a lower κlatt than the 69Ga composition, which must be purely down to the effect of the different atomic masses on the phonon frequencies and three-phonon interaction strengths.

% 69Ga % 79Ga κlatt [W m-1 K-1]
T = 100 K T = 300 K
100 0159.538.03
90 10153.337.60
80 20149.037.28
70 30146.237.05
60 40144.636.90
50 50144.036.84
40 60144.336.84
30 70145.736.93
20 80148.337.10
10 90152.237.35
0100157.937.69

d. Automating parameter generation

In the last example, the parameters for a set of 11 isotope ratios were collected by hand and input into a shell script to perform the Phono3py calculations. This way of doing things is probably OK for a one off, but it will quickly become tedious for larger problems.

To help with this, phono3py-isotopes has a --scriptable flag that requests a more concise, "scripting friendly" output:

$ phono3py-isotopes 68.92558 70.92471, As --site-average --site-occupation="0.5 0.5, 1.0" --scriptable

With this option, the script prints just two lines of output:

69.92515 74.92160
2.04341e-04 0.00000e+00

The first line lists the average masses at each site, separated by single spaces, and the second lists the corresponding mass variances.

Suppose we set up a text file with a list of isotopic compositions (site occupations) like the following:

$ cat compositions.dat
1.0  0.0
0.9  0.1
0.8  0.2
...
0.0  1.0

We can modify the script from the previous example to read this file, generate the parameters for each isotope composition, and then perform the Phono3py calculations:

#!/bin/bash

function RunPhono3py() {
  phono3py --dim="2 2 2" --dim-fc2="3 3 3" --pa="0 1/2 1/2  1/2 0 1/2  1/2 1/2 0" \
    --fc2 --fc3 -v --br --mesh="32 32 32" \
    --mass="${1} 74.92160" --mass-variances="${2} 0.0" -o "${3}"
  }

while read -r x y
do
  params=$(
    phono3py-isotopes 68.92558 70.92471 \
      --site-average --site-occupation="${x} ${y}" \
      --scriptable
    )

  read -r m_ave m_var <<< ${params}

  RunPhono3py "${m_ave}" "${m_var}" "iso.${x}-${y}"
done < "compositions.dat"

Note that we have simplified things further by only computing the average mass and mass variance at the Ga site, as the parameters for the As site will be the same in every run.

Notes and References

The equations in this document were produced using the Online LaTeX Equation Editor from CodeCogs.

  1. A. Togo, L. Chaput and I. Tanaka, Physical Review B 91, 093206 (2015), DOI: 10.1103/PhysRevB.91.094306
  2. S.-I. Tamura, Physical Review B 27 (2), 858-866 (1983), DOI: 10.1103/PhysRevB.27.858
  3. J. Carrete, B. Vermeersch, A. Katre, A. van Roekeghem, T. Wan, G. K. H. Madsen and N. Mingo, Computer Physics Communications 220, 351-362 (2017), DOI: 10.1016/j.cpc.2017.06.023