Source code for pyPRISM.potential.WeeksChandlerAndersen

#!python
from __future__ import division,print_function
from pyPRISM.potential.LennardJones import LennardJones
import numpy as np
[docs]class WeeksChandlerAndersen(LennardJones): r'''Purely repulsive Weeks-Chandler-Andersen potential **Mathematical Definition** .. math:: U_{\alpha,\beta}(r) = \begin{cases} 4\epsilon_{\alpha,\beta}\left[\left(\frac{\sigma_{\alpha,\beta}}{r}\right)^{12.0} - \left(\frac{\sigma_{\alpha,\beta}}{r}\right)^{6.0}\right] + \epsilon_{\alpha,\beta} & r<r_{cut} 0.0 & r \geq r_{cut} \end{cases} .. math:: r_{cut} = 2^{1/6}\sigma_{\alpha,\beta} **Variable Definitions** :math:`\epsilon_{\alpha,\beta}` Strength of repulsion between sites :math:`\alpha` and :math:`\beta`. :math:`\sigma_{\alpha,\beta}` Length scale of interaction between sites :math:`\alpha` and :math:`\beta`. :math:`r` Distance between sites. :math:`r_{cut}` Cutoff distance where the value of the potential goes to zero. **Description** The Weeks-Chandler-Andersen potential for purely repulsive interactions. This potential is equivalent to the Lennard-Jones potential cut and shifted at the minimum of the potential, which occurs at :math:`r=2^{1/6}\sigma`. Example ------- .. code-block:: python import pyPRISM #Define a PRISM system and set the A-B interaction potential sys = pyPRISM.System(['A','B'],kT=1.0) sys.domain = pyPRISM.Domain(dr=0.1,length=1024) sys.potential['A','B'] = pyPRISM.potential.WeeksChandlerAndersen(epsilon=1.0,sigma=1.0) .. warning:: If sigma is specified such that it does not fall on the solution grid of the :class:`~pyPRISM.core.Domain.Domain` object specified in :class:`~pyPRISM.core.System.System`, then the sigma will effectively be rounded. A warning should be emitted during the construction of a :class:`~pyPRISM.core.PRISM.PRISM` object if this occurs. '''
[docs] def __init__(self,epsilon,sigma=None): r''' Constructor Arguments --------- epsilon: float Repulsive strength modifier sigma: float, *optional* Contact distance. If not specified, sigma will be calculated from the diameters specified in the :class:`~pyPRISM.core.System.System` object. ''' super(WeeksChandlerAndersen,self).__init__(epsilon=epsilon,sigma=sigma,rcut=True,shift=True)
def __repr__(self): return '<Potential: WeeksChandlerAndersen>'
[docs] def calculate(self,r): r'''Calculate value of potential Attributes ---------- r: float np.ndarray Array of pair distances at which to calculate potential values ''' assert (self.sigma is not None), 'Sigma must be set before evaluating potential!' self.rcut = self.sigma * 2**(1.0/6.0) return super(WeeksChandlerAndersen,self).calculate(r)