ufjc.isometric module

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 the BasicUtility 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

[1]

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.

[2]

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.