Fractional Kelvin-Voigt-Zener (Fractional)¶
Quick Reference¶
Use when: Creep/retardation analysis, solid with finite equilibrium compliance
Parameters: 4 (Ge, Gk, \(\alpha, \tau\))
Key equation: \(J(t) = \frac{1}{G_e} + \frac{1}{G_k}[1 - E_{\alpha}(-(t/\tau)^{\alpha})]\)
Test modes: Relaxation, creep, oscillation
Material examples: Viscoelastic solids with retardation spectra, filled polymers, soft tissues
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 |
Series spring modulus (instantaneous response) |
\(G_k\) |
Pa |
Kelvin element modulus (retardation magnitude) |
\(\alpha\) |
dimensionless |
Fractional order (0 < \(\alpha\) < 1, spectrum breadth) |
\(\tau\) |
s |
Retardation time (characteristic timescale) |
\(E_{\alpha}(z)\) |
dimensionless |
One-parameter Mittag-Leffler function |
\(J^*(\omega)\) |
1/Pa |
Complex compliance |
Overview¶
A Fractional Kelvin-Voigt element (spring \(G_k\) in parallel with SpringPot) in series with a spring \(G_e\). Natural for creep/retardation analysis with finite equilibrium compliance.
Physical Foundations¶
The FKV-Zener model combines a series spring with a fractional Kelvin-Voigt element:
Mechanical Configuration:
[Spring Ge] ---- series ---- [Spring Gk parallel with SpringPot (α, τ)]
Microstructural Interpretation:
Series spring (Ge): Instantaneous elastic response (glassy compliance \(J_0\) = 1/Ge)
Kelvin element (Gk): Delayed compliance from network rearrangements
SpringPot: Fractional-order damping with broad relaxation spectrum
Solid behavior: Equilibrium compliance J∞ = 1/Ge + 1/Gk (finite, bounded)
This model is particularly suited for creep analysis where the instantaneous and equilibrium compliances are the primary observables.
Governing Equations¶
Time domain (creep compliance):
Frequency domain (complex compliance and modulus):
Parameters¶
Name |
Symbol |
Units |
Bounds |
Notes |
|---|---|---|---|---|
|
\(G_e\) |
Pa |
[1e-3, 1e9] |
Series spring modulus |
|
\(G_k\) |
Pa |
[1e-3, 1e9] |
KV element modulus |
|
\(\alpha\) |
dimensionless |
[0, 1] |
Fractional order |
|
\(\tau\) |
s |
[1e-6, 1e6] |
Retardation 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¶
Instantaneous compliance \(1/G_e\); long-time compliance \(1/G_e + 1/G_k\).
Power-law retardation over decades for \(0<\alpha<1\).
Useful when creep is the primary observable.
Limiting Behavior¶
\(\alpha \to 1\): classical Zener in creep form.
\(G_k \to \infty\): reduces to series spring only.
What You Can Learn¶
This section explains how to translate fitted Fractional Kelvin-Voigt-Zener parameters into material insights and actionable knowledge, with emphasis on creep and retardation analysis for viscoelastic solids.
Parameter Interpretation¶
- Series Spring Modulus (Ge):
Controls the instantaneous elastic compliance upon stress application.
For graduate students: In polymers, \(G_e\) reflects the glassy modulus from short-range chain stretching and bond angle deformations. For crosslinked networks, \(G_e \approx G_\infty\) (high-frequency plateau). Typical values: \(10^6-10^9\) Pa for glassy polymers, \(10^3-10^6\) Pa for rubbery materials.
For practitioners: \(J_0 = 1/G_e\) is the immediate strain upon stress application, critical for impact resistance and short-time deformation. Use to assess material stiffness and load-bearing capacity.
- Kelvin Element Modulus (Gk):
Controls the magnitude of delayed (retarded) elastic deformation.
Equilibrium compliance: \(J_\infty = 1/G_e + 1/G_k\) (bounded, solid-like)
Retardation magnitude: \(\Delta J = 1/G_k\) measures the delayed compliance
Modulus ratio: \(G_k/G_e\) characterizes creep severity (high ratio → large creep)
For practitioners: Lower Gk means more compliant material under sustained load. Critical for dimensional stability in structural applications.
- Fractional Order ( \(\alpha\) ):
Governs the power-law character and breadth of the retardation spectrum.
\(\alpha\) → 0.2-0.3: Very broad spectrum, highly heterogeneous (filled elastomers, nanocomposites, asphalt with wide filler size distribution)
\(\alpha\) → 0.4-0.6: Moderate breadth, typical for polymeric solids with distributed retardation (semicrystalline polymers, physical gels, soft tissues)
\(\alpha\) → 0.7-0.9: Narrow spectrum, approaching classical exponential retardation (uniform crosslinked networks, monodisperse elastomers)
\(\alpha\) → 1: Classical Zener (single exponential), use simpler model
Physical interpretation: Lower \(\alpha\) indicates broader distribution of retardation times from structural heterogeneity (filler distribution, crosslink density variation, morphological polydispersity in semicrystalline polymers). For filled systems, \(\alpha\) decreases with increasing filler volume fraction due to filler-matrix interphase effects.
For practitioners: Monitor \(\alpha\) for quality control. Decreased \(\alpha\) may indicate poor dispersion of fillers, incomplete curing, or aging-induced microstructural heterogeneity.
- Retardation Time ( \(\tau\) ):
Characteristic timescale for the transition from instantaneous to equilibrium compliance.
Marks creep regime transition: \(J(t \ll \tau) \approx J_0\), \(J(t \gg \tau) \approx J_\infty\)
Temperature-dependent: Follows WLF or Arrhenius behavior; \(\tau\) decreases with temperature
For practitioners: Compare \(\tau\) to service life. For long-term applications (e.g., gaskets, seals), ensure load duration < \(\tau/10\) to minimize creep.
Material Classification¶
Parameter Range |
Material Behavior |
Typical Materials |
Processing Implications |
|---|---|---|---|
High Ge (>\(10^6\) Pa), Gk/Ge < 0.1 |
Stiff solid, minimal creep |
Thermosets, vulcanized rubber, engineering plastics |
Excellent dimensional stability |
Moderate Ge (\(10^4-10^6\) Pa), Gk/Ge ≈ 0.5 |
Balanced solid, moderate creep |
Filled elastomers, semicrystalline polymers |
Good for seals, dampers (controlled deformation) |
Low Ge (<\(10^4\) Pa), Gk/Ge > 1.0 |
Soft solid, significant creep |
Hydrogels, soft tissues, weak physical gels |
Poor load-bearing, tissue engineering applications |
Low \(\alpha\) (<0.3), any Ge |
Heterogeneous structure |
Nanocomposites, asphalt, bitumen |
Broad time-dependent behavior, challenging QC |
Diagnostic Indicators¶
Creep curve linear at long time: Material is flowing (unbounded creep); use Fractional Burgers model instead to capture viscous flow.
Poor fit at short time: Insufficient early-time resolution or need for additional instantaneous compliance term (glassy contribution).
\(\alpha\) near bounds (0.05 or 0.95): Data may not support fractional retardation; try classical Zener (\(\alpha\) = 1) or pure spring (\(\alpha\) → 0).
Strong Gk- \(\tau\) correlation: Retardation time well-constrained but magnitude ambiguous. Need broader time coverage spanning 10\(^{-2 to 10^4}\) seconds.
Ge << Gk: Non-physical (instantaneous stiffer than equilibrium); check data quality or bounds.
Fitting Guidance¶
Recommended Data Collection:
Creep test (primary): 4-5 decades in time, verify equilibrium plateau
Sampling: Log-spaced, 50+ points per decade
Stress level: Within LVR (verify with stress sweep)
Temperature: Constant ±0.1°C
Initialization Strategy:
# From creep compliance J(t)
Ge_init = 1 / J(t → 0) # Instantaneous compliance
Gk_init = 1 / (J(t → ∞) - 1/Ge_init) # Retardation magnitude
tau_init = time where retardation is 50% complete
alpha_init = 0.5 # Default
Optimization Tips:
Fit in compliance space (natural for creep)
Use log-weighted least squares
Constrain Ge > 0, Gk > 0 (physically meaningful)
Verify equilibrium compliance is reached
Common Pitfalls:
Insufficient long-time data: Cannot determine Gk accurately
Non-monotonic J(t): Check for instrument artifacts or nonlinear effects
Strong Gk- \(\tau\) correlation: Need better coverage in retardation regime
Troubleshooting Table:
Issue |
Likely Cause |
Solution |
|---|---|---|
J(t) shows linear growth |
Material is flowing |
Use Fractional Burgers for viscous flow |
Poor fit at short times |
Glassy contribution missing |
Need higher time resolution or add term |
\(\alpha\) near bounds (0.05 or 0.95) |
Not fractional |
Try classical Zener (\(\alpha\) = 1) |
Strong Gk-\(\tau\) correlation (>0.9) |
Narrow time window |
Extend to 10\(^{-2 - 10^4}\) seconds |
Ge << Gk (non-physical) |
Data quality or bounds |
Check instantaneous response |
Oscillations in residuals |
Instrument resonance |
Filter data or change geometry |
Fit diverges |
Poor initialization |
Estimate from compliance limits |
Practical Applications¶
Creep Prediction for Design:
The FKV-Zener model enables long-term deformation prediction for gaskets, seals, and load-bearing components:
# Predict dimensional stability under sustained load
sigma_applied = 1.0e6 # 1 MPa sustained stress
t_service = 3.156e7 # 1 year in seconds
# Compute total compliance
J_total = model.predict(t_service, test_mode='creep') / sigma_applied
# Convert to strain
epsilon_total = sigma_applied * J_total
print(f"Expected strain after 1 year: {epsilon_total * 100:.2f}%")
# Separate instantaneous and delayed contributions
J_instantaneous = 1 / Ge
J_delayed = J_total - J_instantaneous
print(f"Instantaneous: {J_instantaneous * sigma_applied * 100:.2f}%")
print(f"Delayed creep: {J_delayed * sigma_applied * 100:.2f}%")
Material Selection:
Compare candidate materials by equilibrium compliance:
Material |
\(J_0\) (1/Pa) |
J∞ (1/Pa) |
\(\tau\) (s) |
\(\alpha\) |
|---|---|---|---|---|
EPDM rubber |
\(1.0 \times 10^{-6}\) |
\(2.5 \times 10^{-6}\) |
100 |
0.45 |
Silicone gel |
\(5.0 \times 10^{-4}\) |
\(8.0 \times 10^{-4}\) |
10 |
0.55 |
Polyurethane foam |
\(1.0 \times 10^{-5}\) |
\(3.0 \times 10^{-5}\) |
50 |
0.40 |
Quality Control Metrics:
Use fitted parameters for batch consistency:
Instantaneous compliance \(J_0\) = 1/Ge: Monitors cure state (decreases with crosslinking)
Equilibrium compliance J∞: Tracks network integrity (increases with aging/degradation)
Retardation time \(\tau\): Sensitive to filler content and dispersion
Fractional order \(\alpha\): Indicates microstructural heterogeneity (target \(\alpha\) > 0.4 for uniformity)
Failure Analysis:
Diagnose creep failure modes from parameter trends:
Increasing J∞ over time: Network degradation (oxidation, hydrolysis, chain scission)
Decreasing \(\alpha\): Loss of microstructural homogeneity (filler agglomeration)
Increasing \(\tau\): Molecular weight increase (post-cure, crosslinking)
J∞ approaches \(J_0\): Loss of delayed response (complete network breakdown)
Example Calculations¶
Creep Compliance Prediction:
Given fitted parameters Ge = 1.0 MPa, Gk = 2.5 MPa, \(\alpha = 0.5, \tau\) = 100 s:
import numpy as np
from rheojax.models import FractionalKelvinVoigtZener
from rheojax.core.jax_config import safe_import_jax
jax, jnp = safe_import_jax()
model = FractionalKelvinVoigtZener()
model.parameters.set_value('Ge', 1.0e6) # Pa
model.parameters.set_value('Gk', 2.5e6) # Pa
model.parameters.set_value('alpha', 0.5)
model.parameters.set_value('tau', 100.0) # s
# Predict creep compliance
t = jnp.logspace(-2, 6, 200) # 0.01 s to ~11 days
J_t = model.predict(t, test_mode='creep')
# Check limiting behavior
J0 = 1 / 1.0e6 # 1/Ge
Jinf = J0 + 1/2.5e6 # J0 + 1/Gk
print(f"J(t=0) = {J_t[0]:.2e} Pa⁻¹ (theory: {J0:.2e})")
print(f"J(t→∞) = {J_t[-1]:.2e} Pa⁻¹ (theory: {Jinf:.2e})")
# Time to reach 90% of equilibrium compliance
J_90 = J0 + 0.9 * (Jinf - J0)
t_90 = t[jnp.argmin(jnp.abs(J_t - J_90))]
print(f"90% retardation complete at t = {t_90:.1f} s")
Conversion to Frequency Domain:
# Convert fitted creep parameters to modulus prediction
omega = jnp.logspace(-4, 2, 100)
G_star = model.predict(omega, test_mode='oscillation')
G_prime = jnp.real(G_star)
G_double_prime = jnp.imag(G_star)
# Verify low-frequency plateau
G_eq = 1 / Jinf # Equilibrium modulus
print(f"G'(ω→0) = {G_prime[0]:.2e} Pa")
print(f"Geq = {G_eq:.2e} Pa (from compliance)")
# Find tan(δ) peak (maximum damping)
tan_delta = G_double_prime / G_prime
omega_peak = omega[jnp.argmax(tan_delta)]
print(f"tan(δ) peak at ω ≈ {omega_peak:.3f} rad/s")
print(f"Compare to 1/τ = {1/100:.3f} rad/s")
See Also¶
Fractional Kelvin-Voigt (Fractional) — parallel element used inside the FKZ construction
Fractional Zener Solid-Liquid (Fractional) — adds a fractional Maxwell branch instead of a Kelvin one
Generalized Fractional Maxwell (Two-Order) — most general two-order series formulation
Mastercurve (Time-Temperature Superposition) — align creep spectra across temperature before FKZ fitting
../../examples/advanced/04-fractional-models-deep-dive — comparisons of Zener variants across datasets
API References¶
Module:
rheojax.modelsClass:
rheojax.models.FractionalKelvinVoigtZener
Usage¶
Basic Creep Fitting¶
from rheojax.models import FractionalKelvinVoigtZener
from rheojax.core.data import RheoData
import numpy as np
# Load experimental creep data
time = np.logspace(-1, 4, 100) # 0.1 to 10,000 s
compliance = ... # Measured creep compliance J(t)
# Create RheoData object
data = RheoData(x=time, y=compliance, test_mode='creep')
# Initialize and fit model
model = FractionalKelvinVoigtZener()
result = model.fit(data)
# Access fitted parameters
Ge = model.parameters.get_value('Ge')
Gk = model.parameters.get_value('Gk')
alpha = model.parameters.get_value('alpha')
tau = model.parameters.get_value('tau')
print(f"Instantaneous modulus Ge = {Ge:.2e} Pa")
print(f"Retardation modulus Gk = {Gk:.2e} Pa")
print(f"Instantaneous compliance J₀ = {1/Ge:.2e} Pa⁻¹")
print(f"Equilibrium compliance J∞ = {1/Ge + 1/Gk:.2e} Pa⁻¹")
print(f"Fractional order α = {alpha:.3f}")
print(f"Retardation time τ = {tau:.2e} s")
print(f"R² = {result.r_squared:.4f}")
Bayesian Inference for Creep¶
# Bayesian inference with uncertainty quantification
# NLSQ fit first (warm-start)
model.fit(data)
# Run Bayesian inference
result = model.fit_bayesian(
data,
num_warmup=1000,
num_samples=2000,
num_chains=4,
seed=42
)
# Extract credible intervals
intervals = model.get_credible_intervals(
result.posterior_samples,
credibility=0.95
)
# Calculate derived quantities with uncertainty
Ge_samples = result.posterior_samples['Ge']
Gk_samples = result.posterior_samples['Gk']
J0_samples = 1 / Ge_samples
Jinf_samples = 1/Ge_samples + 1/Gk_samples
print(f"J₀ = {J0_samples.mean():.2e} ± {J0_samples.std():.2e} Pa⁻¹")
print(f"J∞ = {Jinf_samples.mean():.2e} ± {Jinf_samples.std():.2e} Pa⁻¹")
# Visualize posterior distributions
import arviz as az
inference_data = az.from_numpyro(result)
az.plot_pair(
inference_data,
var_names=['Ge', 'Gk', 'alpha', 'tau'],
divergences=True
)
Oscillatory Fitting¶
# FKV-Zener can also fit frequency sweep data
omega = np.logspace(-2, 2, 50)
G_star = ... # Complex modulus from SAOS
data_osc = RheoData(x=omega, y=G_star, test_mode='oscillation')
model.fit(data_osc)
# Predict in compliance space
J_star = 1 / G_star # Complex compliance
J_pred = model.predict(omega, test_mode='compliance')
# Compare
import matplotlib.pyplot as plt
plt.loglog(omega, np.abs(J_star), 'o', label='Data')
plt.loglog(omega, np.abs(J_pred), '-', label='Model')
plt.xlabel('ω (rad/s)')
plt.ylabel('|J*| (Pa⁻¹)')
plt.legend()
Advanced: Temperature-Dependent Creep¶
# Fit creep at multiple temperatures
temperatures = [25, 40, 55, 70] # °C
creep_data = {...} # Dictionary of T: (time, compliance)
# Fit each temperature
params_vs_T = {}
for T in temperatures:
data_T = RheoData(
x=creep_data[T]['time'],
y=creep_data[T]['compliance'],
test_mode='creep'
)
model.fit(data_T)
params_vs_T[T] = {
'Ge': model.parameters.get_value('Ge'),
'Gk': model.parameters.get_value('Gk'),
'alpha': model.parameters.get_value('alpha'),
'tau': model.parameters.get_value('tau')
}
# Analyze temperature dependence
import matplotlib.pyplot as plt
T_array = np.array(temperatures)
tau_array = np.array([params_vs_T[T]['tau'] for T in temperatures])
# Arrhenius plot
plt.semilogy(1/(T_array + 273.15), tau_array, 'o-')
plt.xlabel('1/T (K⁻¹)')
plt.ylabel('τ (s)')
plt.title('Retardation Time Temperature Dependence')
# Fit Arrhenius: tau = tau0 * exp(Ea / RT)
from scipy.optimize import curve_fit
def arrhenius(T_inv, tau0, Ea_over_R):
return tau0 * np.exp(Ea_over_R * T_inv)
popt, _ = curve_fit(arrhenius, 1/(T_array + 273.15), tau_array)
Ea = popt[1] * 8.314 # Activation energy in J/mol
print(f"Activation energy: {Ea/1000:.1f} kJ/mol")
See also¶
Fractional Kelvin-Voigt (Fractional) — parallel element used inside the FKZ construction.
Fractional Zener Solid-Liquid (Fractional) — adds a fractional Maxwell branch instead of a Kelvin one.
Generalized Fractional Maxwell (Two-Order) — most general two-order series formulation.
Mastercurve (Time-Temperature Superposition) — align creep spectra across temperature before FKZ fitting.
../../examples/advanced/04-fractional-models-deep-dive — comparisons of Zener variants across datasets.