Thermal conductivity
Short description
Calculates the lattice thermal conductivity from the iterative solution of the phonon Boltzmann equation. In addition, cumulative plots and raw data dumps of intermediate values are available.
Command line options:
Optional switches:
-
--readiso
default value .false.
Read the isotope distribution frominfile.isotopes
. The format is specified here. -
--qpoint_grid value#1 value#2 value#3
,-qg value#1 value#2 value#3
default value 26 26 26
Density of q-point mesh for Brillouin zone integrations. -
--integrationtype value
,-it value
, value in:1,2,3
default value 2
Type of integration for the phonon DOS. 1 is Gaussian, 2 adaptive Gaussian and 3 Tetrahedron. -
--sigma value
default value 1.0
Global scaling factor for adaptive Gaussian smearing. -
--threshold value
default value 4.0
Consider a Gaussian distribution to be 0 after this many standard deviations. -
--readqmesh
default value .false.
Read the q-point mesh from file. To generate a q-mesh file, see the genkpoints utility. -
--temperature value
default value -1
Evaluate thermal conductivity at a single temperature. -
--temperature_range value#1 value#2 value#3
default value 100 300 5
Series of temperatures for thermal conductivity. Specify min, max and the number of points. -
--logtempaxis
default value .false.
Space the temperature points logarithmically instead of linearly. -
--max_mfp value
default value -1
Add a limit on the mean free path as an approximation of domain size. -
--dumpgrid
default value .false.
Write files with q-vectors, frequencies, eigenvectors and group velocities for a grid. -
--noisotope
default value .false.
Do not consider isotope scattering. -
--help
,-h
Print this help message -
--version
,-v
Print version
Examples
mpirun thermal_conductivity --temperature 300
mpirun thermal_conductivity -qg 15 15 15 --temperature_range 200 600 50
mpirun thermal_conductivity --integrationtype 2 -qg 30 30 30 --max_mfp 1E-6
Longer summary
Heat transport can be determined by solving the inelastic phonon Boltzmann equation. By applying a temperature gradient \(\nabla T_\alpha\) in direction \(\alpha\), the heat current is given by the group velocities of phonon mode \(\lambda\) and non-equilibrium phonon distribution function \(\tilde{n}_\lambda\):2
Assuming the thermal gradient is small, the non-equilibrium distribution function can be linearised as,
That is a linear deviation from the equilibrium distribution function \(n_{\lambda}\). Inserting this into the equation 1, and exploiting the fact that the equilibrium occupation carries no heat, we arrive at,
Utilizing Fourier's law, \(J=\kappa \nabla T\), and identifying the phonon heat capacity,
we arrive at,
which can be interpreted as follows: the heat transported by each phonon will depend on how much heat it carries, how fast it travels, and how long it lives. The phonon-phonon induced lifetime can be determined from the self-energy \(\Gamma_{\lambda}\). In addition, one must consider the scattering with mass impurities (isotopes), and the boundaries of the sample.
Lifetimes
With the third order force constants we can calculate the phonon lifetimes needed as input to the thermal conductivity calculations. The lifetime due to phonon-phonon scattering is related to the imaginary part of the phonon self energy ( \(\Sigma=\Delta+i\Gamma\) ).
where \(\tau_{\lambda}\) is the lifetime phonon mode \(\lambda\), and
\(n_{\lambda}\) is the equilibrium occupation number. The sum is over momentum conserving three-phonon processes, \(\textbf{q}+\textbf{q}'+\textbf{q}''=\textbf{G}\), and the deltafunctions in frequency ensure energy conservation. The three-phonon matrix elements are given by
where \(m_i\) is the mass of atom \(i\), \(\epsilon_{\lambda}^{\alpha i}\) is component \(\alpha\) of the eigenvector for mode \(\lambda\) and atom \(i\) and \(\textbf{r}_i\) is the lattice vector associated with atom \(i\).
Mass disorder, in the form of natural isotope distributions also cause thermal resistance. According to Tamura5, if the isotopes are randomly distributed on the lattice sites then the strength of the isotope scattering can be given by a mass variance parameter \(g\):
where \(\bar{m_i}\) is the average isotopic mass( \(\bar{m_i}=\sum_j c_i^j m_i^j\) ), \(m^j_i\) is the mass of isotope \(j\) of atom \(i\) and \(c^j_i\) is its concentration. The contribution to the imaginary part of the self-energy is
Per default, the isotope distribution will be the natural distribution. In case some other distribution is desired, this can be specified.
Scattering by domain boundaries is implemented as
Where \(d\) is a characteristic domain size.
Beyond the relaxation time approximation
So far we have have considered the phonon heat conduction as an elastic process, whereas it is inelastic. This can be treated by iteratively solving the phonon boltzmann equation, formulated in terms of the (linear) deviations from equilibrium occupation numbers.1,6,7,8,9
Phonon scattering rates and the phonon Boltzmann equation
I always found it confusing how you arrived at most of these things. This is something I put together for myself, to clear it up a bit. Please bear in mind that this is not an attempt at a formal derivation whatsoever, just to make it a bit easier to interpret the different terms. There might be an arbitrary number of plusses and minuses and other things missing. Recall the transformation we introduced earlier:
and consider the three-phonon process where two phonons combine into one:
This process changes the state of the system:
that is, we lost one phonon at \(\lambda\) and one at \(\lambda'\), and created a phonon at \(\lambda''\). Mostly out of habit, we sandwich the Hamiltonian between the initial and final states:
and remember the rules for ladder operators, and that the eigenstates to the quantum harmonic oscillator are orthogonal:
Inserting eq \ref{eq:normalmodetransformation} into \ref{eq:sandwich} (and realising that the kinetic energy part and the second order part disappears), we end up with a pretty large expression, that we will deal with in steps, first identify
as well as
where the factor 3 comes from the multiplicity, to get at
The initial factor 1/2 is the multiplicity cancelled by the 3! from the Hamiltonian. Here, as it happens, we can identify the three-phonon matrix elements and simplify a little bit more
The probability of this particular three-phonon process can be estimated via the Fermi golden rule:
With near identical reasoning, we can also arrive at
for the other kind of three-phonon processes, and
for the isotope scattering. I leave those derivations as an exercise. The phonon Boltzmann equation is stated as:
Where \(\tilde{n}\) is the non-equilibrium occupation number. This is ridiculously complicated. To make life easier, we only consider the terms we outlined above as possible collisions. Gathering all possible events that involve mode \(\lambda\) we get
Which does not seem to make life easier. To make it slightly worse, we insert \ref{pplus} and \ref{pminus} into this, and at the same time say that the non-equilibrium distribution functions are the equilibrium distributions, plus a (small) deviation:
After some hard work, and discarding terms of \(\epsilon^2\) and higher, we get
Which does not seem like a lot of help. If we make another substitution, and say that the deviation from equilibrium behaves sort of like the equilibrium (with no loss of generality, just to make life easier):
Inserting this, and more tedious algebra, we get
If we add the isotope term again, that I forgot at some point between the beginning and here, we can rearrange this in terms of scattering rates that should look familiar (using strange relations for occupation numbers that only hold when the deltafunctions in energy are satisfied):
where
What we have done here is to rearrange the transition propabilities to scattering rates. If we let
and combine everything we end up with
Where we can identify
And rearrange terms
And we have a set of equations for \(F\) that we can solve self-consistently. Previously, we used the imaginary part of the self-energy to get a phonon lifetime. What we got here, from Fermi golden rule, is related:
This can also be done for the three-phonon terms:
Where the second to last step seems a little impossible, but with \(\hbar\omega/k_BT = x\), you get
which comes out to 0 when \(x=x'+x''\), which the deltafunction ensures. In the same way
comes out to 0 when \(x''=x+x'\). We can directly relate the relaxation time lifetime
to an initial guess
and iteratively solve
to arrive at the non-equilibrium distributions. The thermal conductivity tensor is then given as
Off-diagonal / coherence's contribution
The Boltzmann equation only takes into account the relaxation of phonons from perturbed state to the equilibrium. However, for systems with complex unit cell, a contribution stemming from coherence tunneling between different phonons (\(\lambda \neq \lambda'\)) can become important. This off-diagonal term can be introduced both by a formulation based on the Hardy current 10 or a Wigner current 12, with very similar results13. In TDEP, we use the formulation based on the Hardy heat current 10
where \(v_{\lambda\lambda'}^\alpha\) are generalized group velocity tensor 14
with \(\mathbf{R}\) the distance vector between unit cells and \(m_i\) the mass of atom \(i\) in the unit cell. It should be recognized that for \(\lambda = \lambda'\), we recover the heat current used previously to derive the thermal conductivity with the Boltzman equation.
The derivation of this off-diagonal contribution starts from the Green-Kubo formula for the thermal conductivity tensor
Injecting the harmonic heat current into this equation allows to rewrite the total thermal conductivity tensor as 11
where \(\kappa_{\alpha\beta}^{\mathrm{BTE}}\) is the thermal conductivity from the previous section and \(\kappa_{\alpha\beta}^{{\rm c}}\) is the off-diagonal (coherences') contribution. This term is computed as (cf. Eq. 22-24 in 11)
with
Cumulative kappa
@todo Check code snippets
@todo Spectral kappa, links to things.
Experimentally, the cumulative thermal conductivity with respect to phonon mean free path,
can be measured.3 The cumulative thermal conductivity can then be computed as a sum of the fraction of heat that is carried by phonons with mean free paths smaller than \(l\):
where \(\Theta\) is the Heaviside step function.
One can also define a spectral thermal conductivity as
which is a measure which frequencies contribute most to thermal transport.
Thin film scattering
Constrained geometries will incur additional scattering from domain boundaries. For a thin film (thin, but thick enough that the interior of the film is accurately described by bulk phonons) one can estimate the suppression due to film thinkness.4 Assyming the cross-plane direction of the film is in the \(y\)-direction, and the thermal gradient is applied in the \(z\)-direction, the in-plane thermal conductivity \(\kappa_{zz}\) is supressed as:
where
where \(v_y\) and \(v_z\) are the components of the phonon group velocity along the \(y\) and \(z\) directions, \(\tau_{\lambda}\) is the phonon relaxation time. \(l^{y}_{\lambda}\) is the \(y\) component of the MFP and \(d\) is the thickness of the film in \(y\)-direction.
Input files
These files are necesarry:
and these are optional:
- infile.isotopes (for non-natural isotope distribution)
Output files
Depending on options, the set of output files may differ. We start with the basic files that are written after running this code.
outfile.thermal_conductivity
This file contains components of the thermal conductivity tensor \(\kappa_{\alpha \beta}\) for each temperature.
\(test\)
Row | Description |
---|---|
1 | \(T_1 \qquad \kappa_{xx} \quad \kappa_{yy} \quad \kappa_{zz} \quad \kappa_{xz} \quad \kappa_{yz} \quad \kappa_{xy} \quad \kappa_{zx} \quad \kappa_{zy} \quad \kappa_{yx}\) |
2 | \(T_2 \qquad \kappa_{xx} \quad \kappa_{yy} \quad \kappa_{zz} \quad \kappa_{xz} \quad \kappa_{yz} \quad \kappa_{xy} \quad \kappa_{zx} \quad \kappa_{zy} \quad \kappa_{yx}\) |
… | … |
outfile.cumulative_kappa.hdf5
This file is self-explainatory. It contains the different cumulative plots described above, at a series of temperatures. Below is a matlab snippet that plots part of the output.
figure(1); clf; hold on; box on;
% filename
fn='outfile.cumulative_kappa.hdf5';
% which temperature?
t=1;
subplot(1,3,1); hold on; box on;
% read in cumulative kappa vs mean free path from file
x=h5read(fn,['/temperature_' num2str(t) '/mean_free_path_axis']);
xunit=h5readatt(fn,['/temperature_' num2str(t) '/mean_free_path_axis'],'unit');
y=h5read(fn,['/temperature_' num2str(t) '/cumulative_kappa_vs_mean_free_path_total']);
% projections to modes and/or atoms
z=h5read(fn,['/temperature_' num2str(t) '/cumulative_kappa_vs_mean_free_path_per_atom']);
%z=h5read(fn,['/temperature_' num2str(t) '/cumulative_kappa_vs_mean_free_path_per_mode']);
yunit=h5readatt(fn,['/temperature_' num2str(t) '/cumulative_kappa_vs_mean_free_path_total'],'unit');
% plot
plot(x,y)
plot(x,z)
% set a legend
lgd{1}='Total';
for i=1:size(z,2)
lgd{i+1}=['Atom ' num2str(i)];
end
l=legend(lgd);
set(l,'edgecolor','none','location','northwest');
% some titles
title('Cumulative kappa vs mean free path');
ylabel(['Cumulative \kappa (' yunit ')']);
xlabel(['Mean free path (' xunit ')']);
% get some reasonable ranges
minx=x(max(find(y<max(y*1E-3))));
maxx=x(min(find(y>max(y*0.9999))))*2;
xlim([minx maxx]);
set(gca,'xscale','log','yminortick','on');
subplot(1,3,2); hold on; box on;
% read in spectral kappa vs frequency
x=h5read(fn,['/temperature_' num2str(t) '/frequency_axis']);
y=h5read(fn,['/temperature_' num2str(t) '/spectral_kappa_vs_frequency_total']);
z=h5read(fn,['/temperature_' num2str(t) '/spectral_kappa_vs_frequency_per_mode']);
%z=h5read(fn,['/temperature_' num2str(t) '/spectral_kappa_vs_frequency_per_atom']);
plot(x,y)
plot(x,z)
set(gca,'xminortick','on','yminortick','on')
xlabel('Frequency (THz)')
ylabel('Spectral \kappa (W/m/K/THz)')
title('Spectral kappa vs frequency')
subplot(1,3,3); hold on; box on;
% read in cumulative kappa vs mean free path from file
x=h5read(fn,['/temperature_' num2str(t) '/boundary_scattering_lengths']);
y=h5read(fn,['/temperature_' num2str(t) '/boundary_scattering_kappa']);
% grab only kxx
y=squeeze(y(1,1,:));
plot(x,y)
set(gca,'xscale','log','yminortick','on')
xlabel('Domain size (m)')
ylabel('Kappa (W/mK)')
title('Kappa vs boundary scattering')
% get a reasonable range in x
minx=max(x(find(y<max(y*1E-2))))
maxx=x(min(find(y>max(y*0.9999))))*2
xlim([minx maxx])
outfile.grid_thermal_conductivity.hdf5
Option --dumpgrid
produces this self-explainatory file. It will not get written if you use more than one temperature, the reason is that this file can get uncomfortably large, nearly all quantities on the full q-grid are written. Below is a matlab snippet that plots a subset:
% file to read from
fn='outfile.grid_thermal_conductivity.hdf5';
% convert units to THz from Hz?
toTHz=1/1E12/2/pi;
figure(1); clf; hold on;
subplot(1,3,1); hold on; box on;
x=h5read(fn,'/frequencies');
y=h5read(fn,'/linewidths');
for i=1:size(x,1)
plot(x(i,:)*toTHz,y(i,:)*toTHz,'marker','.','linestyle','none','markersize',8)
end
set(gca,'xminortick','on','yminortick','on')
xlabel('Frequency (THz)')
ylabel('Linewidth (THz)')
subplot(1,3,2); hold on; box on;
x=h5read(fn,'/frequencies');
y=h5read(fn,'/lifetimes');
for i=1:size(x,1)
plot(x(i,:)*toTHz,y(i,:),'marker','.','linestyle','none','markersize',8)
end
set(gca,'yscale','log','xminortick','on')
xlabel('Frequency (THz)')
ylabel('Lifetime (s)')
subplot(1,3,3); hold on; box on;
x=h5read(fn,'/frequencies');
y=h5read(fn,'/mean_free_paths');
for i=1:size(x,1)
plot(x(i,:)*toTHz,y(i,:),'marker','.','linestyle','none','markersize',8)
end
set(gca,'yscale','log','xminortick','on')
xlabel('Frequency (THz)')
ylabel('Mean free paths (m)')
-
Peierls, R. E. (1929). Annalen der Physik, 3, 1055 ↩
-
Peierls, R. E. (1955). Quantum Theory of Solids. Clarendon Press. ↩
-
Minnich, A. J. (2012). Determining phonon mean free paths from observations of quasiballistic thermal transport. Physical Review Letters, 109(20), 1–5. ↩
-
Minnich, A. J. (2015). Thermal phonon boundary scattering in anisotropic thin films. Applied Physics Letters, 107(18), 8–11. ↩
-
Tamura, S. (1983). Isotope scattering of dispersive phonons in Ge. Physical Review B, 27(2), 858–866. ↩
-
Omini, M., & Sparavigna, A. (1996). Beyond the isotropic-model approximation in the theory of thermal conductivity. Physical Review B, 53(14), 9064–9073. ↩
-
Omini, M., & Sparavigna, A. (1997). Heat transport in dielectric solids with diamond structure. Nuovo Cimento Della Societa Italiana Di Fisica D, 19D, 1537–63. ↩
-
Broido, D. A., Malorny, M., Birner, G., Mingo, N., & Stewart, D. A. (2007). Intrinsic lattice thermal conductivity of semiconductors from first principles. Applied Physics Letters, 91(23), 231922. ↩
-
Broido, D. A., Ward, A., & Mingo, N. (2005). Lattice thermal conductivity of silicon from empirical interatomic potentials. Physical Review B, 72(1), 1–8. ↩
-
Isaeva, L & Barbalinardo, G. & Donadio, D. & Baroni, S. (2019). Modeling heat transport in crystals and glasses from a unified lattice-dynamical approach. Nature Communications 10 3853 ↩↩
-
Fiorentino, A. & Baroni, S (2023). From Green-Kubo to the full Boltzmann kinetic approach to heat transport in crystals and glasses. Physical Review B, 107, 054311 ↩↩
-
Simoncelli, M. & Marzari, N. & Mauri, F. (2019). Unified theory of thermal transport in crystals and glasses. Nature physics 15 803-819 ↩
-
Caldarelli, G. & Simoncelli, M. & Marzari, N. & Mauri, F. & Benfatto, L. (2022). Many-body Green's function approach to lattice thermal transport. Physical Review B 106 024312 ↩
-
Dangić, Đ. & Hellman, O. & Fahy, S. and Savić, I. (2021) The origin of the lattice thermal conductivity enhancement at the ferroelectric phase transition in GeTe. Nature Computational Materials 7, 57 ↩