Dense Suspensions and Glassy Materials¶
Integration Through Transients Mode-Coupling Theory (ITT-MCT) provides a first-principles framework for understanding the rheology of dense colloidal suspensions and glasses. Unlike phenomenological models, MCT derives rheological behavior from microscopic particle interactions through memory integrals and non-equilibrium statistical mechanics.
Key Insight
ITT-MCT connects microscopic cage dynamics to macroscopic rheology through the non-equilibrium correlator \(\Phi(t,t')\), which tracks how particles become trapped and escape from their neighbors under flow.
Overview¶
Mode-Coupling Theory (MCT) was originally developed to describe the glass transition in equilibrium systems. The Integration Through Transients (ITT) extension handles non-equilibrium rheological flows by tracking the time evolution of structural correlations under deformation.
Key Physical Concepts:
Cage Effect: Particles in dense suspensions are trapped by their neighbors, creating temporary elastic cages
Glass Transition: At critical density, cages become permanent and the system develops a yield stress
Memory Kernels: Past deformations influence current stress through memory integrals
Strain Decorrelation: Applied strain breaks cages, allowing relaxation
Non-Ergodicity: Glassy systems cannot explore all configurations at long times
Two Model Variants:
Schematic MCT (\(F_{12}\)): Fast, semi-quantitative, 5-6 parameters
Isotropic MCT (ISM): Quantitative with structure factor S(k), more expensive
When to Use This Model¶
Use ITT-MCT When |
Use Alternatives When |
|---|---|
Dense colloidal suspensions (\(\phi > 0.45\)) |
Dilute suspensions (Einstein viscosity) |
Hard-sphere or near-hard-sphere systems |
Soft particles (use SGR) |
Glass transition characterization needed |
Only phenomenological fits required |
Microscopic understanding desired |
Fast empirical model sufficient (power-law, etc.) |
Predicting yield stress from interactions |
Yield stress from direct measurement (Herschel-Bulkley) |
Aging and rejuvenation dynamics |
Simple thixotropic models adequate (DMT, Fluidity) |
Warning
ITT-MCT models are computationally expensive due to Volterra integral equations. First JIT compilation takes 30-90 seconds. Use precompilation for production workflows.
Theoretical Foundations¶
Generalized Langevin Equation¶
The MCT framework describes the evolution of the density correlator through a generalized Langevin equation:
where:
\(\Phi(t,t')\) is the non-equilibrium correlator (0 = fully decorrelated, 1 = fully correlated)
\(\Gamma_0\) is the bare relaxation rate
\(m(\Phi)\) is the memory kernel encoding particle interactions
Integration from \(t'\) (past) to \(t\) (present) captures memory effects
\(F_{12}\) Schematic Memory Kernel¶
The schematic MCT model uses a simplified memory kernel:
The glass transition occurs at the critical point \(v_2 = 4\) (for \(F_{12}\) model). The distance from the glass transition is:
\(\epsilon > 0\): Glass state (permanent cages, yield stress)
\(\epsilon < 0\): Fluid state (transient cages, no yield stress)
\(\epsilon \approx 0\): Critical point (power-law relaxation)
Strain Decorrelation¶
Applied deformation breaks cages through a strain-dependent damping function:
where \(\gamma_c\) is the critical cage strain (typically 0.05-0.15). The effective correlator under flow becomes:
Stress Calculation¶
The shear stress follows from the correlator through:
where \(G_0\) is the high-frequency elastic modulus. For oscillatory deformations \(\gamma(t) = \gamma_0 \sin(\omega t)\), this yields complex modulus \(G^*(\omega)\).
Glass Transition Phenomenology¶
Near the glass transition, MCT predicts:
\(\beta\)-relaxation: Fast cage rattling, time scale \(\sim 1/\Gamma_0\)
\(\alpha\)-relaxation: Slow cage escape, time scale \(\tau_\alpha \sim |\epsilon|^{-\gamma}\) (power-law divergence)
Non-ergodicity parameter: \(f_{\text{neq}} = \lim_{t \to \infty} \Phi(t,0)\) jumps from 0 (fluid) to \(>0\) (glass)
For \(\epsilon > 0\), the system cannot fully relax and develops a yield stress:
Practical Implementation¶
Schematic MCT: Basic Usage¶
from rheojax.models import ITTMCTSchematic
import numpy as np
# Create model in glass state
model = ITTMCTSchematic(epsilon=0.1) # ε > 0 → glass
# Check glass transition properties
info = model.get_glass_transition_info()
print(f"Is glass: {info['is_glass']}")
print(f"Distance from transition: ε = {info['epsilon']:.3f}")
print(f"Non-ergodicity parameter: f_neq = {info['f_neq']:.3f}")
print(f"Critical v2: {info['v2_critical']:.1f}")
# Precompile for fast subsequent predictions (30-90s first time)
compile_time = model.precompile()
print(f"JIT compilation completed in {compile_time:.1f} seconds")
Note
The precompile() method triggers JIT compilation of the Volterra solver. Call this once at the start of your workflow to avoid compilation delays during fitting or prediction.
Flow Curves: Yield Stress Prediction¶
# Predict flow curve
gamma_dot = np.logspace(-4, 2, 50)
sigma = model.predict(gamma_dot, test_mode='flow_curve')
# Extract yield stress (σ → σ_y as γ̇ → 0)
sigma_y = sigma[0] # Stress at lowest shear rate
print(f"Yield stress: τ_y ≈ {sigma_y:.2f} Pa")
# Compare glass vs fluid
model_fluid = ITTMCTSchematic(epsilon=-0.1) # ε < 0 → fluid
sigma_fluid = model_fluid.predict(gamma_dot, test_mode='flow_curve')
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(8, 6))
ax.loglog(gamma_dot, sigma, 'o-', label=f'Glass (ε={0.1})')
ax.loglog(gamma_dot, sigma_fluid, 's-', label=f'Fluid (ε={-0.1})')
ax.axhline(sigma_y, color='red', linestyle='--', alpha=0.5, label='Yield stress')
ax.set_xlabel('Shear rate γ̇ (1/s)')
ax.set_ylabel('Shear stress σ (Pa)')
ax.legend()
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
Key Insight
In the glass state (\(\varepsilon > 0\)), the flow curve exhibits a finite yield stress followed by shear thinning. In the fluid state (\(\varepsilon < 0\)), stress scales smoothly from Newtonian at low rates to shear thinning at high rates.
Small-Amplitude Oscillatory Shear (SAOS)¶
# Predict complex modulus
omega = np.logspace(-4, 4, 100)
G_star = model.predict(omega, test_mode='oscillation')
# Extract components
G_prime = G_star.real # Storage modulus G'
G_double_prime = G_star.imag # Loss modulus G''
# Characteristic features
idx_cross = np.where(G_prime > G_double_prime)[0][0]
omega_cross = omega[idx_cross]
print(f"G' = G'' crossover at ω ≈ {omega_cross:.2e} rad/s")
# Plot
fig, ax = plt.subplots(figsize=(8, 6))
ax.loglog(omega, G_prime, 'o-', label="G' (storage)")
ax.loglog(omega, G_double_prime, 's-', label='G" (loss)')
ax.axvline(omega_cross, color='red', linestyle='--', alpha=0.5,
label='Crossover')
ax.set_xlabel('Frequency ω (rad/s)')
ax.set_ylabel('Modulus (Pa)')
ax.legend()
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
Note
For glasses (\(\varepsilon > 0\)), \(G'\) dominates at low frequencies (elastic plateau). For fluids (\(\varepsilon < 0\)), \(G''\) dominates (viscous behavior). The crossover frequency relates to the structural relaxation time \(\tau_\alpha\).
Startup Shear: Stress Overshoot¶
# Startup transient at fixed shear rate
t = np.linspace(0.01, 100, 500)
gamma_dot = 10.0 # 1/s
sigma_startup = model.predict(t, test_mode='startup', gamma_dot=gamma_dot)
# Find stress overshoot
idx_max = np.argmax(sigma_startup)
t_max = t[idx_max]
sigma_max = sigma_startup[idx_max]
sigma_steady = sigma_startup[-1]
print(f"Peak stress: σ_max = {sigma_max:.2f} Pa at t = {t_max:.2f} s")
print(f"Steady stress: σ_∞ = {sigma_steady:.2f} Pa")
print(f"Overshoot ratio: σ_max/σ_∞ = {sigma_max/sigma_steady:.2f}")
# Plot
fig, ax = plt.subplots(figsize=(8, 6))
ax.plot(t, sigma_startup, 'o-')
ax.axhline(sigma_steady, color='red', linestyle='--', alpha=0.5,
label='Steady state')
ax.plot(t_max, sigma_max, 'ro', markersize=10, label='Overshoot')
ax.set_xlabel('Time (s)')
ax.set_ylabel('Shear stress σ (Pa)')
ax.legend()
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
Key Insight
Stress overshoot in startup shear reflects the breaking of the initial cage structure. The overshoot magnitude and time scale are signatures of glass-like behavior.
LAOS: Higher Harmonics¶
# Large-amplitude oscillatory shear
t = np.linspace(0, 10 * 2 * np.pi, 1000)
gamma_0 = 0.2 # Strain amplitude
omega = 1.0 # Frequency (rad/s)
# Extract harmonics (σ = Σ G'_n sin(nωt) + G''_n cos(nωt))
sigma_prime, sigma_double_prime = model.get_laos_harmonics(
t, gamma_0=gamma_0, omega=omega
)
# First harmonic (n=1)
G1_prime = sigma_prime[0] / gamma_0
G1_double_prime = sigma_double_prime[0] / gamma_0
# Third harmonic (n=3) - nonlinearity indicator
G3_prime = sigma_prime[2] / gamma_0
G3_double_prime = sigma_double_prime[2] / gamma_0
print(f"Linear regime: G'_1 = {G1_prime:.2e} Pa")
print(f"Nonlinearity: G'_3 = {G3_prime:.2e} Pa")
print(f"Nonlinearity ratio: G'_3/G'_1 = {G3_prime/G1_prime:.2e}")
Isotropic MCT: Quantitative Predictions¶
from rheojax.models import ITTMCTIsotropic
# Create model with volume fraction
phi = 0.55 # Hard-sphere volume fraction
model_ism = ITTMCTIsotropic(phi=phi)
# ISM uses Percus-Yevick structure factor internally
# More accurate for hard-sphere colloids, but slower
# Predict SAOS
omega = np.logspace(-4, 4, 100)
G_star_ism = model_ism.predict(omega, test_mode='oscillation')
# Compare with schematic
model_schem = ITTMCTSchematic(epsilon=0.1)
G_star_schem = model_schem.predict(omega, test_mode='oscillation')
fig, ax = plt.subplots(figsize=(8, 6))
ax.loglog(omega, G_star_ism.real, 'o-', label='ISM (quantitative)')
ax.loglog(omega, G_star_schem.real, 's--', label='Schematic (semi-quantitative)')
ax.set_xlabel('Frequency ω (rad/s)')
ax.set_ylabel("G' (Pa)")
ax.legend()
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
Warning
ISM model is significantly slower than schematic MCT due to structure factor calculations. Use schematic for exploratory analysis, ISM for quantitative comparisons with hard-sphere experiments.
Fitting Experimental Data¶
# Load experimental data
omega_exp = np.array([...]) # rad/s
G_prime_exp = np.array([...]) # Pa
G_double_prime_exp = np.array([...]) # Pa
G_star_exp = G_prime_exp + 1j * G_double_prime_exp
# Fit with NLSQ (fast point estimation)
model = ITTMCTSchematic()
model.fit(omega_exp, G_star_exp, test_mode='oscillation')
# Extract fitted parameters
epsilon_fit = model.parameters.get_value('epsilon')
gamma_c_fit = model.parameters.get_value('gamma_c')
G0_fit = model.parameters.get_value('G_0')
print(f"Fitted ε = {epsilon_fit:.3f}")
print(f"Fitted γ_c = {gamma_c_fit:.3f}")
print(f"Fitted G_0 = {G0_fit:.2e} Pa")
# Interpret results
if epsilon_fit > 0.01:
print("→ Glass state: system has yield stress")
elif epsilon_fit < -0.01:
print("→ Fluid state: system flows at all rates")
else:
print("→ Near critical point: power-law relaxation")
# Predict and compare
G_star_pred = model.predict(omega_exp, test_mode='oscillation')
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 6))
ax1.loglog(omega_exp, G_prime_exp, 'o', label='Exp G\'')
ax1.loglog(omega_exp, G_star_pred.real, '-', label='Fit G\'')
ax1.set_xlabel('ω (rad/s)')
ax1.set_ylabel("G' (Pa)")
ax1.legend()
ax1.grid(True, alpha=0.3)
ax2.loglog(omega_exp, G_double_prime_exp, 's', label='Exp G"')
ax2.loglog(omega_exp, G_star_pred.imag, '-', label='Fit G"')
ax2.set_xlabel('ω (rad/s)')
ax2.set_ylabel('G" (Pa)')
ax2.legend()
ax2.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
Bayesian Inference: Uncertainty Quantification¶
Phase Classification with Uncertainty¶
from rheojax.pipeline.bayesian import BayesianPipeline
import arviz as az
# Bayesian workflow with NLSQ warm-start
model = ITTMCTSchematic()
result = model.fit_bayesian(
omega_exp, G_star_exp,
test_mode='oscillation',
num_warmup=1000,
num_samples=2000,
num_chains=4
)
# Extract epsilon posterior
epsilon_samples = result.posterior_samples['epsilon']
epsilon_mean = np.mean(epsilon_samples)
epsilon_std = np.std(epsilon_samples)
# Credible interval
intervals = model.get_credible_intervals(result.posterior_samples,
credibility=0.95)
eps_low, eps_high = intervals['epsilon']
print(f"ε = {epsilon_mean:.3f} ± {epsilon_std:.3f}")
print(f"95% CI: [{eps_low:.3f}, {eps_high:.3f}]")
# Probability of glass state
p_glass = np.mean(epsilon_samples > 0)
print(f"P(glass state | data) = {p_glass:.1%}")
# Plot posterior
fig, ax = plt.subplots(figsize=(8, 6))
ax.hist(epsilon_samples, bins=50, density=True, alpha=0.7)
ax.axvline(0, color='red', linestyle='--', linewidth=2, label='Glass transition')
ax.axvline(epsilon_mean, color='blue', linestyle='-', linewidth=2, label='Mean')
ax.axvspan(eps_low, eps_high, alpha=0.2, color='blue', label='95% CI')
ax.set_xlabel('ε')
ax.set_ylabel('Posterior density')
ax.legend()
plt.tight_layout()
plt.show()
Key Insight
Bayesian inference provides probabilistic phase classification. If the 95% credible interval for \(\varepsilon\) spans zero, the data cannot definitively classify the system as glass or fluid — more data or different protocols needed.
Diagnostics and Convergence¶
# Check MCMC diagnostics
idata = az.from_dict(posterior=result.posterior_samples)
# R-hat (should be < 1.01 for convergence)
rhat = az.rhat(idata)
print("R-hat values:")
print(rhat)
# Effective sample size (should be > 400 per chain)
ess = az.ess(idata)
print("\nEffective sample sizes:")
print(ess)
# Trace plots
az.plot_trace(idata, var_names=['epsilon', 'gamma_c', 'G_0'])
plt.tight_layout()
plt.show()
# Pair plot (parameter correlations)
az.plot_pair(idata, var_names=['epsilon', 'gamma_c', 'v1', 'v2'],
divergences=True)
plt.tight_layout()
plt.show()
# Forest plot (credible intervals)
az.plot_forest(idata, var_names=['epsilon', 'gamma_c', 'G_0', 'Gamma_0'],
hdi_prob=0.95)
plt.tight_layout()
plt.show()
Note
High \(\hat{R}\) (>1.01) or low ESS (<400) indicates poor convergence. Increase num_warmup or num_samples. Check for divergences (yellow in pair plot) — may indicate difficult posterior geometry.
Visualization and Interpretation¶
Master Curves: Frequency-Temperature Superposition¶
# Measure SAOS at multiple temperatures
temperatures = [20, 30, 40, 50, 60] # °C
datasets = []
for T in temperatures:
omega_T = np.logspace(-2, 2, 50)
# ... measure G_star_T experimentally ...
datasets.append({'omega': omega_T, 'G_star': G_star_T, 'T': T})
# Fit MCT at each temperature
epsilons = []
for data in datasets:
model = ITTMCTSchematic()
model.fit(data['omega'], data['G_star'], test_mode='oscillation')
eps = model.parameters.get_value('epsilon')
epsilons.append(eps)
# Plot ε(T) to locate glass transition temperature
fig, ax = plt.subplots(figsize=(8, 6))
ax.plot(temperatures, epsilons, 'o-')
ax.axhline(0, color='red', linestyle='--', label='Glass transition')
ax.set_xlabel('Temperature (°C)')
ax.set_ylabel('ε')
ax.legend()
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
Lissajous Curves: LAOS Visualization¶
# Generate LAOS cycle
t = np.linspace(0, 2 * np.pi, 1000)
gamma_0 = 0.5 # Large strain amplitude
omega = 1.0
strain = gamma_0 * np.sin(omega * t)
stress = model.predict(strain, test_mode='laos', omega=omega)
# Elastic Lissajous (σ vs γ)
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 6))
ax1.plot(strain, stress, 'o-')
ax1.set_xlabel('Strain γ')
ax1.set_ylabel('Stress σ (Pa)')
ax1.set_title('Elastic Lissajous')
ax1.grid(True, alpha=0.3)
# Viscous Lissajous (σ vs γ̇)
strain_rate = gamma_0 * omega * np.cos(omega * t)
ax2.plot(strain_rate, stress, 's-', color='orange')
ax2.set_xlabel('Strain rate γ̇ (1/s)')
ax2.set_ylabel('Stress σ (Pa)')
ax2.set_title('Viscous Lissajous')
ax2.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
Note
Distortion from elliptical shape indicates nonlinear behavior. For glasses, Lissajous curves show secondary loops (cage reformation) at large strains.
Comparison with Other Models¶
ITT-MCT vs SGR¶
Feature |
ITT-MCT |
SGR (Soft Glassy Rheology) |
|---|---|---|
Foundation |
Microscopic (particle interactions via MCT) |
Mesoscopic (trap model) |
Glass transition |
\(v_2 = 4\) (calculated from S(k)) |
x = 1 (noise temperature, fitted) |
Yield stress origin |
Cage elasticity |
Trap depth distribution |
Aging/rejuvenation |
Through \(\Phi(t,t')\) memory |
Through x(t) temperature |
Quantitative accuracy |
Yes (with ISM + S(k)) |
Semi-quantitative |
Computational cost |
High (Volterra integral) |
Low (analytical) |
Best for |
Hard-sphere colloids, dense suspensions |
Soft glasses, foams, emulsions |
from rheojax.models import SGRConventional
# Compare flow curves
gamma_dot = np.logspace(-4, 2, 50)
# MCT glass
mct = ITTMCTSchematic(epsilon=0.1)
sigma_mct = mct.predict(gamma_dot, test_mode='flow_curve')
# SGR glass
sgr = SGRConventional()
sgr.parameters.set_value('x', 0.8) # x < 1 → glass
sigma_sgr = sgr.predict(gamma_dot, test_mode='flow_curve')
fig, ax = plt.subplots(figsize=(8, 6))
ax.loglog(gamma_dot, sigma_mct, 'o-', label='ITT-MCT (ε=0.1)')
ax.loglog(gamma_dot, sigma_sgr, 's-', label='SGR (x=0.8)')
ax.set_xlabel('Shear rate γ̇ (1/s)')
ax.set_ylabel('Shear stress σ (Pa)')
ax.legend()
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
Key Insight
Use ITT-MCT when you need first-principles understanding or quantitative predictions for hard-sphere systems. Use SGR for fast exploratory fits or soft glassy materials where MCT assumptions break down.
ITT-MCT vs Thixotropic Models (DMT, Fluidity)¶
Feature |
ITT-MCT |
DMT/Fluidity |
|---|---|---|
Structure tracking |
Correlator \(\Phi(t,t')\) |
Scalar \(\lambda(t)\) or f(t) |
Microstructure |
Cage dynamics (physical) |
Phenomenological |
Yield stress |
Emergent from cages |
Explicit \(\tau_y\) parameter |
Predictive power |
Can predict from volume fraction |
Requires fitting to specific material |
Protocols |
All 6 (incl. LAOS) |
All 6 (incl. LAOS) |
Limitations and Best Practices¶
Known Limitations¶
Computational Cost: Volterra integral equations are expensive. First JIT compilation 30-90s, subsequent evaluations still slower than phenomenological models.
MCT Glass Transition Overestimate: Predicts \(\phi_{\text{MCT}} \approx 0.515\) for hard spheres vs experimental \(\phi_{\text{exp}} \approx 0.58\). Use empirical corrections if quantitative \(\phi_g\) needed.
Hopping Neglected: MCT assumes particles escape cages only through collective relaxation. Real systems have activated hopping at low T (handled by Extended MCT, not yet implemented).
Thermal Fluctuations: Linear response regime neglects thermal noise. Stochastic extensions exist but not in RheoJAX.
Schematic Model Limitations: \(F_{12}\) schematic is semi-quantitative only. For quantitative predictions, use ISM with measured S(k).
Monodisperse Assumption: ISM assumes identical particles. Polydisperse systems require different S(k).
Best Practices¶
# 1. Precompile once at workflow start
model = ITTMCTSchematic()
model.precompile() # 30-90s delay here, not during fitting
# 2. Use appropriate test protocols
# SAOS: Best for determining ε (glass vs fluid)
# Flow curve: Best for yield stress
# Startup: Best for overshoot dynamics
# 3. Check convergence for fitted ε
result = model.fit(omega, G_star, test_mode='oscillation')
if not result.success:
print("Warning: fit did not converge")
# 4. Bayesian inference for phase classification
if abs(epsilon_fit) < 0.05: # Near critical point
print("ε ≈ 0: Use Bayesian inference for uncertainty")
result_bayes = model.fit_bayesian(omega, G_star,
test_mode='oscillation')
# 5. Use ISM only when needed
# Schematic for exploration, ISM for final quantitative comparison
model_ism = ITTMCTIsotropic(phi=0.55) # Slower but accurate
# 6. Validate with multiple protocols
# Fit SAOS → predict flow curve → compare with experiment
model.fit(omega, G_star, test_mode='oscillation')
sigma_pred = model.predict(gamma_dot, test_mode='flow_curve')
# ... compare sigma_pred with measured flow curve ...
Warning
Never extrapolate far outside the fitted range. MCT is a mean-field theory and may fail at very low frequencies (hopping) or very high frequencies (microscopic dynamics).
References¶
Foundational MCT:
Götze, W. (2009). Complex Dynamics of Glass-Forming Liquids: A Mode-Coupling Theory. Oxford University Press. ISBN: 978-0-19-923534-6
Bengtzelius, U., Götze, W., & Sjölander, A. (1984). Dynamics of supercooled liquids and the glass transition. J. Phys. C: Solid State Phys. 17, 5915–5934. https://doi.org/10.1088/0022-3719/17/33/005
ITT Framework:
Fuchs, M., & Cates, M. E. (2002). Theory of nonlinear rheology and yielding of dense colloidal suspensions. Phys. Rev. Lett. 89, 248304. https://doi.org/10.1103/PhysRevLett.89.248304
Fuchs, M., & Cates, M. E. (2009). A mode coupling theory for Brownian particles in homogeneous steady shear flow. J. Rheol. 53, 957–1000. https://doi.org/10.1122/1.3119084
Experimental Validation:
Brader, J. M., Voigtmann, Th., Fuchs, M., Larson, R. G., & Cates, M. E. (2009). Glass rheology: From mode-coupling theory to a dynamical yield criterion. Proc. Natl. Acad. Sci. USA 106, 15186–15191. https://doi.org/10.1073/pnas.0905330106
Petekidis, G., Vlassopoulos, D., & Pusey, P. N. (2004). Yielding and flow of sheared colloidal glasses. J. Phys.: Condens. Matter 16, S3955–S3963. https://doi.org/10.1088/0953-8984/16/38/013
Structure Factor Calculations:
Hansen, J. P., & McDonald, I. R. (2013). Theory of Simple Liquids (4th ed.). Academic Press. ISBN: 978-0-12-387032-2 (Chapter 5: Percus-Yevick equation)
See Also¶
Soft Glassy Rheology (SGR) Analysis — Soft Glassy Rheology (complementary mesoscopic approach)
Thixotropy and Yield Stress Analysis — Thixotropic models (DMT, Fluidity) for phenomenological fits
Bayesian Inference — Bayesian workflow and diagnostics
ITT-MCT Models — Full ITT-MCT API reference
Related Models:
Soft Glassy Rheology (SGR) Models — SGR models
DMT Thixotropic Models — DMT thixotropic models
Fluidity Models — Fluidity models
Note
For questions or issues with ITT-MCT models, consult the RheoJAX GitHub Issues or refer to the original publications above.