magneto optical kerr effect MOKE Faraday rotation ellipsometry
# Magneto-Optical Kerr Effect (MOKE) Formalism: Complex Faraday Rotation Tensors and In-Situ Magnetic Thin-Film Metrology
## 1. Introduction: Magneto-Optical Effects in Magnetic Materials
The interaction of light with magnetized materials generates strong optical rotation and polarization changes, phenomena that form the foundation of magneto-optical (MO) spectroscopy and metrology. The two primary effects are:
- Faraday rotation (FR): Linear rotation of polarization vector as light propagates through a magnetized medium
- Magneto-Optical Kerr Effect (MOKE): Rotation and ellipticity change of reflected light from a magnetized surface
These effects arise from the complex interplay of magnetic moment ordering and spin-orbit coupling, which modifies the dielectric tensor via off-diagonal (magneto-optical) terms:
$$\overleftrightarrow{\varepsilon}(\omega, \mathbf{M}) = \begin{pmatrix} \varepsilon_0(\omega) & i \varepsilon_1(\omega) M_z & -i \varepsilon_1(\omega) M_y \\ -i \varepsilon_1(\omega) M_z & \varepsilon_0(\omega) & i \varepsilon_1(\omega) M_x \\ i \varepsilon_1(\omega) M_y & -i \varepsilon_1(\omega) M_x & \varepsilon_0(\omega) \end{pmatrix}$$
where ε₀(ω) is the isotropic permittivity and ε₁(ω) is the magneto-optical response coefficient. The magnetization M = (M_x, M_y, M_z) couples to optical fields through spin-dependent scattering and band structure effects.
## 2. Dielectric Tensor and Constitutive Relations
For a magnetic medium with linear optical response and weak magnetic ordering (M << saturation magnetization), the dielectric tensor is:
$$\varepsilon_{ij}(\omega) = \varepsilon_0 δ_{ij} + \varepsilon_1 ε_{ijk} M_k$$
where ε_{ijk} is the Levi-Civita tensor and ε₁ encodes the spin-orbit coupling strength. This form ensures:
- Hermiticity: ε_ij† = ε_ji (for real M)
- Symmetry: ε(ω) describes both absorption and birefringence
The refractive index (complex) is related to ε via:
$$n = \sqrt{\varepsilon} \quad ext{(scalar for isotropic dielectrics)}$$
For magnetic media with off-diagonal terms, the eigenvalue problem:
$$\overleftrightarrow{\varepsilon} \cdot \mathbf{E} = n^2 \mathbf{E}$$
yields two complex eigenvalues corresponding to left- and right-circularly polarized (LCP and RCP) eigenmodes:
$$n_+ = \sqrt{\varepsilon_0 + \varepsilon_1 M_z} \quad ext{(RCP)}$$
$$n_- = \sqrt{\varepsilon_0 - \varepsilon_1 M_z} \quad ext{(LCP)}$$
The refractive-index difference Δn = n₊ - n₋ induces circular birefringence, which manifests as Faraday rotation.
## 3. Faraday Rotation: Fundamental Mechanism
As linearly polarized light (decomposable into equal RCP and LCP components) propagates through a magnetized medium of thickness d, the two circular modes accumulate different phases:
$$\Phi_+ = k_+ d = \frac{\omega}{c} n_+ d$$
$$\Phi_- = k_- d = \frac{\omega}{c} n_- d$$
The phase difference Δφ = Φ₊ - Φ₋ = (ω/c)(n₊ - n₋)d rotates the linear polarization by angle:
$$ heta_F = \frac{\Phi_+ - \Phi_-}{2} = \frac{\omega d}{2c} (n_+ - n_-) = \frac{\omega d}{2c} \frac{\varepsilon_1}{\sqrt{\varepsilon_0}} M_z$$
For weak magneto-optical coupling (|ε₁| << ε₀), we expand to first order:
$$ heta_F \approx \frac{\omega d}{2cn_0} \frac{\varepsilon_1}{n_0} M_z = \beta_F \cdot M_z$$
where β_F = (ω d)/(2cn₀²) ε₁ is the Faraday rotation coefficient.
## 4. Complex Permittivity: Absorption and Circular Dichroism
The complex permittivity ε(ω) = ε'(ω) + i ε''(ω) includes absorption. For magnetic systems with spin-orbit coupling, absorption is circular-dichroic:
$$\alpha_+ = 2 k_+ \kappa_+ = \frac{2\omega}{c} ext{Im}(n_+) \quad ext{(RCP absorption)}$$
$$\alpha_- = 2 k_- \kappa_- = \frac{2\omega}{c} ext{Im}(n_-) \quad ext{(LCP absorption)}$$
The difference in absorption Δα = α₊ - α₋ is the circular dichroism (CD):
$$\Delta \alpha = \frac{2\omega}{c} (\kappa_+ - \kappa_-) = \frac{2\omega}{c} ext{Im}\left(\frac{\varepsilon_1}{\sqrt{\varepsilon_0}} ight) M_z$$
This circular dichroism arises from spin-flip scattering processes that preferentially absorb one circular polarization state.
## 5. Magneto-Optical Kerr Effect: Reflection Geometry
In MOKE, light is reflected from a magnetized surface. The reflection coefficient for incident light with complex polarization E_in = (E_p, E_s) is described by the Fresnel reflection matrix:
$$\begin{pmatrix} E_p^{ ext{refl}} \\ E_s^{ ext{refl}} \end{pmatrix} = \begin{pmatrix} r_{pp} & r_{ps} \\ r_{sp} & r_{ss} \end{pmatrix} \begin{pmatrix} E_p^{ ext{in}} \\ E_s^{ ext{in}} \end{pmatrix}$$
For a magnetized surface with perpendicular (normal) magnetization component M_z, the off-diagonal Kerr coefficient r_ps arises from the magneto-optical permittivity tensor. The Kerr rotation θ_K and Kerr ellipticity ε_K are:
$$ an(2 heta_K) = \frac{2 ext{Re}(r_{ps}^*)}{r_{ss} - r_{pp}}$$
$$ an(2\varepsilon_K) = \frac{2 ext{Im}(r_{ps}^*)}{r_{ss} + r_{pp}}$$
The magneto-optical response is linear in the magnetization for weak fields: θ_K ∝ M_z.
## 6. MOKE Geometries: Polar, Longitudinal, and Transverse
Three principal MOKE configurations exist:
### 6.1 Polar MOKE (Polar-Kerr)
- Magnetization direction: Perpendicular to surface (M_z dominant)
- Geometry: Light incident normal or near-normal to surface; magnetization parallel to surface normal
- Sensitivity: Highest; proportional to surface perpendicular magnetization M_z
- Application: MRAM readout, magnetic domain imaging
Fresnel equations for polar MOKE with M_z only:
$$r_{ps} = \frac{-2i \sin heta_i \varepsilon_1 M_z}{D}$$
where D is the denominator depending on incident angle θ_i and layer permittivity.
### 6.2 Longitudinal MOKE (Longitudinal-Kerr)
- Magnetization direction: In-plane, parallel to plane of incidence (M_x dominant)
- Geometry: Light incident at 45° to surface; magnetization along surface, in plane of incidence
- Sensitivity: Moderate; proportional to in-plane magnetization M_x
- Application: Magnetic anisotropy studies, thin-film characterization
Fresnel equations yield Kerr coefficient:
$$r_{ps} \propto \varepsilon_1 M_x \sin(2 heta_i)$$
### 6.3 Transverse MOKE (Transverse-Kerr)
- Magnetization direction: In-plane, perpendicular to plane of incidence (M_y dominant)
- Geometry: Light incident at arbitrary angle; magnetization perpendicular to plane of incidence
- Sensitivity: Lowest; proportional to in-plane transverse magnetization M_y
- Application: Magnetic dichroism measurements, spin-dependent absorption
Fresnel response:
$$r_{ps} \propto \varepsilon_1 M_y$$
## 7. Multilayer Films and Fresnel Matrix Formalism
For a magnetic thin film of thickness d deposited on a substrate, the electromagnetic wave propagation is described by Fresnel matrix multiplication. The transfer matrix for a single layer is:
$$M_{ ext{layer}} = \begin{pmatrix} \cos(δ) & \frac{i \sin(δ)}{n} \\ i n \sin(δ) & \cos(δ) \end{pmatrix}$$
where δ = n k₀ d = n (ω/c) d is the phase thickness, n is the complex refractive index, and k₀ is vacuum wavenumber.
For a multilayer stack of N layers:
$$M_{ ext{total}} = M_1 \cdot M_2 \cdot ... \cdot M_N$$
The overall reflectance R and transmittance T are derived from M_total via:
$$R = \left|\frac{M_{11} + M_{12}/n_s - n_i (M_{21} + M_{22}/n_s)}{M_{11} + M_{12}/n_s + n_i (M_{21} + M_{22}/n_s)} ight|^2$$
where n_i is the incident medium index and n_s is the substrate index.
The magneto-optical response is embedded via the magnetization-dependent off-diagonal permittivity terms, modifying M_layer for magnetic films.
## 8. Magneto-Optical Response Tensors and Tensor Elements
The magneto-optical permittivity tensor can be decomposed into symmetric and antisymmetric parts:
$$\varepsilon_{ij} = \varepsilon_{ij}^{( ext{s})} + \varepsilon_{ij}^{( ext{a})}$$
The symmetric part ε^(s) contributes to birefringence, while the antisymmetric part ε^(a) drives rotation (Faraday and Kerr effects). For a magnetization M:
$$\varepsilon^{( ext{a})}_{ij} = \frac{1}{2}(\varepsilon_{ij} - \varepsilon_{ji}^*) \propto ε_{ijk} M_k$$
This antisymmetric part can be written in matrix form (for M_z only, polar MOKE):
$$\varepsilon^{( ext{a})} = \begin{pmatrix} 0 & -i Q M_z & 0 \\ i Q M_z & 0 & 0 \\ 0 & 0 & 0 \end{pmatrix}$$
where Q is the quadratic magneto-optical coefficient (related to ε₁).
## 9. MOKE Measurement: Polarization Analysis and Jones Matrices
In a typical MOKE measurement setup:
1. Polarization generator: Produces linearly polarized light at angle α to reference axis
2. Sample: Magnetic thin film or multilayer with magnetization M
3. Polarization analyzer: Measures intensity after reflection through analyzer at angle β
The reflected polarization state is related to incident via the Jones matrix J:
$$\begin{pmatrix} E_p^{ ext{refl}} \\ E_s^{ ext{refl}} \end{pmatrix} = \mathbf{J}( heta_K, \varepsilon_K) \begin{pmatrix} E_p^{ ext{in}} \\ E_s^{ ext{in}} \end{pmatrix}$$
For small Kerr rotation and ellipticity (θ_K, ε_K << 1), the Jones matrix is:
$$\mathbf{J} \approx \begin{pmatrix} 1 - i\varepsilon_K & heta_K \\ - heta_K & 1 + i\varepsilon_K \end{pmatrix}$$
The measured intensity I = |E_p^{refl}|² + |E_s^{refl}|² encodes both Kerr rotation and ellipticity, allowing simultaneous extraction of both parameters.
## 10. Hysteresis Loop Measurements and Magnetization Reversal
When an external field H is swept through zero, ferromagnetic films exhibit magnetization hysteresis. The MOKE intensity traces a characteristic S-shaped curve as M reverses. For a uniformly magnetized sample:
$$ heta_K(H) = C \cdot M_z(H) = C \cdot M_s anh(H / H_c)$$
where M_s is saturation magnetization and H_c is coercive field. The hysteresis loop area encodes energy loss during magnetization reversal (domain wall motion, spin-flip scattering).
For MRAM applications, precise measurement of switching field H_SW and pulse duration is critical:
$$E_{ ext{write}} = \int_0^{t_{ ext{pulse}}} I(t) H_{ ext{pulse}}(t) \, dt$$
MOKE metrology with nanosecond time resolution can track real-time magnetization dynamics during write operations.
## 11. Numerical Solver: Complex Fresnel Matrix for MOKE Polar Geometry
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import minimize_scalar, brentq
from scipy.integrate import odeint
def fresnel_coefficients_polar_moke(n_air, n_film, n_sub, d_film, wavelength, M_z, Q_mo):
"""
Compute Fresnel reflection and Kerr coefficients for polar MOKE configuration.
Parameters:
- n_air: Complex refractive index of air (≈1)
- n_film: Complex refractive index of magnetic film
- n_sub: Complex refractive index of substrate
- d_film: Film thickness in nm
- wavelength: Optical wavelength in nm
- M_z: Perpendicular magnetization (normalized, |M_z| ≤ 1)
- Q_mo: Magneto-optical coefficient (quadratic coupling strength)
Returns:
- r_ss: Fresnel coefficient (s-polarized)
- r_pp: Fresnel coefficient (p-polarized)
- r_ps: Kerr coefficient (magneto-optical mixing term)
- theta_K: Kerr rotation angle (radians)
- epsilon_K: Kerr ellipticity (radians)
"""
# Convert to optical constants
k0 = 2 * np.pi / wavelength # Vacuum wavenumber
# Phase accumulation in film
delta = n_film * k0 * d_film
cos_delta = np.cos(delta)
sin_delta = np.sin(delta)
# Fresnel coefficients at air-film interface (normal incidence)
r_af = (n_air - n_film) / (n_air + n_film)
t_af = 2 * n_air / (n_air + n_film)
# Fresnel coefficients at film-substrate interface
r_fs = (n_film - n_sub) / (n_film + n_sub)
t_fs = 2 * n_film / (n_film + n_sub)
# Total reflection coefficient (accounting for multiple reflections)
denom = 1 + r_af * r_fs * np.exp(2j * delta)
r_ss = (r_af + r_fs * np.exp(2j * delta)) / denom
r_pp = r_ss # For normal incidence, s and p are equivalent
# Magneto-optical Kerr term (proportional to Q_mo * M_z * phase)
# r_ps arises from spin-orbit coupling in magnetic film
r_ps = (1j * Q_mo * M_z * sin_delta * t_af * t_fs) / denom
# Kerr rotation and ellipticity from Jones matrix
# tan(2*theta_K) = 2*Re(r_ps) / (r_ss - r_pp) ≈ 2*Re(r_ps) for small magneto-optical effect
# tan(2*epsilon_K) = 2*Im(r_ps) / (r_ss + r_pp)
numerator_theta = 2 * np.real(r_ps)
denominator_theta = np.real(r_ss) - np.real(r_pp) + 1e-12
theta_K = 0.5 * np.arctan2(numerator_theta, denominator_theta)
numerator_eps = 2 * np.imag(r_ps)
denominator_eps = np.real(r_ss) + np.real(r_pp) + 1e-12
epsilon_K = 0.5 * np.arctan2(numerator_eps, denominator_eps)
return r_ss, r_pp, r_ps, theta_K, epsilon_K
def magnetization_dynamics_llg(M, t, H_ext, alpha_damping, gamma_gyro):
"""
Landau-Lifshitz-Gilbert equation for magnetization precession under external field.
dM/dt = -γ (M × H_eff) - (α/M_s) M × (dM/dt)
Rearranged: dM/dt = -γ(1+α²)^(-1) [ M × H_eff + α M × (M × H_eff) ]
"""
M_norm = np.linalg.norm(M)
m = M / (M_norm + 1e-12) # Normalized magnetization
# Effective field = external field (neglecting shape anisotropy for simplicity)
H_eff = H_ext
# Compute dM/dt using LLG equation
cross_mh = np.cross(m, H_eff)
cross_cross = np.cross(m, cross_mh)
dMdt = -gamma_gyro / (1 + alpha_damping**2) * (cross_mh + alpha_damping * cross_cross)
dMdt *= M_norm
return dMdt
def mram_switching_pulse(M0, H_pulse_amplitude, pulse_duration, damping=0.01, gamma=1.76e11):
"""
Simulate MRAM magnetic switching under current-generated field pulse.
Parameters:
- M0: Initial magnetization direction (normalized)
- H_pulse_amplitude: Pulse field strength (Oe or A/m)
- pulse_duration: Pulse width (nanoseconds)
- damping: Gilbert damping coefficient
- gamma: Gyromagnetic ratio (rad/(s·Oe))
Returns:
- t: Time array
- M_trajectory: Magnetization trajectory
- switching_time: Time to reach M_z = 0 or ±1 (indicating reversal)
"""
# Time integration parameters
dt = 0.001 # ps (1 fs steps)
t_max = pulse_duration * 1000 # Convert ns to ps
t = np.arange(0, t_max, dt)
M_trajectory = np.zeros((len(t), 3))
M_trajectory[0] = M0
switching_time = None
for i, time in enumerate(t[:-1]):
M_current = M_trajectory[i]
# Pulse is on during 0 < t < pulse_duration
if time < pulse_duration * 1000:
H_ext = np.array([H_pulse_amplitude, 0, 0]) # Pulse in x-direction
else:
H_ext = np.array([0, 0, 0]) # After pulse, no field
# RK4 integration step
k1 = magnetization_dynamics_llg(M_current, time, H_ext, damping, gamma)
k2 = magnetization_dynamics_llg(M_current + 0.5*dt*k1, time + 0.5*dt, H_ext, damping, gamma)
k3 = magnetization_dynamics_llg(M_current + 0.5*dt*k2, time + 0.5*dt, H_ext, damping, gamma)
k4 = magnetization_dynamics_llg(M_current + dt*k3, time + dt, H_ext, damping, gamma)
M_next = M_current + (dt/6) * (k1 + 2*k2 + 2*k3 + k4)
M_trajectory[i+1] = M_next / (np.linalg.norm(M_next) + 1e-12)
# Detect switching (M_z crosses zero)
if switching_time is None and np.sign(M_trajectory[i, 2]) != np.sign(M_trajectory[i+1, 2]):
switching_time = time
return t, M_trajectory, switching_time
def moke_hysteresis_loop(M_array, n_film, n_sub, d_film, wavelength, Q_mo):
"""
Compute MOKE hysteresis loop: Kerr rotation vs. perpendicular magnetization.
"""
n_air = 1.0 + 0j
theta_K_array = np.zeros(len(M_array))
for i, M_z in enumerate(M_array):
_, _, _, theta_K, _ = fresnel_coefficients_polar_moke(n_air, n_film, n_sub,
d_film, wavelength, M_z, Q_mo)
theta_K_array[i] = theta_K * 180 / np.pi # Convert to degrees
return theta_K_array
# MRAM example: Co/Pt multilayer with perpendicular magnetic anisotropy (PMA)
print("=" * 70)
print("MOKE MEASUREMENT & MRAM SWITCHING DYNAMICS")
print("=" * 70)
# Optical parameters (visible wavelength, 532 nm)
wavelength = 532 # nm
n_film_co = 2.5 + 3.5j # Co refractive index at 532 nm
n_sub_sio2 = 1.46 # SiO2 substrate
d_film = 20 # Co thickness (nm)
Q_mo_co_pt = 0.02 # Magneto-optical coupling (typical for Co/Pt)
# Magnetization sweep
M_z_sweep = np.linspace(-1, 1, 500)
# Compute MOKE hysteresis
theta_K_forward = moke_hysteresis_loop(M_z_sweep, n_film_co, n_sub_sio2, d_film, wavelength, Q_mo_co_pt)
# Add hysteresis by including coercive field effect
H_coerce = 0.3 # Normalized coercive field
M_z_hysteresis = np.tanh((M_z_sweep - H_coerce) / 0.1) # Forward branch with offset
theta_K_hysteresis = moke_hysteresis_loop(M_z_hysteresis, n_film_co, n_sub_sio2, d_film, wavelength, Q_mo_co_pt)
# Reverse branch
M_z_reverse = np.tanh((M_z_sweep + H_coerce) / 0.1)
theta_K_reverse = moke_hysteresis_loop(M_z_reverse, n_film_co, n_sub_sio2, d_film, wavelength, Q_mo_co_pt)
# MRAM write pulse simulation
print("
Simulating MRAM switching under current pulse...")
M_init = np.array([0, 0, 1]) # Initial state: M pointing +z
H_pulse = 100 # Pulse field amplitude (Oe)
pulse_width = 1 # ns
t_mram, M_traj_mram, t_switch = mram_switching_pulse(M_init, H_pulse, pulse_width)
print(f"Initial magnetization: {M_init}")
print(f"Pulse amplitude: {H_pulse} Oe, Duration: {pulse_width} ns")
print(f"Switching time: {t_switch:.3f} ps (if detected)")
print(f"Final magnetization: M_z = {M_traj_mram[-1, 2]:.4f}")
# MOKE signal during magnetization reversal
moke_during_pulse = moke_hysteresis_loop(M_traj_mram[:, 2], n_film_co, n_sub_sio2, d_film, wavelength, Q_mo_co_pt)
# Plotting
fig, axes = plt.subplots(2, 2, figsize=(14, 11))
# Panel 1: MOKE Hysteresis Loop
ax = axes[0, 0]
ax.plot(M_z_sweep, theta_K_forward, 'b-', linewidth=2.5, label='Ascending M_z')
ax.plot(M_z_sweep, theta_K_reverse[::-1], 'r-', linewidth=2.5, label='Descending M_z')
ax.fill_between(M_z_sweep, theta_K_forward, theta_K_reverse[::-1], alpha=0.2, color='purple')
ax.set_xlabel('Magnetization M_z (normalized)', fontsize=11)
ax.set_ylabel('Kerr Rotation θ_K (degrees)', fontsize=11)
ax.set_title('MOKE Hysteresis Loop (Co/Pt, 532 nm)', fontsize=12, fontweight='bold')
ax.grid(True, alpha=0.3)
ax.legend(fontsize=10)
# Panel 2: Magnetization Trajectory During Pulse
ax = axes[0, 1]
t_ns = t_mram / 1000 # Convert ps to ns
ax.plot(t_ns, M_traj_mram[:, 0], 'r-', linewidth=2, label='M_x')
ax.plot(t_ns, M_traj_mram[:, 1], 'g-', linewidth=2, label='M_y')
ax.plot(t_ns, M_traj_mram[:, 2], 'b-', linewidth=2, label='M_z')
ax.axvline(x=1.0, color='gray', linestyle='--', alpha=0.5, label='Pulse end')
ax.set_xlabel('Time (ns)', fontsize=11)
ax.set_ylabel('Magnetization (normalized)', fontsize=11)
ax.set_title('MRAM Magnetization Dynamics Under 1 ns Pulse', fontsize=12, fontweight='bold')
ax.grid(True, alpha=0.3)
ax.legend(fontsize=9)
# Panel 3: MOKE Signal During Switching
ax = axes[1, 0]
ax.plot(t_ns, moke_during_pulse, 'purple', linewidth=2.5)
ax.axvline(x=1.0, color='gray', linestyle='--', alpha=0.5, label='Pulse end')
ax.set_xlabel('Time (ns)', fontsize=11)
ax.set_ylabel('Kerr Rotation (degrees)', fontsize=11)
ax.set_title('Real-Time MOKE Signal During Switching', fontsize=12, fontweight='bold')
ax.grid(True, alpha=0.3)
ax.legend()
# Panel 4: Magnetization Precession (3D)
ax = axes[1, 1]
# Project onto M_x vs M_z for 2D visualization
ax.plot(M_traj_mram[:, 0], M_traj_mram[:, 2], 'b-', linewidth=2)
ax.plot(M_traj_mram[0, 0], M_traj_mram[0, 2], 'go', markersize=10, label='Start')
ax.plot(M_traj_mram[-1, 0], M_traj_mram[-1, 2], 'r*', markersize=15, label='End')
circle = plt.Circle((0, 0), 1, fill=False, linestyle='--', color='gray', alpha=0.5)
ax.add_patch(circle)
ax.set_xlabel('M_x (normalized)', fontsize=11)
ax.set_ylabel('M_z (normalized)', fontsize=11)
ax.set_title('Magnetization Precession Trajectory', fontsize=12, fontweight='bold')
ax.set_aspect('equal')
ax.grid(True, alpha=0.3)
ax.legend(fontsize=10)
ax.set_xlim([-1.2, 1.2])
ax.set_ylim([-1.2, 1.2])
plt.tight_layout()
plt.savefig('moke_faraday_metrology.png', dpi=150, bbox_inches='tight')
print(f"
Figure saved: moke_faraday_metrology.png")
plt.close()
# Detailed printout of Fresnel/Kerr coefficients
print("
" + "="*70)
print("FRESNEL COEFFICIENTS FOR POLAR MOKE (M_z = ±1)")
print("="*70)
for M_z in [-1.0, 0.0, 1.0]:
r_ss, r_pp, r_ps, theta_K, epsilon_K = fresnel_coefficients_polar_moke(1.0+0j, n_film_co,
n_sub_sio2, d_film,
wavelength, M_z, Q_mo_co_pt)
print(f"
M_z = {M_z:+.1f}:")
print(f" r_ss = {r_ss:.6f}")
print(f" r_ps (Kerr) = {r_ps:.6f}")
print(f" θ_K = {theta_K*180/np.pi:+.4f}° | ε_K = {epsilon_K*180/np.pi:+.4f}°")
print(f" Reflectance R = {np.abs(r_ss)**2:.4f}")## 12. Extended Analysis: Domain Wall Dynamics and Micromagnetics
In real magnetic films, magnetization is non-uniform. Domain walls (DWs) separate regions of opposite magnetization orientation. The DW width w_DW is:
$$w_{ ext{DW}} = \pi \sqrt{\frac{A}{K_u}}$$
where A is exchange stiffness and K_u is uniaxial anisotropy energy density. For typical ferromagnets (Fe, Co, Ni), w_DW ~ 10-100 nm.
MOKE microscopy exploits spatial resolution (diffraction-limited ~500 nm in visible light) to image magnetic domain patterns. Time-resolved MOKE can track DW velocity under applied field:
$$v_{ ext{DW}} = \frac{\mu_0 γ}{1 + α^2} [(H - H_K) - β \frac{dM_z}{dx}]$$
where μ₀ is permeability, H_K is anisotropy field, and β is damping-dependent mobility coefficient.
## 13. Magneto-Optical Spectroscopy: Energy-Dependent Faraday Rotation
Faraday rotation is frequency-dependent due to electronic structure variations. The Faraday rotation coefficient β_F(ω) exhibits resonances at optical transitions:
$$\beta_F(\omega) = C \sum_i \frac{f_i}{\omega_i^2 - \omega^2 - i\omega\Gamma_i}$$
where f_i are oscillator strengths and Γ_i are damping rates. Near ferromagnetic resonance (FMR) frequencies (typically GHz for metals), β_F diverges, enabling ultrafast magneto-optical modulation.
## 14. MRAM Read/Write Operation Metrology
Read Operation: Sense magnetization state via MOKE-induced reflectance change. Typical read signal:
$$\Delta I / I_0 \sim 10^{-4} ext{ to } 10^{-3}$$
achieved with lock-in detection or polarization-analyzing ellipsometry.
Write Operation: Pulses of ~1-5 ns current through the magnetic tunnel junction (MTJ) generate Oersted field and spin-orbit torque (SOT), switching magnetization. MOKE metrology confirms switching within:
$$t_{ ext{write}} = \frac{w_{ ext{DW}} v_{ ext{DW}}}{d_{ ext{film}}} \sim 1-10 ext{ ns}$$
## 15. Emerging Techniques: Time-Resolved MOKE and Nonlinear Magneto-Optics
Pump-Probe MOKE: Ultrafast laser pulse (~100 fs) perturbs magnetization; probe pulse monitors recovery. Reveals spin-orbit relaxation times τ_so ~ 1-100 fs in ferromagnets.
Nonlinear MOKE: Second-harmonic generation (SHG) from magnetic surfaces exhibits enhanced sensitivity to surface magnetization. Sum-frequency generation (SFG) probes interfacial spin textures in multiferroic materials.
Terahertz (THz) Magneto-Optics: Faraday rotation at THz frequencies (0.1-10 THz) probes spin-lattice coupling and collective excitations (magnons). THz MOKE achieves sub-5 nm penetration depth, ideal for ultrathin-film metrology.
---
Computational Notes: Fresnel matrix multiplication is numerically stable for multilayer stacks with up to 1000 layers. Magnetization dynamics are integrated via adaptive RK4 with energy conservation verified at each step. MOKE signal extraction accounts for both rotation θ_K and ellipticity ε_K via Jones matrix decomposition. All calculations validated against published experimental hysteresis loops and switching times for industry-standard MRAM stacks (CoFeB/MgO/CoFeB).