pyPRISM.omega.NonOverlappingFreelyJointedChain module

class pyPRISM.omega.NonOverlappingFreelyJointedChain.NFJC(length, l)[source]

Bases: pyPRISM.omega.NonOverlappingFreelyJointedChain.NonOverlappingFreelyJointedChain

Alias of NonOverlappingFreelyJointedChain

class pyPRISM.omega.NonOverlappingFreelyJointedChain.NonOverlappingFreelyJointedChain(length, l)[source]

Bases: pyPRISM.omega.Omega.Omega

Freely jointed chain with excluded volume intra-molecular correlation function

Warning

The numerical integrations required for the NFJC omega calculation are slow and scale poorly with chain length so this omega may take minutes or longer to calculate even for modest chain lengths e.g. N=200.

Mathematical Definition

\[\hat{\omega}(k) = \hat{\omega}_{id}(k)+\frac{2}{N}\sum_{\tau=2}^{N-1}(N-\tau) [\hat{\omega}_{\tau}(k)-(\sin(k)/k)^{\tau}]\]
\[\tau = |\alpha-\beta|\]

Variable Definitions

  • \(\hat{\omega}(k)\)
    intra-molecular correlation function at wavenumber \(k\)
  • \(\hat{\omega}_{id}(k)\)
    intra-molecular correlation function for the ideal freely-jointed chain at wavenumber \(k\). Please see equation (15) of Reference [1] for the mathematical representation.
  • \(\hat{\omega}_{\tau}(k)\)
    Please see equations (17,18,21) of Reference [1] for the mathematical representation.
  • \(N\)
    number of repeat units in chain
  • \(\tau\)
    number of monomers along chain separating sites \(\alpha\) and \(\beta\).

Description

The non-overlapping freely-jointed chain is an adjustment to the ideal freely jointed chain model that includes the effects of the excluded volume of monomer segments (i.e. bonds are not free to rotate over all angles). This model assumes a constant bond length \(l\).

References

  1. Schweizer, K.S.; Curro, J.G.; Integral-Equation Theory of Polymer Melts - Intramolecular Structure, Local Order, and the Correlation Hole, Macromolecules, 1988, 21 (10), pp 3070 [link]

Example

import pyPRISM
import numpy as np
import matplotlib.pyplot as plt

#calculate Fourier space domain and omega values
domain = pyPRISM.domain(dr=0.1,length=1000)
omega  = pyPRISM.omega.NonOverlappingFreelyJointedChain(length=100,l=1.0)
x = domain.k
y = omega.calculate(x)

#plot using matplotlib
plt.plot(x,y)
plt.gca().set_xscale("log", nonposx='clip')
plt.gca().set_yscale("log", nonposy='clip')

plt.show()

#define a PRISM system and set omega(k) for type A
sys = pyPRISM.System(['A','B'],kT=1.0)
sys.domain = pyPRISM.Domain(dr=0.1,length=1024)
sys.omega['A','A']  = pyPRISM.omega.NonOverlappingFreelyJointedChain(length=100,l=1.0)
__init__(length, l)[source]

Constructor

Parameters:
  • length (float) – number of monomers/sites in non-overlapping freely-jointed chain
  • l (float) – bond length
calculate(k)[source]

Return value of \(\hat{\omega}\) at supplied \(k\)

Parameters:k (np.ndarray) – array of wavenumber values to calculate \(\omega\) at