ufjc.isometric
A module for the uFJC single-chain model in the isometric ensemble.
This module consist of the class uFJCIsometric
which contains
methods for computing single-chain quantities
in the isometric (constant end-to-end vector) thermodynamic ensemble.
Example
Import and instantiate the class:
>>> from ufjc.isometric import uFJCIsometric
>>> class_instance = uFJCIsometric()
- class uFJCIsometric[source]
Bases:
uFJCIsotensional
The uFJC single-chain model class for the isometric ensemble.
This class contains methods for computing single-chain quantities in the isometric (constant end-to-end vector) thermodynamic ensemble. It inherits all attributes and methods from the
uFJCIsotensional
class, which inherits all attributes and methods from theBasicUtility
class.- beta_U_config(config)[source]
The nondimensional potential energy of a configuration.
This function provides the nondimensional potential energy \(\beta U\) given the configuration of the chain, i.e. the vector position of each atom/hinge relative to the first one.
- Parameters:
config (numpy.ndarray) – The configuration of the chain, a \((N_b+1)\)-by-3 numpy array.
- Returns:
The nondimensional potential energy \(\beta U\).
- Return type:
float
Example
Compute the potential energy of the uniformly-stretched default initial configuration:
>>> from ufjc import uFJC >>> model = uFJC(N_b=8, potential='lennard-jones') >>> model.beta_U_config(1.1*model.init_config) 133.5368021523727
- eta_isometric(gamma, **kwargs)[source]
Main function for the isometric \(\eta(\gamma)\).
This is the main function utilized to compute the isometric nondimensional single-chain mechanical response. Keyword arguments specify and are passed onto the method.
- Parameters:
gamma (array_like) – The nondimensional end-to-end length(s).
**kwargs – Arbitrary keyword arguments. Passed to the chosen method.
- Returns:
The nondimensional force(s).
- Return type:
numpy.ndarray
Example
Compute the nondimensional force for an eight-link Morse-FJC at a nondimensional end-to-end length of 0.8 in the isometric ensemble, using the Legendre transformation method from the isotensional ensemble, and using the reduced asymptotic approach to compute quantities in the isotensional ensemble:
>>> from ufjc import uFJC >>> model = uFJC(N_b=8, potential='morse') >>> model.eta_isometric([0, 0.8], \ ... method='legendre', approach='reduced') array([0. , 4.41715473])
Warning
Only the Legendre transformation method is currently unavailable:
>>> from ufjc import uFJC >>> uFJC().eta_isometric(0.8, method='exact') array([nan])
- eta_isometric_legendre(gamma, **kwargs)[source]
The Legendre transformation method of approximating the isometric \(\eta(\gamma)\).
This function uses the Legendre transformation method to obtain an approximate isometric nondimensional single-chain mechanical response. The result is to simply use the isotensional \(\eta(\gamma)\), and this approximation is asymptotically valid for \(N_b\gg 1\) and appreciable loads [1].
- Parameters:
gamma (array_like) – The nondimensional end-to-end length(s).
**kwargs – Arbitrary keyword arguments. Passed to
_eta_isotensional
.
- Returns:
The nondimensional force(s).
- Return type:
numpy.ndarray
Example
Compute the nondimensional force at a large nondimensional end-to-end length using the Legendre transformation method:
>>> from ufjc import uFJC >>> model = uFJC() >>> model.eta_isometric_legendre(1.3) array([28.71102552])
- gamma_isometric(eta, **kwargs)[source]
Main function for the isometric \(\gamma(\eta)\).
This function obtains the isometric nondimensional single-chain mechanical response \(\gamma(\eta)\) by inverting the isometric \(\eta(\gamma)\).
- Parameters:
eta (array_like) – the nondimensional force(s).
**kwargs – Arbitrary keyword arguments. Passed to
_eta_isometric
.
- Returns:
The nondimensional end-to-end length(s).
- Return type:
numpy.ndarray
Example
Check that \(\gamma[\eta(\gamma)] = \gamma\,\):
>>> import numpy as np >>> from ufjc import uFJC >>> model = uFJC() >>> def check_eta(gamma): ... eta_fun = lambda gamma: model.eta_isometric(gamma) ... gamma_fun = lambda eta: model.gamma_isometric(eta) ... return np.isclose(gamma_fun(eta_fun(gamma))[0], gamma) >>> check_eta(np.random.rand()) True
- vartheta_isometric(gamma, **kwargs)[source]
Main function for the isometric \(\vartheta(\gamma)\).
This is the main function utilized to compute the nondimensional Helmholtz free energy per link, an isometric quantity. Keyword arguments specify and are passed onto the method.
- Parameters:
gamma (array_like) – The nondimensional end-to-end length(s).
**kwargs – Arbitrary keyword arguments. Passed to the chosen method.
- Returns:
The nondimensional Helmholtz free energy per link.
- Return type:
numpy.ndarray
Example
Compute the nondimensional Helmholtz free energy per link for an eight-link Morse-FJC at a nondimensional end-to-end length of 0.8 in the isometric ensemble, using the Legendre transformation method from the isotensional ensemble, and using the reduced asymptotic approach to compute quantities in the isotensional ensemble:
>>> from ufjc import uFJC >>> model = uFJC(N_b=8, potential='morse') >>> model.vartheta_isometric(0.8, \ ... method='legendre', approach='reduced') array([1.23847534])
Warning
The exact method is currently unavailable:
>>> from ufjc import uFJC >>> uFJC().vartheta_isometric(0.8, method='exact') nan
- vartheta_isometric_legendre(gamma, **kwargs)[source]
The Legendre transformation method of approximating the isometric \(\vartheta(\gamma)\).
This function uses the Legendre transformation method to obtain an approximate isometric Helmholtz free energy per link. The result is independent of the number of links \(N_b\), and this approximation is asymptotically valid for \(N_b\gg 1\) and appreciable loads [2]. For example, using the reduced asymptotic approach, this is
\[\vartheta(\gamma) \sim \ln\left\{\frac{ \eta\exp[\eta\mathcal{L}(\eta)]}{\sinh(\eta)}\right\} + \beta u[\lambda(\eta)] ,\]valid when \(\varepsilon\gg 1\) and \(N_b\gg 1\) are simultaneously true. Note that \(\eta=\eta(\gamma)\) is implied, and obtained through inverting the isotensional \(\gamma(\eta)\).
- Parameters:
gamma (array_like) – The nondimensional end-to-end length(s).
**kwargs – Arbitrary keyword arguments. Passed to the chosen method.
- Returns:
The nondimensional Helmholtz free energy per link.
- Return type:
numpy.ndarray
Example
Approximate the nondimensional Helmholtz free energy per link using the Legendre method and both asymptotic approaches:
>>> from ufjc import uFJC >>> model = uFJC(potential='log-squared', varepsilon=23) >>> model.vartheta_isometric_legendre(1.1) array([1.90431381]) >>> model.vartheta_isometric_legendre(1.1, approach='reduced') array([2.09238198])
Warning
Only the asymptotic approaches are currently unavailable:
>>> from ufjc import uFJC >>> model = uFJC(potential='log-squared', varepsilon=23) >>> model.vartheta_isometric_legendre(1.1, approach='exact') nan
References
Michael R. Buche and Meredith N. Silberstein. Statistical mechanical constitutive theory of polymer networks: the inextricable links between distribution, behavior, and ensemble. Physical Review E, 102(012501):012501, 2020. doi:10.1103/PhysRevE.102.012501.
Michael R. Buche and Meredith N. Silberstein. Chain breaking in the statistical mechanical constitutive theory of polymer networks. Journal of the Mechanics and Physics of Solids, 156:104593, 2021. doi:10.1016/j.jmps.2021.104593.