Learning Objectives
Upon completing this chapter, you will acquire the following skills and knowledge:
- ✅ Understand types and properties of solid solutions and explain the mechanism of solid solution strengthening
- ✅ Understand the mechanisms of nucleation and growth in precipitation and interpret aging curves
- ✅ Explain the principle of age hardening and understand practical examples such as Al alloys
- ✅ Quantitatively calculate precipitation strengthening via the Orowan mechanism
- ✅ Understand the Gibbs-Thomson effect and particle coarsening (Ostwald ripening)
- ✅ Explain the differences between coherent, semi-coherent, and incoherent precipitates
- ✅ Simulate the time evolution of precipitates and predict strength using Python
3.1 Fundamentals of Solid Solutions
3.1.1 Definition and Types of Solid Solutions
Solid Solution is a homogeneous solid phase in which two or more elements are mixed at the atomic level. It is a state in which another element (the solute atom) is dissolved into the base crystal structure (the matrix).
💡 Classification of Solid Solutions
1. Substitutional Solid Solution
- Solute atoms replace atoms of the matrix
- Condition: atomic radius difference within 15% (Hume-Rothery rules)
- Examples: Cu-Ni, Fe-Cr, Al-Mg
2. Interstitial Solid Solution
- Solute atoms occupy interstitial sites
- Condition: solute atoms are small (C, N, H, O)
- Examples: Fe-C (steel), Ti-O, Zr-H
Similar atomic radii] B --> E[Stainless Steel
Fe-Cr-Ni] C --> F[Carbon Steel
Fe-C] C --> G[Nitride
Ti-N] style A fill:#f093fb,stroke:#f5576c,stroke-width:2px,color:#fff style B fill:#fce7f3 style C fill:#fce7f3
3.1.2 Mechanism of Solid Solution Strengthening
A solid solution has higher strength than a pure metal. This is called solid solution strengthening. The main mechanisms are as follows:
| Mechanism | Cause | Effect |
|---|---|---|
| Lattice strain | Difference in atomic radius of solute atoms | Increased resistance to dislocation motion |
| Elastic interaction | Stress field around solute atoms | Interaction with dislocations |
| Chemical interaction | Change in bonding strength | Change in stacking-fault energy |
| Electrical interaction | Change in electronic structure | Reduced dislocation mobility |
The increase in yield stress due to solid solution strengthening is approximated by the Labusch model as follows:
Δσy = K · cn
where Δσy is the increase in yield stress, c is the solute atom concentration, K is a constant, and n is between 0.5 and 1 (typically around 2/3)
3.1.3 Example: Strengthening of an Al-Mg Solid Solution
"""
Example 1: Calculating solid solution strengthening in an Al-Mg solid solution
Predicting yield stress using the Labusch model
"""
import numpy as np
import matplotlib.pyplot as plt
# Calculating solid solution strengthening
def solid_solution_strengthening(c, K=30, n=0.67):
"""
Calculate the increase in yield stress due to solid solution strengthening
Args:
c: Solute concentration [at%]
K: Constant [MPa/(at%)^n]
n: Exponent (typically 0.5-1.0)
Returns:
delta_sigma: Increase in yield stress [MPa]
"""
return K * (c ** n)
# Experimental data for an Al-Mg alloy (approximate)
mg_content = np.array([0, 1, 2, 3, 4, 5, 6]) # at%
yield_stress_exp = np.array([20, 50, 75, 95, 112, 127, 140]) # MPa
# Model prediction
mg_model = np.linspace(0, 7, 100)
delta_sigma = solid_solution_strengthening(mg_model, K=30, n=0.67)
yield_stress_model = 20 + delta_sigma # Yield stress of pure Al: 20 MPa
# Visualization
plt.figure(figsize=(10, 6))
plt.plot(mg_model, yield_stress_model, 'r-', linewidth=2,
label=f'Labusch model (n=0.67)')
plt.scatter(mg_content, yield_stress_exp, s=100, c='blue',
marker='o', label='Experimental data')
plt.xlabel('Mg content [at%]', fontsize=12)
plt.ylabel('Yield stress [MPa]', fontsize=12)
plt.title('Solid Solution Strengthening of an Al-Mg Solid Solution', fontsize=14, fontweight='bold')
plt.legend(fontsize=11)
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
# Calculation for a specific composition
mg_5at = 5.0
delta_sigma_5 = solid_solution_strengthening(mg_5at)
print(f"Yield stress increase with 5at% Mg addition: {delta_sigma_5:.1f} MPa")
print(f"Predicted yield stress: {20 + delta_sigma_5:.1f} MPa")
print(f"Experimental value: {yield_stress_exp[5]:.1f} MPa")
print(f"Error: {abs((20 + delta_sigma_5) - yield_stress_exp[5]):.1f} MPa")
# Example output:
# Yield stress increase with 5at% Mg addition: 102.5 MPa
# Predicted yield stress: 122.5 MPa
# Experimental value: 127.0 MPa
# Error: 4.5 MPa
📊 Practical Points
Al-Mg alloys (5000-series aluminum alloys) are representative alloys in which solid solution strengthening is the primary strengthening mechanism. Mg can be dissolved up to about 6%, achieving both excellent strength and corrosion resistance. These alloys are widely used for can stock and shipbuilding materials.
3.2 Fundamentals of Precipitation Theory
3.2.1 Mechanism of Precipitation
Precipitation is the phenomenon in which second-phase particles form from a supersaturated solid solution. A typical precipitation process proceeds through the following stages:
3.2.2 Nucleation Theory
The nucleation rate of precipitation is expressed by classical nucleation theory as follows:
J = N0 · ν · exp(-ΔG*/kT)
where:
J: Nucleation rate [nuclei/m³/s]
N0: Density of nucleation sites [sites/m³]
ν: Atomic vibration frequency [Hz]
ΔG*: Critical nucleation energy [J]
k: Boltzmann constant [J/K]
T: Temperature [K]
For the case of homogeneous nucleation, the critical nucleation energy ΔG* is:
ΔG* = (16πγ³) / (3ΔGv²)
γ: Interfacial energy [J/m²]
ΔGv: Free energy change per unit volume [J/m³]
"""
Example 2: Calculating the nucleation rate of precipitation
Simulation based on classical nucleation theory
"""
import numpy as np
import matplotlib.pyplot as plt
# Physical constants
k_B = 1.38e-23 # Boltzmann constant [J/K]
h = 6.626e-34 # Planck constant [J·s]
def nucleation_rate(T, gamma, delta_Gv, N0=1e28, nu=1e13):
"""
Calculate the nucleation rate (classical nucleation theory)
Args:
T: Temperature [K]
gamma: Interfacial energy [J/m²]
delta_Gv: Volumetric free energy change [J/m³]
N0: Density of nucleation sites [sites/m³]
nu: Atomic vibration frequency [Hz]
Returns:
J: Nucleation rate [nuclei/m³/s]
"""
# Critical nucleation energy
delta_G_star = (16 * np.pi * gamma**3) / (3 * delta_Gv**2)
# Nucleation rate
J = N0 * nu * np.exp(-delta_G_star / (k_B * T))
return J, delta_G_star
# Parameters for an Al-Cu alloy (precipitation of the θ' phase)
gamma = 0.2 # Interfacial energy [J/m²]
temperatures = np.linspace(373, 573, 100) # 100-300°C
# Free energy change due to supersaturation (simplified)
supersaturations = [1.5, 2.0, 2.5] # Degree of supersaturation
colors = ['blue', 'green', 'red']
labels = ['Low supersaturation (1.5x)', 'Medium supersaturation (2.0x)', 'High supersaturation (2.5x)']
plt.figure(figsize=(12, 5))
# (a) Temperature dependence
plt.subplot(1, 2, 1)
for S, color, label in zip(supersaturations, colors, labels):
delta_Gv = -2e8 * np.log(S) # Simplified free energy [J/m³]
J_list = []
for T in temperatures:
J, _ = nucleation_rate(T, gamma, delta_Gv)
J_list.append(J)
plt.semilogy(temperatures - 273, J_list, color=color,
linewidth=2, label=label)
plt.xlabel('Temperature [°C]', fontsize=12)
plt.ylabel('Nucleation rate [nuclei/m³/s]', fontsize=12)
plt.title('(a) Temperature Dependence', fontsize=13, fontweight='bold')
plt.legend(fontsize=10)
plt.grid(True, alpha=0.3)
# (b) Critical nucleus radius
plt.subplot(1, 2, 2)
T_aging = 473 # Aging temperature: 200°C
for S, color, label in zip(supersaturations, colors, labels):
delta_Gv = -2e8 * np.log(S)
r_crit = 2 * gamma / abs(delta_Gv) # Critical nucleus radius [m]
r_crit_nm = r_crit * 1e9 # [nm]
# For plotting
plt.bar(label, r_crit_nm, color=color, alpha=0.7)
plt.ylabel('Critical nucleus radius [nm]', fontsize=12)
plt.title('(b) Supersaturation and Critical Nucleus Radius (200°C)', fontsize=13, fontweight='bold')
plt.xticks(rotation=15, ha='right')
plt.grid(True, axis='y', alpha=0.3)
plt.tight_layout()
plt.show()
# Numerical output
print("=== Nucleation Analysis for an Al-Cu Alloy ===\n")
T_test = 473 # 200°C
for S in supersaturations:
delta_Gv = -2e8 * np.log(S)
J, delta_G_star = nucleation_rate(T_test, gamma, delta_Gv)
r_crit = 2 * gamma / abs(delta_Gv) * 1e9 # [nm]
print(f"Supersaturation {S}x:")
print(f" Nucleation rate: {J:.2e} nuclei/m³/s")
print(f" Critical nucleus radius: {r_crit:.2f} nm")
print(f" Activation energy: {delta_G_star/k_B:.2e} K\n")
# Example output:
# === Nucleation Analysis for an Al-Cu Alloy ===
#
# Supersaturation 1.5x:
# Nucleation rate: 3.45e+15 nuclei/m³/s
# Critical nucleus radius: 2.47 nm
# Activation energy: 8.12e+03 K
3.2.3 Growth of Precipitates
After nucleation, precipitates grow by diffusion. For diffusion-controlled growth, the time evolution of the radius r(t) of a spherical precipitate is:
r(t) = √(2Dt · (c0 - ce) / cp)
D: Diffusion coefficient [m²/s]
t: Time [s]
c0: Initial concentration
ce: Equilibrium concentration
cp: Concentration in the precipitate
"""
Example 3: Time evolution of precipitate size
Diffusion-controlled growth model
"""
import numpy as np
import matplotlib.pyplot as plt
def precipitate_growth(t, T, D0=1e-5, Q=150e3, c0=0.04, ce=0.01, cp=0.3):
"""
Calculate the time evolution of the precipitate radius
Args:
t: Time [s]
T: Temperature [K]
D0: Pre-exponential factor of the diffusion coefficient [m²/s]
Q: Activation energy [J/mol]
c0: Initial solute concentration
ce: Equilibrium concentration
cp: Concentration in the precipitate
Returns:
r: Precipitate radius [m]
"""
R = 8.314 # Gas constant [J/mol/K]
D = D0 * np.exp(-Q / (R * T)) # Arrhenius relation
# Diffusion-controlled growth
r = np.sqrt(2 * D * t * (c0 - ce) / cp)
return r
# Aging conditions
temperatures = [423, 473, 523] # 150, 200, 250°C
temp_labels = ['150°C', '200°C', '250°C']
colors = ['blue', 'green', 'red']
time_hours = np.logspace(-1, 3, 100) # 0.1-1000 hours
time_seconds = time_hours * 3600
plt.figure(figsize=(12, 5))
# (a) Time-size curve
plt.subplot(1, 2, 1)
for T, label, color in zip(temperatures, temp_labels, colors):
r = precipitate_growth(time_seconds, T)
r_nm = r * 1e9 # [nm]
plt.loglog(time_hours, r_nm, linewidth=2,
color=color, label=label)
plt.xlabel('Aging time [h]', fontsize=12)
plt.ylabel('Precipitate radius [nm]', fontsize=12)
plt.title('(a) Precipitate Growth Curve', fontsize=13, fontweight='bold')
plt.legend(fontsize=11)
plt.grid(True, which='both', alpha=0.3)
# (b) Temperature dependence of the growth rate
plt.subplot(1, 2, 2)
t_fixed = 10 * 3600 # After 10 hours
T_range = np.linspace(373, 573, 50)
r_range = precipitate_growth(t_fixed, T_range)
r_range_nm = r_range * 1e9
plt.plot(T_range - 273, r_range_nm, 'r-', linewidth=2)
plt.xlabel('Aging temperature [°C]', fontsize=12)
plt.ylabel('Precipitate radius after 10h [nm]', fontsize=12)
plt.title('(b) Temperature Dependence of Growth Rate', fontsize=13, fontweight='bold')
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
# Practical calculation example
print("=== Prediction of Precipitate Growth ===\n")
aging_conditions = [
(473, 1), # 200°C, 1 hour
(473, 10), # 200°C, 10 hours
(473, 100), # 200°C, 100 hours
(523, 10), # 250°C, 10 hours
]
for T, t_h in aging_conditions:
t_s = t_h * 3600
r = precipitate_growth(t_s, T)
r_nm = r * 1e9
print(f"{T-273:.0f}°C, {t_h}h: precipitate radius = {r_nm:.1f} nm")
# Example output:
# === Prediction of Precipitate Growth ===
#
# 200°C, 1h: precipitate radius = 8.5 nm
# 200°C, 10h: precipitate radius = 26.9 nm
# 200°C, 100h: precipitate radius = 85.0 nm
# 250°C, 10h: precipitate radius = 67.3 nm
3.3 Age Hardening
3.3.1 Principle of Age Hardening
Age hardening, also called precipitation hardening, is a heat-treatment technique that strengthens a material by producing fine precipitates from a supersaturated solid solution. Representative age-hardenable alloys include:
- Al alloys: 2000-series (Al-Cu), 6000-series (Al-Mg-Si), 7000-series (Al-Zn-Mg)
- Nickel-base superalloys: Inconel 718 (γ'' phase precipitation)
- Maraging steels: Fe-Ni-Co-Mo alloys
- Precipitation-hardening stainless steels: 17-4PH, 15-5PH
3.3.2 Aging Curve and Precipitation Sequence
The typical precipitation sequence in an Al-Cu alloy (2000 series):
α-SSS] --> B[GP Zones
GP zones] B --> C[θ'' Phase
Metastable] C --> D[θ' Phase
Metastable] D --> E[θ Phase
Al₂Cu equilibrium phase] style A fill:#fff3e0 style B fill:#e3f2fd style C fill:#e3f2fd style D fill:#e3f2fd style E fill:#c8e6c9
Characteristics of each stage:
| Stage | Phase | Size | Coherency | Hardening Effect |
|---|---|---|---|---|
| Early | GP zones | 1-2 nm | Fully coherent | Medium |
| Intermediate | θ'', θ' | 5-50 nm | Semi-coherent | Maximum |
| Late | θ (Al₂Cu) | >100 nm | Incoherent | Low |
"""
Example 4: Simulation of an Al alloy aging curve
Predicting the time evolution of hardness
"""
import numpy as np
import matplotlib.pyplot as plt
def aging_hardness_curve(t, T, peak_time_ref=10, peak_hardness=150,
T_ref=473, Q=100e3):
"""
Simulate the aging curve (empirical model)
Args:
t: Aging time [h]
T: Aging temperature [K]
peak_time_ref: Peak time at the reference temperature [h]
peak_hardness: Peak hardness [HV]
T_ref: Reference temperature [K]
Q: Activation energy [J/mol]
Returns:
hardness: Hardness [HV]
"""
R = 8.314 # Gas constant
# Peak time corrected for temperature (Arrhenius relation)
peak_time = peak_time_ref * np.exp(Q/R * (1/T - 1/T_ref))
# Time evolution of hardness (based on the JMA model)
# Under-aging region
H_under = 70 + (peak_hardness - 70) * (1 - np.exp(-(t/peak_time)**1.5))
# Over-aging region (softening due to coarsening)
H_over = peak_hardness * np.exp(-0.5 * ((t - peak_time)/peak_time)**0.8)
H_over = np.maximum(H_over, 80) # Minimum hardness
# Combine
hardness = np.where(t <= peak_time, H_under, H_over)
return hardness
# Aging conditions
temperatures = [423, 473, 523] # 150, 200, 250°C
temp_labels = ['150°C (low temperature)', '200°C (standard)', '250°C (high temperature)']
colors = ['blue', 'green', 'red']
time_hours = np.logspace(-1, 3, 200) # 0.1-1000 hours
plt.figure(figsize=(12, 5))
# (a) Aging curve
plt.subplot(1, 2, 1)
for T, label, color in zip(temperatures, temp_labels, colors):
hardness = aging_hardness_curve(time_hours, T)
plt.semilogx(time_hours, hardness, linewidth=2.5,
color=color, label=label)
# Mark the peak hardness position
peak_idx = np.argmax(hardness)
plt.plot(time_hours[peak_idx], hardness[peak_idx],
'o', markersize=10, color=color)
# Indicate the under-aging, peak-aging, and over-aging regions
plt.axvline(x=1, color='gray', linestyle='--', alpha=0.5)
plt.axvline(x=100, color='gray', linestyle='--', alpha=0.5)
plt.text(0.3, 145, 'Under-aging', fontsize=10, ha='center',
bbox=dict(boxstyle='round', facecolor='wheat', alpha=0.5))
plt.text(10, 145, 'Peak-aging', fontsize=10, ha='center',
bbox=dict(boxstyle='round', facecolor='lightgreen', alpha=0.5))
plt.text(300, 145, 'Over-aging', fontsize=10, ha='center',
bbox=dict(boxstyle='round', facecolor='lightcoral', alpha=0.5))
plt.xlabel('Aging time [h]', fontsize=12)
plt.ylabel('Hardness [HV]', fontsize=12)
plt.title('(a) Aging Curve of an Al-Cu Alloy', fontsize=13, fontweight='bold')
plt.legend(fontsize=11)
plt.grid(True, which='both', alpha=0.3)
plt.ylim(60, 160)
# (b) Temperature dependence of the peak time
plt.subplot(1, 2, 2)
T_range = np.linspace(393, 553, 50) # 120-280°C
peak_times = []
for T in T_range:
# Find the peak time
t_test = np.logspace(-2, 4, 1000)
h_test = aging_hardness_curve(t_test, T)
peak_t = t_test[np.argmax(h_test)]
peak_times.append(peak_t)
plt.semilogy(T_range - 273, peak_times, 'r-', linewidth=2.5)
plt.xlabel('Aging temperature [°C]', fontsize=12)
plt.ylabel('Peak aging time [h]', fontsize=12)
plt.title('(b) Temperature Dependence of Peak Aging Time', fontsize=13, fontweight='bold')
plt.grid(True, which='both', alpha=0.3)
plt.tight_layout()
plt.show()
# Recommended practical aging conditions
print("=== Recommended Aging Conditions (Al-Cu Alloy) ===\n")
for T in temperatures:
t_test = np.logspace(-2, 3, 1000)
h_test = aging_hardness_curve(t_test, T)
peak_idx = np.argmax(h_test)
peak_time = t_test[peak_idx]
peak_h = h_test[peak_idx]
print(f"{T-273:.0f}°C:")
print(f" Peak aging time: {peak_time:.1f} hours")
print(f" Maximum hardness: {peak_h:.1f} HV\n")
# Example output:
# === Recommended Aging Conditions (Al-Cu Alloy) ===
#
# 150°C:
# Peak aging time: 48.3 hours
# Maximum hardness: 150.0 HV
#
# 200°C:
# Peak aging time: 10.0 hours
# Maximum hardness: 150.0 HV
3.4 Mechanisms of Precipitation Strengthening
3.4.1 Orowan Mechanism
Precipitates strengthen a material by impeding dislocation motion. The most important mechanism is the Orowan mechanism. The stress required for a dislocation to bow between precipitates is:
τOrowan = (M · G · b) / (λ - 2r)
M: Taylor factor (typically around 3)
G: Shear modulus [Pa]
b: Magnitude of the Burgers vector [m]
λ: Precipitate spacing [m]
r: Precipitate radius [m]
The precipitate spacing λ can be expressed from the volume fraction fv and radius r as:
λ ≈ 2r · √(π / (3fv))
"""
Example 5: Calculating precipitation strengthening via the Orowan mechanism
Optimizing precipitate size and spacing
"""
import numpy as np
import matplotlib.pyplot as plt
def orowan_stress(r, f_v, G=26e9, b=2.86e-10, M=3.06):
"""
Calculate the Orowan stress
Args:
r: Precipitate radius [m]
f_v: Volume fraction
G: Shear modulus [Pa]
b: Burgers vector [m]
M: Taylor factor
Returns:
tau: Shear stress [Pa]
sigma: Yield stress [Pa]
"""
# Precipitate spacing
lambda_p = 2 * r * np.sqrt(np.pi / (3 * f_v))
# Orowan stress
tau = (M * G * b) / (lambda_p - 2*r)
# Tensile yield stress (converted with the Taylor factor)
sigma = M * tau
return tau, sigma, lambda_p
# Parameter range
radii_nm = np.linspace(1, 100, 100) # 1-100 nm
radii_m = radii_nm * 1e-9
volume_fractions = [0.01, 0.03, 0.05, 0.1] # 1%, 3%, 5%, 10%
colors = ['blue', 'green', 'orange', 'red']
labels = ['fᵥ = 1%', 'fᵥ = 3%', 'fᵥ = 5%', 'fᵥ = 10%']
plt.figure(figsize=(14, 5))
# (a) Relationship between precipitate radius and strength
plt.subplot(1, 3, 1)
for f_v, color, label in zip(volume_fractions, colors, labels):
sigma_list = []
for r in radii_m:
try:
_, sigma, _ = orowan_stress(r, f_v)
sigma_mpa = sigma / 1e6 # MPa
sigma_list.append(sigma_mpa)
except:
sigma_list.append(np.nan)
plt.plot(radii_nm, sigma_list, linewidth=2,
color=color, label=label)
plt.xlabel('Precipitate radius [nm]', fontsize=12)
plt.ylabel('Yield stress increase [MPa]', fontsize=12)
plt.title('(a) Radius Dependence of Orowan Strengthening', fontsize=13, fontweight='bold')
plt.legend(fontsize=10)
plt.grid(True, alpha=0.3)
plt.xlim(0, 100)
plt.ylim(0, 500)
# (b) Volume fraction and optimal radius
plt.subplot(1, 3, 2)
f_v_range = np.linspace(0.005, 0.15, 50)
optimal_radii = []
max_strengths = []
for f_v in f_v_range:
sigma_test = []
for r in radii_m:
try:
_, sigma, _ = orowan_stress(r, f_v)
sigma_test.append(sigma / 1e6)
except:
sigma_test.append(0)
max_sigma = np.max(sigma_test)
optimal_r = radii_nm[np.argmax(sigma_test)]
optimal_radii.append(optimal_r)
max_strengths.append(max_sigma)
ax1 = plt.gca()
ax1.plot(f_v_range * 100, optimal_radii, 'b-', linewidth=2.5, label='Optimal radius')
ax1.set_xlabel('Volume fraction [%]', fontsize=12)
ax1.set_ylabel('Optimal precipitate radius [nm]', fontsize=12, color='b')
ax1.tick_params(axis='y', labelcolor='b')
ax1.grid(True, alpha=0.3)
ax2 = ax1.twinx()
ax2.plot(f_v_range * 100, max_strengths, 'r--', linewidth=2.5, label='Maximum strength')
ax2.set_ylabel('Maximum yield stress increase [MPa]', fontsize=12, color='r')
ax2.tick_params(axis='y', labelcolor='r')
plt.title('(b) Optimal Precipitate Conditions', fontsize=13, fontweight='bold')
# (c) Precipitate spacing map
plt.subplot(1, 3, 3)
r_test = 10e-9 # 10 nm
spacing_list = []
for f_v in f_v_range:
_, _, lambda_p = orowan_stress(r_test, f_v)
spacing_list.append(lambda_p * 1e9) # nm
plt.plot(f_v_range * 100, spacing_list, 'g-', linewidth=2.5)
plt.xlabel('Volume fraction [%]', fontsize=12)
plt.ylabel('Precipitate spacing [nm]', fontsize=12)
plt.title('(c) Precipitate Spacing (r=10nm)', fontsize=13, fontweight='bold')
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
# Practical design example
print("=== Orowan Strengthening Design Guidelines ===\n")
print("Typical precipitate conditions for Al alloys:\n")
design_cases = [
(5e-9, 0.03, "Under-aging (small size, low fraction)"),
(10e-9, 0.05, "Peak-aging (optimal condition)"),
(50e-9, 0.08, "Over-aging (coarsened)")
]
for r, f_v, condition in design_cases:
tau, sigma, lambda_p = orowan_stress(r, f_v)
print(f"{condition}:")
print(f" Precipitate radius: {r*1e9:.1f} nm")
print(f" Volume fraction: {f_v*100:.1f}%")
print(f" Precipitate spacing: {lambda_p*1e9:.1f} nm")
print(f" Yield stress increase: {sigma/1e6:.1f} MPa\n")
# Example output:
# === Orowan Strengthening Design Guidelines ===
#
# Typical precipitate conditions for Al alloys:
#
# Under-aging (small size, low fraction):
# Precipitate radius: 5.0 nm
# Volume fraction: 3.0%
# Precipitate spacing: 51.2 nm
# Yield stress increase: 287.3 MPa
3.4.2 Coherency and Strengthening Effect
The crystallographic relationship (coherency) between a precipitate and the matrix has a large effect on the strengthening behavior:
| Coherency | Interface Structure | Interaction with Dislocations | Strengthening Effect |
|---|---|---|---|
| Coherent (fully coherent) |
Continuous lattice, strain field present | Dislocations cut through (shearing) | Medium-high |
| Semi-coherent (partially coherent) |
Partially coherent, interfacial dislocations | Competition between cutting and bypassing | Maximum |
| Incoherent (non-coherent) |
No crystallographic relationship | Orowan bypassing | Low-medium |
3.5 Coarsening and the Gibbs-Thomson Effect
3.5.1 Ostwald Ripening
Prolonged aging causes small precipitates to dissolve while large precipitates grow, a phenomenon called Ostwald ripening (coarsening). This occurs spontaneously because it minimizes interfacial energy, driven by thermodynamics.
Because of the Gibbs-Thomson effect, smaller particles have higher solubility:
c(r) = c∞ · exp(2γVm / (rRT))
c(r): Equilibrium concentration around a particle of radius r
c∞: Equilibrium concentration at a flat interface
γ: Interfacial energy [J/m²]
Vm: Molar volume [m³/mol]
r: Particle radius [m]
According to Lifshitz-Slyozov-Wagner (LSW) theory, the time evolution of the average particle radius is:
r̄³(t) - r̄³(0) = Kt
K: Coarsening rate constant [m³/s]
"""
Example 6: Simulating precipitate coarsening
Ostwald ripening (LSW theory)
"""
import numpy as np
import matplotlib.pyplot as plt
def coarsening_kinetics(t, r0, K):
"""
Coarsening according to LSW theory
Args:
t: Time [s]
r0: Initial average radius [m]
K: Coarsening rate constant [m³/s]
Returns:
r: Average radius [m]
"""
r_cubed = r0**3 + K * t
r = r_cubed ** (1/3)
return r
def coarsening_rate_constant(T, D0=1e-5, Q=150e3, gamma=0.2,
ce=0.01, Vm=1e-5):
"""
Calculate the coarsening rate constant
Args:
T: Temperature [K]
D0: Pre-exponential factor of the diffusion coefficient [m²/s]
Q: Activation energy [J/mol]
gamma: Interfacial energy [J/m²]
ce: Equilibrium concentration
Vm: Molar volume [m³/mol]
Returns:
K: Coarsening rate constant [m³/s]
"""
R = 8.314 # Gas constant
D = D0 * np.exp(-Q / (R * T))
# Rate constant from LSW theory
K = (8 * gamma * Vm * ce * D) / (9 * R * T)
return K
# Aging temperatures
temperatures = [473, 523, 573] # 200, 250, 300°C
temp_labels = ['200°C', '250°C', '300°C']
colors = ['blue', 'green', 'red']
time_hours = np.linspace(0, 1000, 200) # 0-1000 hours
time_seconds = time_hours * 3600
r0 = 10e-9 # Initial radius: 10 nm
plt.figure(figsize=(14, 5))
# (a) Coarsening curve
plt.subplot(1, 3, 1)
for T, label, color in zip(temperatures, temp_labels, colors):
K = coarsening_rate_constant(T)
r = coarsening_kinetics(time_seconds, r0, K)
r_nm = r * 1e9
plt.plot(time_hours, r_nm, linewidth=2.5,
color=color, label=label)
plt.xlabel('Aging time [h]', fontsize=12)
plt.ylabel('Average precipitate radius [nm]', fontsize=12)
plt.title('(a) Precipitate Coarsening Curve', fontsize=13, fontweight='bold')
plt.legend(fontsize=11)
plt.grid(True, alpha=0.3)
# (b) r³-t plot (verification of LSW theory)
plt.subplot(1, 3, 2)
T_test = 523 # 250°C
K_test = coarsening_rate_constant(T_test)
r_test = coarsening_kinetics(time_seconds, r0, K_test)
r_cubed = (r_test * 1e9) ** 3
r0_cubed = (r0 * 1e9) ** 3
plt.plot(time_hours, r_cubed - r0_cubed, 'r-', linewidth=2.5)
plt.xlabel('Aging time [h]', fontsize=12)
plt.ylabel('r³ - r₀³ [nm³]', fontsize=12)
plt.title(f'(b) Verification of LSW Theory ({temp_labels[1]})', fontsize=13, fontweight='bold')
plt.grid(True, alpha=0.3)
# Linear fit
from scipy import stats
slope, intercept, r_value, p_value, std_err = stats.linregress(time_hours, r_cubed - r0_cubed)
plt.plot(time_hours, slope * time_hours + intercept, 'b--',
linewidth=1.5, label=f'Linear fit (R²={r_value**2:.3f})')
plt.legend(fontsize=10)
# (c) Temperature dependence of the coarsening rate
plt.subplot(1, 3, 3)
T_range = np.linspace(423, 623, 50) # 150-350°C
K_range = []
for T in T_range:
K = coarsening_rate_constant(T)
K_range.append(K * 1e27) # [nm³/s]
plt.semilogy(T_range - 273, K_range, 'g-', linewidth=2.5)
plt.xlabel('Temperature [°C]', fontsize=12)
plt.ylabel('Coarsening rate constant K [nm³/s]', fontsize=12)
plt.title('(c) Temperature Dependence of the Coarsening Rate', fontsize=13, fontweight='bold')
plt.grid(True, which='both', alpha=0.3)
plt.tight_layout()
plt.show()
# Practical calculation
print("=== Prediction of Precipitate Coarsening ===\n")
print("Initial radius: 10 nm\n")
for T, label in zip(temperatures, temp_labels):
K = coarsening_rate_constant(T)
# Radii after 100 hours and 1000 hours
r_100h = coarsening_kinetics(100 * 3600, r0, K) * 1e9
r_1000h = coarsening_kinetics(1000 * 3600, r0, K) * 1e9
print(f"{label}:")
print(f" After 100 hours: {r_100h:.1f} nm")
print(f" After 1000 hours: {r_1000h:.1f} nm")
print(f" Coarsening rate constant: {K*1e27:.2e} nm³/s\n")
# Example output:
# === Prediction of Precipitate Coarsening ===
#
# Initial radius: 10 nm
#
# 200°C:
# After 100 hours: 15.2 nm
# After 1000 hours: 32.8 nm
# Coarsening rate constant: 5.67e+01 nm³/s
3.5.2 Precipitation Control in Practical Alloys
🔬 Example: Al-Cu-Mg Alloy (2024 Alloy)
Solution treatment: 500°C × 1 hour → water quench
Aging treatment (T6): 190°C × 18 hours (artificial aging)
- Precipitated phases: θ' (Al₂Cu), S' (Al₂CuMg)
- Optimal precipitate size: 10-30 nm
- Volume fraction: approximately 5%
- Yield strength: 324 MPa (T6 condition)
This alloy is widely used as an aircraft structural material, for example in rivets and wing spars.
3.6 Practice: Precipitation Simulation of an Al-Cu-Mg Alloy System
"""
Example 7: Comprehensive simulation of an Al-Cu-Mg alloy
From the precipitation process to strength prediction
"""
import numpy as np
import matplotlib.pyplot as plt
class PrecipitationSimulator:
"""Simulator for a precipitation-strengthened alloy"""
def __init__(self, alloy_type='Al-Cu-Mg'):
self.alloy_type = alloy_type
# Parameters for an Al-Cu-Mg alloy
self.G = 26e9 # Shear modulus [Pa]
self.b = 2.86e-10 # Burgers vector [m]
self.M = 3.06 # Taylor factor
self.gamma = 0.2 # Interfacial energy [J/m²]
self.D0 = 1e-5 # Pre-exponential factor of the diffusion coefficient [m²/s]
self.Q = 150e3 # Activation energy [J/mol]
def simulate_aging(self, T, time_hours):
"""
Simulate the aging process
Args:
T: Aging temperature [K]
time_hours: Array of aging times [h]
Returns:
results: Dictionary of simulation results
"""
time_seconds = np.array(time_hours) * 3600
# Nucleation and growth model (simplified)
R = 8.314
D = self.D0 * np.exp(-self.Q / (R * T))
# Time evolution of the precipitate radius
r0 = 2e-9 # Initial nucleus radius
r = r0 + np.sqrt(2 * D * time_seconds) * 0.5e-9
# Evolution of the volume fraction (JMA type)
f_v_max = 0.05 # Maximum volume fraction
k_jma = 0.1 / 3600 # Rate constant [1/s]
f_v = f_v_max * (1 - np.exp(-k_jma * time_seconds))
# Coarsening (long time)
K = (8 * self.gamma * 1e-5 * 0.01 * D) / (9 * R * T)
r_coarsen = (r**3 + K * time_seconds) ** (1/3)
# Coarsening dominates after 100 hours
transition_idx = np.searchsorted(time_hours, 100)
r[transition_idx:] = r_coarsen[transition_idx:]
# Calculating the Orowan strength
strength = np.zeros_like(r)
for i, (ri, fv) in enumerate(zip(r, f_v)):
if fv > 0.001: # When sufficient precipitates are present
try:
lambda_p = 2 * ri * np.sqrt(np.pi / (3 * fv))
tau = (self.M * self.G * self.b) / (lambda_p - 2*ri)
strength[i] = self.M * tau / 1e6 # MPa
except:
strength[i] = 0
# Add the base strength
sigma_base = 70 # Strength of pure Al [MPa]
total_strength = sigma_base + strength
return {
'time': time_hours,
'radius': r * 1e9, # nm
'volume_fraction': f_v * 100, # %
'strength': total_strength, # MPa
'precipitation_strength': strength # MPa
}
def plot_results(self, results_dict):
"""Visualize the simulation results"""
fig, axes = plt.subplots(2, 2, figsize=(14, 10))
colors = ['blue', 'green', 'red']
# (a) Precipitate radius
ax = axes[0, 0]
for (label, results), color in zip(results_dict.items(), colors):
ax.semilogx(results['time'], results['radius'],
linewidth=2.5, color=color, label=label)
ax.set_xlabel('Aging time [h]', fontsize=12)
ax.set_ylabel('Average precipitate radius [nm]', fontsize=12)
ax.set_title('(a) Time Evolution of Precipitate Size', fontsize=13, fontweight='bold')
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3)
# (b) Volume fraction
ax = axes[0, 1]
for (label, results), color in zip(results_dict.items(), colors):
ax.semilogx(results['time'], results['volume_fraction'],
linewidth=2.5, color=color, label=label)
ax.set_xlabel('Aging time [h]', fontsize=12)
ax.set_ylabel('Precipitate volume fraction [%]', fontsize=12)
ax.set_title('(b) Precipitate Volume Fraction', fontsize=13, fontweight='bold')
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3)
# (c) Yield strength
ax = axes[1, 0]
for (label, results), color in zip(results_dict.items(), colors):
ax.semilogx(results['time'], results['strength'],
linewidth=2.5, color=color, label=label)
ax.set_xlabel('Aging time [h]', fontsize=12)
ax.set_ylabel('Yield strength [MPa]', fontsize=12)
ax.set_title('(c) Aging Curve (Strength Prediction)', fontsize=13, fontweight='bold')
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3)
# (d) Breakdown of strengthening contributions
ax = axes[1, 1]
# Using the 200°C case as an example
results_200C = results_dict['200°C']
t = results_200C['time']
sigma_base = 70
sigma_precip = results_200C['precipitation_strength']
ax.semilogx(t, [sigma_base]*len(t), 'k--', linewidth=2, label='Base strength')
ax.fill_between(t, sigma_base, sigma_base + sigma_precip,
alpha=0.3, color='blue', label='Precipitation strengthening')
ax.semilogx(t, results_200C['strength'], 'b-', linewidth=2.5,
label='Total strength')
ax.set_xlabel('Aging time [h]', fontsize=12)
ax.set_ylabel('Yield strength [MPa]', fontsize=12)
ax.set_title('(d) Contributions of Strengthening Mechanisms (200°C)', fontsize=13, fontweight='bold')
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
# Run the simulation
simulator = PrecipitationSimulator()
time_array = np.logspace(-1, 3, 100) # 0.1-1000 hours
results_dict = {
'180°C': simulator.simulate_aging(453, time_array),
'200°C': simulator.simulate_aging(473, time_array),
'220°C': simulator.simulate_aging(493, time_array),
}
simulator.plot_results(results_dict)
# Identifying the optimal aging conditions
print("=== Optimal Aging Conditions for an Al-Cu-Mg Alloy (2024) ===\n")
for temp_label, results in results_dict.items():
peak_idx = np.argmax(results['strength'])
peak_time = results['time'][peak_idx]
peak_strength = results['strength'][peak_idx]
peak_radius = results['radius'][peak_idx]
peak_fv = results['volume_fraction'][peak_idx]
print(f"{temp_label}:")
print(f" Optimal aging time: {peak_time:.1f} hours")
print(f" Maximum strength: {peak_strength:.1f} MPa")
print(f" Precipitate radius: {peak_radius:.1f} nm")
print(f" Volume fraction: {peak_fv:.2f}%\n")
print("Industrially recommended conditions (T6 heat treatment):")
print(" Temperature: 190°C")
print(" Time: 18 hours")
print(" Expected strength: 324 MPa (measured value)")
# Example output:
# === Optimal Aging Conditions for an Al-Cu-Mg Alloy (2024) ===
#
# 180°C:
# Optimal aging time: 31.6 hours
# Maximum strength: 298.5 MPa
# Precipitate radius: 12.3 nm
# Volume fraction: 4.85%
#
# 200°C:
# Optimal aging time: 15.8 hours
# Maximum strength: 305.2 MPa
# Precipitate radius: 15.7 nm
# Volume fraction: 4.90%
Review of Learning Objectives
Upon completing this chapter, you should be able to explain the following:
Basic Understanding
- ✅ Explain the types of solid solutions (substitutional and interstitial) and the mechanism of solid solution strengthening
- ✅ Understand the three stages of precipitation—nucleation, growth, and coarsening—and interpret aging curves
- ✅ Explain the precipitation sequence in Al alloys (GP zones → θ'' → θ' → θ)
Practical Skills
- ✅ Calculate the amount of solid solution strengthening using the Labusch model
- ✅ Predict the nucleation rate using classical nucleation theory
- ✅ Quantitatively calculate precipitation strengthening via the Orowan mechanism
- ✅ Predict precipitate coarsening using LSW theory
Applied Skills
- ✅ Design optimal aging conditions for practical Al alloys
- ✅ Optimize material strength by controlling precipitate size and distribution
- ✅ Implement an integrated simulation of the precipitation process in Python
Exercises
Easy (Basic Check)
Q1: What is the main difference between solid solution strengthening and precipitation strengthening?
Answer:
- Solid solution strengthening: Solute atoms are uniformly dispersed in the matrix, strengthening the material through lattice strain and interaction with dislocations
- Precipitation strengthening: Fine second-phase particles precipitate and physically impede dislocation motion (Orowan mechanism)
Explanation:
Solid solution strengthening occurs in a single phase (the solid solution), with the increase in strength scaling roughly as Δσ ∝ c2/3 with concentration. Precipitation strengthening involves two phases (matrix + precipitate), and substantial strengthening is possible by controlling the optimal precipitate size and distribution.
Q2: In the aging process of an Al-Cu alloy, which phase gives the maximum hardness?
Answer: The θ' phase (a metastable, semi-coherent precipitate)
Explanation:
Precipitation sequence: GP zones → θ'' → θ' → θ (equilibrium phase)
The θ' phase is about 10-50 nm in size and semi-coherent, giving the strongest interaction with dislocations and therefore the maximum strengthening effect. Upon over-aging, the phase transforms into the incoherent, coarse θ phase, and the strength decreases.
Q3: In the Orowan mechanism, what happens to the strength as the precipitate spacing λ becomes smaller?
Answer: The strength increases
Explanation:
Orowan stress: τ = (M·G·b) / (λ - 2r)
As λ decreases (precipitates are more densely distributed), the denominator becomes smaller, so τ increases. However, in the limit where λ < 2r, the equation diverges, because in reality the precipitates would come into contact, and a different mechanism would then operate.
Medium (Application)
Q4: An Al-4%Cu alloy reached peak hardness after 10 hours of aging at 200°C. Estimate the time required to reach the same peak hardness at 250°C, assuming an activation energy of 150 kJ/mol.
Calculation:
Arrhenius relation:
t2 / t1 = exp[Q/R · (1/T2 - 1/T1)]
Given values:
- T1 = 473 K (200°C), t1 = 10 h
- T2 = 523 K (250°C), t2 = ?
- Q = 150 kJ/mol = 150,000 J/mol
- R = 8.314 J/mol/K
Calculation:
t₂ / 10 = exp[150000/8.314 · (1/523 - 1/473)]
= exp[18037 · (-0.0002024)]
= exp(-3.65)
= 0.026
t₂ = 10 × 0.026 = 0.26 hours ≈ 16 minutes
Answer: Approximately 0.26 hours (16 minutes)
Explanation:
A 50°C increase in temperature greatly accelerates the diffusion rate, shortening the aging time by roughly a factor of 40. This is due to the exponential temperature dependence of the Arrhenius equation. Industrially, high-temperature aging (250°C) requires less time but is more prone to precipitate coarsening, so the maximum strength achieved is slightly lower than for low-temperature aging (190-200°C).
Q5: Precipitates of 10 nm radius are dispersed at a volume fraction of 5%. Calculate the increase in yield stress due to the Orowan mechanism. (G = 26 GPa, b = 0.286 nm, M = 3)
Calculation:
1. Calculating the precipitate spacing λ:
λ = 2r · √(π / (3f_v)) = 2 × 10 nm · √(π / (3 × 0.05)) = 20 nm · √(π / 0.15) = 20 nm · √20.94 = 20 nm × 4.576 = 91.5 nm
2. Calculating the Orowan stress:
τ = (M · G · b) / (λ - 2r) = (3 × 26×10⁹ Pa × 0.286×10⁻⁹ m) / (91.5×10⁻⁹ m - 20×10⁻⁹ m) = (22.3 Pa·m) / (71.5×10⁻⁹ m) = 3.12×10⁸ Pa = 312 MPa
3. Yield stress (tensile):
σ_y = M · τ = 3 × 312 MPa = 936 MPa
Answer: Approximately 930-950 MPa
Explanation:
This calculation assumes idealized conditions; in real materials the value would change due to factors such as:
- Precipitate coherency (a fully coherent precipitate would be sheared by the dislocation, invoking a different mechanism)
- Effects of the size distribution
- Superposition with other strengthening mechanisms (solid solution strengthening, grain-boundary strengthening)
The measured value for a typical Al alloy (2024-T6) is around 320 MPa, roughly consisting of a base strength of 70 MPa plus precipitation strengthening of about 250 MPa.
Hard (Advanced)
Q6: In an Al-Cu alloy, precipitates with an initial radius of 5 nm coarsen at 200°C. Predict the average radius after 500 hours. Also discuss how much the yield strength decreases due to this coarsening. (Coarsening rate constant K = 5×10⁻²⁶ m³/s, initial volume fraction 5%, G=26GPa, b=0.286nm)
Calculation:
Step 1: Radius after coarsening
LSW theory: r³(t) = r₀³ + Kt r₀ = 5 nm = 5×10⁻⁹ m t = 500 h = 500 × 3600 s = 1.8×10⁶ s K = 5×10⁻²⁶ m³/s r³ = (5×10⁻⁹)³ + 5×10⁻²⁶ × 1.8×10⁶ = 1.25×10⁻²⁵ + 9.0×10⁻²⁰ = 9.0×10⁻²⁰ m³ (the first term is negligible) r = (9.0×10⁻²⁰)^(1/3) = 4.48×10⁻⁷ m = 44.8 nm
Step 2: Calculating the initial strength
r₀ = 5 nm, f_v = 0.05 λ₀ = 2 × 5 × √(π/(3×0.05)) = 45.8 nm σ₀ = (3 × 26×10⁹ × 0.286×10⁻⁹) / (45.8×10⁻⁹ - 10×10⁻⁹) = 22.3 / (35.8×10⁻⁹) = 6.23×10⁸ Pa Yield stress: σ_y0 = 3 × 623 = 1869 MPa
Step 3: Strength after coarsening
r = 44.8 nm (volume fraction is conserved: f_v = 0.05) λ = 2 × 44.8 × √(π/(3×0.05)) = 410 nm σ = (3 × 26×10⁹ × 0.286×10⁻⁹) / (410×10⁻⁹ - 89.6×10⁻⁹) = 22.3 / (320×10⁻⁹) = 6.97×10⁷ Pa Yield stress: σ_y = 3 × 70 = 210 MPa
Step 4: Strength decrease
Δσ = σ_y0 - σ_y = 1869 - 210 = 1659 MPa Decrease ratio = (1659 / 1869) × 100 = 88.8%
Answer:
- Average radius after 500 hours: approximately 45 nm (9 times the initial value)
- Decrease in yield strength: approximately 89% (1869 MPa → 210 MPa)
Detailed Discussion:
1. Mechanism of coarsening
Coarsening that follows the r³ law (Ostwald ripening) is a phenomenon in which, due to the Gibbs-Thomson effect, small particles dissolve while large particles grow. A ninefold increase in radius over 500 hours (about three weeks) of aging represents a practically important concern.
2. Cause of the strength decrease
- Increase in precipitate spacing: 45.8 nm → 410 nm (about 9-fold)
- Weakening of the Orowan mechanism: as λ increases, dislocations can more easily bypass the precipitates
- Decrease in particle number density: fewer, larger particles remain (volume is conserved)
3. Industrial countermeasures
- Limiting the service temperature: Al alloys are recommended for use below 150°C (for long-term stability)
- Ternary additions: adding Mg, Ag, Zn, etc. suppresses coarsening
- Introducing dispersoid particles: thermally stable dispersoids such as Al₃Zr pin the precipitates in place
- Microstructural refinement: plastic working increases dislocation density, providing more nucleation sites
4. Example of a practical alloy
The aircraft-grade Al-Cu-Mg alloy (2024-T6) is designed to retain about 70% of its strength even after 500 hours at 200°C (initial: approximately 470 MPa → after 500h: approximately 330 MPa). This is far better than the result of this calculation, thanks to:
- Suppression of coarsening by trace additions (Mn, Zr)
- The combined effect of two types of precipitates (θ' and S')
- Microstructural control through plastic working
These practical technologies account for the difference.
Q7: Explain, from the perspective of atomic size and elastic strain, why copper atoms preferentially segregate to {100} planes in the aluminum lattice during GP zone formation in an Al-4%Cu alloy.
Sample Answer:
Difference in atomic size:
- Atomic radius of aluminum (Al): 1.43 Å
- Atomic radius of copper (Cu): 1.28 Å
- Copper atoms are approximately 10% smaller than aluminum atoms
Mechanism of GP zone formation:
- Substitutional solid solution: When a copper atom substitutes for an aluminum lattice site, it induces a contractive strain in the lattice
- Segregation to {100} planes: copper atoms cluster on the {100} planes (specific crystallographic planes of the FCC structure), locally relieving the strain energy
- Formation of disc-shaped clusters: disc-shaped GP zones a few nanometers in diameter, 1-2 atomic layers thick, form along the {100} planes
Role of elastic strain:
Segregation of copper atoms creates an elastic strain field at the interface with the matrix (aluminum). This coherency strain impedes dislocation motion, producing the strengthening effect associated with the Orowan mechanism. The thinner the GP zone, the more coherency is maintained, resulting in higher strength.
Experimental observation:
Under transmission electron microscopy (TEM), GP zones are observed as characteristic streak contrast along the {100} planes.
Q8: In a nickel-base superalloy (e.g., Inconel 718), two types of precipitation-strengthening phases coexist: the γ' phase (Ni3Al) and the γ'' phase (Ni3Nb). Compare the characteristics of each precipitate phase and their contributions to high-temperature strength.
Sample Answer:
| Property | γ' phase (Ni3Al) | γ'' phase (Ni3Nb) |
|---|---|---|
| Crystal structure | L12 structure (FCC-based) | DO22 structure (BCT: body-centered tetragonal) |
| Morphology | Spherical or cuboidal (equiaxed) | Disc-shaped (precipitates along {100} planes) |
| Lattice misfit | Approximately +0.5% (slightly larger) | Approximately -2.5% (significant contraction) |
| Coherency | Fully coherent (maintained to high temperature) | Semi-coherent (stability decreases above 600°C) |
| Thermal stability | Up to ~1000°C (very high) | Up to ~650°C (moderate) |
| Strengthening effect | Sustained strengthening at high temperature (creep resistance) | Pronounced strengthening in the medium-temperature range (yield strength) |
Design philosophy of Inconel 718:
- Room temperature to 650°C: the γ'' phase functions as the primary strengthening phase (yield strength > 1000 MPa)
- 650-850°C: the γ' phase becomes the primary strengthening phase (compensating for the softening caused by dissolution of γ'' back into solid solution)
- Dual-phase composite strengthening: because high strength is maintained over a wide temperature range, this alloy is well suited to aircraft engines (turbine discs)
Aging heat treatment:
The standard aging treatment for Inconel 718—720°C × 8h (γ'' precipitation) + 620°C × 8h (γ' refinement)—achieves an optimal precipitate distribution.
✓ Review of Learning Objectives
Upon completing this chapter, you should be able to explain and perform the following:
Basic Understanding
- ✅ Explain the mechanisms of solid solution strengthening and precipitation strengthening
- ✅ Understand the precipitation sequence of GP zones, θ'', θ', and θ phases and the characteristics of each stage
- ✅ Explain the shape of the age-hardening curve and the physical meaning of peak aging and over-aging
- ✅ Quantitatively understand the strengthening effect of precipitates via the Orowan mechanism
Practical Skills
- ✅ Use the Orowan equation to calculate the strength increment from precipitate size and spacing
- ✅ Use LSW theory (Ostwald ripening) to predict the precipitate coarsening rate
- ✅ Quantitatively evaluate the relationship between aging conditions (temperature and time) and final strength
- ✅ Simulate age-hardening curves and precipitate growth using Python
Applied Skills
- ✅ Explain the differences in precipitation behavior among Al-Cu, Al-Mg-Si, and Al-Zn-Mg alloy systems
- ✅ Evaluate the selection of aging conditions (T4, T6, T7 treatments) and the trade-offs among strength, ductility, and corrosion resistance
- ✅ Understand the γ'/γ'' dual-phase strengthening mechanism of nickel-base superalloys and apply it to high-temperature material design
- ✅ Quantitatively predict precipitate coarsening and strength degradation from prolonged high-temperature exposure
Next Steps:
Once you have mastered the fundamentals of precipitation strengthening, proceed to Chapter 4, "Dislocations and Plastic Deformation," to learn the interaction mechanisms between precipitates and dislocations at the microscale. Integrating dislocation theory with precipitation strengthening will give you a deeper understanding of the plastic deformation behavior of materials.
📚 References
- Porter, D.A., Easterling, K.E., Sherif, M.Y. (2009). Phase Transformations in Metals and Alloys (3rd ed.). CRC Press. ISBN: 978-1420062106
- Ashby, M.F., Jones, D.R.H. (2012). Engineering Materials 2: An Introduction to Microstructures and Processing (4th ed.). Butterworth-Heinemann. ISBN: 978-0080966700
- Martin, J.W. (1998). Precipitation Hardening (2nd ed.). Butterworth-Heinemann. ISBN: 978-0750641630
- Polmear, I.J., StJohn, D., Nie, J.F., Qian, M. (2017). Light Alloys: Metallurgy of the Light Metals (5th ed.). Butterworth-Heinemann. ISBN: 978-0080994314
- Starke, E.A., Staley, J.T. (1996). "Application of modern aluminum alloys to aircraft." Progress in Aerospace Sciences, 32(2-3), 131-172. DOI:10.1016/0376-0421(95)00004-6
- Wagner, C. (1961). "Theorie der Alterung von Niederschlägen durch Umlösen (Ostwald-Reifung)." Zeitschrift für Elektrochemie, 65(7-8), 581-591.
- Ardell, A.J. (1985). "Precipitation hardening." Metallurgical Transactions A, 16(12), 2131-2165. DOI:10.1007/BF02670416
- Callister, W.D., Rethwisch, D.G. (2020). Materials Science and Engineering: An Introduction (10th ed.). Wiley. ISBN: 978-1119405498
Online Resources
- Aluminum alloy database: ASM Alloy Center Database (https://matdata.asminternational.org/)
- Aging treatment guide: Aluminum Association - Heat Treatment Guidelines (https://www.aluminum.org/)
- Precipitation simulation: TC-PRISMA (Thermo-Calc Software) - Precipitation simulation tool