TNT Loop-Bridge (Two-Species Kinetics) — Handbook¶
1. Quick Reference¶
Use When:
Telechelic polymers with two distinct chain populations:
Bridges: Load-bearing chains connecting two different junctions
Loops: Non-load-bearing chains with both ends on the same junction
Material Examples:
HEUR (Hydrophobically-modified Ethoxylated URethane) thickeners
PEG-hydrophobe associating polymers
Telechelic ionomers (e.g., Surlyn)
Flower micelle networks
Triblock copolymer solutions (ABA with associating end-blocks)
Key Characteristics:
Non-monotonic viscosity with shear rate
Shear thickening at moderate rates (loop-to-bridge conversion)
Shear thinning at high rates (bridge breakage dominates)
Stress overshoot in startup flows with possible initial thickening
Parameters (6):
Parameter |
Default |
Units |
Description |
|---|---|---|---|
\(G\) |
1000 |
Pa |
Network modulus (all bridges active) |
\(\tau_b\) |
1.0 |
s |
Bridge lifetime |
\(\tau_a\) |
0.1 |
s |
Loop-to-bridge association time |
\(\nu\) |
1.0 |
dimensionless |
Force sensitivity (Bell exponent) |
\(f_{B,eq}\) |
0.5 |
dimensionless |
Equilibrium bridge fraction |
\(\eta_s\) |
0.0 |
Pa·s |
Solvent viscosity |
Test Modes:
All six protocols supported:
FLOW_CURVE: Non-monotonic viscosity with thickening then thinningSTARTUP: Stress overshoot with transient thickeningCREEP: Population evolution under constant stressRELAXATION: Bridge-to-loop conversion during stress decayOSCILLATION: Linear viscoelasticity (SAOS)LAOS: Nonlinear oscillatory response (population cycling)
Key Equation:
where \(k_{off}(\mathbf{S}) = \frac{1}{\tau_b} \exp\left[\nu \left(\text{tr}(\mathbf{S}) - 3\right)\right]\).
Only bridges contribute to stress:
2. Notation Guide¶
State Variables:
\(f_B\) |
Bridge fraction (dimensionless, 0 to 1) |
\(f_L\) |
Loop fraction, \(f_L = 1 - f_B\) |
\(\mathbf{S}\) |
Bridge conformation tensor (dimensionless, 3x3 symmetric) |
\(\text{tr}(\mathbf{S})\) |
Trace of conformation tensor, \(S_{xx} + S_{yy} + S_{zz}\) |
Material Parameters:
\(G\) |
Network modulus (Pa), sets stress magnitude |
\(\tau_b\) |
Bridge lifetime (s), reciprocal detachment rate |
\(\tau_a\) |
Loop-to-bridge association time (s) |
\(\nu\) |
Force sensitivity (dimensionless), Bell activation exponent |
\(f_{B,eq}\) |
Equilibrium bridge fraction, \(\tau_b/(\tau_a + \tau_b)\) |
\(\eta_s\) |
Solvent viscosity (Pa·s) |
Kinetic Rates:
\(k_{on}\) |
Loop-to-bridge association rate, \(1/\tau_a\) |
\(k_{off}(\mathbf{S})\) |
Force-dependent bridge dissociation rate |
\(k_{off,0}\) |
Equilibrium detachment rate, \(1/\tau_b\) |
Tensors:
\(\boldsymbol{\kappa}\) |
Velocity gradient tensor, \(\nabla \mathbf{v}\) |
\(\mathbf{D}\) |
Rate-of-deformation tensor, symmetric part of \(\boldsymbol{\kappa}\) |
\(\mathbf{I}\) |
Identity tensor |
Dimensionless Numbers:
\(\text{Wi}_b\) |
Weissenberg number for bridges, \(\dot{\gamma} \tau_b\) |
\(\text{Wi}_a\) |
Weissenberg number for association, \(\dot{\gamma} \tau_a\) |
3. Overview¶
Physical Picture¶
The TNT Loop-Bridge model describes telechelic polymers — linear chains with associating groups (stickers) at both ends. In solution, these stickers aggregate into micelles or junction zones. Each chain can exist in one of two states:
Bridge: Both ends attached to different junctions, chain is stretched and carries network stress
Loop: Both ends attached to the same junction, chain is relaxed and contributes no stress
At equilibrium, the bridge fraction \(f_{B,eq}\) is determined by the balance between:
Loop-to-bridge conversion (rate \(k_{on} = 1/\tau_a\))
Bridge-to-loop relaxation (rate \(k_{off,0} = 1/\tau_b\))
Under flow, this balance is perturbed:
Flow convection stretches bridges, increasing \(k_{off}\) (force-dependent detachment)
Strain can promote loop-to-bridge conversion (geometric effect)
Non-monotonic viscosity results: thickening at moderate rates (more bridges), thinning at high rates (bridge breakage dominates)
Historical Context¶
The model was introduced by:
Annable, Buscall, Ettelaie, and Whittlestone (1993) in Journal of Rheology as a two-species extension of the Tanaka-Edwards transient network framework
Built on earlier work by Tanaka & Edwards (1992) on transient networks
Inspired by Marrucci, Bhatt, and Ball (1993) on telechelic dynamics
Extended by Vaccaro & Marrucci (2000) with detailed stress-population coupling
Experimentally validated by Tripathi, Tam, and McKinley (2006) for HEUR solutions
The model is particularly important for understanding:
Shear thickening in associating polymers (e.g., paint thickeners)
Flow-induced structuring in telechelic networks
Stress overshoot and transient thickening
Nonlinear rheology of flower micelle networks
Key Features¶
Two-Species Kinetics:
Unlike single-species transient networks (e.g., basic TNT), this model tracks the bridge fraction \(f_B(t)\) as a dynamic variable. Only bridges contribute to stress, so the effective modulus is \(G_{\text{eff}} = G \cdot f_B\).
Force-Dependent Dissociation:
Bridge detachment follows Bell’s theory:
where \(\text{tr}(\mathbf{S}) - 3\) measures chain extension (since \(\text{tr}(\mathbf{I}) = 3\)). High extension accelerates breakage.
Stress-Population Coupling:
Population kinetics and conformation evolution are fully coupled:
\(f_B\) controls the effective modulus
\(\mathbf{S}\) controls \(k_{off}\) (through force dependence)
Both evolve simultaneously under flow
Non-Monotonic Viscosity:
At low rates: \(\dot{\gamma} \tau_a \sim 1\) promotes loop-to-bridge conversion → viscosity increases.
At high rates: \(\dot{\gamma} \tau_b \sim 1\) and \(\text{tr}(\mathbf{S}) \gg 3\) → bridge breakage dominates → viscosity decreases.
The viscosity maximum occurs at \(\dot{\gamma}^* \sim \frac{1}{\nu \tau_b}\).
4. Physical Foundations¶
Telechelic Architecture¶
Telechelic polymers are linear chains with two functional end-groups (telechelics = “distant attractors” in Greek). Common examples:
HEUR: PEG backbone with hydrophobic end-caps (C16-C18 alkanes)
Ionomers: Polyolefin chains with ionic end-groups (e.g., Surlyn)
ABA triblocks: Polystyrene-PEO-Polystyrene in selective solvent
In aqueous solution, hydrophobic end-groups aggregate into micelles (typically 20-100 stickers per micelle). Each chain can bridge two micelles or form a loop within one micelle.
Bridge-Loop Equilibrium¶
At rest, the bridge fraction is determined by entropic and enthalpic balance:
Loop formation: High entropy (chain is relaxed), but only one micelle occupied
Bridge formation: Low entropy (chain is stretched), but connects network
The equilibrium condition \(\mu_B = \mu_L\) (equal chemical potentials) gives:
This is independent of \(G\) (which only sets stress magnitude) and \(\nu\) (which requires extension for activation).
Typical values:
\(\tau_a < \tau_b\) → \(f_{B,eq} > 0.5\) (most chains are bridges)
\(\tau_a > \tau_b\) → \(f_{B,eq} < 0.5\) (most chains are loops)
Three-State Chain Population¶
The full loop-bridge framework distinguishes three chain states:
Bridges: Both ends attached to different junction points — these are the only chains that carry stress (elastically active)
Loops: Both ends attached to the same junction — carry no stress (act as dangling ends contributing viscous drag)
Danglers: One end free (detached) — carry no stress
The conservation constraint is:
where \(f_B\), \(f_L\), \(f_D\) are the fractions of bridges, loops, and danglers respectively. In the simplified two-state model implemented in RheoJAX, danglers are absorbed into the loop population: \(f_B + f_L = 1\).
Stress-Bearing Mechanism¶
Only bridges contribute to stress. This is the key distinction from single-species networks.
Loops are relaxed: they exert no force on junctions. Bridges are stretched: they exert force \(\sim k_B T \cdot (\mathbf{R} - \mathbf{R}_0)\) on their end junctions.
In mean-field approximation, all bridges have the same average conformation \(\mathbf{S}\), giving stress:
where:
\(G = n_{chain} k_B T\) (total chain density × thermal energy)
\(f_B\) is the fraction carrying stress
\((\mathbf{S} - \mathbf{I})\) is the extension beyond equilibrium
Solvent contributes Newtonian viscosity \(2\eta_s \mathbf{D}\).
Shear-Induced Association¶
Flow stretches bridges, which has two effects:
Force-dependent detachment: High \(\text{tr}(\mathbf{S})\) increases \(k_{off}\) exponentially (Bell’s theory)
Geometric promotion of bridging: Shear separates micelles, increasing the probability that a detached chain reattaches to a different micelle (not yet captured in mean-field model)
At moderate Weissenberg numbers (\(\dot{\gamma} \tau_a \sim 1\)), the second effect dominates → \(f_B\) increases above \(f_{B,eq}\) → shear thickening.
At high Weissenberg numbers (\(\dot{\gamma} \tau_b \sim 1\) and \(\text{tr}(\mathbf{S}) \gg 3\)), force-dependent detachment dominates → \(f_B\) decreases → shear thinning.
Force-Dependent Dissociation (Bell Theory)¶
Bond breakage under force follows Kramers theory for thermally activated escape over a barrier:
where \(\delta\) is the activation distance. For Gaussian chains, force is proportional to extension:
giving:
where \(\nu \sim \delta / a\) (activation distance over monomer size).
Typical values: \(\nu \sim 0.5\) to \(5\) (weak to strong force sensitivity).
Mean-Field Approximation¶
The model assumes all bridges have the same conformation \(\mathbf{S}\). This neglects:
Distribution of chain extensions (polydispersity effects)
Spatial heterogeneity (micelle clustering)
Correlations between bridge orientation and stress
These approximations are reasonable for:
Moderate extensions (\(\text{tr}(\mathbf{S}) < 10\))
Homogeneous flows (no spatial gradients)
Fast equilibration within each population
For highly stretched states or shear banding, more detailed models are needed.
5. Governing Equations¶
Population Kinetics¶
The bridge fraction evolves according to:
where:
\(k_{on} = 1/\tau_a\): Loop-to-bridge association rate (constant)
\(k_{off}(\mathbf{S}) = \frac{1}{\tau_b} \exp\left[\nu \left(\text{tr}(\mathbf{S}) - 3\right)\right]\): Force-dependent bridge dissociation
At equilibrium (\(df_B/dt = 0\), \(\mathbf{S} = \mathbf{I}\)):
This provides a consistency check: \(f_{B,eq}\) should match the ratio of timescales.
Analytical Bridge Fraction Solution¶
For constant shear rate \(\dot{\gamma}_0\), the bridge fraction evolves as:
where \(f_B^{\text{eq}}(\dot{\gamma}_0) = k_{LB} / (k_{LB} + k_{BL})\) is the equilibrium bridge fraction at shear rate \(\dot{\gamma}_0\). The approach to equilibrium occurs on the kinetic timescale \(\tau_{\text{kin}} = 1/(k_{LB} + k_{BL})\), which is independent of the chain relaxation time \(\tau_b\).
Two Characteristic Timescales¶
The loop-bridge model has two distinct timescales:
Chain relaxation \(\tau_b\): Time for individual chain conformation to relax (sets the viscoelastic response of bridges)
Bridge kinetics \(\tau_{\text{kin}} = 1/(k_{LB} + k_{BL})\): Time for the bridge fraction to equilibrate (sets the population dynamics)
When \(\tau_b \ll \tau_{\text{kin}}\), chains relax fast but the bridge fraction changes slowly — producing a two-step relaxation visible in G(t). When \(\tau_b \gg \tau_{\text{kin}}\), population dynamics are fast but chain relaxation is slow — the effective modulus adjusts quickly to \(G_{\text{eff}} = G \cdot f_B^{\text{eq}}\).
Bridge Conformation Evolution¶
The bridge conformation tensor evolves via upper-convected derivative with dissociation:
Physical interpretation:
\(\boldsymbol{\kappa} \cdot \mathbf{S} + \mathbf{S} \cdot \boldsymbol{\kappa}^T\): Convective stretching (upper-convected)
\(-k_{off}(\mathbf{S}) (\mathbf{S} - \mathbf{I})\): Dissociation returns \(\mathbf{S} \to \mathbf{I}\) (newly attached bridges are unstretched)
Key assumption: When a bridge detaches and reattaches, it reforms with equilibrium conformation \(\mathbf{I}\) (instantaneous equilibration of loops).
Stress Tensor¶
Total stress is the sum of bridge elastic stress and solvent viscous stress:
Critical point: Only the bridge fraction contributes to elastic stress. The effective modulus is \(G_{\text{eff}}(t) = G \cdot f_B(t)\), which varies with flow history.
For simple shear (\(\kappa_{xy} = \dot{\gamma}\), \(D_{xy} = \dot{\gamma}/2\)):
Five-State ODE System (Rate-Controlled)¶
For steady or transient shear at imposed \(\dot{\gamma}\), the system is:
where \(k_{off} = \frac{1}{\tau_b} \exp\left[\nu \left(S_{xx} + S_{yy} + S_{zz} - 3\right)\right]\).
Initial conditions: \(f_B(0) = f_{B,eq}\), \(\mathbf{S}(0) = \mathbf{I}\).
Steady state: Solve \(df_B/dt = 0\) and \(d\mathbf{S}/dt = \mathbf{0}\) simultaneously (typically requires root-finding).
Six-State ODE System (Creep)¶
For imposed stress \(\sigma_0\), add strain as a state variable:
with the same five equations above, now coupled through \(\dot{\gamma}(t)\).
This requires implicit solution at each timestep (creep compliance).
Linearized Equations (SAOS)¶
For small-amplitude oscillatory shear \(\gamma(t) = \gamma_0 e^{i\omega t}\), linearize around \(f_B = f_{B,eq}\), \(\mathbf{S} = \mathbf{I}\):
Substituting and keeping first-order terms:
Solving gives complex modulus:
where \(\tau_{\text{pop}} = \frac{\tau_a \tau_b}{\tau_a + \tau_b}\) is the population relaxation time.
Prediction: Two relaxation processes:
Bridge conformation relaxation (time \(\tau_b\))
Population redistribution (time \(\tau_{\text{pop}}\))
At high frequencies (\(\omega \tau_b \gg 1\)), \(G' \to G f_{B,eq}\) (plateau modulus).
Flow Curve (Steady Shear)¶
Steady-state bridge fraction and conformation satisfy:
For simple shear, these are five coupled nonlinear equations in \((f_B^{ss}, S_{xx}^{ss}, S_{yy}^{ss}, S_{zz}^{ss}, S_{xy}^{ss})\).
Viscosity is:
Non-monotonic behavior:
Low \(\dot{\gamma}\): \(f_B^{ss} > f_{B,eq}\) (shear thickening)
High \(\dot{\gamma}\): \(f_B^{ss} < f_{B,eq}\) (shear thinning from force-dependent detachment)
Maximum at \(\dot{\gamma}^* \sim \frac{1}{\nu \tau_b}\)
Startup Transient¶
For step strain rate \(\dot{\gamma}\) applied at \(t = 0\):
Stress overshoot: Occurs when \(d\sigma_{xy}/dt = 0\) before steady state.
Transient thickening: If \(f_B(t)\) increases faster than \(S_{xy}(t)\) initially, stress can exceed the final steady-state value before the overshoot.
This is a signature of loop-to-bridge conversion under flow.
Bridge Recovery During Relaxation¶
After cessation of flow, the bridge fraction \(f_B\) recovers toward its quiescent equilibrium value. If flow had depleted bridges (i.e., \(f_B < f_B^{\text{eq,0}}\)), the effective modulus may increase during relaxation as bridges reform — a counter-intuitive feature where the material appears to stiffen while stress is relaxing.
This produces a characteristic non-monotonic stress relaxation: initial rapid decay (chain relaxation) followed by partial stress recovery (bridge reformation), then final decay to zero.
6. Parameter Table¶
Parameter |
Symbol |
Default |
Bounds |
Units |
Physical Meaning |
|---|---|---|---|---|---|
Network modulus |
\(G\) |
1000 |
(1, 1e8) |
Pa |
Elastic stress per unit bridge fraction |
Bridge lifetime |
\(\tau_b\) |
1.0 |
(1e-6, 1e4) |
s |
Inverse detachment rate at equilibrium |
Association time |
\(\tau_a\) |
0.1 |
(1e-6, 1e4) |
s |
Time for loop to become bridge |
Force sensitivity |
\(\nu\) |
1.0 |
(0.01, 20) |
dimensionless |
Bell exponent, controls thinning onset |
Equilibrium bridge fraction |
\(f_{B,eq}\) |
0.5 |
(0.01, 0.99) |
dimensionless |
Bridge fraction at rest |
Solvent viscosity |
\(\eta_s\) |
0.0 |
(0.0, 1e4) |
Pa·s |
Background viscosity |
Consistency Constraint:
The parameter \(f_{B,eq}\) is not independent: it should satisfy
within experimental uncertainty. Fitting can either:
Fix \(f_{B,eq}\) to this relation (5-parameter fit)
Allow independent variation to test the model (6-parameter fit with consistency check)
Parameter Scaling:
For numerical stability, timescales should satisfy:
Extreme ratios can cause stiffness in the ODE system.
7. Parameter Interpretation¶
Network Modulus (\(G\))¶
Physical meaning: Elastic modulus if all chains were bridges (\(f_B = 1\)).
Related to chain density and temperature:
where \(n_{\text{chain}}\) is the number density of polymer chains.
Fitting: Determined from the plateau modulus in SAOS:
If \(f_{B,eq}\) is known independently, \(G\) is directly obtained.
Typical values:
Dilute HEUR (1 wt%): \(G \sim 10\) to \(100\) Pa
Semi-dilute (5 wt%): \(G \sim 100\) to \(1000\) Pa
Concentrated (>10 wt%): \(G \sim 1000\) to \(10000\) Pa
Bridge Lifetime (\(\tau_b\))¶
Physical meaning: Average time a bridge remains attached before detaching (at equilibrium, \(\mathbf{S} = \mathbf{I}\)).
Controlled by:
Sticker-micelle interaction energy \(\Delta G_{\text{bind}}\) (higher → longer \(\tau_b\))
Temperature (higher → shorter \(\tau_b\), Arrhenius)
Micelle aggregation number (larger → more stable)
Fitting: Terminal relaxation time from SAOS:
where \(\omega_c\) is the crossover frequency (\(G' = G''\)).
Typical values:
Fast dynamics (low molecular weight): \(\tau_b \sim 0.01\) to \(0.1\) s
Moderate: \(\tau_b \sim 0.1\) to \(10\) s
Slow (strong association): \(\tau_b \sim 10\) to \(1000\) s
Association Time (\(\tau_a\))¶
Physical meaning: Time for a loop to convert into a bridge.
Controlled by:
Sticker diffusion rate (how fast a free end finds a new micelle)
Micelle density (higher → shorter \(\tau_a\))
Chain flexibility (stiffer → longer \(\tau_a\))
Fitting: Determines the rate of shear thickening. Compare transient startup at different \(\dot{\gamma}\):
If thickening occurs at \(t \sim \tau_a\), association is being probed
Faster thickening → shorter \(\tau_a\)
Also affects the width of the thickening regime in the flow curve.
Typical values:
Fast reassociation: \(\tau_a \sim 0.001\) to \(0.01\) s
Moderate: \(\tau_a \sim 0.01\) to \(1\) s
Slow (diffusion-limited): \(\tau_a \sim 1\) to \(100\) s
Ratio interpretation:
\(\tau_a / \tau_b < 1\) → Most chains are bridges at rest (\(f_{B,eq} > 0.5\))
\(\tau_a / \tau_b > 1\) → Most chains are loops at rest (\(f_{B,eq} < 0.5\)), large thickening potential
Force Sensitivity (\(\nu\))¶
Physical meaning: Strength of force-dependent dissociation (Bell exponent).
Related to the activation distance \(\delta\) over which the sticker must move to escape the micelle:
where \(a\) is the monomer size.
Fitting: Controls the onset of shear thinning:
High \(\nu\) → steep increase in \(k_{off}\) with extension → early thinning
Low \(\nu\) → weak force dependence → extended thickening regime
Experimental signature: Slope of \(\log(\eta)\) vs \(\log(\dot{\gamma})\) in the thinning regime:
Typical values:
Weak force sensitivity: \(\nu \sim 0.1\) to \(0.5\)
Moderate: \(\nu \sim 0.5\) to \(2\)
Strong: \(\nu \sim 2\) to \(10\)
Equilibrium Bridge Fraction (\(f_{B,eq}\))¶
Physical meaning: Fraction of chains in bridge state at rest.
Determined by free energy balance:
Independent measurement: Estimate from plateau modulus if \(G\) is known:
Fitting strategy:
Fit \(\tau_a\), \(\tau_b\) from rheology
Compute \(f_{B,eq}\) from ratio
Check consistency with \(G_0' / G\)
Discrepancies indicate:
Model inadequacy (e.g., dangling ends, super-bridges)
Parameter correlation (need more experimental constraints)
Typical values:
Loop-dominated: \(f_{B,eq} \sim 0.1\) to \(0.4\)
Balanced: \(f_{B,eq} \sim 0.4\) to \(0.6\)
Bridge-dominated: \(f_{B,eq} \sim 0.6\) to \(0.9\)
Solvent Viscosity (\(\eta_s\))¶
Physical meaning: Background viscosity from solvent and unassociated chains.
For aqueous HEUR: \(\eta_s \approx \eta_{\text{water}} \sim 0.001\) Pa·s (often negligible).
For concentrated solutions: \(\eta_s\) includes polymer overlap contributions.
Fitting: High-shear limiting viscosity:
as \(f_B \to 0\) and \(\mathbf{S} \to \mathbf{I}\) at \(\dot{\gamma} \to \infty\).
Typical values:
Dilute aqueous: \(\eta_s \sim 0.001\) to \(0.01\) Pa·s
Semi-dilute: \(\eta_s \sim 0.01\) to \(1\) Pa·s
Polymer melt: \(\eta_s \sim 1\) to \(1000\) Pa·s
8. Validity and Assumptions¶
The TNT Loop-Bridge model makes the following simplifications:
1. Two-Species Approximation
Assumes only two states: bridges and loops. Neglects:
Dangling ends (one sticker attached, one free)
Free chains (both stickers detached)
Super-bridges (one chain bridging multiple micelles)
Multi-loop configurations
Valid when: Sticker-micelle binding energy is high (\(\Delta G_{\text{bind}} \gg k_B T\)), so free ends are rare.
2. Mean-Field Conformation
All bridges have the same average conformation \(\mathbf{S}\). Neglects:
Distribution of chain extensions
Spatial heterogeneity
Correlation between orientation and local stress
Valid when: Moderate extensions (\(\text{tr}(\mathbf{S}) < 10\)), homogeneous flows, fast equilibration.
3. Instantaneous Loop Reformation
When a bridge detaches, the loop immediately equilibrates to \(\mathbf{S} = \mathbf{I}\). Neglects:
Memory of previous conformation
Transient stretching of loops
Valid when: Loop relaxation time \(\ll \tau_b\) (loops are much faster than bridges).
4. Affine Deformation
Chain conformation follows the macroscopic velocity gradient (upper-convected derivative). Neglects:
Chain slip
Non-affine motion near junctions
Brownian fluctuations
Valid when: \(\text{Wi} < 10\) to \(100\) (moderate Weissenberg number).
5. No Hydrodynamic Interactions
Micelles are treated as fixed junctions; solvent flow around micelles is ignored. Neglects:
Micelle mobility
Cooperative rearrangements
Valid when: Micelle size \(\ll\) chain contour length, dilute to semi-dilute regime.
6. Homogeneous Flow
Assumes no spatial gradients (0D model). Cannot describe:
Shear banding
Flow instabilities
Spatial heterogeneity
Valid when: Gap width \(\ll\) characteristic length scale of structure evolution.
7. Bell-Type Dissociation
Force-dependent detachment follows exponential form. Neglects:
Non-Gaussian chain statistics (finite extensibility)
Stick-slip dynamics
Multiple activation pathways
Valid when: Extensions are moderate (\(\text{tr}(\mathbf{S}) < 10\) to \(20\)).
When to Use This Model:
HEUR solutions in dilute to semi-dilute regime
Telechelic ionomers with well-defined end-groups
Flower micelle networks with two-state kinetics
Shear thickening followed by thinning in flow curves
Stress overshoot in startup flows
When NOT to Use:
High extensions (\(\text{tr}(\mathbf{S}) > 20\)) → need finite extensibility (FENE-type)
Shear banding → need spatial (1D) model
Multiple relaxation processes → need more species or modes
Chain entanglements dominate → need reptation-based model
9. Regimes and Behavior¶
Linear Viscoelastic Regime (\(\text{Wi} \ll 1\))¶
Behavior: Single Maxwell-like relaxation with effective modulus.
Modulus:
Relaxation time: \(\tau_b\) (bridge detachment controls terminal relaxation).
Population: \(f_B \approx f_{B,eq}\) (small perturbations).
Key prediction: Storage modulus plateau at high frequency reflects the equilibrium bridge fraction.
Shear Thickening Regime (\(\text{Wi}_a \sim 1\), \(\text{Wi}_b < 1\))¶
Conditions: \(\dot{\gamma} \tau_a \sim 1\), extensions are still moderate.
Mechanism: Flow promotes loop-to-bridge conversion faster than force-dependent detachment.
Bridge fraction: \(f_B > f_{B,eq}\) (excess bridges).
Viscosity: Increases above zero-shear value:
Experimental signature: Positive slope in \(\log \eta\) vs \(\log \dot{\gamma}\) plot.
Material examples: HEUR at 5-10 wt%, moderate shear rates (10-100 1/s).
Critical Shear Rate (\(\dot{\gamma}^*\))¶
Definition: Shear rate at which viscosity is maximum.
Scaling estimate:
Physical picture: Balance between:
Thickening (loop-to-bridge conversion, rate \(\sim 1/\tau_a\))
Thinning (force-dependent detachment, rate \(\sim (1/\tau_b) e^{\nu (\text{tr}(\mathbf{S}) - 3)}\))
At \(\dot{\gamma}^*\), extensions are \(\text{tr}(\mathbf{S}) \sim 5\) to \(10\).
Parameter dependence:
Large \(\nu\) → low \(\dot{\gamma}^*\) (early onset of thinning)
Large \(\tau_b\) → low \(\dot{\gamma}^*\) (longer-lived bridges are more sensitive to force)
Shear Thinning Regime (\(\text{Wi}_b \gg 1\))¶
Conditions: \(\dot{\gamma} \tau_b \gg 1\), high extensions \(\text{tr}(\mathbf{S}) \gg 3\).
Mechanism: Force-dependent detachment dominates, \(k_{off} \gg k_{on}\).
Bridge fraction: \(f_B < f_{B,eq}\) (depletion of bridges).
Viscosity: Power-law decrease:
where \(p \sim 0.5\) to \(1\) (depends on \(\nu\)).
Experimental signature: Negative slope in \(\log \eta\) vs \(\log \dot{\gamma}\), stress plateau or weak increase.
Material examples: HEUR at high shear (>1000 1/s), approaching \(\eta_s\).
Startup Transient Behavior¶
Stress overshoot: Occurs when \(d\sigma/dt = 0\) before steady state.
Overshoot time: \(t_{\text{peak}} \sim \tau_b\) (bridge relaxation).
Overshoot magnitude: Depends on \(\text{Wi}_a\):
Low \(\text{Wi}_a\) (\(< 0.1\)): Weak overshoot, \(\sigma_{\text{peak}} \approx 1.1 \sigma_{ss}\)
Moderate \(\text{Wi}_a\) (\(\sim 1\)): Strong overshoot with transient thickening, \(\sigma_{\text{peak}} > 1.5 \sigma_{ss}\)
High \(\text{Wi}_a\) (\(> 10\)): Overshoot returns to steady-state thinning
Transient thickening: If \(f_B(t)\) increases faster than \(S_{xy}(t)\) grows, stress can exceed the final value before relaxing to steady state.
This is a signature of loop-to-bridge conversion and distinguishes telechelic networks from simple Maxwell models.
Creep Compliance¶
Step stress: \(\sigma_0\) applied at \(t = 0\).
Short-time behavior: Elastic response \(\gamma \sim \sigma_0 / (G f_{B,eq})\).
Intermediate time: Population redistribution, \(f_B\) adjusts to new stress.
Long-time behavior: Viscous flow \(\gamma \sim t / \eta_s\) if \(\eta_s > 0\).
Compliance:
Shows double-exponential relaxation (bridge relaxation + population adjustment) followed by linear flow.
Creep Rupture Via Bridge Collapse¶
Under sustained applied stress, the bridge fraction can progressively decrease:
Stress stretches bridge chains, increasing their breakage rate
Reduced \(f_B\) decreases the effective modulus \(G_{\text{eff}} = G \cdot f_B\)
Lower modulus means higher strain for the same stress → more chain stretch
Positive feedback: above a critical stress, \(f_B \to 0\) (all chains become loops)
This bridge collapse mechanism produces creep rupture — delayed catastrophic failure under sustained load. The critical stress depends on the ratio \(k_{BL}/k_{LB}\) and the force sensitivity of the bridge-to-loop transition.
Oscillatory Shear (SAOS and LAOS)¶
SAOS (small amplitude): Two relaxation processes:
Bridge conformation (time \(\tau_b\))
Population redistribution (time \(\tau_{\text{pop}} = \tau_a \tau_b / (\tau_a + \tau_b)\))
Cole-Cole plot: \(G''\) vs \(G'\) shows deviation from single Maxwell (two arcs).
LAOS (large amplitude): Population cycling — \(f_B(t)\) oscillates due to periodic stretching/relaxation.
Higher harmonics appear when \(k_{off}(t)\) becomes nonlinear (high strain amplitudes).
10. What You Can Learn from Fitting This Model¶
Equilibrium Bridge Fraction¶
From: Plateau modulus in SAOS, \(G_0'\).
Relation:
Interpretation: Fraction of chains actively contributing to network stress at rest.
Application: Design of thickeners (maximize \(f_{B,eq}\) for high viscosity at rest).
Bridge Lifetime and Association Time¶
From: Terminal relaxation frequency \(\omega_c\) (where \(G' = G''\)) and flow curve thickening regime.
Relations:
where \(\dot{\gamma}_{\text{thick}}\) is the shear rate where thickening begins.
Interpretation:
\(\tau_b\): Sticker-micelle binding strength
\(\tau_a\): Chain diffusion and reassociation rate
Application: Tuning molecular architecture (e.g., end-group hydrophobicity) to control timescales.
Force Sensitivity (Bell Exponent)¶
From: Slope of thinning regime in flow curve, onset of thinning \(\dot{\gamma}^*\).
Relation:
Interpretation: Sensitivity of detachment to chain extension (activation barrier shape).
Application: Predicting failure under high-rate deformation (e.g., extrusion, spraying).
Shear Thickening Amplitude¶
From: Maximum viscosity \(\eta_{\text{max}}\) compared to zero-shear \(\eta_0\).
Relation:
where \(f_{B,\text{max}}\) is the peak bridge fraction.
Interpretation: Amount of excess bridging achievable under flow.
Dependence:
Large \(\tau_a / \tau_b\) ratio → large thickening (more loops available for conversion)
Small \(\nu\) → sustained thickening (weak force dependence)
Application: Optimizing thickening efficiency in coatings, adhesives.
Onset of Shear Thinning¶
From: Critical shear rate \(\dot{\gamma}^*\) where \(\eta(\dot{\gamma})\) is maximum.
Relation:
Interpretation: Transition from association-dominated to detachment-dominated regime.
Application: Processing windows for molding, extrusion (avoid thinning).
Stress Overshoot and Transient Thickening¶
From: Startup experiments at various \(\dot{\gamma}\).
Metrics:
Overshoot magnitude: \(\sigma_{\text{peak}} / \sigma_{ss}\)
Overshoot time: \(t_{\text{peak}}\)
Transient thickening: Does \(\sigma(t) > \sigma_{ss}\) occur?
Interpretation:
Large overshoot → significant population redistribution
Transient thickening → loop-to-bridge conversion is fast relative to conformation evolution
Application: Predicting behavior in rapid deformations (printing, dispensing).
Network Connectivity¶
From: Comparison of \(f_{B,eq}\) (from \(G_0'\)) with \(\tau_a / (\tau_a + \tau_b)\) (from timescales).
Consistency check: Should match within 10-20%.
Discrepancies indicate:
Presence of dangling ends (reduces \(G_0'\))
Multi-species populations (more than loops/bridges)
Spatial heterogeneity (micelle clustering)
Application: Validating model assumptions, guiding molecular design.
11. Experimental Design and Data Requirements¶
Small-Amplitude Oscillatory Shear (SAOS)¶
Objective: Measure \(G'(\omega)\) and \(G''(\omega)\) to extract:
Plateau modulus \(G_0'\) → \(f_{B,eq}\) (if \(G\) known)
Terminal relaxation time \(\tau_b\)
Population relaxation time \(\tau_{\text{pop}}\)
Protocol:
Strain sweep to identify linear regime (typically \(\gamma_0 < 0.1\))
Frequency sweep from \(\omega = 10^{-2}\) to \(10^2\) rad/s
Check for low-frequency plateau (terminal behavior) and high-frequency plateau (\(G_0'\))
Expected features:
Two relaxation processes (double-Maxwellian)
\(G'\) plateau at high \(\omega\) → \(G_0' = G f_{B,eq}\)
Crossover at \(\omega_c \sim 1/\tau_b\)
Data quality:
At least 10 points per decade in \(\omega\)
Signal-to-noise ratio >100:1 for \(G'\), \(G''\)
Temperature control \(\pm 0.1\) K (association is thermally activated)
Steady Shear Flow Curve¶
Objective: Measure \(\sigma(\dot{\gamma})\) or \(\eta(\dot{\gamma})\) to observe:
Shear thickening at moderate \(\dot{\gamma}\)
Viscosity maximum at \(\dot{\gamma}^*\)
Shear thinning at high \(\dot{\gamma}\)
Protocol:
Shear rate sweep from \(\dot{\gamma} = 10^{-3}\) to \(10^3\) 1/s (log-spaced)
Allow steady state at each point (wait \(> 5 \tau_b\))
Check reversibility (up-down sweep) to detect thixotropy
Expected features:
Zero-shear plateau \(\eta_0\) at low \(\dot{\gamma}\)
Viscosity peak at \(\dot{\gamma}^*\)
Power-law thinning at high \(\dot{\gamma}\)
High-shear plateau \(\eta_\infty = \eta_s\)
Data quality:
At least 15-20 points covering the full curve
Steady-state criterion: \(|\dot{\sigma}/\sigma| < 0.01\) over time \(\sim \tau_b\)
Check for edge fracture, slip at high \(\dot{\gamma}\)
Startup Shear Flow¶
Objective: Measure transient \(\sigma(t)\) after step \(\dot{\gamma}\) to extract:
Stress overshoot magnitude and time
Transient thickening (if \(\sigma(t) > \sigma_{ss}\) before overshoot)
Approach to steady state
Protocol:
Pre-shear at low \(\dot{\gamma}\) to equilibrate
Rest for time \(> 10 \tau_b\) (return to \(f_B = f_{B,eq}\))
Step to target \(\dot{\gamma}\), measure \(\sigma(t)\) for \(t = 0\) to \(10 \tau_b\)
Repeat for multiple \(\dot{\gamma}\) spanning thickening and thinning regimes
Expected features:
Overshoot at \(t \sim \tau_b\)
Transient thickening for \(\dot{\gamma} \sim 1/\tau_a\)
Steady-state approach as \(\sigma(t) \to \sigma_{ss}\)
Data quality:
Sampling rate \(> 10 / \tau_b\) (resolve overshoot peak)
Repeat 3-5 times to check reproducibility
Monitor strain: \(\gamma(t) = \int \dot{\gamma} dt\) should be linear
Creep Compliance¶
Objective: Measure \(\gamma(t)\) after step stress \(\sigma_0\) to extract:
Initial compliance \(J_0 = 1/(G f_{B,eq})\)
Retardation times \(\tau_b\), \(\tau_{\text{pop}}\)
Long-time viscous flow \(\gamma \sim t/\eta_s\)
Protocol:
Apply constant stress \(\sigma_0\) (within linear regime if possible)
Measure \(\gamma(t)\) for \(t = 0\) to \(100 \tau_b\)
Repeat for multiple \(\sigma_0\) to check linearity
Expected features:
Instantaneous compliance jump \(J_0\)
Retardation (slow relaxation) at intermediate times
Linear flow \(J(t) \sim t/\eta_s\) if \(\eta_s > 0\)
Data quality:
High-resolution strain measurement (resolution \(< 0.001\))
Check for instrument compliance (subtract out)
Temperature drift \(< 0.1\) K over measurement
Large-Amplitude Oscillatory Shear (LAOS)¶
Objective: Measure higher harmonics in \(\sigma(t)\) during oscillation to probe:
Population cycling \(f_B(t)\)
Nonlinear force-dependent detachment
Intracycle shear thickening-thinning
Protocol:
Apply sinusoidal strain \(\gamma(t) = \gamma_0 \sin(\omega t)\)
Vary \(\gamma_0\) from 0.1 (linear) to 5 (highly nonlinear)
Measure stress waveform \(\sigma(t)\) at high resolution (>100 points per cycle)
Fourier decompose to extract harmonics \(G_1'(\omega), G_1''(\omega), G_3'(\omega), G_3''(\omega), \ldots\)
Expected features:
Odd harmonics dominate (material symmetry)
Third harmonic \(G_3'\) increases with \(\gamma_0\) (nonlinear elastic response)
Intracycle thickening-thinning visible in Lissajous plots
Data quality:
Waveform sampling >200 points/cycle
Multiple cycles (10+) to check periodicity
Fourier truncation error <1%
Recommended Test Matrix¶
Minimum for model validation:
SAOS frequency sweep (1 test)
Flow curve (1 test)
Startup at 3-5 shear rates (spanning regimes)
Comprehensive characterization:
SAOS frequency sweep
Flow curve (up-down sweep to check reversibility)
Startup at 10 shear rates (log-spaced)
Creep at 3-5 stress levels
LAOS at 3 strain amplitudes
Total time: 4-8 hours for comprehensive suite.
Temperature Control¶
Association kinetics are thermally activated:
Requirement: Temperature control \(\pm 0.1\) K to avoid drift in \(\tau_a\), \(\tau_b\).
Protocol: Equilibrate sample for 10-15 minutes at target temperature before testing.
12. Computational Implementation¶
State Variables¶
For rate-controlled flows (imposed \(\dot{\gamma}\)):
For stress-controlled flows (creep):
ODE Right-Hand Side (Rate-Controlled)¶
Implemented in rheojax.models.tnt._kernels.tnt_loop_bridge_ode_rhs:
def tnt_loop_bridge_ode_rhs(y, t, gamma_dot, params):
"""
y = [f_B, S_xx, S_yy, S_zz, S_xy]
params = [G, tau_b, tau_a, nu, f_B_eq, eta_s]
"""
f_B, S_xx, S_yy, S_zz, S_xy = y
G, tau_b, tau_a, nu, f_B_eq, eta_s = params
# Trace of conformation tensor
tr_S = S_xx + S_yy + S_zz
# Force-dependent detachment rate
k_off = (1.0 / tau_b) * jnp.exp(nu * (tr_S - 3.0))
# Population kinetics
df_B_dt = (1.0 - f_B) / tau_a - f_B * k_off
# Conformation evolution (upper-convected)
dS_xx_dt = 2.0 * gamma_dot * S_xy - k_off * (S_xx - 1.0)
dS_yy_dt = -k_off * (S_yy - 1.0)
dS_zz_dt = -k_off * (S_zz - 1.0)
dS_xy_dt = gamma_dot * S_yy - k_off * S_xy
return jnp.array([df_B_dt, dS_xx_dt, dS_yy_dt, dS_zz_dt, dS_xy_dt])
JAX compilation: Use jax.jit for 10-50x speedup:
ode_rhs_jit = jax.jit(tnt_loop_bridge_ode_rhs, static_argnums=(2,))
ODE Right-Hand Side (Creep)¶
For imposed stress \(\sigma_0\), add implicit equation for \(\dot{\gamma}(t)\):
def tnt_loop_bridge_creep_rhs(y, t, sigma_0, params):
"""
y = [f_B, S_xx, S_yy, S_zz, S_xy, gamma]
"""
f_B, S_xx, S_yy, S_zz, S_xy, gamma = y
G, tau_b, tau_a, nu, f_B_eq, eta_s = params
# Current stress (implicit equation)
sigma_xy = G * f_B * S_xy + eta_s * gamma_dot
# Solve for gamma_dot: sigma_xy = sigma_0
gamma_dot = (sigma_0 - G * f_B * S_xy) / eta_s
# Rest is same as rate-controlled
tr_S = S_xx + S_yy + S_zz
k_off = (1.0 / tau_b) * jnp.exp(nu * (tr_S - 3.0))
df_B_dt = (1.0 - f_B) / tau_a - f_B * k_off
dS_xx_dt = 2.0 * gamma_dot * S_xy - k_off * (S_xx - 1.0)
dS_yy_dt = -k_off * (S_yy - 1.0)
dS_zz_dt = -k_off * (S_zz - 1.0)
dS_xy_dt = gamma_dot * S_yy - k_off * S_xy
d_gamma_dt = gamma_dot
return jnp.array([df_B_dt, dS_xx_dt, dS_yy_dt, dS_zz_dt, dS_xy_dt, d_gamma_dt])
Initial Conditions¶
For all transient protocols, start from equilibrium:
y0 = jnp.array([f_B_eq, 1.0, 1.0, 1.0, 0.0]) # [f_B, S_xx, S_yy, S_zz, S_xy]
For creep, add \(\gamma(0) = 0\):
y0_creep = jnp.array([f_B_eq, 1.0, 1.0, 1.0, 0.0, 0.0])
Steady-State Root-Finding (Flow Curve)¶
For flow curve, solve \(dy/dt = 0\) using Newton-Raphson:
from jax.scipy.optimize import root_scalar
def residual(y_ss, gamma_dot, params):
dy_dt = tnt_loop_bridge_ode_rhs(y_ss, 0.0, gamma_dot, params)
return dy_dt
# Initial guess: equilibrium
y_guess = jnp.array([f_B_eq, 1.0, 1.0, 1.0, 0.0])
# Solve for each gamma_dot
y_ss = root_scalar(residual, y_guess, args=(gamma_dot, params))
Bracketing: For non-monotonic viscosity, root-finding may fail. Use continuation from low to high \(\dot{\gamma}\), using previous solution as initial guess.
SAOS Linearization¶
For small-amplitude oscillatory shear, linearize around equilibrium:
where \(\tau_{\text{pop}} = \tau_a \tau_b / (\tau_a + \tau_b)\).
Implemented analytically (no ODE solve needed):
def saos_modulus(omega, params):
G, tau_b, tau_a, nu, f_B_eq, eta_s = params
tau_pop = (tau_a * tau_b) / (tau_a + tau_b)
# Bridge relaxation
G_bridge = G * f_B_eq * (1j * omega * tau_b) / (1 + 1j * omega * tau_b)
# Population correction
G_pop_corr = (nu * f_B_eq) / (1 + 1j * omega * tau_pop)
G_star = G_bridge * (1 + G_pop_corr)
return G_star.real, G_star.imag # (G', G'')
LAOS Simulation¶
For large-amplitude oscillatory shear \(\gamma(t) = \gamma_0 \sin(\omega t)\):
# Time-dependent strain rate
def gamma_dot_laos(t, gamma_0, omega):
return gamma_0 * omega * jnp.cos(omega * t)
# Solve ODE with time-varying gamma_dot
def ode_rhs_laos(y, t, gamma_0, omega, params):
gamma_dot = gamma_dot_laos(t, gamma_0, omega)
return tnt_loop_bridge_ode_rhs(y, t, gamma_dot, params)
# Integrate for 10 cycles
t_end = 10 * (2 * jnp.pi / omega)
sol = odeint(ode_rhs_laos, y0, t_span, args=(gamma_0, omega, params))
Extract harmonics via FFT after discarding transient cycles (first 5).
Numerical Stability¶
Stiffness: When \(\tau_a \ll \tau_b\) or \(\nu\) is large, the system becomes stiff (fast and slow timescales).
Solution: Use implicit solver (e.g., jax-scipy.integrate.solve_ivp with method='BDF').
Adaptive timestepping: Essential for capturing overshoot peak and steady-state approach.
Tolerances: Set rtol=1e-6, atol=1e-8 for accurate stress predictions.
Vectorization: Use jax.vmap to solve for multiple \(\dot{\gamma}\) in parallel:
solve_startup_vmap = jax.vmap(solve_startup, in_axes=(None, 0, None))
# Vectorize over gamma_dot array
sigma_array = solve_startup_vmap(y0, gamma_dot_array, params)
13. Fitting Guidance and Best Practices¶
Parameter Initialization¶
Step 1: Estimate \(G\) and \(f_{B,eq}\) from SAOS:
Plateau modulus at high frequency:
If \(f_{B,eq}\) is unknown, assume \(f_{B,eq} \approx 0.5\) (balanced) as initial guess.
Step 2: Estimate \(\tau_b\) from terminal relaxation:
Crossover frequency \(\omega_c\) where \(G' = G''\):
Step 3: Estimate \(\tau_a\) from consistency:
If \(f_{B,eq}\) is known:
Step 4: Estimate \(\nu\) from flow curve slope:
Onset of thinning \(\dot{\gamma}^*\):
Step 5: Set \(\eta_s = 0\) initially (negligible solvent viscosity).
Fitting Strategy (Hierarchical)¶
Stage 1: SAOS only (fix \(\nu\), \(\eta_s = 0\))
Fit \(G\), \(\tau_b\), \(\tau_a\) (or \(f_{B,eq}\)) to \(G'(\omega)\), \(G''(\omega)\).
Objective: Minimize
Stage 2: Add flow curve (release \(\nu\))
Fix \(G\), \(\tau_b\), \(\tau_a\) from Stage 1. Fit \(\nu\) to \(\eta(\dot{\gamma})\).
Objective: Minimize
Stage 3: Global refinement (all parameters)
Use Stage 1-2 results as initial guess. Fit all parameters simultaneously to SAOS + flow curve.
Stage 4: Add transient data (validate)
Fix all parameters from Stage 3. Predict startup \(\sigma(t)\) and compare to data (no fitting).
If discrepancies exist, refine \(\tau_a\) or \(\nu\) slightly.
Parameter Bounds¶
Always enforce physical bounds:
Parameter |
Lower Bound |
Upper Bound |
|---|---|---|
\(G\) |
1 Pa |
\(10^8\) Pa |
\(\tau_b\) |
\(10^{-6}\) s |
\(10^4\) s |
\(\tau_a\) |
\(10^{-6}\) s |
\(10^4\) s |
\(\nu\) |
0.01 |
20 |
\(f_{B,eq}\) |
0.01 |
0.99 |
\(\eta_s\) |
0 Pa·s |
\(10^4\) Pa·s |
Weighting of Data¶
Log-space weighting: For quantities spanning decades (e.g., \(\eta\), \(\omega\)), use log-space residuals:
This prevents high-viscosity points from dominating the fit.
Uncertainty weighting: If experimental uncertainties \(\sigma_i\) are known, use inverse-variance weighting:
Consistency Checks¶
1. Equilibrium bridge fraction:
Compare \(f_{B,eq}\) from fit with \(\tau_b / (\tau_a + \tau_b)\). Should agree within 10%.
2. Plateau modulus:
Check \(G f_{B,eq} \approx G_0'\) from SAOS.
3. Timescale separation:
Verify \(\tau_{\text{pop}} = \tau_a \tau_b / (\tau_a + \tau_b) < \tau_b\).
4. Critical shear rate:
Check \(\dot{\gamma}^* \sim 1 / (\nu \tau_b)\) matches observed viscosity maximum.
Common Pitfalls¶
1. Parameter correlation:
\(G\) and \(f_{B,eq}\) are highly correlated in SAOS (only product \(G f_{B,eq}\) is constrained). Need flow curve or independent \(f_{B,eq}\) measurement.
2. Overfitting transient data:
Startup curves can be fit well with incorrect parameters (e.g., too high \(\nu\) compensated by too low \(\tau_a\)). Always validate against multiple protocols.
3. Ignoring solvent viscosity:
If high-shear viscosity does not plateau at \(\eta_s \approx 0\), \(\eta_s > 0\) is required. Neglecting it biases \(G\), \(\tau_b\) estimates.
4. Non-unique solutions:
Non-monotonic viscosity can have multiple parameter sets giving similar fits. Use physical constraints (e.g., \(f_{B,eq} < 0.9\) for loop-dominated systems).
Recommended Optimization Algorithm¶
Use Levenberg-Marquardt (least-squares with Jacobian):
from scipy.optimize import least_squares
result = least_squares(
residual_function,
x0=initial_guess,
bounds=(lower_bounds, upper_bounds),
method='trf', # Trust-region reflective
ftol=1e-8,
xtol=1e-8,
max_nfev=1000
)
For global search (if local minima suspected), use basin-hopping or differential evolution first.
15. Usage Examples¶
Example 1: Basic SAOS Prediction¶
from rheojax.models.tnt import TNTLoopBridge
import jax.numpy as jnp
import matplotlib.pyplot as plt
# Create model with default parameters
model = TNTLoopBridge()
# SAOS prediction
omega = jnp.logspace(-2, 2, 100)
G_prime, G_double_prime = model.predict(omega, test_mode='oscillation')
# Plot
plt.loglog(omega, G_prime, 'o-', label="G'")
plt.loglog(omega, G_double_prime, 's-', label="G''")
plt.xlabel('Frequency (rad/s)')
plt.ylabel('Modulus (Pa)')
plt.legend()
plt.grid(True, alpha=0.3)
plt.show()
Example 2: Flow Curve with Non-Monotonic Viscosity¶
# Predict flow curve
gamma_dot = jnp.logspace(-3, 3, 50)
viscosity = model.predict(gamma_dot, test_mode='flow_curve')
# Plot
plt.loglog(gamma_dot, viscosity, 'o-')
plt.xlabel('Shear rate (1/s)')
plt.ylabel('Viscosity (Pa·s)')
plt.title('Non-Monotonic Viscosity')
plt.grid(True, alpha=0.3)
plt.show()
Example 3: Startup with Transient Thickening¶
# Startup at moderate shear rate
t = jnp.linspace(0, 20, 500)
gamma_dot = 1.0 # Wi_a ~ 0.1
stress = model.predict(t, test_mode='startup', gamma_dot=gamma_dot)
# Plot
plt.plot(t, stress, '-')
plt.xlabel('Time (s)')
plt.ylabel('Stress (Pa)')
plt.title(f'Startup at gamma_dot = {gamma_dot} 1/s')
plt.grid(True, alpha=0.3)
plt.show()
Example 4: Fitting to Experimental Data¶
from rheojax.core.data import RheoData
# Load experimental SAOS data
omega_exp = ... # rad/s
G_star_exp = ... # Pa (complex)
# Fit model
rheo_data = RheoData(x=omega_exp, y=G_star_exp, test_mode='oscillation')
result = model.fit(rheo_data)
# Print fitted parameters
params = model.get_parameter_values()
print(f"G = {params['G']:.1f} Pa")
print(f"tau_b = {params['tau_b']:.3f} s")
print(f"tau_a = {params['tau_a']:.3f} s")
print(f"nu = {params['nu']:.2f}")
print(f"f_B_eq = {params['f_B_eq']:.2f}")
Example 5: Bayesian Inference¶
# Bayesian inference with NumPyro
result_bayes = model.fit_bayesian(
rheo_data,
num_warmup=1000,
num_samples=2000,
num_chains=4,
seed=42
)
# Check convergence
print(f"R-hat: {result_bayes.diagnostics['r_hat']}")
print(f"ESS: {result_bayes.diagnostics['ess']}")
# Credible intervals
intervals = model.get_credible_intervals(
result_bayes.posterior_samples,
credibility=0.95
)
print(f"tau_a: [{intervals['tau_a'][0]:.3f}, {intervals['tau_a'][1]:.3f}] s")
Example 6: Parameter Sensitivity¶
# Vary nu to see effect on flow curve
nu_values = [0.5, 1.0, 2.0, 5.0]
gamma_dot = jnp.logspace(-2, 3, 50)
for nu in nu_values:
model.set_parameter('nu', nu)
eta = model.predict(gamma_dot, test_mode='flow_curve')
plt.loglog(gamma_dot, eta, label=f'nu = {nu}')
plt.xlabel('Shear rate (1/s)')
plt.ylabel('Viscosity (Pa·s)')
plt.legend()
plt.title('Effect of Force Sensitivity')
plt.grid(True, alpha=0.3)
plt.show()
14. Failure Mode: Loop Saturation¶
Under extreme flow conditions, all bridge chains convert to loops:
In this limit, the network loses all elasticity (\(G_{\text{eff}} \to 0\)) and behaves as a viscous fluid. This loop saturation represents the complete destruction of the stress-bearing network.
Physical signatures:
Flow curve shows a dramatic viscosity drop at high rates
Startup stress overshoot followed by near-complete stress collapse
Recovery after flow cessation governed by \(\tau_{\text{kin}}\) (bridge reformation time)
16. See Also¶
TNT Shared Reference:
TNT Protocol Equations — Shared Reference — Full protocol equations and numerical methods
TNT Knowledge Extraction Guide — Model identification and fitting guidance
TNT Base Model:
TNT Tanaka-Edwards (Basic Transient Network) — Handbook — Base model (constant breakage, single species)
Generalizations:
TNT Multi-Species (Multiple Bond Types) — Handbook — Generalization to N bond types (LoopBridge is 2-species special case)
TNT Sticky Rouse (Multi-Mode Sticker Dynamics) — Handbook — Multi-mode alternative for broad relaxation spectra
Alternative Models for Similar Materials:
TNT Cates (Living Polymers / Wormlike Micelles) — Handbook — Living polymer alternative for micellar systems
TNT Bell (Force-Dependent Breakage) — Handbook — Force-dependent breakage (complementary mechanism)
17. API Reference¶
- class rheojax.models.tnt.TNTLoopBridge[source]¶
Bases:
TNTBaseLoop-bridge kinetics model for telechelic polymer networks.
Implements reversible loop-bridge kinetics for telechelic polymers where chains can exist as load-bearing bridges (both ends on different junctions) or non-load-bearing loops (both ends on same junction).
The bridge fraction f_B evolves dynamically via attachment (loops → bridges) and force-activated dissociation (bridges → loops via Bell kinetics).
State Variables¶
f_B: Bridge fraction (0 to 1)
S: Conformation tensor of bridges [S_xx, S_yy, S_zz, S_xy]
Key Equations¶
Bridge fraction kinetics:
df_B/dt = (1 - f_B)/τ_a - f_B·β(stretch) β(stretch) = (1/τ_b)·exp(ν·(stretch - 1))
Conformation tensor (bridges only):
dS/dt = L·S + S·L^T + g_0·I - β(stretch)·S
Stress (only bridges carry load):
σ = f_B·G·S_xy + η_s·γ̇
- param G:
Network modulus (fully bridged, Pa), bounds (1e0, 1e8)
- type G:
float, default 1e3
- param tau_b:
Bridge detachment time (s), bounds (1e-6, 1e4)
- type tau_b:
float, default 1.0
- param tau_a:
Loop attachment time (s), bounds (1e-6, 1e4)
- type tau_a:
float, default 5.0
- param nu:
Bell force sensitivity (dimensionless), bounds (0.01, 20)
- type nu:
float, default 1.0
- param f_B_eq:
Equilibrium bridge fraction, bounds (0.01, 0.99)
- type f_B_eq:
float, default 0.5
- param eta_s:
Solvent viscosity (Pa·s), bounds (0.0, 1e4)
- type eta_s:
float, default 0.0
- parameters¶
Model parameters
- Type:
ParameterSet
Examples
Basic usage:
>>> model = TNTLoopBridge() >>> gamma_dot = np.logspace(-2, 2, 50) >>> sigma = model.predict(gamma_dot, test_mode='flow_curve')
Startup with bridge fraction tracking:
>>> t = np.linspace(0, 100, 500) >>> stress, f_B = model.simulate_startup( ... t, gamma_dot=10.0, return_bridge_fraction=True ... )
See also
TNTSingleModeBasic single-mode TNT (constant breakage)
TNTCatesLiving polymer (wormlike micelle) model
- initialize_from_creep(t, strain, sigma_applied=1.0)[source]¶
Initialize parameters from creep data for numerical stability.
Key insight: For creep simulation, eta_s must be non-zero to prevent infinite initial shear rate when S_xy starts at 0.
- initialize_from_relaxation(t, modulus)[source]¶
Initialize parameters from stress relaxation data.
Uses conservative tau_b estimate to ensure numerical stability with typical pre-shear rates (Wi = gamma_dot * tau_b should be < ~100).
- property G_eff: float¶
Get effective modulus G_eff = f_B_eq·G (Pa).
This is the linearized modulus at equilibrium.
- get_equilibrium_state()[source]¶
Return equilibrium state [f_B_eq, 1, 1, 1, 0].
At rest: f_B = f_B_eq, S = I (unstretched, isotropic)
- Returns:
Equilibrium state [f_B, S_xx, S_yy, S_zz, S_xy]
- Return type:
- model_function(X, params, test_mode=None, **kwargs)[source]¶
NumPyro/BayesianMixin model function.
Routes to appropriate prediction based on test_mode. This is the stateless function used for both NLSQ optimization and Bayesian inference.
- Parameters:
X (array-like) – Independent variable
params (array-like) – Parameter values: [G, tau_b, tau_a, nu, f_B_eq, eta_s]
test_mode (str, optional) – Override stored test mode
- Returns:
Predicted response
- Return type:
jnp.ndarray
- predict_flow_curve(gamma_dot, return_components=False)[source]¶
Predict steady shear stress and viscosity.
- predict_saos(omega, return_components=True)[source]¶
Predict SAOS storage and loss moduli.
In the linear regime, loop-bridge model reduces to effective Maxwell: G_eff = f_B_eq·G, τ_eff = τ_b
- predict_normal_stresses(gamma_dot)[source]¶
Predict first and second normal stress differences.
N₁ = f_B·G·(S_xx - S_yy) N₂ = 0 (upper-convected derivative)
- simulate_startup(t, gamma_dot, return_bridge_fraction=False)[source]¶
Simulate startup flow at constant shear rate.
- simulate_relaxation(t, gamma_dot_preshear, return_bridge_fraction=False)[source]¶
Simulate stress relaxation after cessation of steady shear.
- Parameters:
- Returns:
Relaxing stress σ(t), or (σ, f_B) if return_bridge_fraction=True
- Return type:
- simulate_creep(t, sigma_applied, return_rate=False)[source]¶
Simulate creep deformation under constant stress.
- simulate_laos(t, gamma_0, omega, n_cycles=None)[source]¶
Simulate Large-Amplitude Oscillatory Shear (LAOS).
- Parameters:
- Returns:
Dictionary with keys: ‘t’, ‘strain’, ‘stress’, ‘strain_rate’, ‘f_B’
- Return type:
- extract_laos_harmonics(laos_result, n_harmonics=5)[source]¶
Extract Fourier harmonics from LAOS stress response.
- static compute_stretch(S_xx, S_yy, S_zz)¶
Compute stretch ratio from conformation tensor.
stretch = sqrt(tr(S)/3)
At equilibrium (S=I): stretch = 1. stretch > 1 indicates chains are extended beyond equilibrium.
- deborah_number(omega)¶
Compute Deborah number De = τ_b·ω.
- fit(X, y, method='nlsq', check_compatibility=False, use_log_residuals=None, use_multi_start=None, n_starts=5, perturb_factor=0.3, deformation_mode=None, poisson_ratio=0.5, auto_init=False, return_result=False, check_physics=False, uncertainty=None, **kwargs)¶
Fit the model to data using NLSQ optimization.
This method uses NLSQ (GPU-accelerated nonlinear least squares) by default for fast point estimation. The optimization result is stored for potential warm-starting of Bayesian inference.
For very wide frequency ranges (>10 decades), multi-start optimization is automatically enabled to escape local minima.
- Parameters:
X (numpy.typing.ArrayLike) – Input features
y (numpy.typing.ArrayLike) – Target values
method (
str) – Optimization method (‘nlsq’ by default for compatibility)check_compatibility (
bool) – Whether to check model-data compatibility before fitting. If True, warns when model may not be appropriate for data. Default is False for backward compatibility.use_log_residuals (
bool|None) – Whether to use log-space residuals for fitting. Recommended for wide frequency ranges (>8 decades) to prevent optimizer bias. If None (default), automatically detected based on data range. Explicit True/False overrides auto-detection.use_multi_start (
bool|None) – Whether to use multi-start optimization to escape local minima. Recommended for very wide ranges (>10 decades). If None (default), automatically enabled for >10 decades.n_starts (
int) – Number of random starts for multi-start optimization (default: 5)perturb_factor (
float) – Perturbation magnitude for multi-start random starts (default: 0.3). Parameters are perturbed by ± perturb_factor * (value or range). Larger values (0.7-0.9) explore wider parameter space.auto_init (
bool) – If True, callsauto_p0()to estimate initial parameters from data before running the optimizer (default: False).return_result (
bool) – If True, returns aFitResultinstead ofself. This intentionally breaks method chaining for workflows that need structured result objects (default: False).check_physics (
bool) – If True, runs post-fit physics validation and emitsRheoJaxPhysicsWarningfor any violations (default: False).uncertainty (
str|None) – Post-fit uncertainty method."hessian"for fast Cramér-Rao bounds,"bootstrap"for residual bootstrap CIs, orNoneto skip (default: None).**kwargs – Additional fitting options passed to _fit()
- Return type:
BaseModel|Any- Returns:
selffor method chaining (default), orFitResultifreturn_result=True.
Example
>>> model = Maxwell() >>> model.fit(t, G_data) # Uses NLSQ by default >>> model.fit(t, G_data, method='nlsq', max_iter=1000) >>> model.fit(t, G_data, check_compatibility=True) # Check compatibility >>> model.fit(omega, G_star, use_log_residuals=True) # Force log-residuals >>> model.fit(mastercurve, None, use_multi_start=True, n_starts=10) # Multi-start >>> result = model.fit(t, G_data, return_result=True) # Structured result >>> result = model.fit(t, G_data, auto_init=True, check_physics=True, ... return_result=True) # Full pipeline
- fit_bayesian(X, y=None, num_warmup=1000, num_samples=2000, num_chains=4, initial_values=None, test_mode=None, seed=None, deformation_mode=None, poisson_ratio=0.5, **nuts_kwargs)¶
Perform Bayesian inference using NumPyro NUTS sampler.
This method delegates to BayesianMixin.fit_bayesian() to run NUTS sampling for Bayesian parameter estimation. If initial_values is not provided and the model has been previously fitted with fit(), the NLSQ point estimates are automatically used for warm-starting.
Multi-chain sampling is enabled by default (num_chains=4) to provide reliable convergence diagnostics (R-hat, ESS) and parallel execution on multi-GPU systems.
- Parameters:
X (numpy.typing.ArrayLike) – Independent variable data (input features) or RheoData object
y (
Optional[numpy.typing.ArrayLike]) – Dependent variable data (observations to fit). If X is RheoData, y is ignored and extracted from X.num_warmup (
int) – Number of warmup/burn-in iterations (default: 1000)num_samples (
int) – Number of posterior samples per chain (default: 2000)num_chains (
int) – Number of MCMC chains (default: 4). Multiple chains enable proper R-hat computation and parallel execution. Chain method is auto-selected: ‘parallel’ on multi-GPU, ‘vectorized’ on single GPU/CPU.initial_values (
dict[str,float] |None) – Optional dict of initial parameter values for warm-start. If None and model is fitted, uses NLSQ estimates.test_mode (
str|None) – Explicit test mode (e.g., ‘relaxation’, ‘creep’, ‘oscillation’). If None, inferred from RheoData.metadata[‘test_mode’] or defaults to ‘relaxation’. Overrides RheoData metadata if provided.seed (
int|None) – Random seed for reproducibility. If None, uses seed=0 for deterministic results. Set to different values for independent runs.**nuts_kwargs – Additional arguments passed to NUTS sampler (e.g., target_accept_prob, chain_method)
- Return type:
BayesianResult- Returns:
BayesianResult containing posterior samples, summary statistics, and convergence diagnostics (R-hat, ESS, divergences)
Example
>>> model = Maxwell() >>> # Warm-start from NLSQ with explicit mode >>> model.fit(t, G_data, test_mode='relaxation') # NLSQ optimization >>> result = model.fit_bayesian(t, G_data, test_mode='relaxation') >>> >>> # RheoData with embedded mode (recommended) >>> rheo_data = RheoData(x=omega, y=G_star, metadata={'test_mode': 'oscillation'}) >>> result = model.fit_bayesian(rheo_data) >>> >>> # Or provide explicit initial values >>> result = model.fit_bayesian( ... t, G_data, ... initial_values={'G0': 1e5, 'eta': 1e3}, ... test_mode='creep' ... )
- fit_predict(X, y, **kwargs)¶
Fit model and return predictions.
- Parameters:
X (numpy.typing.ArrayLike) – Input features
y (numpy.typing.ArrayLike) – Target values
**kwargs – Additional fitting options
- Return type:
numpy.typing.ArrayLike
- Returns:
Model predictions on training data
- classmethod from_dict(data)¶
Create model from dictionary.
- get_bayesian_result()¶
Get stored Bayesian inference result.
- Return type:
BayesianResult|None- Returns:
BayesianResult from fit_bayesian(), or None if not run
Example
>>> model.fit_bayesian(t, G_data) >>> result = model.get_bayesian_result() >>> print(result.diagnostics['r_hat'])
- get_credible_intervals(posterior_samples, credibility=0.95)¶
Compute highest density intervals (HDI) for posterior samples.
Computes the highest posterior density interval for each parameter, which is the shortest interval containing the specified probability mass. This is preferred over equal-tailed intervals for skewed distributions.
- Parameters:
- Return type:
- Returns:
Dictionary mapping parameter names to (lower, upper) credible interval tuples. All values are float64.
Example
>>> result = model.fit_bayesian(X, y) >>> intervals_95 = model.get_credible_intervals( ... result.posterior_samples, credibility=0.95 ... ) >>> print(f"95% CI for a: {intervals_95['a']}")
- static get_equilibrium_conformation()¶
Return equilibrium conformation tensor S_eq = I.
In the absence of flow, chains adopt their equilibrium configuration: S = I (isotropic, unstretched).
- Returns:
Equilibrium state [S_xx, S_yy, S_zz, S_xy] = [1, 1, 1, 0]
- Return type:
- get_nlsq_result()¶
Get stored NLSQ optimization result.
- Returns:
OptimizationResult from NLSQ fit, or None if not fitted
Example
>>> model.fit(t, G_data) >>> result = model.get_nlsq_result() >>> if result: ... print(f"Converged: {result.success}")
- get_parameter_dict()¶
Get all parameters as a dictionary.
- get_parameter_uncertainties()¶
Get standard errors for fitted parameters from NLSQ covariance.
- Returns:
std_error}, or None if covariance unavailable
- Return type:
dict of {param_name
- get_params(deep=True)¶
Get model parameters.
- initialize_from_flow_curve(gamma_dot, sigma)¶
Initialize parameters from flow curve data.
- initialize_from_saos(omega, G_prime, G_double_prime)¶
Initialize parameters from SAOS data.
Uses the crossover frequency and modulus to estimate τ_b and G. In the linear regime, TNT reduces to Maxwell: crossover at ω_c·τ_b = 1.
- property pcov_¶
Parameter covariance matrix from NLSQ fit.
- Returns:
ndarray of shape (n_params, n_params), or None if not fitted
- property popt_¶
Optimal parameter values from NLSQ fit.
- Returns:
ndarray of shape (n_params,), or None if not fitted
- precompile(test_mode='relaxation', X=None, y=None)¶
Precompile NLSQ residual functions to eliminate JIT cold-start.
Triggers JIT compilation by running a minimal fit (
max_iter=1) with dummy data. The model parameters are reset afterwards so the model is left in its original state.This is useful for interactive sessions or benchmarks where the ~870ms first-fit JIT overhead should be excluded.
- Parameters:
- Return type:
- Returns:
Compilation time in seconds.
Example
>>> model = Maxwell() >>> t = model.precompile(test_mode='relaxation') >>> print(f"Compiled in {t:.2f}s") >>> model.fit(X, y) # No JIT overhead
- precompile_bayesian(X=None, y=None, test_mode=None, num_chains=4)¶
Precompile NUTS kernel to eliminate JIT overhead in subsequent calls.
Triggers JIT compilation of the NumPyro model by running a minimal sampling (1 warmup, 1 sample). This caches the compiled kernel so that subsequent fit_bayesian() calls are 2-5x faster.
- Parameters:
X (
ndarray|RheoData|None) – Sample input data for determining array shapes. If None, uses a default 10-point linspace [0.01, 100].y (
ndarray|None) – Sample output data. If None, generates dummy data.test_mode (
str|TestModeEnum|None) – Test mode to precompile for. If None, defaults to ‘relaxation’.
- Returns:
Compilation time in seconds.
- Return type:
Example
>>> model = Maxwell() >>> compile_time = model.precompile_bayesian(test_mode='relaxation') >>> print(f"Compiled in {compile_time:.1f}s") >>> # Now fit_bayesian() will be faster >>> result = model.fit_bayesian(X, y) # No compilation overhead
- predict(X, test_mode=None, deformation_mode=None, poisson_ratio=None, **kwargs)¶
Make predictions.
- Parameters:
X (numpy.typing.ArrayLike) – Input features
test_mode (
str|None) – Optional test mode (‘oscillation’, ‘relaxation’, ‘creep’, ‘flow’). If provided, sets model’s test_mode before prediction. Useful for data generation without fitting.deformation_mode (
str|DeformationMode|None) – Optional deformation mode for output conversion. If None, uses the mode stored from fit(). If tensile, converts G* predictions to E* space.poisson_ratio (
float|None) – Poisson’s ratio for conversion. If None, uses value stored from fit() (default 0.5).**kwargs – Additional arguments passed to the internal _predict method.
- Return type:
numpy.typing.ArrayLike
- Returns:
Model predictions (in E* space if deformation_mode is tensile)
- sample_prior(num_samples=1000, seed=None)¶
Sample from prior distributions over parameter bounds.
Samples from uniform prior distributions defined by parameter bounds. This is useful for prior predictive checks and understanding the prior’s influence on the posterior.
- Parameters:
- Return type:
- Returns:
Dictionary mapping parameter names to arrays of prior samples. Each array has shape (num_samples,) and dtype float64.
- Raises:
AttributeError – If class doesn’t have parameters attribute
ValueError – If any parameter lacks bounds
Example
>>> model = MyModel() >>> prior_samples = model.sample_prior(num_samples=500, seed=42) >>> print(prior_samples["a"].shape) # (500,)
- score(X, y)¶
Compute model score (R² by default).
- Parameters:
X (numpy.typing.ArrayLike) – Input features
y (numpy.typing.ArrayLike) – True target values
- Return type:
- Returns:
Model score (R² coefficient)
- set_parameter_dict(params)¶
Set parameters from a dictionary.
- set_params(**params)¶
Set model parameters.
- Parameters:
**params – Parameter names and values
- Return type:
BaseModel- Returns:
self for method chaining
- to_dict()¶
Serialize model to dictionary.
Key Methods:
fit(rheo_data): Fit model to SAOS, flow curve, or transient data using NLSQpredict(x, test_mode, **kwargs): Predict stress, viscosity, or modulusfit_bayesian(rheo_data, num_warmup, num_samples): Bayesian inference with NumPyro NUTSget_parameter_values(): Return dict of fitted parametersset_parameter(name, value): Update parameter value
Test Mode Support:
Test Mode |
Description |
|---|---|
|
Steady shear: \(\eta(\dot{\gamma})\) with non-monotonic behavior |
|
Transient shear: \(\sigma(t)\) with overshoot and possible thickening |
|
Constant stress: \(\gamma(t)\) with retardation and flow |
|
Stress relaxation: \(\sigma(t)\) after step strain (bridge-to-loop conversion) |
|
SAOS: \(G'(\omega)\), \(G''(\omega)\) with two relaxations |
|
Large amplitude: \(\sigma(t)\) with higher harmonics |
18. References¶
Foundational Papers¶
Annable, T., Buscall, R., Ettelaie, R., & Whittlestone, D. (1993) “The rheology of solutions of associating polymers: Comparison of experimental behavior with transient network theory” Journal of Rheology, 37(4), 695-726. DOI: 10.1122/1.550391
Original TNT loop-bridge model for HEUR solutions.
Tanaka, F., & Edwards, S. F. (1992) “Viscoelastic properties of physically cross-linked networks: Transient network theory” Macromolecules, 25(5), 1516-1523. DOI: 10.1021/ma00031a024
Foundation of transient network theory.
Marrucci, G., Bhargava, S., & Cooper, S. L. (1993) “Models of shear-thickening behavior in physically crosslinked networks” Macromolecules, 26(24), 6483-6488. DOI: 10.1021/ma00076a027
Theory of flow-induced association in telechelic polymers.
Force-Dependent Kinetics¶
Bell, G. I. (1978) “Models for the specific adhesion of cells to cells” Science, 200(4342), 618-627. DOI: 10.1126/science.347575
Bell’s theory of force-dependent bond dissociation.
Vaccaro, A., & Marrucci, G. (2000) “A model for the nonlinear rheology of associating polymers” Journal of Non-Newtonian Fluid Mechanics, 92(2-3), 261-273. DOI: 10.1016/S0377-0257(00)00095-1
Stress-population coupling in telechelic networks.
Experimental Validation¶
Tripathi, A., Tam, K. C., & McKinley, G. H. (2006) “Rheology and dynamics of associative polymers in shear and extension: Theory and experiments” Macromolecules, 39(5), 1981-1999. DOI: 10.1021/ma051614x
Comprehensive rheological study of HEUR solutions, validation of loop-bridge kinetics.
Pellens, L., Corrales, R. G., & Mewis, J. (2004) “General nonlinear rheological behavior of associative polymers” Journal of Rheology, 48(2), 379-393. DOI: 10.1122/1.1645516
Shear thickening and thinning in associating polymers.
Reviews and Extensions¶
Rubinstein, M., & Semenov, A. N. (2001) “Dynamics of entangled solutions of associating polymers” Macromolecules, 34(4), 1058-1068. DOI: 10.1021/ma0013049
Theory of dynamics in telechelic networks with entanglements.
Berret, J. F. (2006) “Rheology of wormlike micelles: Equilibrium properties and shear banding transitions” Molecular Gels, 667-720. DOI: 10.1007/1-4020-3689-2_20
Related systems: wormlike micelles with loop-bridge-like kinetics.
Green, M. S., & Tobolsky, A. V. (1946) “A new approach to the theory of relaxing polymeric media” Journal of Chemical Physics, 14(2), 80-92. DOI: 10.1063/1.1724109
Classic transient network theory (Green-Tobolsky model).
Numerical Methods¶
Fang, J., Kröger, M., & Öttinger, H. C. (2000) “A thermodynamically admissible reptation model for fast flows of entangled polymers. II. Model predictions for shear and extensional flows” Journal of Rheology, 44(6), 1293-1317. DOI: 10.1122/1.1308522
Numerical methods for stiff differential equations in rheology.