OpenMPCD
WeeksChandlerAndersen_DistanceOffset.py
1 class WeeksChandlerAndersen_DistanceOffset:
2  r"""
3  A generalization of the Weeks-Chandler-Andersen (WCA) potential.
4 
5  The Weeks-Chandler-Andersen potential has been introduced by Weeks,
6  Chandler, and Andersen, in J. Chem. Phys. 54, 5237 (1971).
7  DOI: 10.1063/1.1674820
8 
9  This generalization introduces an offset \f$ D \f$ of the particle distance
10  \f$ r \f$. With \f$ \epsilon \f$ and \f$ sigma \f$ being parameters, the
11  interaction potential is given by
12  \f[
13  4 * \epsilon *
14  \left(
15  \left( \frac{ \sigma }{ r - D } \right)^{12}
16  -
17  \left( \frac{ \sigma }{ r - D } \right)^{6}
18  +
19  \frac{ 1 }{ 4 }
20  \right)
21  *
22  \theta \left( 2^{1/6} \sigma - r + D \right)
23  \f]
24  with \f$ \theta \left( x \right) \f$ being the Heaviside step function,
25  which is \f$ 1 \f$ if \f$ x > 0 \f$, and \f$ 0 \f$ otherwise.
26  """
27 
28  def __init__(self, epsilon, sigma, d):
29  r"""
30  The constructor.
31 
32  @throw TypeError
33  Throws if `epsilon`, `sigma`, or `d` are neither `int` nor
34  `float`.
35  @throw ValueError
36  Throws if `epsilon`, `sigma`, or `d` are negative.
37 
38  @param[in] epsilon
39  The \f$ \epsilon \f$ potential parameter, which must be
40  non-negative.
41  @param[in] sigma
42  The \f$ \sigma \f$ potential parameter, which must be
43  non-negative.
44  @param[in] d
45  The \f$ D \f$ potential parameter, which must be
46  non-negative.
47  """
48 
49  for var in [epsilon, sigma, d]:
50  if not isinstance(var, (int, float)):
51  raise TypeError()
52  if var < 0:
53  raise ValueError()
54 
55  self._epsilon = float(epsilon)
56  self._sigma = float(sigma)
57  self._d = float(d)
58 
59 
60  def getEpsilon(self):
61  r"""
62  Returns the \f$ \epsilon \f$ potential parameter as a `float`.
63  """
64 
65  return self._epsilon
66 
67 
68  def getSigma(self):
69  r"""
70  Returns the \f$ \sigma \f$ potential parameter as a `float`.
71  """
72 
73  return self._sigma
74 
75 
76  def getD(self):
77  r"""
78  Returns the \f$ D \f$ potential parameter as a `float`.
79  """
80 
81  return self._d
82 
83 
84  def getPotential(self, r):
85  r"""
86  Returns the potential for an input value of \f$ r \f$.
87 
88  @throw TypeError
89  Throws if `r` is neither `int` nor `float` or `Vector3DReal`.
90  @throw ValueError
91  Throws if `r` is negative.
92  @throw ValueError
93  Throws if `r` is smaller than or equal to \f$ D \f$.
94 
95  @param[in] r
96  The input value. It may be either an `int` or `float`, in
97  which case it must be non-negative. Alternatively, it may be
98  of type `Vector3DReal`, which is then euqivalent to calling
99  `getPotential(r.getLength())` instead.
100  """
101 
102  from MPCDAnalysis.Vector3DReal import Vector3DReal
103 
104  if isinstance(r, Vector3DReal):
105  r = r.getLength()
106  else:
107  if not isinstance(r, (int, float)):
108  raise TypeError()
109  if r < 0:
110  raise ValueError()
111 
112 
113  d = self.getD()
114 
115  if r <= d:
116  raise ValueError()
117 
118  sigma = self.getSigma()
119  sigma2 = sigma * sigma
120 
121  cutoff = 2 ** (1.0 / 6.0) * sigma
122 
123  if r - d >= cutoff:
124  return 0.0
125 
126  denominator2 = (r - d) * (r - d)
127  frac2 = sigma2 / denominator2
128  frac6 = frac2 * frac2 * frac2
129  frac12 = frac6 * frac6
130 
131  return 4 * self.getEpsilon() * (frac12 - frac6 + 1.0 / 4)
MPCDAnalysis.PairPotentials.WeeksChandlerAndersen_DistanceOffset.WeeksChandlerAndersen_DistanceOffset.__init__
def __init__(self, epsilon, sigma, d)
Definition: WeeksChandlerAndersen_DistanceOffset.py:49
MPCDAnalysis.PairPotentials.WeeksChandlerAndersen_DistanceOffset.WeeksChandlerAndersen_DistanceOffset.getEpsilon
def getEpsilon(self)
Definition: WeeksChandlerAndersen_DistanceOffset.py:66
MPCDAnalysis.PairPotentials.WeeksChandlerAndersen_DistanceOffset.WeeksChandlerAndersen_DistanceOffset._epsilon
_epsilon
Definition: WeeksChandlerAndersen_DistanceOffset.py:57
MPCDAnalysis.PairPotentials.WeeksChandlerAndersen_DistanceOffset.WeeksChandlerAndersen_DistanceOffset._sigma
_sigma
Definition: WeeksChandlerAndersen_DistanceOffset.py:58
MPCDAnalysis.PairPotentials.WeeksChandlerAndersen_DistanceOffset.WeeksChandlerAndersen_DistanceOffset.getD
def getD(self)
Definition: WeeksChandlerAndersen_DistanceOffset.py:84
MPCDAnalysis.PairPotentials.WeeksChandlerAndersen_DistanceOffset.WeeksChandlerAndersen_DistanceOffset.getSigma
def getSigma(self)
Definition: WeeksChandlerAndersen_DistanceOffset.py:75
MPCDAnalysis.Vector3DReal
Definition: Vector3DReal.py:1
MPCDAnalysis.PairPotentials.WeeksChandlerAndersen_DistanceOffset.WeeksChandlerAndersen_DistanceOffset._d
_d
Definition: WeeksChandlerAndersen_DistanceOffset.py:59
MPCDAnalysis.PairPotentials.WeeksChandlerAndersen_DistanceOffset.WeeksChandlerAndersen_DistanceOffset.getPotential
def getPotential(self, r)
Definition: WeeksChandlerAndersen_DistanceOffset.py:106