JMAK Crystallization Kinetics

Intermediate Level

Introduction

The Johnson-Mehl-Avrami-Kolmogorov (JMAK) model is the cornerstone of crystallization kinetics in phase change materials. This tutorial will teach you how to model, simulate, and analyze crystallization processes using the JMAK framework, essential for understanding SET operations and retention behavior in PCM devices.

Learning Objectives

The JMAK Model

1 Understanding the JMAK Equation
X(t) = 1 - exp[-(kt)ⁿ]

Where:

  • X(t): Crystalline fraction at time t
  • k: Rate constant (temperature-dependent)
  • n: Avrami exponent (reveals crystallization mechanism)
  • t: Time
The Avrami exponent n tells us about nucleation and growth: n=3 for 3D growth with constant nucleation, n=4 for 3D growth with decreasing nucleation rate.
2 Temperature Dependence
k(T) = k₀ × exp(-Eₐ/k_B T)

The rate constant follows Arrhenius behavior:

  • k₀: Pre-exponential factor (~10¹⁶ s⁻¹)
  • Eₐ: Activation energy (1.8-2.3 eV for GST)
  • k_B: Boltzmann constant
  • T: Absolute temperature
3 Interactive JMAK Simulator

Explore JMAK Parameters

Key Metrics:

Rate Constant k: --

t₅₀ (50% crystallization): --

t₉₀ (90% crystallization): --

Practical Implementation

# JMAK Crystallization Simulation
import numpy as np
import matplotlib.pyplot as plt

class JMAKModel:
    def __init__(self, Ea=1.8, n=3.0, k0=1e16):
        self.Ea = Ea  # eV
        self.n = n    # Avrami exponent
        self.k0 = k0  # Pre-exponential factor
        self.kb = 8.617e-5  # eV/K
    
    def rate_constant(self, T):
        """Calculate temperature-dependent rate constant"""
        return self.k0 * np.exp(-self.Ea / (self.kb * T))
    
    def crystalline_fraction(self, t, T):
        """Calculate crystalline fraction at time t and temperature T"""
        k = self.rate_constant(T)
        return 1 - np.exp(-(k * t)**self.n)
    
    def time_to_fraction(self, X, T):
        """Calculate time to reach fraction X at temperature T"""
        k = self.rate_constant(T)
        return (-np.log(1 - X))**(1/self.n) / k

# Example usage
model = JMAKModel(Ea=1.8, n=3.0)
T = 500  # K
time = np.linspace(0, 100e-9, 1000)  # 0 to 100 ns

X = model.crystalline_fraction(time, T)
t50 = model.time_to_fraction(0.5, T)

print(f"Time to 50% crystallization: {t50*1e9:.2f} ns")

Avrami Exponent Interpretation

n Value Nucleation Growth Dimension PCM Implication
1.0 Site saturation 1D Interface-controlled
2.0 Site saturation 2D Thin film growth
3.0 Constant rate 3D Bulk crystallization
4.0 Decreasing rate 3D Nucleation-limited

Advanced Exercise: Multi-Temperature Analysis

Challenge

Use the simulator to determine:

  1. How does crystallization time scale with temperature?
  2. What n value best matches GST-225 behavior?
  3. Calculate the activation energy from multiple temperature points
  4. Predict retention time at 85°C storage temperature

Continue learning with:

Next: Pulse Programming