pyPRISM.omega.DiscreteKoyama module

class pyPRISM.omega.DiscreteKoyama.DiscreteKoyama(sigma, l, length, lp)[source]

Bases: pyPRISM.omega.Omega.Omega

Semi-flexible Koyama-based intra-molecular correlation function

Mathematial Definition

\[\hat{\omega}(k) = \frac{\sin(Bk)}{Bk}\exp(-A^2k^2)\]
\[A^2 = \frac{\langle r_{\alpha,\beta}^2 \rangle (1-C)}{6}\]
\[B^2 = C \langle r_{\alpha,\beta}^2 \rangle\]
\[C^2 = \frac{1}{2}\left(5-3\frac{ \langle r_{\alpha,\beta}^4 \rangle}{ \langle r_{\alpha,\beta}^2 \rangle}\right)\]

Variable Definitions

  • \(\hat{\omega}(k)\)
    intra-molecular correlation function at wavenumber \(k\)
  • \(\langle r_{\alpha,\beta}^2 \rangle\)
    second moment of the distance distribution between sites \(\alpha\) and \(\beta\). Please see equation (17) of the Reference [1] cited below for the mathematical representation.
  • \(\langle r_{\alpha,\beta}^4 \rangle\)
    fourth moment of the distance distribution between sites \(\alpha\) and \(\beta\). Please see equations (18-24) of the reference cited below for the mathematical representation.

Description

The discrete Koyama \(\hat{\omega}(k)\) was developed to represent a wormlike chain with semiflexibility. This scheme interpolates between the rigid-rod and the Gaussian chain limits to represent a chain with a given persistence length. This form for \(\hat{\omega}(k)\) has been shown to match the structure of molecular dynamics simulations of Kremer-Grest style bead-spring polymer models.

References

  1. Honnell, K.G., J.G. Curro, and K.S. Schweizer, LOCAL-STRUCTURE OF SEMIFLEXIBLE POLYMER MELTS. Macromolecules, 1990. 23(14): p. 3496-3505. [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.DiscreteKoyama(sigma=1.0,l=1.0,length=100,lp=1.43)
x = domain.k
y = omega.calculate(x)

#plot the results 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.DiscreteKoyama(sigma=1.0,l=1.0,length=100,lp=1.43)
__init__(sigma, l, length, lp)[source]

Constructor

Parameters:
  • sigma (float) – contact distance between sites (i.e. site diameter)
  • l (float) – bond length
  • length (float) – number of monomers/sites in the chain
  • lp (float) – persistence length of chain
calculate(k)[source]

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

Parameters:k (np.ndarray, float) – array of wavenumber values to calculate \(\omega\) at
cos_avg(epsilon)[source]

First moment of bond angle distribution

cos_sq_avg(epsilon)[source]

Second moment of bond angle distribution

density_correction(npts=1000)[source]

Correction for density due to non-physical overlaps

Note

See Equation 28 in Reference [1] for more details.

Parameters:npts (int) – number of points to use in numerical integral
density_correction_kernel(r)[source]

Correction for density due to non-physical overlaps

Note

See Equation 28 in Reference [1] for more details.

Parameters:r (np.ndarray, float) – array of real-space positions to calculate \(\omega\) at
kernel_base(n)[source]

Calculates the second and fourth moments of the site separate distance distributions

Note

See Equation 18 in Reference [1] for more details.

Parameters:n (int) – Integer separation distance along chain.
koyama_kernel_fourier(k, n)[source]

Kernel for calculating omega in Fourier-Space

Note

See Equation 16 in Reference [1] for more details.

Parameters:
  • k (np.ndarray, float) – array of wavenumber values to calculate \(\omega\) at
  • n (int) – Integer separation distance along chain.
koyama_kernel_real(r, n)[source]

Kernel for calculating omega in Real-Space

Note

See Equation 12 in Reference [1] for more details.

Parameters:
  • r (np.ndarray, float) – array of real-space positions to calculate \(\omega\) at
  • n (int) – Integer separation distance along chain.