Chapter 4: Reading and Analyzing Binary Phase Diagrams

Understanding phase diagrams of practical alloys: Cu-Ni complete solid solution, Al-Si eutectic system, Pb-Sn peritectic system

📖 Reading Time: 20-25 minutes 📊 Difficulty: Beginner 💻 Code Examples: 0 📝 Exercises: 0

This chapter covers Reading and Analyzing Binary Phase Diagrams. You will learn essential concepts and techniques.

Learning Objectives

In this chapter, we will learn how to read and analyze binary phase diagrams , one of the most important tools in materials science. Phase diagrams visually represent phase states as a function of composition and temperature, and are essential for alloy design and heat treatment process design.

Skills to Master in This Chapter

=¡ Importance of Binary Phase Diagrams

Binary phase diagrams show equilibrium states of alloy systems consisting of two components. Many industrially important materials such as Fe-C system for steel, Al-Cu system and Al-Si system for aluminum alloys are based on binary phase diagrams. The skill to accurately read phase diagrams is essential for materials developers.

Flow for Reading Binary Phase Diagrams

When reading a phase diagram, follow these steps in order:

```mermaid
graph TD
    A[1. Check axes] --> B[2. Identify phase regions]
    B --> C[3. Trace phase boundaries]
    C --> D[4. Check invariant points]
    D --> E[5. Set composition point]
    E --> F[6. Determine equilibrium state at temperature]
    F --> G[7. Apply lever rule]
    G --> H[8. Trace cooling path]

    style A fill:#f093fb,stroke:#f5576c,color:#fff
    style H fill:#f093fb,stroke:#f5576c,color:#fff
```

Basic Principles of Phase Diagram Reading

  1. Horizontal axis (composition) : Left end is component A (0 wt%), right end is component B (100 wt%)
  2. Vertical axis (temperature) : Temperature increases from bottom to top
  3. Phase regions : Distinguished by labels such as ±, ², L (liquid phase)
  4. Phase boundaries : Liquidus, solidus, solubility curves, etc.
  5. Invariant points : Reaction points at specific temperature and composition such as eutectic point, peritectic point, monotectic point

1. Complete Solid Solution System (Cu-Ni System)

In complete solid solution systems, continuous solid solution occurs over the entire composition range from liquid to solid phase. The Cu-Ni system is a typical example where complete solid solution is possible because both components have the same FCC structure and similar atomic radii.

1.1 Characteristics of Cu-Ni Phase Diagram

=¡ Principle of the Lever Rule

The lever rule is a method to calculate the fraction of each phase in a two-phase region. Similar to the principle of a lever, the inverse ratio of distances from the composition point to each phase boundary gives the phase fraction:

$$f_L = \frac{C_0 - C_\alpha}{C_L - C_\alpha}, \quad f_\alpha = \frac{C_L - C_0}{C_L - C_\alpha}$$

where \(C_0\) is overall composition, \(C_L\) is liquid phase composition, and \(C_\alpha\) is solid phase composition.

2. Eutectic Systems (Al-Si System, Pb-Sn System)

In eutectic systems, a eutectic reaction occurs at a specific composition (eutectic composition) where two solid phases crystallize simultaneously from the liquid phase:

$$L \rightarrow \alpha + \beta \quad (\text{upon cooling})$$

2.1 Characteristics of Eutectic Systems

2.2 Pb-Sn Eutectic System and Cooling Curves

The Pb-Sn system is a eutectic alloy widely used as solder material. At the eutectic composition (61.9 wt% Sn), transformation occurs directly from liquid phase to eutectic microstructure, resulting in a clear thermal arrest in the cooling curve.

# Requirements:
# - Python 3.9+
# - matplotlib>=3.7.0


            <h4>Code Example 3: Cooling Curve Simulation for Pb-Sn Eutectic System</h4>
            <pre><code class="language-python">import numpy as np
import matplotlib.pyplot as plt

def simulate_cooling_curve(composition_Sn, initial_temp=300, final_temp=100,
                           cooling_rate=0.5, latent_heat_factor=20):
    """
    Simulate cooling curve for Pb-Sn system

    Parameters:
    -----------
    composition_Sn : float
        Sn composition (wt%)
    initial_temp : float
        Initial temperature ()
    final_temp : float
        Final temperature ()
    cooling_rate : float
        Cooling rate (/s)
    latent_heat_factor : float
        Strength of temperature arrest due to latent heat
    """
    # Phase diagram parameters
    eutectic_comp = 61.9  # wt% Sn
    eutectic_temp = 183   # 
    Pb_melting = 327      # 
    Sn_melting = 232      # 

    # Estimate liquidus temperature from composition
    if composition_Sn < eutectic_comp:
        liquidus_temp = Pb_melting - (Pb_melting - eutectic_temp) * (composition_Sn / eutectic_comp)
    else:
        liquidus_temp = Sn_melting - (Sn_melting - eutectic_temp) * ((100 - composition_Sn) / (100 - eutectic_comp))

    # Time array
    time = np.arange(0, (initial_temp - final_temp) / cooling_rate, 0.1)
    temperature = np.zeros_like(time)

    for i, t in enumerate(time):
        # Basic cooling
        temp = initial_temp - cooling_rate * t

        # Arrest at liquidus (solidification start)
        if abs(temp - liquidus_temp) < 5:
            temp += latent_heat_factor * np.exp(-((temp - liquidus_temp)**2) / 10)

        # Arrest at eutectic temperature
        if abs(temp - eutectic_temp) < 5:
            # Arrest more pronounced closer to eutectic composition
            eutectic_factor = 1.0 - abs(composition_Sn - eutectic_comp) / eutectic_comp
            temp += latent_heat_factor * eutectic_factor * np.exp(-((temp - eutectic_temp)**2) / 10)

        temperature[i] = temp

    return time, temperature

# Calculate cooling curves for different compositions
compositions = [20, 40, 61.9, 80]  # wt% Sn
colors = ['blue', 'green', 'red', 'purple']
labels = [f'{comp} wt% Sn' for comp in compositions]

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 6))

# Plot cooling curves
for comp, color, label in zip(compositions, colors, labels):
    time, temp = simulate_cooling_curve(comp)
    if comp == 61.9:
        ax1.plot(time, temp, color=color, linewidth=2.5, label=label + ' (eutectic)', linestyle='-')
    else:
        ax1.plot(time, temp, color=color, linewidth=2, label=label, alpha=0.8)

ax1.axhline(y=183, color='red', linestyle='--', linewidth=1.5, alpha=0.5, label='Eutectic temperature (183)')
ax1.set_xlabel('Time (s)', fontsize=12, fontweight='bold')
ax1.set_ylabel('Temperature ()', fontsize=12, fontweight='bold')
ax1.set_title('Cooling Curves for Pb-Sn System', fontsize=14, fontweight='bold')
ax1.legend(loc='upper right', fontsize=10)
ax1.grid(True, alpha=0.3)
ax1.set_ylim(100, 350)

# Cooling rate (time derivative of temperature)
ax2.set_title('Cooling Rate (dT/dt)', fontsize=14, fontweight='bold')
for comp, color, label in zip(compositions, colors, labels):
    time, temp = simulate_cooling_curve(comp)
    cooling_rate = np.gradient(temp, time)
    if comp == 61.9:
        ax2.plot(temp, -cooling_rate, color=color, linewidth=2.5, label=label + ' (eutectic)')
    else:
        ax2.plot(temp, -cooling_rate, color=color, linewidth=2, label=label, alpha=0.8)

ax2.axvline(x=183, color='red', linestyle='--', linewidth=1.5, alpha=0.5)
ax2.set_xlabel('Temperature ()', fontsize=12, fontweight='bold')
ax2.set_ylabel('Absolute cooling rate (/s)', fontsize=12, fontweight='bold')
ax2.legend(loc='upper right', fontsize=10)
ax2.grid(True, alpha=0.3)
ax2.set_xlim(100, 350)

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

print("\n=== Characteristics of Cooling Curves ===")
print("1. Arrest at liquidus: Latent heat release due to solidification start")
print("2. Arrest at eutectic temperature: Significant latent heat release from eutectic reaction (L ’ ± + ²)")
print("3. Most clear arrest at eutectic composition (61.9 wt% Sn)")
print("4. Two-stage arrest observed for compositions away from eutectic")

3. Peritectic and Monotectic Systems

3.1 Peritectic Reaction

A peritectic reaction is where a liquid phase reacts with a solid phase to form a new solid phase:

$$L + \alpha \rightarrow \beta \quad (\text{upon cooling})$$

This is observed in many alloy systems such as Pt-Ag, Fe-Ni, and Cu-Zn systems.

# Requirements:
# - Python 3.9+
# - matplotlib>=3.7.0

"""
Example: This is observed in many alloy systems such as Pt-Ag, Fe-Ni,

Purpose: Demonstrate data visualization techniques
Target: Intermediate
Execution time: 2-5 seconds
Dependencies: None
"""

            <h4>Code Example 4: Visualization of Peritectic Reaction (Pt-Ag System Model)</h4>
            <pre><code class="language-python">import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import FancyArrowPatch

def create_peritectic_diagram():
    fig, ax = plt.subplots(figsize=(12, 8))

    # Composition range
    comp = np.linspace(0, 100, 500)

    # Liquidus of peritectic system (simplified model)
    # Pt side
    liquidus_left = 1769 - 15 * comp[:200]
    # Ag side
    liquidus_right = 961 + 7 * (100 - comp[300:])
    # Near peritectic point
    liquidus_middle = np.linspace(liquidus_left[-1], liquidus_right[0], 100)
    liquidus = np.concatenate([liquidus_left, liquidus_middle, liquidus_right])

    # Peritectic point parameters
    peritectic_comp = 42  # wt% Ag
    peritectic_temp = 1186  # 

    # Solidus
    solidus_left = np.full(200, peritectic_temp)
    solidus_middle = np.full(100, peritectic_temp)
    solidus_right = 961 + 5 * (100 - comp[300:])
    solidus = np.concatenate([solidus_left, solidus_middle, solidus_right])

    # ± phase solubility limit
    alpha_limit = 15  # wt% Ag

    # Fill phase regions
    ax.fill_between(comp, liquidus, 2000, alpha=0.3, color='red', label='Liquid (L)')
    ax.fill_between(comp[:200], solidus[:200], liquidus[:200],
                    alpha=0.3, color='yellow', label='L + ±')
    ax.fill_between(comp[200:], solidus[200:], liquidus[200:],
                    alpha=0.3, color='orange', label='L + ²')
    ax.fill_between(comp, 800, solidus, alpha=0.2, color='blue', label='² phase')

    # ± phase region
    ax.fill_between(comp[:100], 800, peritectic_temp,
                    where=(comp[:100] <= alpha_limit),
                    alpha=0.3, color='cyan', label='± phase')
    ax.fill_between(comp[:100], 800, peritectic_temp,
                    where=(comp[:100] > alpha_limit),
                    alpha=0.3, color='lightblue', label='± + ²')

    # Plot liquidus and solidus lines
    ax.plot(comp, liquidus, 'r-', linewidth=2.5, label='Liquidus')
    ax.plot(comp, solidus, 'b-', linewidth=2.5, label='Solidus')

    # Peritectic line
    ax.plot([0, 100], [peritectic_temp, peritectic_temp],
            'g--', linewidth=2, label='Peritectic line')

    # Peritectic point
    ax.plot(peritectic_comp, peritectic_temp, 'ro', markersize=14,
            zorder=10, markeredgecolor='black', markeredgewidth=2)
    ax.annotate(f'Peritectic point\n({peritectic_comp} wt% Ag, {peritectic_temp})',
                xy=(peritectic_comp, peritectic_temp),
                xytext=(peritectic_comp + 15, peritectic_temp + 150),
                arrowprops=dict(arrowstyle='->', color='black', lw=2),
                fontsize=11, ha='center', fontweight='bold',
                bbox=dict(boxstyle='round,pad=0.5', facecolor='yellow', alpha=0.7))

    # Arrows for peritectic reaction
    arrow1 = FancyArrowPatch((peritectic_comp - 10, peritectic_temp + 50),
                            (peritectic_comp, peritectic_temp + 10),
                            arrowstyle='->', mutation_scale=20, linewidth=2,
                            color='red', label='Liquid')
    arrow2 = FancyArrowPatch((peritectic_comp - 20, peritectic_temp + 50),
                            (peritectic_comp, peritectic_temp + 10),
                            arrowstyle='->', mutation_scale=20, linewidth=2,
                            color='cyan', label='± phase')
    ax.add_patch(arrow1)
    ax.add_patch(arrow2)

    ax.text(peritectic_comp + 5, peritectic_temp - 30, 'L + ± ’ ²',
            fontsize=13, fontweight='bold', color='green',
            bbox=dict(boxstyle='round,pad=0.5', facecolor='white', edgecolor='green', linewidth=2))

    # Labels and formatting
    ax.set_xlabel('Composition (wt% Ag)', fontsize=13, fontweight='bold')
    ax.set_ylabel('Temperature ()', fontsize=13, fontweight='bold')
    ax.set_title('Peritectic Phase Diagram (Pt-Ag System Model)', fontsize=15, fontweight='bold')
    ax.legend(loc='upper right', fontsize=10)
    ax.grid(True, alpha=0.3)
    ax.set_xlim(0, 80)
    ax.set_ylim(900, 1900)

    # Melting point of pure component
    ax.annotate('Pt melting point\n1769', xy=(0, 1769), xytext=(10, 1850),
                arrowprops=dict(arrowstyle='->', color='black', lw=1.5),
                fontsize=10)

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

    print("\n=== Characteristics of Peritectic Reaction ===")
    print("1. L + ± ’ ²: Liquid phase reacts with previously crystallized ± phase to form ² phase")
    print("2. Below peritectic point, ± phase is surrounded by ² phase (core-shell structure)")
    print("3. Long-time diffusion required for complete equilibrium state")
    print("4. With rapid cooling, ± phase remains as residual core")

create_peritectic_diagram()

=¡ Practical Importance of Peritectic Reactions

Peritectic reactions frequently appear in industrially important processes such as steel solidification (´-Fe + L ’ ³-Fe) and synthesis of high-temperature superconductors (YBCO). In peritectic reactions, diffusion becomes rate-controlling because the previously crystallized phase is surrounded by the later-formed phase, requiring considerable time to reach equilibrium.

4. Systems Containing Intermetallic Compounds

Intermetallic compounds are compounds with ordered structure formed at specific stoichiometric compositions. Representative examples include ¸ phase (Al‚Cu) in Al-Cu system and NiƒAl in Ni-Al system.

4.1 Characteristics of Al-Cu System

Principle of Age Hardening

Al-Cu system alloys (Duralumin) are strengthened through the following process:

  1. Solution treatment : Heat in ± single-phase region (around 520) to completely dissolve Cu in ± phase
  2. Quench : Water quench to form supersaturated solid solution (non-equilibrium state)
  3. Aging treatment : Heat at around 190 to form fine ¸’ precipitates (GP zone ’ ¸”)
  4. Precipitation strengthening : nm to tens of nm precipitates obstruct dislocation movement, improving strength by 2-3 times

5. Temperature Dependence of Solubility Limit

The solubility limit is the maximum solute concentration that can dissolve in a solid solution at a given temperature. In most systems, the solubility limit increases with temperature.

# Requirements:
# - Python 3.9+
# - matplotlib>=3.7.0


            <h4>Code Example 6: Temperature Dependence of Solubility Limit (Al-Cu System ± Phase)</h4>
            <pre><code class="language-python">import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit

# Experimental data (solubility limit of ± phase in Al-Cu system)
temp_data = np.array([25, 100, 200, 300, 400, 500, 548])  # 
solubility_data = np.array([0.1, 0.5, 1.5, 2.8, 4.0, 5.2, 5.65])  # wt% Cu

# Arrhenius-type fitting function
def solubility_model(T, A, B):
    """
    Temperature dependence of solubility (simplified model)
    C = A * exp(B / T)
    """
    T_kelvin = T + 273.15
    return A * np.exp(B / T_kelvin)

# Fitting
popt, pcov = curve_fit(solubility_model, temp_data, solubility_data, p0=[0.01, 3000])
A_fit, B_fit = popt

# Smooth curve
temp_smooth = np.linspace(25, 548, 200)
solubility_smooth = solubility_model(temp_smooth, A_fit, B_fit)

# Plot
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 6))

# Solubility limit curve
ax1.plot(temp_smooth, solubility_smooth, 'b-', linewidth=2.5, label='Fitting curve')
ax1.scatter(temp_data, solubility_data, s=100, c='red', zorder=5,
            edgecolors='black', linewidths=2, label='Experimental data')

ax1.set_xlabel('Temperature ()', fontsize=13, fontweight='bold')
ax1.set_ylabel('Solubility limit (wt% Cu)', fontsize=13, fontweight='bold')
ax1.set_title('Solubility Limit of ± Phase in Al-Cu System', fontsize=14, fontweight='bold')
ax1.legend(fontsize=11)
ax1.grid(True, alpha=0.3)
ax1.set_xlim(0, 600)
ax1.set_ylim(0, 6.5)

# Show composition range for age hardening
ax1.fill_between(temp_smooth, 0, solubility_smooth, alpha=0.2, color='green',
                 label='Age hardenable region')
ax1.axhline(y=4.0, color='orange', linestyle='--', linewidth=2,
            label='Typical alloy composition (4 wt% Cu)')

# Arrhenius plot (ln(C) vs 1/T)
temp_kelvin = temp_data + 273.15
ln_solubility = np.log(solubility_data)

ax2.scatter(1000/temp_kelvin, ln_solubility, s=100, c='red', zorder=5,
            edgecolors='black', linewidths=2, label='Experimental data')

# Fitting line
temp_kelvin_smooth = temp_smooth + 273.15
ln_solubility_smooth = np.log(solubility_model(temp_smooth, A_fit, B_fit))
ax2.plot(1000/temp_kelvin_smooth, ln_solubility_smooth, 'b-', linewidth=2.5,
         label='Linear fit')

ax2.set_xlabel('1000/T (K{¹)', fontsize=13, fontweight='bold')
ax2.set_ylabel('ln(solubility limit)', fontsize=13, fontweight='bold')
ax2.set_title('Arrhenius Plot', fontsize=14, fontweight='bold')
ax2.legend(fontsize=11)
ax2.grid(True, alpha=0.3)

# Display fitting parameters
textstr = f'C = A·exp(B/T)\nA = {A_fit:.4f}\nB = {B_fit:.1f} K'
props = dict(boxstyle='round', facecolor='wheat', alpha=0.8)
ax2.text(0.05, 0.95, textstr, transform=ax2.transAxes, fontsize=11,
         verticalalignment='top', bbox=props)

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

# Calculate optimal temperature range for age hardening treatment
print("\n=== Solubility Limit Data Analysis ===")
print(f"Fitting parameters: A = {A_fit:.4f}, B = {B_fit:.1f} K")
print(f"\nSolubility limit by temperature:")
for T in [25, 100, 200, 300, 400, 500]:
    C = solubility_model(T, A_fit, B_fit)
    print(f"  {T}: {C:.2f} wt% Cu")

print(f"\nFor 4 wt% Cu alloy:")
target_composition = 4.0
# Calculate temperature where solubility limit equals 4.0 wt%
def find_solvus_temp(C_target):
    T_kelvin = B_fit / np.log(C_target / A_fit)
    return T_kelvin - 273.15

solvus_temp = find_solvus_temp(target_composition)
print(f"  Solvus temperature: {solvus_temp:.1f}")
print(f"  Solution treatment temperature: above {solvus_temp + 20:.1f} (typically 520)")
print(f"  Aging treatment temperature: 150-200 (maintain supersaturation)")
print(f"  Precipitable Cu amount: {target_composition - solubility_model(190, A_fit, B_fit):.2f} wt%")

6. Composition-Microstructure Mapping of Practical Materials

Correlating predicted microstructure from phase diagrams with actual microstructure is extremely important in materials design. Here, we map the relationship between composition and microstructure for Al-Si casting alloys.

# Requirements:
# - Python 3.9+
# - matplotlib>=3.7.0
# - pandas>=2.0.0, <2.2.0

"""
Example: Correlating predicted microstructure from phase diagrams wit

Purpose: Demonstrate data visualization techniques
Target: Intermediate
Execution time: 2-5 seconds
Dependencies: None
"""

            <h4>Code Example 7: Composition-Microstructure Mapping of Practical Materials (Al-Si Casting Alloys)</h4>
            <pre><code class="language-python">import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

# Composition and microstructure data for Al-Si casting alloys
alloy_data = {
    'Alloy': ['A356', 'A380', 'A383', 'A390', 'Silumin', 'Hypereutectic Al-Si'],
    'Si_content': [7.0, 8.5, 10.5, 17.0, 12.6, 18.0],  # wt% Si
    'Mg_content': [0.35, 0.0, 0.0, 0.55, 0.0, 0.0],
    'Microstructure': ['Hypoeutectic', 'Hypoeutectic', 'Hypoeutectic', 'Hypereutectic', 'Eutectic', 'Hypereutectic'],
    'Primary_phase': ['±-Al', '±-Al', '±-Al', 'Primary Si', 'Eutectic', 'Primary Si'],
    'UTS_MPa': [228, 317, 310, 283, 180, 250],  # Ultimate Tensile Strength
    'Elongation': [8.0, 3.5, 3.0, 1.0, 5.0, 0.5],  # %
    'Application': ['Auto parts', 'Die casting', 'Die casting', 'Engine', 'General casting', 'Wear resistant']
}

df = pd.DataFrame(alloy_data)

# Phase diagram based plot
fig = plt.figure(figsize=(16, 10))
gs = fig.add_gridspec(2, 2, hspace=0.3, wspace=0.3)

# 1. Composition and microstructure relationship
ax1 = fig.add_subplot(gs[0, :])

# Phase diagram background
eutectic_comp = 12.6
ax1.axvline(x=eutectic_comp, color='red', linestyle='--', linewidth=2,
            alpha=0.5, label='Eutectic composition')
ax1.axvspan(0, eutectic_comp, alpha=0.2, color='blue', label='Hypoeutectic region')
ax1.axvspan(eutectic_comp, 25, alpha=0.2, color='orange', label='Hypereutectic region')

# Position of each alloy
colors = {'Hypoeutectic': 'blue', 'Eutectic': 'red', 'Hypereutectic': 'orange'}
for idx, row in df.iterrows():
    color = colors[row['Microstructure']]
    marker = 'o' if row['Mg_content'] == 0 else '^'
    ax1.scatter(row['Si_content'], idx + 1, s=200, c=color, marker=marker,
                edgecolors='black', linewidths=2, zorder=5)
    ax1.text(row['Si_content'] + 0.5, idx + 1, row['Alloy'],
             fontsize=11, va='center', fontweight='bold')

ax1.set_xlabel('Si content (wt%)', fontsize=13, fontweight='bold')
ax1.set_ylabel('Alloy number (order only)', fontsize=13, fontweight='bold')
ax1.set_title('Composition Distribution of Al-Si Casting Alloys', fontsize=15, fontweight='bold')
ax1.legend(fontsize=11)
ax1.grid(True, alpha=0.3, axis='x')
ax1.set_xlim(0, 22)
ax1.set_ylim(0, len(df) + 1)
ax1.set_yticks([])

# 2. Tensile strength and Si content relationship
ax2 = fig.add_subplot(gs[1, 0])

for idx, row in df.iterrows():
    color = colors[row['Microstructure']]
    marker = 'o' if row['Mg_content'] == 0 else '^'
    ax2.scatter(row['Si_content'], row['UTS_MPa'], s=150, c=color,
                marker=marker, edgecolors='black', linewidths=2)
    ax2.text(row['Si_content'], row['UTS_MPa'] + 10, row['Alloy'],
             fontsize=9, ha='center')

ax2.axvline(x=eutectic_comp, color='red', linestyle='--', linewidth=1.5, alpha=0.5)
ax2.set_xlabel('Si content (wt%)', fontsize=12, fontweight='bold')
ax2.set_ylabel('Tensile strength (MPa)', fontsize=12, fontweight='bold')
ax2.set_title('Mechanical Strength and Si Content', fontsize=13, fontweight='bold')
ax2.grid(True, alpha=0.3)
ax2.set_xlim(5, 20)
ax2.set_ylim(150, 350)

# 3. Elongation and Si content relationship
ax3 = fig.add_subplot(gs[1, 1])

for idx, row in df.iterrows():
    color = colors[row['Microstructure']]
    marker = 'o' if row['Mg_content'] == 0 else '^'
    ax3.scatter(row['Si_content'], row['Elongation'], s=150, c=color,
                marker=marker, edgecolors='black', linewidths=2)
    ax3.text(row['Si_content'], row['Elongation'] + 0.3, row['Alloy'],
             fontsize=9, ha='center')

ax3.axvline(x=eutectic_comp, color='red', linestyle='--', linewidth=1.5, alpha=0.5)
ax3.set_xlabel('Si content (wt%)', fontsize=12, fontweight='bold')
ax3.set_ylabel('Elongation (%)', fontsize=12, fontweight='bold')
ax3.set_title('Ductility and Si Content', fontsize=13, fontweight='bold')
ax3.grid(True, alpha=0.3)
ax3.set_xlim(5, 20)
ax3.set_ylim(0, 10)

# Legend
legend_elements = [
    plt.Line2D([0], [0], marker='o', color='w', markerfacecolor='blue',
               markersize=10, label='Hypoeutectic (±-Al primary)'),
    plt.Line2D([0], [0], marker='o', color='w', markerfacecolor='red',
               markersize=10, label='Eutectic (fine microstructure)'),
    plt.Line2D([0], [0], marker='o', color='w', markerfacecolor='orange',
               markersize=10, label='Hypereutectic (Si primary)'),
    plt.Line2D([0], [0], marker='^', color='w', markerfacecolor='gray',
               markersize=10, label='Mg-added alloy'),
]
ax3.legend(handles=legend_elements, loc='upper right', fontsize=9)

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

# Data table output
print("\n=== Composition-Microstructure-Property Mapping of Al-Si Casting Alloys ===\n")
print(df.to_string(index=False))

print("\n\n=== Composition and Microstructure Relationship ===")
print("1. Hypoeutectic alloys (< 12.6 wt% Si):")
print("   - ±-Al primary + Al-Si eutectic microstructure")
print("   - Relatively high ductility (3-8%)")
print("   - Applications: Auto parts, die casting")

print("\n2. Eutectic alloys (12.6 wt% Si):")
print("   - Complete eutectic microstructure (±-Al + Si lamellar structure)")
print("   - Lowest melting point (577) ’ Good castability")
print("   - Applications: General castings, decorative items")

print("\n3. Hypereutectic alloys (> 12.6 wt% Si):")
print("   - Coarse Si primary + Al-Si eutectic microstructure")
print("   - High wear resistance, low ductility (< 1%)")
print("   - Applications: Engine blocks, wear-resistant parts")
print("   - P addition enables refinement of primary Si")

print("\n4. Effect of Mg addition (A356, A390):")
print("   - Age hardening through Mg‚Si precipitation")
print("   - Strength increase (200 ’ 280 MPa)")
print("   - Maximum strength with T6 treatment (solution + aging)")

Selection Criteria for Practical Alloys

Required PropertyRecommended Composition RangeRepresentative AlloyConsiderations
High strength7-10 wt% Si + MgA356, A380Age hardening treatment required
High ductility7-9 wt% SiA356Ductility decreases with Mg addition
Castability10-13 wt% SiSilumin, A380Best near eutectic composition
Wear resistance17-18 wt% SiA390P addition for primary refinement

Exercises

Exercise 1: Lever Rule Calculation for Cu-Ni System

Problem: A Cu-60wt%Ni alloy is cooled very slowly from 1300. Determine the equilibrium state at 1250.

Given information:

Find:

  1. Fraction of liquid phase
  2. Fraction of solid phase
  3. Composition of each phase

View solution

Solution:

Apply lever rule:

$$f_L = \frac{C_\alpha - C_0}{C_\alpha - C_L} = \frac{68 - 60}{68 - 55} = \frac{8}{13} = 0.615$$

$$f_\alpha = \frac{C_0 - C_L}{C_\alpha - C_L} = \frac{60 - 55}{68 - 55} = \frac{5}{13} = 0.385$$

Answer:

Exercise 2: Microstructure Prediction for Al-Si Eutectic Alloy

Problem: Predict the final microstructure when an Al-10wt%Si alloy is equilibrium cooled from 700 to room temperature.

Given information:

Find:

  1. Phase state just above 577
  2. Phase state and fraction of each phase just below 577
  3. Final microstructure at room temperature

View solution

Solution:

1. Just above 577: L + ± (two-phase region)

2. Just below 577 (immediately after eutectic reaction):

3. Final microstructure at room temperature:

Exercise 3: Design of Age Hardening Treatment

Problem: Design optimal heat treatment conditions for age hardening an Al-4.5wt%Cu alloy.

Given information:

Find:

  1. Temperature range for solution treatment
  2. Recommended temperature range for aging treatment
  3. Theoretical amount of precipitable Cu

View solution

Solution:

1. Solution treatment temperature:

2. Aging treatment temperature:

3. Theoretical precipitation amount:

Exercise 4: Tracing Cooling Path from Phase Diagram

Problem: Describe the phase transformation sequence when a Pb-30wt%Sn alloy is equilibrium cooled from 300 to 100.

Given information:

Find:

  1. Phase state in each temperature range
  2. Major phase transformation reactions
  3. Final microstructure composition

View solution

Solution:

Phase transformation sequence:

  1. 300: Complete liquid phase (L)
  2. Approximately 270 (liquidus): L ’ L + ± (crystallization of ± phase begins)
  3. 270 - 183: L + ± (two-phase region)
    • ± phase increases, liquid phase decreases with cooling
    • ± phase composition: Sn gradually increases
    • Liquid phase composition: approaches eutectic composition (61.9 wt% Sn)
  4. 183 (eutectic temperature): L ’ ± + ² (eutectic reaction)
    • Residual liquid transforms to eutectic microstructure
    • Lever rule: \( f_{\text{primary}\alpha} = \frac{61.9 - 30}{61.9 - 19.2} = 0.747 \) (74.7%)
    • Eutectic microstructure: 25.3%
  5. 183 - 100: ± + ² (two-phase region)
    • Due to temperature dependence of solubility limit, Sn precipitates from ± phase to ² phase
    • Fine ² particles disperse in ± phase

Final microstructure (100):

Summary

In this chapter, we learned in detail how to read and analyze binary phase diagrams using practical alloy systems as examples.

Review of Key Points

  1. Complete solid solution system (Cu-Ni) : Continuous solidification between liquidus and solidus. Calculate phase fractions using lever rule.
  2. Eutectic systems (Al-Si, Pb-Sn) : Two solid phases crystallize simultaneously from liquid at eutectic point. Minimum melting point at eutectic composition. Clear arrest in cooling curve.
  3. Peritectic system (Pt-Ag) : Peritectic reaction L + ± ’ ². Diffusion-controlled requiring time to reach equilibrium.
  4. Intermetallic compound system (Al-Cu) : Compound formation at specific composition. Strengthening through age hardening treatment (Duralumin).
  5. Temperature dependence of solubility limit : Solubility limit increases with temperature. Principle of age hardening.
  6. Composition-microstructure-property mapping : Predict microstructure from phase diagram and correlate with mechanical properties.

=¡ Next Steps

In the next chapter, we will learn about ternary phase diagrams and complex phase transformations. We will understand phase equilibria in more practical alloy systems such as Fe-C-Cr system (stainless steel) and Al-Cu-Mg system (high-strength aluminum alloys). We will also master advanced phase diagram reading methods for non-equilibrium states including metastable phase diagrams, continuous cooling transformation (CCT) diagrams, and TTT diagrams.

Learning Verification

Check if you can answer the following questions:

� Chapter 3: Phase Equilibria and Phase Diagram Fundamentals Chapter 5: Ternary Phase Diagrams and Complex Phase Transformations ’

Disclaimer