English | 日本語

Chapter 3: Thermal Transport Calculations

First-Principles Phonon Boltzmann Transport Equation and Computational Methods

📚 Advanced Level ⏱️ Approximately 240 minutes 🎯 BTE・Scattering・ShengBTE・Machine Learning

Learning Objectives

  • Master the full phonon Boltzmann transport equation (PBTE) beyond RTA
  • Understand three-phonon scattering rates from first principles
  • Learn when four-phonon scattering becomes important
  • Use ShengBTE for iterative BTE solutions
  • Apply almaBTE and Phono3py for thermal transport calculations
  • Solve convergence issues in BTE calculations
  • Analyze mean free path distributions and coherent transport
  • Apply machine learning for thermal conductivity prediction
  • Perform high-throughput screening of thermal materials
  • Calculate thermal conductivity of Si and PbTe with real codes

3.1 Introduction: Beyond the Relaxation Time Approximation

In intermediate-level treatments, phonon thermal conductivity is often calculated using the relaxation time approximation (RTA), which assumes that each phonon mode relaxes independently to equilibrium with a single relaxation time \(\tau_{\mathbf{k}s}\). While RTA provides reasonable estimates for many materials, it has fundamental limitations:

This chapter presents the full phonon Boltzmann transport equation (PBTE) and its iterative solution methods, which have become the gold standard for thermal transport calculations. We will also explore modern computational tools (ShengBTE, almaBTE, Phono3py) and emerging machine learning approaches.

Why Full BTE Matters

Recent experiments show that RTA can underestimate thermal conductivity by factors of 2-5 in materials with strong normal scattering (e.g., diamond, BN, graphene). The iterative BTE solution properly accounts for:

  • Collective phonon drift in response to temperature gradients
  • Momentum-conserving normal processes that redistribute phonons without resistance
  • The distinction between heat-carrying and momentum-relaxing processes

3.2 The Phonon Boltzmann Transport Equation

3.2.1 General Form of the PBTE

The phonon distribution function \(n_{\mathbf{k}s}(\mathbf{r}, t)\) in non-equilibrium conditions evolves according to the Boltzmann equation:

Phonon Boltzmann Transport Equation

\[ \frac{\partial n_{\mathbf{k}s}}{\partial t} + \mathbf{v}_{\mathbf{k}s} \cdot \nabla_{\mathbf{r}} n_{\mathbf{k}s} + \mathbf{F} \cdot \nabla_{\mathbf{k}} n_{\mathbf{k}s} = \left(\frac{\partial n_{\mathbf{k}s}}{\partial t}\right)_{\text{scatt}} \]

where:

  • \(\mathbf{v}_{\mathbf{k}s} = \nabla_{\mathbf{k}}\omega_{\mathbf{k}s}\): group velocity
  • \(\mathbf{F}\): external force (typically zero for thermal transport)
  • \((\partial n/\partial t)_{\text{scatt}}\): scattering collision integral

For steady-state thermal transport with no external forces:

\[ \mathbf{v}_{\mathbf{k}s} \cdot \nabla_{\mathbf{r}} n_{\mathbf{k}s} = \left(\frac{\partial n_{\mathbf{k}s}}{\partial t}\right)_{\text{scatt}} \]

3.2.2 Linearization and Deviation Function

For small temperature gradients, we expand the distribution around equilibrium:

\[ n_{\mathbf{k}s} = n_{\mathbf{k}s}^0(T) + \delta n_{\mathbf{k}s} \]

where \(n_{\mathbf{k}s}^0 = 1/(e^{\hbar\omega_{\mathbf{k}s}/k_BT} - 1)\) is the Bose-Einstein distribution. The temperature gradient creates a deviation:

\[ \mathbf{v}_{\mathbf{k}s} \cdot \nabla T \frac{\partial n^0}{\partial T} = \left(\frac{\partial \delta n_{\mathbf{k}s}}{\partial t}\right)_{\text{scatt}} \]

It is convenient to define a deviation function \(\Phi_{\mathbf{k}s}\):

Deviation Function

\[ \delta n_{\mathbf{k}s} = -\frac{\partial n^0}{\partial T} \Phi_{\mathbf{k}s} = -n^0(n^0+1)\frac{\hbar\omega_{\mathbf{k}s}}{k_BT^2} \Phi_{\mathbf{k}s} \]

The linearized BTE becomes:

\[ \mathbf{v}_{\mathbf{k}s} \cdot \nabla T = -\sum_{\mathbf{k}'s'} \mathcal{A}_{\mathbf{k}s,\mathbf{k}'s'} \Phi_{\mathbf{k}'s'} \]

where \(\mathcal{A}\) is the scattering matrix.

3.2.3 The Scattering Collision Integral

The collision integral includes all scattering processes. For three-phonon interactions, where phonon \(\mathbf{k}s\) can either absorb a phonon (\(\mathbf{k}'s' \to \mathbf{k}s + \mathbf{k}''s''\)) or emit a phonon (\(\mathbf{k}s \to \mathbf{k}'s' + \mathbf{k}''s''\)):

Three-Phonon Collision Integral

\[ \begin{align} \left(\frac{\partial n_{\mathbf{k}s}}{\partial t}\right)_{\text{3ph}} = & \frac{\pi}{\hbar} \sum_{\mathbf{k}'s',\mathbf{k}''s''} |V^{(3)}_{\mathbf{k}s,\mathbf{k}'s',\mathbf{k}''s''}|^2 \\ & \times \bigg[ (n_{\mathbf{k}'s'} + 1)(n_{\mathbf{k}''s''} + 1)n_{\mathbf{k}s} \\ & \quad - n_{\mathbf{k}'s'}n_{\mathbf{k}''s''}(n_{\mathbf{k}s} + 1) \bigg] \\ & \times \delta(\omega_{\mathbf{k}s} - \omega_{\mathbf{k}'s'} - \omega_{\mathbf{k}''s''}) \\ & \times \delta(\mathbf{k} - \mathbf{k}' - \mathbf{k}'' - \mathbf{G}) \end{align} \]

where \(V^{(3)}\) is the three-phonon interaction strength and \(\mathbf{G}\) is a reciprocal lattice vector.

Normal vs Umklapp Processes

The wavevector conservation distinguishes two types of processes:

  • Normal (N) processes: \(\mathbf{k} = \mathbf{k}' + \mathbf{k}''\) (\(\mathbf{G} = 0\))
    Conserve crystal momentum, do not directly resist heat flow
  • Umklapp (U) processes: \(\mathbf{k} = \mathbf{k}' + \mathbf{k}'' + \mathbf{G}\) (\(\mathbf{G} \neq 0\))
    Flip phonon momentum, provide thermal resistance

RTA treats N and U processes equally, while the full BTE correctly accounts for the fact that N processes only redistribute phonons without destroying heat current.

3.2.4 Relaxation Time Approximation (RTA)

In RTA, the collision integral is approximated as:

\[ \left(\frac{\partial n_{\mathbf{k}s}}{\partial t}\right)_{\text{scatt}} \approx -\frac{\delta n_{\mathbf{k}s}}{\tau_{\mathbf{k}s}} \]

This leads to the simple solution:

\[ \Phi_{\mathbf{k}s}^{\text{RTA}} = \tau_{\mathbf{k}s} \mathbf{v}_{\mathbf{k}s} \cdot \nabla T \]

The thermal conductivity in RTA is:

RTA Thermal Conductivity

\[ \kappa^{\text{RTA}} = \frac{1}{V_0 T^2} \sum_{\mathbf{k}s} \tau_{\mathbf{k}s} (\hbar\omega_{\mathbf{k}s})^2 v_{\mathbf{k}s}^2 n^0(n^0+1) \]

In the continuum limit:

\[ \kappa^{\text{RTA}} = \frac{1}{3} \sum_s \int d\omega \, C_s(\omega) v_s^2(\omega) \tau_s(\omega) \]

where \(C_s(\omega)\) is the mode-specific heat capacity.

3.2.5 Iterative Solution of the Full BTE

The full BTE without approximations is a complex linear system. The deviation function satisfies:

\[ \Phi_{\mathbf{k}s} = \Phi_{\mathbf{k}s}^{\text{RTA}} + \Delta\Phi_{\mathbf{k}s} \]

where the correction \(\Delta\Phi\) accounts for collective effects. This is solved iteratively:

Iterative BTE Solution

  1. Initialize: \(\Phi^{(0)}_{\mathbf{k}s} = \Phi^{\text{RTA}}_{\mathbf{k}s}\)
  2. Iterate: For \(i = 0, 1, 2, \ldots\) \[ \Phi^{(i+1)}_{\mathbf{k}s} = \Phi^{\text{RTA}}_{\mathbf{k}s} + \sum_{\mathbf{k}'s'} S_{\mathbf{k}s,\mathbf{k}'s'} \Phi^{(i)}_{\mathbf{k}'s'} \] where \(S\) is the scattering operator accounting for normal processes
  3. Converge: Stop when \(|\Phi^{(i+1)} - \Phi^{(i)}| < \epsilon\)

The thermal conductivity is computed from the converged \(\Phi\):

\[ \kappa = \frac{1}{V_0 T^2} \sum_{\mathbf{k}s} \Phi_{\mathbf{k}s} \mathbf{v}_{\mathbf{k}s} \cdot \left(\hbar\omega_{\mathbf{k}s}\right)^2 n^0(n^0+1) \mathbf{v}_{\mathbf{k}s} \]

When Does Iterative BTE Matter?

The difference between iterative BTE and RTA becomes significant when:

  • Strong normal scattering: Materials with light elements (diamond, BN)
  • High symmetry: Cubic crystals with large N/U ratio
  • Low temperatures: When U processes are exponentially suppressed
  • High purity: When impurity scattering is minimal

Typical corrections: \(\kappa^{\text{iter}}/\kappa^{\text{RTA}} \approx 1.2\)-3.0

3.3 Three-Phonon Scattering from First Principles

3.3.1 Anharmonic Force Constants

The strength of three-phonon interactions is determined by the third-order anharmonic force constants:

\[ \Phi_{\alpha\beta\gamma}(lκ, l'κ', l''κ'') = \frac{\partial^3 E}{\partial u_{\alpha}(lκ) \partial u_{\beta}(l'κ') \partial u_{\gamma}(l''κ'')} \]

where \(u_\alpha(lκ)\) is the \(\alpha\)-component displacement of atom \(κ\) in unit cell \(l\). These can be calculated using:

3.3.2 Three-Phonon Interaction Matrix Elements

The interaction strength \(V^{(3)}\) in Fourier space is:

Three-Phonon Matrix Element

\[ V^{(3)}_{\mathbf{k}s,\mathbf{k}'s',\mathbf{k}''s''} = \sum_{\alpha\beta\gamma} \sum_{lκl'κ'l''κ''} \frac{\Phi_{\alpha\beta\gamma}(lκ,l'κ',l''κ'')}{\sqrt{8M_κM_{κ'}M_{κ''}ω_{\mathbf{k}s}ω_{\mathbf{k}'s'}ω_{\mathbf{k}''s''}}} \]

\[ \times e_\alpha^{κs}(\mathbf{k}) e_\beta^{κ's'}(\mathbf{k}') e_\gamma^{κ''s''}(\mathbf{k}'') e^{i(\mathbf{k}\cdot\mathbf{R}_l + \mathbf{k}'\cdot\mathbf{R}_{l'} + \mathbf{k}''\cdot\mathbf{R}_{l''})} \]

where \(e_\alpha^{κs}(\mathbf{k})\) are the phonon eigenvectors.

3.3.3 Scattering Rates and Phase Space

The scattering rate for a phonon \(\mathbf{k}s\) is obtained by integrating the collision integral. For emission processes (\(\mathbf{k}s \to \mathbf{k}'s' + \mathbf{k}''s''\)):

\[ \Gamma^{\text{em}}_{\mathbf{k}s} = \frac{\pi}{\hbar} \sum_{\mathbf{k}'s',\mathbf{k}''s''} |V^{(3)}|^2 (n_{\mathbf{k}'s'} + 1)(n_{\mathbf{k}''s''} + 1) \delta(\omega - \omega' - \omega'') \delta_{\mathbf{k},\mathbf{k}'+\mathbf{k}''+\mathbf{G}} \]

The delta functions impose strict conservation laws, restricting the phase space for scattering. The total scattering rate is:

\[ \Gamma_{\mathbf{k}s} = \Gamma^{\text{em}}_{\mathbf{k}s} + \Gamma^{\text{abs}}_{\mathbf{k}s} \]

Computational Challenges

Computing scattering rates requires:

  1. Dense \(\mathbf{k}\)-point grids: Typically 20×20×20 to 40×40×40
  2. Tetrahedron integration: To handle delta functions accurately
  3. Symmetry reduction: Use crystal symmetries to reduce computational cost
  4. Gaussian smearing: Replace \(\delta\) with finite-width Gaussian

3.4 Four-Phonon Scattering

3.4.1 When Are Four-Phonon Processes Important?

Traditionally, three-phonon processes were thought to dominate thermal resistance. However, recent work has shown that four-phonon scattering can be crucial in certain materials:

Silicon Case Study

In silicon at 300 K, including four-phonon scattering reduces predicted thermal conductivity from 200 W/m·K (three-phonon only) to 150 W/m·K, matching experimental values of 145 W/m·K.

3.4.2 Four-Phonon Interaction Matrix Elements

Four-phonon processes involve fourth-order force constants:

\[ \Phi_{\alpha\beta\gamma\delta}(lκ, l'κ', l''κ'', l'''κ''') = \frac{\partial^4 E}{\partial u_{\alpha}(lκ) \partial u_{\beta}(l'κ') \partial u_{\gamma}(l''κ'') \partial u_{\delta}(l'''κ''')} \]

The scattering rate for a process \(\mathbf{k}_1s_1 + \mathbf{k}_2s_2 \to \mathbf{k}_3s_3 + \mathbf{k}_4s_4\) is:

\[ \Gamma^{(4)} \propto |V^{(4)}|^2 \delta(\omega_1 + \omega_2 - \omega_3 - \omega_4) \delta(\mathbf{k}_1 + \mathbf{k}_2 - \mathbf{k}_3 - \mathbf{k}_4 - \mathbf{G}) \]

3.4.3 Computational Cost Scaling

The computational cost scales dramatically with scattering order:

Scattering Order Force Constants Phase Space Dimension Relative Cost
3-phonon \(\Phi^{(3)}\) 6D (\(\mathbf{k}, \mathbf{k}'\))
4-phonon \(\Phi^{(4)}\) 9D (\(\mathbf{k}, \mathbf{k}', \mathbf{k}''\)) 100-1000×

Efficient algorithms and high-performance computing are essential for four-phonon calculations.

3.5 Computational Tools for Thermal Transport

3.5.1 ShengBTE: Theory and Workflow

ShengBTE is a widely-used code for solving the phonon BTE iteratively. Developed by Wu Li, it implements the variational approach to the BTE.

ShengBTE Workflow

  1. DFT calculation: Optimize structure with VASP, Quantum ESPRESSO, etc.
  2. Second-order force constants: Compute harmonic phonons (phonopy, DFPT)
  3. Third-order force constants: Use thirdorder.py to generate displacements, compute forces, extract \(\Phi^{(3)}\)
  4. BTE solution: Run ShengBTE to solve for \(\kappa(T)\)
  5. Analysis: Extract MFP distributions, mode contributions, convergence

Example: ShengBTE Input File (CONTROL)

&allocations
 nelements=1,
 natoms=2,
 ngrid(:)=25 25 25,
 norientations=0,
/

&crystal
 lfactor=1.0,
 lattvec(:,1)=0.0 2.715 2.715,
 lattvec(:,2)=2.715 0.0 2.715,
 lattvec(:,3)=2.715 2.715 0.0,
 types(1)='Si',
 elements(1)='Si',
 gfactors(1)=1,
 epsilon(1)=0.0,
 born(:,:,1)=0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0,
 scell(:)=5 5 5,
 orientations(:,1)=1 0 0,
 orientations(:,2)=0 1 0,
 orientations(:,3)=0 0 1,
 positions(:,1)=0.0 0.0 0.0,
 positions(:,2)=0.25 0.25 0.25,
 masses(1)=28.0855,
/

¶meters
 T=300.0,
 scalebroad=0.5,
 convergence=1e-5,
 isotopes=.TRUE.,
 nanowires=.FALSE.,
 onlyharmonic=.FALSE.,
/

&flags
 nonanalytic=.FALSE.,
 isotopes=.TRUE.,
 autoisotopes=.TRUE.,
 espresso=.FALSE.,
/

3.5.2 almaBTE: Advanced Features

almaBTE is a modern C++ code offering advanced features:

almaBTE vs ShengBTE

Feature ShengBTE almaBTE
Three-phonon ✓ Iterative ✓ Iterative/Direct
Four-phonon
Nanostructures Limited ✓ Comprehensive
MFP analysis Basic ✓ Advanced cumulative
Performance Good (Fortran) Excellent (C++, parallel)

3.5.3 Phono3py: Integration with Phonopy

Phono3py seamlessly integrates with Phonopy for phonon calculations:

Phono3py Basic Workflow

# 1. Generate displacements for 3rd-order FCs
phono3py --dim="2 2 2" -c POSCAR-unitcell --sym-fc3

# 2. Calculate forces with DFT
# (run VASP or QE for each POSCAR-xxxxx)

# 3. Create FORCES_FC3 file
phono3py --cf3 vasprun.xml-{00001..00110}

# 4. Calculate thermal conductivity
phono3py --mesh="19 19 19" --br --isotope --ts="200 300 400 500 600"

# Output: kappa-mxxx.hdf5 (thermal conductivity data)

3.6 Convergence and Numerical Accuracy

3.6.1 Critical Convergence Parameters

Achieving converged thermal conductivity requires careful attention to:

Parameter Typical Range Convergence Criterion
\(\mathbf{q}\)-point grid 15×15×15 to 40×40×40 \(\Delta\kappa/\kappa < 5\%\)
Cutoff distance (3rd FC) 3-5 nearest neighbors Total force convergence
Gaussian smearing 0.1-1.0 THz No artificial broadening effects
Iterative BTE cycles 10-100 iterations \(|\Phi^{(n+1)} - \Phi^{(n)}| < 10^{-5}\)
DFT energy cutoff Material-dependent Force convergence < 0.001 eV/Å

3.6.2 Common Convergence Issues

Problem: Diverging Scattering Rates

Symptom: Extremely large scattering rates for some modes

Causes:

  • Insufficient \(\mathbf{q}\)-point sampling (delta function not resolved)
  • Too-small Gaussian smearing
  • Numerical noise in third-order force constants

Solutions:

  • Increase \(\mathbf{q}\)-grid density
  • Adjust smearing parameter (typical: 0.5 THz)
  • Use symmetry to average force constants
  • Check DFT convergence (forces should be < 0.001 eV/Å)

Problem: Slow or Non-Convergent Iterative BTE

Symptom: \(\kappa\) oscillates or changes slowly with iterations

Causes:

  • Strong normal scattering (large N/U ratio)
  • Low temperature (U processes suppressed)
  • Under-relaxation needed for stability

Solutions:

  • Use under-relaxation: \(\Phi^{(n+1)} = (1-\alpha)\Phi^{(n)} + \alpha\Phi^{\text{new}}\) with \(\alpha = 0.1\)-0.5
  • Increase iteration limit
  • Use variational approach (ShengBTE default)

3.6.3 Benchmark: Silicon Thermal Conductivity

Convergence Study for Si at 300 K

import numpy as np
import matplotlib.pyplot as plt

# Experimental value
kappa_exp = 145  # W/m·K

# q-grid convergence
q_grids = [15, 20, 25, 30, 35, 40]
kappa_q = [189, 168, 158, 152, 149, 147]  # RTA values

# Smearing convergence (30×30×30 grid)
smearing = [0.1, 0.3, 0.5, 0.7, 1.0, 1.5]  # THz
kappa_smear = [142, 149, 151, 152, 152, 151]

# Iterative BTE convergence (30×30×30, smearing=0.5)
iterations = [0, 5, 10, 20, 50, 100]
kappa_iter = [151, 163, 172, 180, 185, 186]  # 0 = RTA

fig, axes = plt.subplots(1, 3, figsize=(15, 4))

# q-grid
axes[0].plot(q_grids, kappa_q, 'o-', label='Calculated')
axes[0].axhline(kappa_exp, color='r', linestyle='--', label='Experiment')
axes[0].set_xlabel('q-grid size')
axes[0].set_ylabel('κ (W/m·K)')
axes[0].set_title('q-grid Convergence')
axes[0].legend()
axes[0].grid(True, alpha=0.3)

# Smearing
axes[1].plot(smearing, kappa_smear, 's-', label='Calculated')
axes[1].axhline(kappa_exp, color='r', linestyle='--', label='Experiment')
axes[1].set_xlabel('Gaussian smearing (THz)')
axes[1].set_ylabel('κ (W/m·K)')
axes[1].set_title('Smearing Parameter')
axes[1].legend()
axes[1].grid(True, alpha=0.3)

# Iterations
axes[2].plot(iterations, kappa_iter, '^-', label='Iterative BTE')
axes[2].axhline(kappa_exp, color='r', linestyle='--', label='Experiment')
axes[2].set_xlabel('Iterations')
axes[2].set_ylabel('κ (W/m·K)')
axes[2].set_title('Iterative Convergence')
axes[2].legend()
axes[2].grid(True, alpha=0.3)

plt.tight_layout()
plt.savefig('si_convergence.png', dpi=300, bbox_inches='tight')
plt.show()

# Final result with 4-phonon
print("Silicon at 300 K:")
print(f"  RTA (3-phonon):            {kappa_iter[0]:.1f} W/m·K")
print(f"  Iterative BTE (3-phonon):  {kappa_iter[-1]:.1f} W/m·K")
print(f"  With 4-phonon:             150 W/m·K")
print(f"  Experiment:                {kappa_exp} W/m·K")

3.7 Mean Free Path Analysis

3.7.1 Phonon Mean Free Path Distribution

The phonon mean free path (MFP) is:

\[ \Lambda_{\mathbf{k}s} = v_{\mathbf{k}s} \tau_{\mathbf{k}s} \]

Different phonon modes contribute differently to thermal conductivity based on their MFP. The cumulative thermal conductivity is:

Cumulative \(\kappa\) vs MFP

\[ \kappa(\Lambda_{\text{max}}) = \sum_{\mathbf{k}s, \, \Lambda_{\mathbf{k}s} < \Lambda_{\text{max}}} \kappa_{\mathbf{k}s} \]

This shows what fraction of \(\kappa\) comes from phonons with MFP below a certain threshold.

MFP Distribution Analysis

import numpy as np
import matplotlib.pyplot as plt

def calculate_mfp_distribution(omega, v, tau, kappa_mode):
    """
    Calculate cumulative thermal conductivity vs MFP

    Parameters:
    -----------
    omega : array, phonon frequencies (THz)
    v : array, group velocities (m/s)
    tau : array, relaxation times (ps)
    kappa_mode : array, mode contributions to κ (W/m·K)

    Returns:
    --------
    mfp_bins : array, MFP values (nm)
    kappa_cumulative : array, cumulative κ (W/m·K)
    """
    # Calculate MFP for each mode
    mfp = v * tau * 1e-3  # Convert ps·m/s to nm

    # Sort by MFP
    sort_idx = np.argsort(mfp)
    mfp_sorted = mfp[sort_idx]
    kappa_sorted = kappa_mode[sort_idx]

    # Cumulative sum
    kappa_cumulative = np.cumsum(kappa_sorted)

    return mfp_sorted, kappa_cumulative

# Example: Silicon at 300 K
n_modes = 10000
np.random.seed(42)

# Phonon properties (simplified model)
omega = np.random.lognormal(np.log(10), 0.5, n_modes)  # THz
v = 3000 + 2000*np.random.randn(n_modes)  # m/s
tau = 10 / omega**2  # ps, ω² scattering
tau = np.clip(tau, 0.1, 100)

# Mode contribution (proportional to C·v²·τ)
C_mode = omega**2 / (np.exp(omega/6.25) - 1)**2  # Simplified heat capacity at 300K
kappa_mode = C_mode * v**2 * tau
kappa_mode = kappa_mode / np.sum(kappa_mode) * 150  # Normalize to total κ = 150 W/m·K

# Calculate distribution
mfp, kappa_cum = calculate_mfp_distribution(omega, v, tau, kappa_mode)

# Plot
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 4))

# Cumulative κ vs MFP
ax1.semilogx(mfp, kappa_cum, linewidth=2)
ax1.axhline(150, color='r', linestyle='--', alpha=0.5, label='Total κ')
ax1.axvline(100, color='g', linestyle='--', alpha=0.5, label='100 nm')
ax1.set_xlabel('Mean Free Path (nm)')
ax1.set_ylabel('Cumulative κ (W/m·K)')
ax1.set_title('Cumulative Thermal Conductivity')
ax1.grid(True, alpha=0.3)
ax1.legend()

# Differential contribution
mfp_bins = np.logspace(-1, 4, 50)
kappa_diff, _ = np.histogram(mfp, bins=mfp_bins, weights=kappa_mode)
mfp_centers = np.sqrt(mfp_bins[:-1] * mfp_bins[1:])

ax2.loglog(mfp_centers, kappa_diff, 'o-', linewidth=2)
ax2.set_xlabel('Mean Free Path (nm)')
ax2.set_ylabel('dκ/d(log Λ) (W/m·K)')
ax2.set_title('Differential MFP Contribution')
ax2.grid(True, alpha=0.3)

plt.tight_layout()
plt.savefig('mfp_distribution.png', dpi=300, bbox_inches='tight')
plt.show()

# Analysis
mfp_50 = mfp[np.searchsorted(kappa_cum, 75)]  # MFP for 50% of κ
mfp_90 = mfp[np.searchsorted(kappa_cum, 135)]  # MFP for 90% of κ

print(f"MFP Analysis for Si at 300 K:")
print(f"  50% of κ from phonons with MFP < {mfp_50:.1f} nm")
print(f"  90% of κ from phonons with MFP < {mfp_90:.1f} nm")
print(f"  Max MFP: {mfp[-1]:.0f} nm")

3.7.2 Coherent vs Incoherent Transport

The Boltzmann transport equation assumes incoherent (particle-like) phonon transport, where phonons scatter randomly and phase information is lost. However, at small length scales or low temperatures, coherent (wave-like) effects can emerge:

Transport Regimes

Regime Condition Characteristics
Diffusive \(L \gg \Lambda\) Fourier's law valid, \(\kappa\) independent of size
Ballistic \(L \ll \Lambda\) \(\kappa \propto L\), no scattering
Quasi-ballistic \(L \sim \Lambda\) Size-dependent \(\kappa\), BTE with boundary scattering
Coherent \(L < \lambda_{\text{ph}}\) Wave interference, phonon tunneling

When to Go Beyond BTE

The Boltzmann equation fails when coherent effects dominate:

  • Superlattices: Phonon interference at interfaces (\(d < 10\) nm)
  • Nanophononic crystals: Phononic bandgaps and localization
  • Extremely low \(T\): \(k_BT \ll \hbar\omega\), quantum effects

Methods for coherent transport: Green's function, wave packet dynamics, molecular dynamics.

3.8 Machine Learning for Thermal Conductivity

3.8.1 Why Machine Learning?

First-principles BTE calculations are computationally expensive, limiting large-scale screening. Machine learning offers a path to rapid prediction:

3.8.2 Descriptors for Thermal Conductivity

Effective ML models require physically meaningful descriptors:

Common Thermal Conductivity Descriptors

Category Descriptors Physical Meaning
Compositional Atomic mass, electronegativity, radius Element properties
Structural Lattice parameters, density, symmetry Crystal structure
Mechanical Bulk modulus, shear modulus, Grüneisen parameter Elasticity and anharmonicity
Phononic Debye temperature, sound velocity, phonon DOS Harmonic properties
Chemical Ionicity, bond type, coordination number Bonding character

3.8.3 ML Workflow for Thermal Conductivity

graph TD A[Training Data] -->|Extract| B[Descriptors] B --> C[Feature Engineering] C --> D[Train ML Model] D --> E{Validate} E -->|Poor| F[Tune Hyperparameters] F --> D E -->|Good| G[Predict New Materials] G --> H[DFT Verification] H --> I[Update Training Set] I --> A

ML Prediction with Gradient Boosting

import numpy as np
import pandas as pd
from sklearn.ensemble import GradientBoostingRegressor
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.metrics import mean_absolute_error, r2_score
import matplotlib.pyplot as plt

# Example dataset (simplified)
# In reality, use databases like Materials Project, JARVIS
data = {
    'material': ['Si', 'Ge', 'Diamond', 'c-BN', 'GaN', 'AlN', 'GaAs', 'PbTe'],
    'mass_avg': [28.1, 72.6, 12.0, 12.4, 41.9, 20.5, 72.3, 167.0],  # amu
    'density': [2.33, 5.32, 3.51, 3.45, 6.15, 3.26, 5.32, 8.24],  # g/cm³
    'debye_temp': [645, 374, 2230, 1900, 600, 950, 344, 136],  # K
    'sound_vel': [6400, 3900, 17500, 14800, 6500, 10500, 4730, 1900],  # m/s
    'gruneisen': [0.99, 1.0, 1.05, 1.2, 1.3, 0.8, 0.87, 1.5],
    'kappa_300K': [145, 60, 2000, 1300, 130, 285, 55, 2.5]  # W/m·K (target)
}

df = pd.DataFrame(data)

# Features and target
features = ['mass_avg', 'density', 'debye_temp', 'sound_vel', 'gruneisen']
X = df[features].values
y = np.log10(df['kappa_300K'].values)  # Log scale for large κ range

# Train-test split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# Train model
model = GradientBoostingRegressor(
    n_estimators=100,
    learning_rate=0.1,
    max_depth=3,
    random_state=42
)

model.fit(X_train, y_train)

# Predictions
y_pred_train = model.predict(X_train)
y_pred_test = model.predict(X_test)

# Convert back from log scale
kappa_pred_train = 10**y_pred_train
kappa_pred_test = 10**y_pred_test
kappa_true_train = 10**y_train
kappa_true_test = 10**y_test

# Metrics
mae_test = mean_absolute_error(kappa_true_test, kappa_pred_test)
r2_test = r2_score(kappa_true_test, kappa_pred_test)

print("Model Performance:")
print(f"  Test MAE: {mae_test:.1f} W/m·K")
print(f"  Test R²:  {r2_test:.3f}")
print()

# Feature importance
importance = model.feature_importances_
for feat, imp in zip(features, importance):
    print(f"  {feat:15s}: {imp:.3f}")

# Visualize
fig, ax = plt.subplots(figsize=(6, 6))
ax.scatter(kappa_true_train, kappa_pred_train, s=100, alpha=0.6, label='Train')
ax.scatter(kappa_true_test, kappa_pred_test, s=100, alpha=0.6, label='Test')
ax.plot([1, 2000], [1, 2000], 'k--', alpha=0.3)
ax.set_xscale('log')
ax.set_yscale('log')
ax.set_xlabel('True κ (W/m·K)')
ax.set_ylabel('Predicted κ (W/m·K)')
ax.set_title('ML Thermal Conductivity Prediction')
ax.legend()
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig('ml_kappa_prediction.png', dpi=300, bbox_inches='tight')
plt.show()

# Predict new material
new_material = np.array([[50, 4.0, 800, 7000, 1.1]])  # Example
kappa_new = 10**model.predict(new_material)[0]
print(f"\nPrediction for new material: κ ≈ {kappa_new:.1f} W/m·K")

3.8.4 Advanced ML Approaches

State-of-the-Art ML Methods for \(\kappa\)

  • Neural networks: Deep learning with crystal graph representations
  • Gaussian process regression: Uncertainty quantification for active learning
  • Transfer learning: Leverage BTE calculations on simple systems
  • Multi-fidelity models: Combine cheap DFT and expensive BTE data
  • Physics-informed NN: Embed BTE equations as constraints

3.9 High-Throughput Thermal Conductivity Screening

3.9.1 Workflow for Large-Scale Screening

graph LR A[Materials Database] --> B[Filter by Stability] B --> C[Compute Harmonic Phonons] C --> D{Positive Frequencies?} D -->|Yes| E[Estimate κ with RTA] D -->|No| Z[Discard] E --> F{κ in Target Range?} F -->|Yes| G[Full BTE Calculation] F -->|No| Z G --> H[Validate Top Candidates] H --> I[Experimental Synthesis]

3.9.2 Computational Cost Reduction Strategies

3.9.3 Case Study: Screening for Low-κ Thermoelectrics

Thermoelectric Screening Workflow

import numpy as np
import matplotlib.pyplot as plt

# Simplified screening example
materials = [
    'PbTe', 'SnTe', 'GeTe', 'PbSe', 'SnSe',
    'Bi2Te3', 'Sb2Te3', 'CoSb3', 'Mg2Si', 'Mg2Sn'
]

# Properties from literature / databases
kappa_300K = np.array([2.5, 3.8, 2.0, 2.0, 0.7, 1.5, 1.8, 4.0, 7.5, 8.0])
seebeck = np.array([170, 150, 180, 160, 230, 200, 180, 100, 300, 280])  # μV/K
sigma = np.array([2e4, 1.5e4, 3e4, 2.5e4, 0.5e4, 1e4, 1.2e4, 5e4, 0.8e4, 1e4])  # S/m

# Thermoelectric figure of merit: ZT = S²σT/κ
T = 300  # K
ZT = (seebeck * 1e-6)**2 * sigma * T / kappa_300K

# Power factor
PF = (seebeck**2) * sigma / 1e3  # mW/m·K²

# Screening criteria
target_kappa_max = 3.0  # W/m·K
target_ZT_min = 0.3

# Filter
mask = (kappa_300K < target_kappa_max) & (ZT > target_ZT_min)
candidates = [m for m, keep in zip(materials, mask) if keep]

print("Thermoelectric Screening Results:")
print("=" * 60)
for mat, k, s, sig, zt in zip(materials, kappa_300K, seebeck, sigma, ZT):
    status = "✓ PASS" if (k < target_kappa_max and zt > target_ZT_min) else "✗ Fail"
    print(f"{mat:10s} κ={k:.2f} W/m·K  S={s:3.0f} μV/K  ZT={zt:.3f}  {status}")

print(f"\nCandidates for detailed study: {', '.join(candidates)}")

# Visualize
fig, ax = plt.subplots(figsize=(8, 6))
colors = ['green' if m else 'gray' for m in mask]
scatter = ax.scatter(kappa_300K, ZT, s=200, c=colors, alpha=0.7, edgecolors='black')

for i, mat in enumerate(materials):
    ax.annotate(mat, (kappa_300K[i], ZT[i]),
                xytext=(5, 5), textcoords='offset points', fontsize=9)

ax.axvline(target_kappa_max, color='r', linestyle='--', label=f'κ < {target_kappa_max} W/m·K')
ax.axhline(target_ZT_min, color='b', linestyle='--', label=f'ZT > {target_ZT_min}')
ax.set_xlabel('Thermal Conductivity κ (W/m·K)', fontsize=12)
ax.set_ylabel('Figure of Merit ZT', fontsize=12)
ax.set_title('Thermoelectric Materials Screening', fontsize=14)
ax.legend()
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig('thermoelectric_screening.png', dpi=300, bbox_inches='tight')
plt.show()

3.10 Practical Examples

3.10.1 Silicon: Benchmark Calculation

Silicon is the standard benchmark for thermal transport codes. Let's walk through a complete calculation workflow.

Complete Silicon Workflow (Conceptual)

"""
Silicon thermal conductivity calculation workflow
Requires: VASP, phonopy, phono3py (or ShengBTE)
"""

# Step 1: DFT structure optimization
# INCAR: PREC=Accurate, ENCUT=500, EDIFF=1E-8
# Optimize until forces < 0.001 eV/Å

# Step 2: Harmonic phonons with phonopy
# phonopy --dim="4 4 4" -c POSCAR-unitcell
# (compute forces for displaced structures)
# phonopy --fc vasprun.xml-{001..002}
# phonopy --mesh="30 30 30" -p  # Check no imaginary frequencies

# Step 3: Third-order force constants
# phono3py --dim="2 2 2" --dim-fc2="4 4 4" -c POSCAR-unitcell
# (compute forces for ~100 displaced structures)
# phono3py --cf3 vasprun.xml-{00001..00110}

# Step 4: Calculate thermal conductivity
# phono3py --mesh="19 19 19" --br --isotope --ts="100 200 300 400 500 600"

# Output analysis
import h5py
import numpy as np
import matplotlib.pyplot as plt

# Read results
with h5py.File('kappa-m191919.hdf5', 'r') as f:
    temperatures = f['temperature'][:]
    kappa = f['kappa'][:, :, :]  # (T, 3x3 tensor)
    kappa_iso = np.mean(kappa[:, [0,1,2], [0,1,2]], axis=1)  # Average diagonal

# Experimental data (from literature)
T_exp = np.array([100, 200, 300, 400, 500, 600])
kappa_exp = np.array([900, 280, 145, 90, 65, 50])

# Plot
plt.figure(figsize=(8, 6))
plt.plot(temperatures, kappa_iso, 'o-', linewidth=2, markersize=8, label='Phono3py (RTA)')
plt.plot(T_exp, kappa_exp, 's--', linewidth=2, markersize=8, label='Experiment')
plt.xlabel('Temperature (K)', fontsize=12)
plt.ylabel('Thermal Conductivity (W/m·K)', fontsize=12)
plt.title('Silicon Thermal Conductivity', fontsize=14)
plt.legend(fontsize=11)
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig('si_kappa_vs_T.png', dpi=300, bbox_inches='tight')
plt.show()

# Analyze MFP distribution at 300 K
with h5py.File('kappa-m191919.hdf5', 'r') as f:
    mfp = f['mean_free_path'][2, :, :]  # T=300K, all modes
    gamma = f['gamma'][2, :, :]  # Scattering rates

print("Silicon at 300 K:")
print(f"  Calculated κ: {kappa_iso[2]:.1f} W/m·K")
print(f"  Experimental: {kappa_exp[2]} W/m·K")
print(f"  Mean MFP: {np.mean(mfp):.1f} nm")
print(f"  Median MFP: {np.median(mfp):.1f} nm")

3.10.2 PbTe: Thermoelectric Material

Lead telluride (PbTe) is a classic thermoelectric material with intrinsically low thermal conductivity due to heavy atoms and strong anharmonicity.

PbTe Analysis

import numpy as np
import matplotlib.pyplot as plt

# Simulated data for PbTe (based on literature)
T = np.array([300, 400, 500, 600, 700, 800])

# Thermal conductivity components
kappa_lattice = np.array([2.5, 2.3, 2.1, 2.0, 1.9, 1.8])  # W/m·K, phonon contribution
kappa_electron = 0.3 * np.ones_like(T)  # Electronic contribution (doped)
kappa_total = kappa_lattice + kappa_electron

# Key features of PbTe
print("PbTe Thermal Transport Characteristics:")
print("=" * 60)
print("  Crystal structure: Rock salt (Fm-3m)")
print("  Lattice parameter: a = 6.46 Å")
print("  Average atomic mass: 167 amu (very heavy)")
print("  Grüneisen parameter: γ ≈ 1.5 (strong anharmonicity)")
print("  Debye temperature: θ_D ≈ 136 K (soft phonons)")
print()
print("Why is κ_lattice so low?")
print("  1. Heavy atoms → low phonon velocities")
print("  2. Strong anharmonicity → short phonon lifetimes")
print("  3. Avoided crossing in acoustic-optical branches")
print("  4. Soft TO phonon mode → strong scattering")
print()

# Temperature dependence
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 4))

# κ vs T
ax1.plot(T, kappa_lattice, 's-', linewidth=2, label='Lattice')
ax1.plot(T, kappa_electron, 'o-', linewidth=2, label='Electronic')
ax1.plot(T, kappa_total, '^-', linewidth=2, label='Total')
ax1.set_xlabel('Temperature (K)')
ax1.set_ylabel('Thermal Conductivity (W/m·K)')
ax1.set_title('PbTe Thermal Conductivity')
ax1.legend()
ax1.grid(True, alpha=0.3)

# κ^-1 vs T (approximately linear at high T)
ax2.plot(T, 1/kappa_lattice, 's-', linewidth=2)
ax2.set_xlabel('Temperature (K)')
ax2.set_ylabel('1/κ_lattice (m·K/W)')
ax2.set_title('Inverse Thermal Conductivity\n(High-T Umklapp behavior)')
ax2.grid(True, alpha=0.3)

plt.tight_layout()
plt.savefig('pbte_thermal_conductivity.png', dpi=300, bbox_inches='tight')
plt.show()

# Compare to Si
print("\nComparison: PbTe vs Silicon at 300 K")
print("-" * 60)
print(f"{'Property':<30s} {'PbTe':<15s} {'Si':<15s}")
print("-" * 60)
print(f"{'κ_lattice (W/m·K)':<30s} {kappa_lattice[0]:<15.1f} {145:<15.1f}")
print(f"{'Average mass (amu)':<30s} {167:<15.1f} {28.1:<15.1f}")
print(f"{'Debye temperature (K)':<30s} {136:<15.1f} {645:<15.1f}")
print(f"{'Grüneisen parameter':<30s} {1.5:<15.1f} {0.99:<15.1f}")
print(f"{'κ_PbTe / κ_Si':<30s} {kappa_lattice[0]/145:<15.3f} {'—':<15s}")
print("-" * 60)

3.11 Summary and Best Practices

Chapter Summary

This chapter covered advanced thermal transport calculations:

  • The full phonon Boltzmann transport equation captures collective drift and normal processes
  • Iterative BTE solutions improve accuracy by 20-200% over RTA
  • Three-phonon scattering rates are computed from first-principles anharmonic force constants
  • Four-phonon processes are essential for accurate predictions in many materials
  • ShengBTE, almaBTE, and Phono3py are mature tools for thermal conductivity calculations
  • Convergence requires careful attention to \(\mathbf{q}\)-grids, smearing, and iteration limits
  • MFP analysis reveals contributions from different length scales
  • Machine learning enables rapid screening and descriptor identification
  • High-throughput workflows combine filtering, ML pre-screening, and selective BTE calculations

Best Practices for Thermal Conductivity Calculations

  1. Start with structure optimization: Converge DFT forces to < 0.001 eV/Å
  2. Validate harmonic phonons: No imaginary frequencies in stable structures
  3. Test convergence systematically: q-grid, cutoff distance, smearing
  4. Use symmetry: Reduce computational cost by symmetry operations
  5. Check RTA first: If RTA is accurate enough, save computational effort
  6. Consider four-phonon: Important for high-κ materials and high temperatures
  7. Validate against experiment: At least one well-known material (Si, diamond)
  8. Analyze MFP distributions: Understand which phonons contribute to heat transport
  9. Document methodology: DFT settings, grids, smearing for reproducibility
  10. Use databases wisely: Materials Project, JARVIS for pre-screening

Exercises

Exercise 1: Theoretical Understanding

Question: Explain why the relaxation time approximation (RTA) underestimates thermal conductivity in materials with strong normal scattering.

Hint: Consider momentum conservation in normal processes and the concept of phonon drift.

Exercise 2: Scattering Rate Calculation

Task: A phonon mode at 5 THz has a three-phonon scattering rate of \(\Gamma_3 = 2 \times 10^{12}\) s\(^{-1}\) and a four-phonon rate of \(\Gamma_4 = 5 \times 10^{11}\) s\(^{-1}\) at 300 K.

  1. Calculate the total relaxation time \(\tau\).
  2. What is the mean free path if the group velocity is 3000 m/s?
  3. At 600 K, \(\Gamma_4\) increases to \(2 \times 10^{12}\) s\(^{-1}\) while \(\Gamma_3\) is unchanged. What is the new \(\tau\) and MFP?

Exercise 3: Convergence Analysis

Task: You calculate thermal conductivity of GaN with different \(\mathbf{q}\)-grids:

  • 15×15×15: \(\kappa = 185\) W/m·K
  • 20×20×20: \(\kappa = 168\) W/m·K
  • 25×25×25: \(\kappa = 159\) W/m·K
  • 30×30×30: \(\kappa = 155\) W/m·K
  • 35×35×35: \(\kappa = 153\) W/m·K
  1. Plot \(\kappa\) vs grid density and assess convergence.
  2. Estimate the converged value using Richardson extrapolation.
  3. What grid would you use for production calculations? Why?

Exercise 4: MFP Distribution

Programming Task: Modify the MFP distribution code to:

  1. Separate acoustic and optical phonon contributions
  2. Plot cumulative \(\kappa\) vs frequency instead of MFP
  3. Identify the frequency range contributing 50% of total \(\kappa\)
  4. Discuss implications for nanostructuring strategies

Exercise 5: Machine Learning Extension

Project: Extend the ML thermal conductivity model:

  1. Add more materials to the training set (use Materials Project API or JARVIS)
  2. Test different ML algorithms (Random Forest, Neural Network, XGBoost)
  3. Perform feature importance analysis to identify key descriptors
  4. Implement cross-validation to assess model robustness
  5. Predict \(\kappa\) for 5 new materials and compare to DFT/BTE if available

Exercise 6: Thermoelectric Screening

Task: Design a computational screening workflow to identify new thermoelectric materials with \(ZT > 1\) at 600 K.

  1. What filters would you apply at each stage (stability, bandgap, \(\kappa\))?
  2. Estimate the computational cost for screening 10,000 materials
  3. How would you balance accuracy vs throughput?
  4. Propose 3 material families as promising candidates and justify

Further Reading

Key Review Papers

  1. Lindsay, L., Broido, D. A. & Mingo, N. "Lattice thermal conductivity of semiconductors: Perspectives from multiscale simulations." J. Phys.: Condens. Matter 28, 013001 (2016).
  2. Jain, A. & McGaughey, A. J. H. "Strongly anisotropic in-plane thermal transport in single-layer black phosphorene." Sci. Rep. 5, 8501 (2015).
  3. Carrete, J., Li, W., Mingo, N., Wang, S. & Curtarolo, S. "Finding unprecedentedly low-thermal-conductivity half-Heusler semiconductors via high-throughput materials modeling." Phys. Rev. X 4, 011019 (2014).
  4. Feng, T. & Ruan, X. "Quantum mechanical prediction of four-phonon scattering rates and reduced thermal conductivity of solids." Phys. Rev. B 93, 045202 (2016).

Software Documentation

Machine Learning for Materials

  1. Carrete, J., Mingo, N., Wang, S. & Curtarolo, S. "Nanograined half-Heusler semiconductors as advanced thermoelectrics: An ab initio high-throughput statistical study." Adv. Funct. Mater. 24, 7427 (2014).
  2. Seko, A., Hayashi, H., Nakayama, K., Takahashi, A. & Tanaka, I. "Representation of compounds for machine-learning prediction of physical properties." Phys. Rev. B 95, 144110 (2017).