Fractional Zener Solid-Liquid (Fractional)¶
Quick Reference¶
Use when: Solid-like behavior with equilibrium plateau and fractional relaxation tails
Parameters: 4 (Ge, \(c_{\alpha, \alpha, \tau}\))
Key equation: \(G(t) = G_e + c_\alpha t^{-\alpha} E_{1-\alpha,1}(-(t/\tau)^{1-\alpha})\)
Test modes: Oscillation, relaxation, creep
Material examples: Viscoelastic solids with finite equilibrium modulus and power-law relaxation
Fractional Calculus Fundamentals
This model uses fractional calculus for power-law viscoelastic behavior. For mathematical foundations—SpringPot element, Mittag-Leffler functions, physical meaning of fractional order \(\alpha\), and derivation from molecular theory—see:
/user_guide/fractional_viscoelasticity_reference
Notation Guide¶
Symbol |
Units |
Description |
|---|---|---|
\(G_e\) |
Pa |
Equilibrium modulus (parallel spring, long-time plateau) |
\(c_\alpha\) |
Pa·s\(^{\alpha}\) |
SpringPot constant (relaxation magnitude) |
\(\alpha\) |
dimensionless |
Fractional order (0 < \(\alpha\) < 1, power-law character) |
\(\tau\) |
s |
Relaxation time (characteristic timescale) |
\(E_{1-\alpha,1}(z)\) |
dimensionless |
Two-parameter Mittag-Leffler function |
Overview¶
Fractional Maxwell element in parallel with a spring to capture solid-like plateaus with fractional relaxation tails.
Physical Foundations¶
The Fractional Zener Solid-Liquid (FZSL) combines a fractional Maxwell arm with a parallel equilibrium spring:
Mechanical Configuration:
[Spring Ge] ---- parallel ---- [SpringPot (c_α, α) in series with relaxation τ]
Microstructural Interpretation:
Parallel spring (Ge): Permanent network providing equilibrium modulus (crosslinks, crystalline regions, entanglements)
Fractional Maxwell arm: Additional stiffness that relaxes via power-law dynamics. The SpringPot creates broad relaxation spectrum.
Solid behavior: Finite equilibrium modulus Ge (no flow)
Relaxation: Material relaxes from Ge + (high-freq contribution) to Ge
This model bridges the gap between FZSS (two elastic plateaus) and FMG (liquid-like). It’s useful when the material has a clear equilibrium modulus but shows power-law relaxation dynamics.
Governing Equations¶
Time domain (relaxation modulus):
Frequency domain (complex modulus):
Parameters¶
Name |
Symbol |
Units |
Bounds |
Notes |
|---|---|---|---|---|
|
\(G_e\) |
Pa |
[1e-3, 1e9] |
Equilibrium modulus |
|
\(c_\alpha\) |
Pa·sα |
[1e-3, 1e9] |
SpringPot constant |
|
\(\alpha\) |
dimensionless |
[0, 1] |
Fractional order |
|
\(\tau\) |
s |
[1e-6, 1e+6] |
Relaxation time |
Validity and Assumptions¶
Linear viscoelastic assumption; strain amplitudes remain small.
Isothermal, time-invariant material parameters throughout the experiment.
Supported RheoJAX test modes: relaxation, creep, oscillation.
Fractional orders stay within (0, 1) to keep kernels causal and bounded.
Regimes and Behavior¶
Low-frequency limit recovers the equilibrium modulus \(G_e\).
Mid-band shows fractional dissipation with slope \(\alpha\).
High-frequency response approaches \(G_e + c_\alpha (i\omega)^{\alpha}\).
Limiting Behavior¶
\(\alpha \to 1\): classical Zener solid-liquid.
\(G_e \to 0\): fractional Maxwell gel.
\(c_\alpha \to 0\): pure elastic spring.
What You Can Learn¶
This section explains what insights you can extract from fitting the Fractional Zener Solid-Liquid model to your experimental data, emphasizing the dual-modulus solid structure with one solid springpot (\(\alpha\)) and one liquid springpot (1-\(\alpha\)).
Parameter Interpretation¶
- Equilibrium Modulus (Ge):
The low-frequency plateau modulus, indicating the material’s long-term stiffness under sustained load. This arises from the parallel spring providing permanent network structure.
For graduate students: Ge relates to crosslink density via rubber elasticity theory: Ge ≈ \(\nu \cdot kB \cdot T where \nu\) is network strand density. For chemically crosslinked networks, Ge is temperature-independent; for physical networks (entanglements), Ge scales with T. For practitioners: Higher Ge means stiffer equilibrium behavior. Compare to target specifications for structural applications. If Ge → 0, material flows—consider FMG instead.
- Fractional Order ( \(\alpha\) ):
Controls the breadth of relaxation spectrum and power-law decay character. This model uses a “solid” springpot (\(\alpha\)) paired with a “liquid” springpot (1-\(\alpha\)) in series.
\(\alpha\) → 0: Very broad spectrum, solid-like response dominates, nearly elastic at short times
\(\alpha\) → 0.5: Critical gel behavior, balanced solid-liquid character, maximum spectrum breadth
\(\alpha\) → 1: Narrow spectrum, approaches classical Zener with exponential relaxation
For graduate students: \(\alpha\) quantifies polydispersity in the relaxation time distribution. Lower \(\alpha\) indicates greater microstructural heterogeneity (filler dispersion, crosslink density variation, molecular weight distribution). For practitioners: Lower \(\alpha\) means relaxation spreads over more time decades. Critical for predicting long-term creep and stress relaxation.
- SpringPot Constant ( \(c_{\alpha}\) ):
Sets the magnitude of the fractional dissipation contribution from the Maxwell arm. Units are Pa·s\(^{\alpha}\).
High \(c_{\alpha/Ge}\) ratio (> 5): Strong viscoelastic dissipation, large relaxation from high-frequency to Ge
Moderate \(c_{\alpha/Ge}\) ratio (1-5): Balanced elastic-dissipative response
Low \(c_{\alpha/Ge}\) ratio (< 1): Predominantly elastic response, small relaxation
For graduate students: \(c_{\alpha}\) represents the spectral strength of the relaxing modes. Higher \(c_{\alpha}\) indicates more energy stored in temporary (relaxing) structures. For practitioners: High \(c_{\alpha/Ge}\) means large difference between short-time and long-time stiffness—critical for impact vs. sustained loading.
- Relaxation Time ( \(\tau\) ):
Characteristic timescale for the transition from high modulus (Ge + high-frequency contribution) to equilibrium modulus Ge.
For graduate students: \(\tau\) is temperature-dependent (WLF/Arrhenius), enabling time-temperature superposition. Unusual units (s\(^{\alpha}\)) arise from fractional calculus. For practitioners: Compare \(\tau\) to service timescales. If tservice << \(\tau\), use high-frequency modulus; if tservice >> \(\tau\), use Ge.
Material Classification¶
Parameter Range |
Material Type |
Typical Materials |
Processing Implications |
|---|---|---|---|
Ge > \(10^5 Pa, \alpha\) < 0.3 |
Stiff crosslinked solid |
Vulcanized rubber, thermosets |
Load-bearing, minimal creep |
\(G_e \sim 10^3-10^4\) Pa, \(\alpha \sim 0.4-0.6\) |
Soft viscoelastic solid |
Gels, soft tissues, elastomers |
Damping, vibration isolation |
Ge < \(10^3 Pa, \alpha\) > 0.7 |
Weakly crosslinked network |
Hydrogels, biopolymers |
Requires careful handling, creep-prone |
\(\alpha\) Range |
Spectrum Breadth |
Typical Materials |
Decades Needed |
|---|---|---|---|
0.1-0.3 |
Very broad, hierarchical |
Nanocomposites, biological tissues |
5+ decades |
0.4-0.6 |
Moderate |
Standard elastomers, gels |
3-4 decades |
0.7-0.9 |
Narrow, near-exponential |
Homogeneous networks |
2-3 decades |
Diagnostic Indicators¶
Ge fits near lower bound: Material may be liquid-like (Ge → 0); consider Fractional Maxwell Gel (FMG) instead
\(\alpha\) hits bounds (0.05 or 0.95): Data may not support fractional behavior; try classical Zener for simpler interpretation
\(c_{\alpha/Ge}\) > 100: Extreme relaxation; verify data quality at short times and check for nonlinear effects
Poor fit at low frequencies: Equilibrium plateau Ge not reached; extend frequency range or measurement time
Systematic residual trends: Check for thermorheological complexity (frequency-dependent shift factors) or nonlinear viscoelasticity
Fitting Guidance¶
Recommended Data Collection:
Frequency sweep (SAOS) or Stress relaxation: 4-5 decades
Coverage: Ensure equilibrium plateau Ge is clearly visible at low \(\omega\)
Test amplitude: Within LVR (< 5% strain or stress)
Temperature: Constant ±0.1°C
Initialization Strategy:
# From frequency sweep G'(ω)
Ge_init = G'(ω → 0) # Low-frequency plateau
c_alpha_init = magnitude in intermediate regime
tau_init = 1 / (crossover frequency)
alpha_init = slope of power-law region
# From stress relaxation G(t)
Ge_init = G(t → ∞) # Equilibrium modulus
c_alpha_init = (G(t=0) - Ge_init) * tau_init**alpha_init
tau_init = inflection point time
Optimization Tips:
Verify equilibrium plateau \(G_e\) is reached (\(G' \to G_e\) at low \(\omega\))
Use log-weighted least squares
Constrain Ge > 0 (solid-like behavior required)
Check that \(\alpha\) is well-constrained (not at bounds)
Common Pitfalls:
Ge near zero: Material may be liquid-like; use FMG instead
Poor low-frequency fit: Equilibrium not reached; extend frequency range
\(\alpha\) near 1: Consider classical Zener for simpler interpretation
Troubleshooting Table:
Issue |
Likely Cause |
Solution |
|---|---|---|
Ge converges to lower bound |
Liquid-like behavior |
Switch to FMG or FML model |
\(\alpha\) hits upper bound (0.95+) |
Nearly exponential relaxation |
Use classical Zener for clarity |
\(c_{\alpha/Ge}\) > 100 |
Extreme relaxation or data quality |
Check short-time data, verify LVR |
Poor fit at \(\omega\) → 0 |
Equilibrium not reached |
Extend frequency range or measurement time |
High correlation Ge-\(c_{\alpha}\) |
Insufficient frequency coverage |
Need broader data spanning 4+ decades |
Non-monotonic residuals |
Multiple relaxation mechanisms |
Consider GMM or add second mode |
Fit diverges |
Poor initial guess |
Use hierarchical fitting from simpler models |
Practical Applications¶
Quality Control:
The fractional order \(\alpha\) and relaxation time \(\tau\) provide sensitive quality metrics for batch consistency. Monitor these parameters over production runs:
Decreased \(\alpha\): Indicates increased polydispersity from contamination, degradation, or processing variations
Increased \(\tau\): May signal molecular weight increase from post-cure or aggregation
Decreased Ge: Loss of crosslink density from aging or incomplete cure
Material Development:
Use FZSL fitting to guide formulation:
Filler optimization: Lower \(\alpha\) with increasing filler loading indicates filler-matrix interphase effects. Target \(\alpha\) > 0.6 for good dispersion.
Crosslink density: Ge scales with crosslink density. Track Ge vs. cure time or temperature to optimize curing protocols.
Polymer blending: Broad \(\alpha\) (< 0.4) suggests incompatibility or phase separation. Target \(\alpha\) > 0.5 for miscible blends.
Failure Prediction:
The FZSL model enables long-term performance prediction:
Creep compliance: Convert to J(t) via Laplace transform to predict dimensional changes under sustained load
Stress relaxation: Calculate bolt preload decay in gasketing applications
Lifetime estimation: Extrapolate to service timescales (10+ years) using time-temperature superposition
Design Guidelines:
For structural applications:
Short-term loading (t << \(\tau\)): Use instantaneous modulus G(0) = Ge + \(c_{\alpha \tau^(-\alpha)}\)
Long-term loading (t >> \(\tau\)): Use equilibrium modulus Ge
Cyclic loading (\(\omega \approx 1/\tau\)): Maximum energy dissipation, critical for damping applications
Example Calculations¶
Relaxation Modulus Prediction:
Given fitted parameters Ge = 1.0 MPa, \(c_{\alpha}\) = 0.5 MPa·s^0.5, \(\alpha = 0.5, \tau\) = 10 s:
import numpy as np
from rheojax.models import FractionalZenerSolidLiquid
from rheojax.core.jax_config import safe_import_jax
jax, jnp = safe_import_jax()
model = FractionalZenerSolidLiquid()
model.parameters.set_value('Ge', 1.0e6) # Pa
model.parameters.set_value('c_alpha', 0.5e6) # Pa·s^0.5
model.parameters.set_value('alpha', 0.5)
model.parameters.set_value('tau', 10.0) # s
# Predict at specific time points
t = jnp.logspace(-2, 4, 100) # 0.01 to 10,000 s
G_t = model.predict(t, test_mode='relaxation')
# Check limiting behavior
print(f"G(t=0.01 s) = {G_t[0]/1e6:.3f} MPa (near instantaneous)")
print(f"G(t=10,000 s) = {G_t[-1]/1e6:.3f} MPa (near equilibrium Ge)")
Complex Modulus Prediction:
# Predict frequency response
omega = jnp.logspace(-2, 2, 100) # 0.01 to 100 rad/s
G_star = model.predict(omega, test_mode='oscillation')
# Separate storage and loss moduli
G_prime = jnp.real(G_star)
G_double_prime = jnp.imag(G_star)
# Find crossover frequency (G' = G")
crossover_idx = jnp.argmin(jnp.abs(G_prime - G_double_prime))
omega_crossover = omega[crossover_idx]
print(f"G'/G\" crossover at ω ≈ {omega_crossover:.3f} rad/s")
print(f"Compare to τ = {1/omega_crossover:.3f} s")
Parameter Sensitivity Analysis:
# Study effect of α on spectrum breadth
alphas = [0.3, 0.5, 0.7, 0.9]
for alpha_val in alphas:
model.parameters.set_value('alpha', alpha_val)
G_star = model.predict(omega, test_mode='oscillation')
G_prime = jnp.real(G_star)
# Calculate decades of dispersion (width where G' varies significantly)
G_range = jnp.where((G_prime > 1.1*Ge) & (G_prime < 0.9*G_max))
decades = jnp.log10(omega[G_range].max() / omega[G_range].min())
print(f"α = {alpha_val}: spectrum spans {decades:.1f} decades")
See Also¶
Fractional Zener Solid-Solid (Fractional) and Fractional Zener Liquid-Liquid (Fractional) — alternative plateau choices
Fractional Kelvin-Voigt-Zener (Fractional) — Kelvin-based creep analogue sharing the same compliance
Fractional Burgers Model (Fractional) — combines fractional Maxwell and Kelvin branches
MutationNumber — monitor when the solid assumption holds during gelation
../../examples/advanced/04-fractional-models-deep-dive — fractional Zener comparison notebook
API References¶
Module:
rheojax.modelsClass:
rheojax.models.FractionalZenerSolidLiquid
Usage¶
Basic Fitting¶
from rheojax.models import FractionalZenerSolidLiquid
from rheojax.core.data import RheoData
from rheojax.core.jax_config import safe_import_jax
import numpy as np
jax, jnp = safe_import_jax()
# Load experimental data (frequency sweep)
omega = np.logspace(-2, 2, 50) # 0.01 to 100 rad/s
G_prime = ... # Measured storage modulus
G_double_prime = ... # Measured loss modulus
G_star = G_prime + 1j * G_double_prime
# Create RheoData object
data = RheoData(x=omega, y=G_star, test_mode='oscillation')
# Initialize and fit model
model = FractionalZenerSolidLiquid()
result = model.fit(data)
# Access fitted parameters
print(f"Ge = {model.parameters.get_value('Ge'):.2e} Pa")
print(f"c_alpha = {model.parameters.get_value('c_alpha'):.2e} Pa·s^α")
print(f"alpha = {model.parameters.get_value('alpha'):.3f}")
print(f"tau = {model.parameters.get_value('tau'):.2e} s")
print(f"R² = {result.r_squared:.4f}")
Bayesian Inference¶
# Bayesian inference with uncertainty quantification
from rheojax.pipeline.bayesian import BayesianPipeline
# Perform NLSQ fit first (warm-start for MCMC)
model.fit(data)
# Bayesian inference with default 4 chains
result = model.fit_bayesian(
data,
num_warmup=1000,
num_samples=2000,
num_chains=4,
seed=42 # For reproducibility
)
# Extract posterior samples
samples = result.posterior_samples
# Get credible intervals
intervals = model.get_credible_intervals(samples, credibility=0.95)
for param, (lower, upper) in intervals.items():
mean = samples[param].mean()
print(f"{param}: {mean:.2e} [{lower:.2e}, {upper:.2e}]")
# Check convergence diagnostics
import arviz as az
inference_data = az.from_numpyro(result)
print(az.summary(inference_data, hdi_prob=0.95))
# Visualize posterior distributions
az.plot_pair(inference_data, divergences=True)
Advanced Usage with Pipeline¶
from rheojax.pipeline import Pipeline
# Complete workflow: load, fit, plot, save
pipeline = (Pipeline()
.load('experimental_data.csv', x_col='omega', y_col='G_star')
.fit('fractional_zener_sl')
.plot(style='publication')
.save('results.hdf5'))
# Access fitted model
model = pipeline.model
print(f"Equilibrium modulus: {model.parameters.get_value('Ge'):.2e} Pa")
Time-Temperature Superposition¶
from rheojax.transforms import Mastercurve
# Create master curve from multiple temperature datasets
datasets = [
{'omega': omega_30C, 'G_star': G_star_30C, 'T': 30},
{'omega': omega_50C, 'G_star': G_star_50C, 'T': 50},
{'omega': omega_70C, 'G_star': G_star_70C, 'T': 70},
]
mc = Mastercurve(reference_temp=50, auto_shift=True)
master_curve, shift_factors = mc.transform(datasets)
# Fit FZSL to master curve
model = FractionalZenerSolidLiquid()
model.fit(master_curve.x, master_curve.y, test_mode='oscillation')
# Predict at different temperatures using shift factors
omega_pred = np.logspace(-4, 4, 100)
for T, aT in shift_factors.items():
omega_shifted = omega_pred * aT
G_star_T = model.predict(omega_shifted, test_mode='oscillation')
print(f"T = {T}°C: shift factor aT = {aT:.2e}")
See also¶
Fractional Zener Solid-Solid (Fractional) and Fractional Zener Liquid-Liquid (Fractional) — alternative plateau choices.
Fractional Kelvin-Voigt-Zener (Fractional) — Kelvin-Voigt-based analogue sharing the same compliance.
Fractional Burgers Model (Fractional) — combines fractional Maxwell and Kelvin branches.
MutationNumber — monitor when the solid assumption holds during gelation.
../../examples/advanced/04-fractional-models-deep-dive — fractional Zener comparison notebook.