Vitrimer and Nanocomposite Models

Overview

Vitrimers represent a revolutionary class of polymers that combine the mechanical robustness of thermosets with the processability of thermoplastics. Unlike traditional crosslinked networks, vitrimers contain exchangeable bonds that can swap partners through bond exchange reactions (BER) while maintaining constant network connectivity. This unique architecture creates materials with:

  • Permanent topology at low temperatures (thermoset-like)

  • Network rearrangement at elevated temperatures (thermoplastic-like)

  • Self-healing and recyclability properties

  • Tunable relaxation via exchange kinetics

RheoJAX provides two constitutive models for vitrimers:

  1. HVM (Hybrid Vitrimer Model): Three-subnetwork architecture for neat vitrimers

  2. HVNM (Hybrid Vitrimer Nanocomposite Model): Extends HVM with a fourth interphase subnetwork for nanoparticle-filled vitrimers

Key Insight

The vitrimer hallmark is that the exchangeable stress \(\sigma_E \to 0\) at steady state, even though the network remains connected. The natural state tensor \(\boldsymbol{\mu}_{\text{nat}}\) tracks deformation through BER, eliminating driving forces for stress relaxation.

When to Use These Models

HVM: Hybrid Vitrimer Model

Use HVM for:

  • Neat vitrimer materials (epoxy, polyester, polyurethane vitrimers)

  • Covalent adaptable networks (CANs) with transesterification/transamination

  • Systems requiring temperature-dependent relaxation (Arrhenius)

  • Materials with combined permanent and exchangeable crosslinks

  • Applications needing stress-dependent or stretch-dependent exchange kinetics

Warning

HVM is an 11-component ODE system. Bayesian inference (NUTS) requires significant memory (8-16 GB). Use FAST_MODE for exploratory analysis.

HVNM: Hybrid Vitrimer Nanocomposite Model

Use HVNM for:

  • Vitrimer nanocomposites (CNT, silica, graphene-filled)

  • Materials with distinct matrix vs interphase kinetics

  • Systems requiring Guth-Gold strain amplification \(X(\phi)\)

  • Nanoparticle-reinforced vitrimers (\(\phi < 0.3\))

  • Applications needing to study interfacial exchange dynamics

Note

HVNM reduces to HVM exactly at \(\phi = 0\), verified to machine precision. This makes it suitable for studying reinforcement effects systematically.

Theoretical Foundations

What Are Vitrimers?

Vitrimers are covalent adaptable networks (CANs) where chemical bonds can exchange through associative mechanisms:

  1. Transesterification: Exchange of ester linkages (R-O-C=O + R’-OH ↔ R-OH + R’-O-C=O)

  2. Transamination: Exchange of amine bonds

  3. Olefin metathesis: Exchange of C=C bonds

  4. Disulfide exchange: S-S bond swapping

Unlike dissociative CANs (where bonds break before reforming), vitrimers maintain constant crosslink density during exchange — no transient dangling chains.

Key Insight

The vitrimer “sweet spot” combines:

  • Slow exchange (\(\tau_{\text{BER}} \gg \tau_{\text{obs}}\)) — thermoset behavior

  • Fast exchange (\(\tau_{\text{BER}} \ll \tau_{\text{obs}}\)) — thermoplastic behavior

  • Arrhenius temperature dependence — processable above \(T_v\)

HVM Architecture: Three Subnetworks

The HVM decomposes total stress into three parallel contributions:

\[\boldsymbol{\sigma} = \boldsymbol{\sigma}_P + \boldsymbol{\sigma}_E + \boldsymbol{\sigma}_D\]

1. Permanent Subnetwork (P)

  • Represents covalent crosslinks that never exchange

  • Purely elastic (neo-Hookean rubber):

\[\boldsymbol{\sigma}_P = G_P \, \boldsymbol{\mu}\]

where \(\boldsymbol{\mu}\) is the left Cauchy-Green strain tensor.

2. Exchangeable Subnetwork (E)

  • Vitrimer bonds with BER kinetics

  • Evolves via two coupled ODEs:

\[\begin{split}\frac{d\boldsymbol{\mu}^E}{dt} &= \dot{\boldsymbol{\mu}} - 2 k_{\text{BER}} \, \boldsymbol{\mu}^E \\ \frac{d\boldsymbol{\mu}^E_{\text{nat}}}{dt} &= - 2 k_{\text{BER}} \, \boldsymbol{\mu}^E_{\text{nat}}\end{split}\]
  • Stress: \(\boldsymbol{\sigma}_E = G_E (\boldsymbol{\mu}^E - \boldsymbol{\mu}^E_{\text{nat}})\)

  • Factor-of-2: Both \(\boldsymbol{\mu}^E\) and \(\boldsymbol{\mu}^E_{\text{nat}}\) relax toward each other, doubling the effective rate

3. Dissociative Subnetwork (D)

  • Physical bonds (entanglements, H-bonds, van der Waals)

  • Standard Maxwell relaxation:

\[\frac{d\boldsymbol{\mu}^D}{dt} = \dot{\boldsymbol{\mu}} - 2 k_{d,D} \, \boldsymbol{\mu}^D\]
  • Stress: \(\boldsymbol{\sigma}_D = G_D \, \boldsymbol{\mu}^D\)

Transition State Theory (TST) Kinetics

The BER rate follows TST with stress or stretch activation:

Stress-Dependent (default)

\[k_{\text{BER}} = \nu_0 \exp\left(-\frac{E_a}{RT}\right) \cosh\left(\frac{V_{\text{act}} \sigma_{\text{VM}}}{RT}\right)\]

where:

  • \(\nu_0\) = attempt frequency (Hz)

  • \(E_a\) = activation energy (J/mol)

  • \(V_{\text{act}}\) = activation volume (\(\text{m}^3\))

  • \(\sigma_{\text{VM}}\) = von Mises stress

Stretch-Dependent (alternative)

\[k_{\text{BER}} = \nu_0 \exp\left(-\frac{E_a}{RT}\right) \exp\left(\alpha \text{tr}(\boldsymbol{\mu}^E)\right)\]

Note

The \(\cosh\) form allows both tensile and compressive stresses to accelerate exchange (symmetric activation).

HVNM Extension: The Interphase Subnetwork

HVNM adds a fourth subnetwork (I) to capture polymer-nanoparticle interfacial dynamics:

\[\boldsymbol{\sigma} = \boldsymbol{\sigma}_P \, X(\phi) + \boldsymbol{\sigma}_E \, X(\phi) + \boldsymbol{\sigma}_D \, X(\phi) + \boldsymbol{\sigma}_I \, X(\phi) \, \phi \, \beta_I\]

Guth-Gold Strain Amplification

\[X(\phi) = 1 + 2.5\phi + 14.1\phi^2\]

accounts for hydrodynamic reinforcement (valid for \(\phi < 0.3\)).

Interphase Kinetics

The I-subnetwork follows the same BER form as E, but with independent parameters:

  • \(\nu_{0,\text{int}}\) = interfacial attempt frequency

  • \(E_{a,\text{int}}\) = interfacial activation energy

  • \(G_I\) = interphase modulus

  • \(\beta_I\) = reinforcement factor

This allows modeling scenarios where:

  • Slow interfacial exchange (\(E_{a,\text{int}} \gg E_a\)) — constrained interphase

  • Fast interfacial exchange (\(E_{a,\text{int}} \ll E_a\)) — mobile interphase

  • Frozen interphase (\(E_{a,\text{int}} \to \infty\)) — permanent reinforcement

Practical Implementation

HVM: Basic Usage

from rheojax.models import HVMLocal
import numpy as np

# Create full vitrimer model (P + E + D subnetworks)
model = HVMLocal(kinetics="stress", include_dissociative=True)

# Set parameters
model.parameters.set_value("G_P", 5000.0)    # Permanent modulus (Pa)
model.parameters.set_value("G_E", 3000.0)    # Exchangeable modulus (Pa)
model.parameters.set_value("G_D", 1000.0)    # Dissociative modulus (Pa)
model.parameters.set_value("nu_0", 1e10)     # Attempt frequency (Hz)
model.parameters.set_value("E_a", 80e3)      # Activation energy (J/mol)
model.parameters.set_value("V_act", 1e-5)    # Activation volume (m³)
model.parameters.set_value("k_d_D", 10.0)    # Dissociative rate (1/s)
model.parameters.set_value("T", 373.15)      # Temperature (K)

# SAOS: Two Maxwell modes + G_P plateau
omega = np.logspace(-3, 3, 100)
G_prime, G_double_prime = model.predict_saos(omega)

At low frequencies, \(G' \to G_P\) (permanent network dominates). At high frequencies, both E and D subnetworks contribute elasticity.

HVM Factory Methods

RheoJAX provides five factory methods for common limiting cases:

1. Neo-Hookean Rubber (P only)

model = HVMLocal.neo_hookean(G_P=5000.0)
# Pure elastomer: no relaxation

2. Maxwell Liquid (D only)

model = HVMLocal.maxwell(G_D=1000.0, k_d_D=10.0)
# Standard viscoelastic liquid

3. Zener Solid (P + D)

model = HVMLocal.zener(G_P=5000.0, G_D=1000.0, k_d_D=10.0)
# Standard linear solid (Voigt + Maxwell parallel)

4. Pure Vitrimer (P + E)

model = HVMLocal.pure_vitrimer(
    G_P=5000.0,
    G_E=3000.0,
    nu_0=1e10,
    E_a=80e3,
    V_act=1e-5,
    T=373.15,
    kinetics="stress"
)
# Vitrimer without physical bonds

5. Partial Vitrimer (P + E + D)

model = HVMLocal.partial_vitrimer(
    G_P=5000.0,
    G_E=3000.0,
    nu_0=1e10,
    E_a=80e3,
    V_act=1e-5,
    k_d_D=10.0,
    G_D=1000.0,
    T=373.15,
    kinetics="stress"
)
# Full HVM with all subnetworks active

Key Insight

Use factory methods for rapid prototyping. They enforce physical constraints (e.g., zeroing inactive subnetworks) and provide sensible defaults.

HVNM: Nanocomposite Usage

from rheojax.models import HVNMLocal
import numpy as np

# Create nanocomposite vitrimer
model = HVNMLocal(kinetics="stress", include_dissociative=True)

# Set matrix parameters (same as HVM)
model.parameters.set_value("G_P", 5000.0)
model.parameters.set_value("G_E", 3000.0)
model.parameters.set_value("G_D", 1000.0)
model.parameters.set_value("nu_0", 1e10)
model.parameters.set_value("E_a", 80e3)

# Add nanoparticle parameters
model.parameters.set_value("phi", 0.1)        # Volume fraction
model.parameters.set_value("beta_I", 3.0)     # Interphase reinforcement
model.parameters.set_value("nu_0_int", 1e8)   # Slower interfacial exchange
model.parameters.set_value("E_a_int", 120e3)  # Higher interfacial barrier

# Predict reinforced modulus
omega = np.logspace(-3, 3, 100)
G_prime, G_double_prime = model.predict_saos(omega)
# Expect G' plateau ~ G_P * X(0.1) ~ 5000 * 1.391 ~ 6955 Pa

HVNM Factory Methods

1. Unfilled Vitrimer (\(\phi = 0\), recovers HVM)

model = HVNMLocal.unfilled_vitrimer(
    G_P=5000.0, G_E=3000.0, G_D=1000.0,
    nu_0=1e10, E_a=80e3
)
# Identical to HVM.partial_vitrimer()

2. Filled Elastomer (no exchange)

model = HVNMLocal.filled_elastomer(G_P=10000.0, phi=0.1)
# Reinforced rubber, no BER (E, D, I zeroed)

3. Vitrimer Nanocomposite

model = HVNMLocal.partial_vitrimer_nc(
    G_P=5000.0, G_E=3000.0, phi=0.1, beta_I=3.0,
    nu_0=1e10, E_a=80e3
)
# P + E + I active, no D subnetwork

4. Conventional Filled Rubber

model = HVNMLocal.conventional_filled_rubber(
    G_P=5000.0, G_D=1000.0, phi=0.15
)
# P + D active, no vitrimer exchange

5. Matrix-Only Exchange

model = HVNMLocal.matrix_only_exchange(
    G_P=5000.0, G_E=3000.0, phi=0.1,
    nu_0=1e10, E_a=80e3
)
# P + E active, frozen interphase (E_a_int = 250e3)

Startup Shear: Stress Overshoot

Vitrimers exhibit stress overshoot during startup due to BER relaxation:

from rheojax.models import HVMLocal
import numpy as np
import matplotlib.pyplot as plt

model = HVMLocal.partial_vitrimer(
    G_P=5000, G_E=3000, nu_0=1e10, E_a=80e3, T=373.15
)

# Simulate startup at constant shear rate
t = np.linspace(0.01, 50, 300)
result = model.simulate_startup(t, gamma_dot=1.0, return_full=True)

# Extract results
stress = result["stress"][:, 2]  # σ_xy component
sigma_E = result["sigma_E"][:, 2]
sigma_P = result["sigma_P"][:, 2]

# Plot
plt.figure(figsize=(10, 6))
plt.plot(t, stress, label="Total σ", linewidth=2)
plt.plot(t, sigma_P, label="σ_P (permanent)", linestyle="--")
plt.plot(t, sigma_E, label="σ_E (exchangeable)", linestyle="--")
plt.xlabel("Time (s)")
plt.ylabel("Shear Stress (Pa)")
plt.legend()
plt.title("HVM Startup: Stress Overshoot from BER")
plt.show()

Physical Interpretation:

  • Early time: \(\boldsymbol{\mu}^E\) builds faster than \(\boldsymbol{\mu}^E_{\text{nat}}\)\(\sigma_E\) increases

  • Overshoot peak: Maximum \(\sigma_E\) when BER rate catches up

  • Steady state: \(\boldsymbol{\mu}^E_{\text{nat}}\) tracks deformation — \(\sigma_E \to 0\), only \(\sigma_P\) remains

Temperature Sweep: Arrhenius Behavior

from rheojax.models import HVMLocal
import numpy as np
import matplotlib.pyplot as plt

model = HVMLocal.pure_vitrimer(
    G_P=5000, G_E=3000, nu_0=1e10, E_a=80e3
)

omega = np.logspace(-3, 3, 100)
temperatures = [300, 350, 400, 450]  # K

plt.figure(figsize=(10, 6))
for T in temperatures:
    model.parameters.set_value("T", T)
    G_prime, _ = model.predict_saos(omega)
    plt.loglog(omega, G_prime, label=f"T = {T} K")

plt.axhline(5000, color="k", linestyle="--", label="G_P plateau")
plt.xlabel("Angular Frequency ω (rad/s)")
plt.ylabel("Storage Modulus G' (Pa)")
plt.legend()
plt.title("HVM Temperature Sweep: Arrhenius Shift")
plt.show()

Physical Interpretation:

  • Low T: \(k_{\text{BER}} \to 0\) — E subnetwork behaves elastically — \(G'\) plateau at \(G_P + G_E\)

  • High T: \(k_{\text{BER}} \to \infty\) — fast exchange — \(G'\) plateau at \(G_P\) only

  • Topology freezing \(T_v\): Temperature where \(k_{\text{BER}} \sim \omega_{\text{obs}}\) (experiment-dependent)

Comparison: Neat vs Filled Vitrimers

from rheojax.models import HVMLocal, HVNMLocal
import numpy as np
import matplotlib.pyplot as plt

# Neat vitrimer (HVM)
hvm = HVMLocal.partial_vitrimer(G_P=5000, G_E=3000, nu_0=1e10, E_a=80e3)

# Filled vitrimer (HVNM, φ=0.15)
hvnm = HVNMLocal.partial_vitrimer_nc(
    G_P=5000, G_E=3000, phi=0.15, beta_I=3.0,
    nu_0=1e10, E_a=80e3
)

omega = np.logspace(-3, 3, 100)

G_prime_neat, _ = hvm.predict_saos(omega)
G_prime_filled, _ = hvnm.predict_saos(omega)

plt.figure(figsize=(10, 6))
plt.loglog(omega, G_prime_neat, label="Neat (φ=0)", linewidth=2)
plt.loglog(omega, G_prime_filled, label="Filled (φ=0.15)", linewidth=2)
plt.xlabel("Angular Frequency ω (rad/s)")
plt.ylabel("Storage Modulus G' (Pa)")
plt.legend()
plt.title("HVNM Reinforcement: Guth-Gold Amplification")
plt.show()

# Check X(φ) factor
X_phi = 1 + 2.5*0.15 + 14.1*0.15**2
print(f"X(φ=0.15) = {X_phi:.3f}")
print(f"Expected G'_plateau (filled) ~ {5000 * X_phi:.0f} Pa")

Bayesian Inference

HVM: Oscillatory Fitting

from rheojax.models import HVMLocal
import numpy as np

# Generate synthetic SAOS data
model_true = HVMLocal.partial_vitrimer(
    G_P=5000, G_E=3000, nu_0=1e10, E_a=80e3, T=373.15
)
omega = np.logspace(-2, 2, 50)
G_prime_true, G_double_prime_true = model_true.predict_saos(omega)
G_star_noisy = (G_prime_true + 1j*G_double_prime_true) * (1 + 0.05*np.random.randn(50))

# Step 1: NLSQ warm-start
model = HVMLocal(kinetics="stress", include_dissociative=True)
model.fit(omega, G_star_noisy, test_mode='oscillation')

# Step 2: Bayesian inference (4 chains for diagnostics)
result = model.fit_bayesian(
    omega, G_star_noisy,
    test_mode='oscillation',
    num_warmup=1000,
    num_samples=2000,
    num_chains=4,
    seed=42
)

# Step 3: Diagnostics
print("R-hat values:")
for name in result.posterior_samples.keys():
    samples = result.posterior_samples[name]
    print(f"  {name}: {result.diagnostics.get(f'{name}_rhat', np.nan):.4f}")

# Step 4: Credible intervals
intervals = model.get_credible_intervals(result.posterior_samples, credibility=0.95)
for name, (lower, upper) in intervals.items():
    print(f"{name}: [{lower:.2e}, {upper:.2e}]")

Warning

HVM has 8-9 parameters. Ensure sufficient data (N > 50) and tight priors to avoid posterior degeneracies (e.g., \(G_P\) vs \(G_E\) tradeoff).

HVNM: Startup Fitting

from rheojax.models import HVNMLocal
import numpy as np

# Generate synthetic startup data
model_true = HVNMLocal.partial_vitrimer_nc(
    G_P=5000, G_E=3000, phi=0.1, beta_I=3.0,
    nu_0=1e10, E_a=80e3
)
t = np.linspace(0.01, 50, 200)
result_true = model_true.simulate_startup(t, gamma_dot=1.0, return_full=True)
stress_noisy = result_true["stress"][:, 2] * (1 + 0.05*np.random.randn(200))

# Fit with NLSQ
model = HVNMLocal(kinetics="stress", include_dissociative=False)
model.parameters.set_value("phi", 0.1)  # Fix volume fraction
model.fit(t, stress_noisy, test_mode='startup', gamma_dot=1.0)

# Bayesian inference (memory-intensive for ODE model)
result = model.fit_bayesian(
    t, stress_noisy,
    test_mode='startup',
    gamma_dot=1.0,
    num_warmup=500,    # Reduced for ODE model
    num_samples=1000,
    num_chains=2,      # Reduced to avoid OOM
    seed=42
)

Note

HVNM startup uses 17-component ODE integration inside NUTS. Each leapfrog step requires forward + backward ODE solves. Reduce num_warmup/num_samples or use FAST_MODE for large datasets.

Visualization and Diagnostics

ArviZ Integration

from rheojax.models import HVMLocal
from rheojax.pipeline.bayesian import BayesianPipeline
import arviz as az

# Pipeline with ArviZ diagnostics
pipeline = BayesianPipeline()
(pipeline.load('vitrimer_saos.csv', x_col='omega', y_col='G_star')
         .fit_nlsq('hvm')
         .fit_bayesian(num_warmup=1000, num_samples=2000)
         .plot_pair(divergences=True, filter_degenerate=True)
         .plot_forest(hdi_prob=0.95)
         .plot_trace()
         .save('hvm_bayesian_results.hdf5'))

Key Diagnostics:

  • plot_pair(): Posterior correlations (watch for \(G_P\)-\(G_E\) degeneracy)

  • plot_forest(): 95% HDI intervals (ensure tight bounds)

  • plot_trace(): MCMC chains (check mixing, no drift)

  • plot_energy(): BFMI > 0.3 (good sampler efficiency)

Subnetwork Decomposition

from rheojax.models import HVMLocal
import numpy as np
import matplotlib.pyplot as plt

model = HVMLocal.partial_vitrimer(G_P=5000, G_E=3000, G_D=1000, nu_0=1e10, E_a=80e3)

t = np.linspace(0.01, 50, 300)
result = model.simulate_startup(t, gamma_dot=1.0, return_full=True)

# Extract subnetwork stresses
sigma_P = result["sigma_P"][:, 2]  # Permanent
sigma_E = result["sigma_E"][:, 2]  # Exchangeable
sigma_D = result["sigma_D"][:, 2]  # Dissociative
sigma_total = result["stress"][:, 2]

fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(10, 10))

# Total stress
ax1.plot(t, sigma_total, 'k', linewidth=2, label="Total σ")
ax1.set_xlabel("Time (s)")
ax1.set_ylabel("Shear Stress (Pa)")
ax1.legend()
ax1.set_title("HVM Startup: Total Response")

# Subnetwork contributions
ax2.plot(t, sigma_P, label="σ_P (permanent)", linewidth=2)
ax2.plot(t, sigma_E, label="σ_E (exchangeable)", linewidth=2)
ax2.plot(t, sigma_D, label="σ_D (dissociative)", linewidth=2)
ax2.set_xlabel("Time (s)")
ax2.set_ylabel("Stress (Pa)")
ax2.legend()
ax2.set_title("Subnetwork Decomposition")

plt.tight_layout()
plt.show()

Key Insight

At steady state:

  • \(\sigma_P\) — constant (elastic contribution)

  • \(\sigma_E \to 0\) (vitrimer signature!)

  • \(\sigma_D \to 0\) (physical bonds fully relaxed)

Comparison with Classical Models

HVM vs Zener Model

HVM vs Zener (Standard Linear Solid)

Feature

HVM

Zener

Subnetworks

P + E (+ optional D)

Spring + Maxwell parallel

Natural state

Evolves via BER

Fixed reference config

Steady stress

\(\sigma_E \to 0\), only \(\sigma_P\)

\(\sigma_{\text{spring}} + \sigma_{\text{Maxwell}}\)

Temperature

Arrhenius \(k_{\text{BER}}(T)\)

Time-temp superposition

Relaxation time

\(\tau_E = 1/(2 k_{\text{BER}})\)

\(\tau = \eta/G\)

Best for

Vitrimers, CANs

Standard viscoelastics

Code Comparison:

from rheojax.models import HVMLocal, Zener
import numpy as np
import matplotlib.pyplot as plt

# HVM (P + E, no D)
hvm = HVMLocal.pure_vitrimer(G_P=5000, G_E=3000, nu_0=1e10, E_a=80e3, T=373.15)

# Zener (G_e + G_eq in parallel with η)
zener = Zener()
zener.parameters.set_value("G_e", 5000)   # Elastic spring
zener.parameters.set_value("G_eq", 3000)  # Maxwell spring
zener.parameters.set_value("eta", 300)    # Maxwell dashpot (τ ~ 0.1s)

t = np.linspace(0, 50, 300)

# Relaxation after unit strain
G_hvm = hvm.predict(t, test_mode='relaxation')
G_zener = zener.predict(t, test_mode='relaxation')

plt.figure(figsize=(10, 6))
plt.plot(t, G_hvm, label="HVM (vitrimer)", linewidth=2)
plt.plot(t, G_zener, label="Zener (standard)", linewidth=2, linestyle="--")
plt.axhline(5000, color="k", linestyle=":", label="G_P (HVM) / G_e (Zener)")
plt.xlabel("Time (s)")
plt.ylabel("Relaxation Modulus G(t) (Pa)")
plt.legend()
plt.title("HVM vs Zener: Stress Relaxation")
plt.show()

Key Difference: Zener relaxes to \(G_e + G_{eq}/(1 + t/\tau)\), while HVM relaxes to \(G_P\) only (\(\sigma_E \to 0\)).

HVNM vs Filled Rubber Models

HVNM vs Conventional Filled Rubber

Feature

HVNM

Filled Rubber (P + D)

Subnetworks

P + E + D + I (4)

P + D (2)

Interphase

Explicit I-subnetwork

Implicit in \(X(\phi)\)

Exchange

Matrix + interface BER

None (permanent + physical)

Moduli amplification

Guth-Gold \(X(\phi)\)

Guth-Gold \(X(\phi)\)

Relaxation

Dual TST kinetics

Single Maxwell mode

Best for

Vitrimer nanocomposites

Rubber compounds

Limitations and Considerations

Computational Constraints

Warning

Memory Requirements:

  • HVM: 11-component ODE — 8-12 GB RAM for NUTS

  • HVNM: 17-18-component ODE — 12-16 GB RAM for NUTS

  • LAOS with NUTS may OOM on 16 GB systems

Mitigation strategies:

  1. Use FAST_MODE (50+100 warmup/samples) for exploratory analysis

  2. Reduce num_chains=2 instead of default 4

  3. Subsample data for LAOS (1000 to 200 points)

  4. Use NLSQ only for parameter estimation if posteriors not needed

Physical Limitations

1. TST Assumptions

  • Single energy barrier (no multi-step BER)

  • Arrhenius temperature dependence (no WLF behavior)

  • Mean-field kinetics (no spatial heterogeneity)

2. Guth-Gold Validity

  • Valid for \(\phi < 0.3\) (dilute to semi-dilute)

  • Assumes spherical, non-interacting nanoparticles

  • No percolation or agglomeration effects

3. No Damage Evolution

  • Permanent bonds never break (\(G_P\) constant)

  • No fatigue or cyclic degradation

  • No void nucleation under large strains

4. Interphase Simplification

  • Single effective interphase thickness

  • No gradient in properties near NP surface

  • No polymer-NP entanglement dynamics

Parameter Sensitivity

Note

Critical parameters (small changes lead to large effects):

  • V_act: Bounds (1e-8, 0.01), default 1e-5. Never use 1e-28 (unphysical)

  • E_a: Typical 60–120 kJ/mol for vitrimers. Higher means slower exchange

  • beta_I: Typical 1–5. Higher means stronger interphase reinforcement

  • phi: Guth-Gold nonlinear above 0.2 (\(14.1\phi^2\) term dominates)

Example Notebooks

HVM Tutorials

RheoJAX provides 13 HVM example notebooks:

examples/hvm/
├── 01_hvm_saos.ipynb                    # SAOS with two Maxwell modes
├── 02_hvm_stress_relaxation.ipynb       # Relaxation to G_P plateau
├── 03_hvm_startup_shear.ipynb           # TST stress overshoot
├── 04_hvm_creep.ipynb                   # Delayed compliance
├── 05_hvm_flow_curve.ipynb              # Shear thinning from BER
├── 06_hvm_laos.ipynb                    # Nonlinear oscillatory
├── 07_hvm_overview.ipynb                # All protocols + theory
├── 08_hvm_flow_curve.ipynb              # Extended flow curve
├── 09_hvm_creep.ipynb                   # Extended creep
├── 10_hvm_relaxation.ipynb              # Extended relaxation
├── 11_hvm_startup.ipynb                 # Extended startup
├── 12_hvm_saos.ipynb                    # Extended SAOS
└── 13_hvm_laos.ipynb                    # Extended LAOS

Key notebooks:

  • 07: Comprehensive overview with all 6 protocols

  • 02: Demonstrates \(\sigma_E \to 0\) signature

  • 03: TST stress overshoot mechanism

HVNM Tutorials

examples/hvnm/
├── 01_hvnm_saos.ipynb                   # Reinforced SAOS
├── 02_hvnm_stress_relaxation.ipynb      # Relaxation with interphase
├── 03_hvnm_startup_shear.ipynb          # Startup with NPs
├── 04_hvnm_creep.ipynb                  # Creep compliance
├── 05_hvnm_flow_curve.ipynb             # Flow curves (neat vs filled)
├── 06_hvnm_laos.ipynb                   # LAOS with reinforcement
├── 07_hvnm_limiting_cases.ipynb         # Factory methods demo
├── 08_data_intake_and_qc.ipynb          # Data preprocessing
├── 09_flow_curve_nlsq_nuts.ipynb        # Bayesian flow curve
├── 10_creep_compliance_nlsq_nuts.ipynb  # Bayesian creep
├── 11_stress_relaxation_nlsq_nuts.ipynb # Bayesian relaxation
├── 12_startup_shear_nlsq_nuts.ipynb     # Bayesian startup
├── 13_saos_nlsq_nuts.ipynb              # Bayesian SAOS
├── 14_laos_nlsq_nuts.ipynb              # Bayesian LAOS
└── 15_global_multi_protocol.ipynb       # Multi-protocol fitting

Key notebooks:

  • 07: Demonstrates all 5 factory methods and limiting cases

  • 09-14: Full NLSQ to NUTS workflow for each protocol

  • 15: Global fitting across multiple protocols (advanced)

References

Foundational Papers

  1. Vitrimers (original concept)

    Montarnal, D., Capelot, M., Tournilhac, F., & Leibler, L. (2011). Silica-like malleable materials from permanent organic networks. Science, 334(6058), 965-968.

    DOI: 10.1126/science.1212648

  2. HVM constitutive model

    Vernerey, F. J., Long, R., & Brighenti, R. (2017). A statistically-based continuum theory for polymers with transient networks. Journal of the Mechanics and Physics of Solids, 107, 1-20.

    DOI: 10.1016/j.jmps.2017.05.016

  3. Epoxy vitrimers (transesterification)

    Denissen, W., Winne, J. M., & Du Prez, F. E. (2016). Vitrimers: permanent organic networks with glass-like fluidity. Chemical Science, 7(1), 30-38.

    DOI: 10.1039/C5SC02223A

  4. Guth-Gold reinforcement (empirical)

    Guth, E., & Gold, O. (1938). On the hydrodynamical theory of the viscosity of suspensions. Physical Review, 53(2), 322.

    Note: Conference abstract; no DOI registered with CrossRef.

Advanced Topics

  1. Topology freezing transition

    Capelot, M., Unterlass, M. M., Tournilhac, F., & Leibler, L. (2012). Catalytic control of the vitrimer glass transition. ACS Macro Letters, 1(7), 789-792.

    DOI: 10.1021/mz300239f

  2. Stress-dependent exchange kinetics

    Johlitz, M., Diebels, S., Possart, W., & Steinmann, P. (2008). Modelling of thermo-viscoelastic material behaviour of polyurethane close to the glass transition temperature. ZAMM, 88(8), 606-623. https://doi.org/10.1002/zamm.200900361

  3. Vitrimer nanocomposites (experimental)

    Long, R., Qi, H. J., & Dunn, M. L. (2013). Modeling the mechanics of covalently adaptable polymer networks with temperature-dependent bond exchange reactions. Soft Matter, 9, 4083-4096. https://doi.org/10.1039/C3SM27945F

  4. Natural state formulation

    Rajagopal, K. R., & Srinivasa, A. R. (2004). On thermomechanical restrictions of continua. Proceedings of the Royal Society A, 460(2042), 631-651. https://doi.org/10.1098/rspa.2002.1111

See Also

Related User Guide Sections:

API Documentation:

Example Notebooks:

  • examples/hvm/07_hvm_overview.ipynb — Comprehensive HVM tutorial

  • examples/hvnm/07_hvnm_limiting_cases.ipynb — HVNM factory methods

  • examples/hvnm/15_global_multi_protocol.ipynb — Advanced multi-protocol fitting