SPC/E+CCl water potential. More...
#include <spce_ccl.hpp>
Classes | |
| struct | Water |
| Pointers to molecule of water. More... | |
Public Member Functions | |
| SpceCcl () | |
| SpceCcl (double cutoff, double switchingWidth) | |
| void | computeHH_O_ (const int nAtoms, const double R[], double F[], double &U, const double b[]) |
| Compute the forces and the energy. | |
| void | computeHH_O_ (const int nAtoms, const double R[], double F[], double &U, const double b[], const bool fixed[]) |
| Compute the forces and the energy (with fixed atom optimisation). | |
| char const * | getName () const |
| Name of the potential. | |
| Public Member Functions inherited from forcefields::Ccl | |
| Ccl () | |
| void | computeHH_O_ (const int nAtoms, const double R[], double F[], double &U, const double b[]) |
| Compute the forces and the energy. | |
| void | computeHH_O_ (const int nAtoms, const double R[], double F[], double &U, const double b[], const bool fixed[]) |
| Compute the forces and the energy (with fixed atom optimisation). | |
| char const * | getName () const |
| Name of the potential. | |
| Public Member Functions inherited from forcefields::PotentialBase | |
| PotentialBase () | |
| Non bond interaction cutoff. | |
| PotentialBase (double cutoff, double switchingWidth) | |
| virtual | ~PotentialBase () |
| double | getCutoff () const |
| void | setCutoff (double cutoff) |
| double | getSwitchingWidth () const |
| Width of the switching zone. | |
| void | setSwitchingWidth (double width) |
Protected Member Functions | |
| void | intramolecular (Water &water, double &U) |
| Interactions within a molecules. | |
| void | lennardJonesWithCutoff (Water &w1, Water &w2, double &U) |
| Interactions between two molecules. | |
| void | coulombWithCutoff (Water &w1, Water &w2, double &U) |
| Interactions between two molecules. | |
| void | coulombFull (Water &w1, Water &w2, double &U) |
| Interactions between two molecules. | |
| Protected Member Functions inherited from forcefields::Ccl | |
| Ccl (double cutoff, double switchingWidth) | |
| Constructor with cutoff for derived classes. | |
| void | intramolecular (double const rh1[], double const rh2[], double const ro[], double fh1[], double fh2[], double fo[], double &energy) |
| Interactions inside one molecules. | |
| void | initialiseRho (Vector3 const &v, Rho &r) |
| Initialise Rho. | |
| void | initialiseDtheta (Vector3 const &v1, Vector3 const &v2, Dtheta &dth, double const thetaEquilibrium) |
| Initialise Dtheta. | |
| void | intramolecular (Rho const &ro1, Rho const &ro2, Dtheta const &dth, double &energy, double fh1[], double fh2[], double fo[]) |
| Compute intramolecular energy and forces. | |
| Protected Member Functions inherited from forcefields::PotentialBase | |
| void | restrainAngle (double const r1[], double const r2[], double const r3[], double f1[], double f2[], double f3[], double &u, const double k, const double aeq) |
| Angular quadratic restraints. | |
| void | calculateCentre (double const r1[], double const r2[], double rc[]) |
| Calculate centre of two points. | |
| void | calculateCentre (double const r1[], double const r2[], double const r3[], double rc[]) |
| Calculate centre of three points. | |
| void | calculateWeightedCentre (double const w1, double const w2, double const w3, double const r1[], double const r2[], double const r3[], double rc[]) |
| Calculate barycentre. | |
| void | coulombWithCutoff (const double r1[], const double r2[], double f1[], double f2[], double &u, double const qq) |
| Coulomb interaction with single charge based cutoff. | |
| void | coulomb (const double r1[], const double r2[], double f1[], double f2[], double &u, double const qq) |
| Compute Coulomb interaction between two charges. | |
| void | coulomb (double distance, double &force, double &energy, double const qq) |
| Compute Coulomb interaction between two charges. | |
| void | spreadForce (double f1[], double f2[], double const fc[]) |
| Spread force on centre to other points. | |
| void | spreadForce (double f1[], double f2[], double f3[], double const fc[]) |
| Spread force on centre to other points. | |
| void | spreadWeightedForce (double const w1, double const w2, double const w3, double f1[], double f2[], double f3[], double const fc[]) |
| Spread force on barycentre to atoms. | |
| template<int N, class R, class F> | |
| void | addForces (ChargeGroup< N, R, F > const &g1, ChargeGroup< N, R, F > &g2) |
| Increment forces. | |
| template<int N, class R, class F> | |
| void | switching (ChargeGroup< N, R, F > &g1, ChargeGroup< N, R, F > &g2, double &energy, double cutoff, double switchingWidth) |
| void | computePt (int const nAtoms, double positions[], double forces[], double &energy, double const periods[], bool const fixed[]) |
| Potential for Platinum. | |
| void | restrainLength (const double R1[], const double R2[], double F1[], double F2[], double &u, const double k, const double r0) |
| Compute quadratic restraints between two atoms. | |
| void | lennardJones (double const distance, double &force, double &energy, double const epsilon, double const sigma) |
| Lennard-Jones 12-6 between two atoms. | |
| void | lennardJones (const double R1[], const double R2[], double F1[], double F2[], double &E, double const epsilon, double const sigma) |
| Lennard-Jones 12-6 between two atoms. | |
| void | lennardJonesWithCutoff (double const r1[], double const r2[], double f1[], double f2[], double &energy, double const epsilon, double const sigma) |
| Lennard Jones 12-6 Potential with cutoff. | |
| void | switching (double const distance, double &force, double &energy) |
| Smooth cutoff switch off. | |
| void | switching (double const r1[], double const r2[], double f1[], double f2[], double &energy) |
| Smooth cutoff switch off. | |
| double | applyPeriodicity1 (double r, int const axis) |
| Minimum image representation. | |
| void | applyPeriodicity1 (double r[]) |
| Minimum image representation. | |
| void | distance (const double x[], const double y[], double z[], double &z1, double &z2) |
| Distance vector, norm and norm square. | |
| void | distance (const double x[], const double y[], double z[], double &z1) |
| Distance. | |
| void | distance (const double x[], const double y[], double z[]) |
| Distance vector, norm. | |
| void | distance (const double x[], const double y[], double &z1) |
| Distance. | |
| void | distance (const double x[], const double y[], Vector3 &z) |
| Distance vector, norm and norm square. | |
| void | setPeriodicity (const double periods[]) |
| Set periodicity. | |
| double | unBreak1 (double const r, double const ref, int const axis) |
| Undo the separation of two atoms created by the periodic boundaries. | |
| void | unBreak1 (double r[], double const ref[]) |
| Undo the separation of two atoms created by the periodic boundaries. | |
Static Protected Attributes | |
| static const double | roh_ = 1.0 |
| Distance OH. | |
| static const double | theta_ = 1.91063 |
| Angle HOH. | |
| static const double | rhh_ = 1.63299 |
| Distance HH. | |
| static const double | charge_ = 0.4238 |
| Charge on one hydrogen. | |
| static const double | charge2_ = 0.179606 |
| Square of # charge_. | |
| static const double | A_ = 27291.6 |
| Lennard-Jones. | |
| static const double | B_ = 27.1223 |
| Lennard-Jones. | |
| static const double | sigma_ = 3.16556 |
| Lennard-Jones. See PotentialBase::lennardJones() for definition. | |
| static const double | epsilon_ = 0.00673853 |
| Lennard-Jones. See PotentialBase::lennardJones() for definition. | |
| static double const | polarisationEnergy_ = 0.0541015 |
| Polarisation correction. | |
| Static Protected Attributes inherited from forcefields::Ccl | |
| static double const | re_ = ::re_ |
| Distance OH at equilibrium. | |
| static double const | thetae_ = ::thetae_ |
| Distance OH at equilibrium. | |
| static const double | ONE_OVER_4_PI_EPSILON0 |
| static const double | EPSILON_PT = 0.68165797577788501 |
| Platinum Lennard-Jones. | |
| static const double | SIGMA_PT = 2.54 |
Private Member Functions | |
| void | initialiseRho (Vector3 const &v, Rho &r) |
| Initialise Rho. | |
| template<int H, int O> | |
| void | computeTemplate (const int nMolecules, const double(*const rh1)[H *3], const double(*const rh2)[H *3], const double(*const ro)[O *3], double(*const fh1)[H *3], double(*const fh2)[H *3], double(*const fo)[O *3], double &energy, double const b[], bool const (*const xh1)[H]=0, bool const (*const xh2)[H]=0, bool const (*const xo)[O]=0) |
| Compute forces and energy. | |
Additional Inherited Members | |
| static double | applyPeriodicity0 (double r, double const period) |
| Minimum image representation. | |
| static void | applyPeriodicity0 (double r[], double const periods[]) |
| Minimum image representation. | |
| Static Protected Member Functions inherited from forcefields::PotentialBase | |
| static void | divide (double v[], double const divisor) |
| Divide vector. | |
| static double * | crossProduct (const double v[], const double w[], double e[]) |
| Cross product. | |
| static double | dotProduct (double const v[], double const w[]) |
| Dot product. | |
| static void | multiply (double v[], double const factor) |
| Multiply vector. | |
| static double | norm (double const v[]) |
| Norm of 3D vector. | |
| static void | normalise (double v[]) |
| Normalise 3D vector \( \frac{\mathbf v}{ |\mathbf v|} \). | |
| static double | isoscelesBase (double length, double angle) |
| Calculate the base of an isosceles triangle. | |
| static double | epsilon (double const A, double const B) |
| Conversion for Lennard-Jones. | |
| static double | sigma (double const A, double const B) |
| Conversion for Lennard-Jones. | |
| static double | smithKongEpsilon (double sigma1, double epsilon1, double sigma2, double epsilon2) |
| Smith and Kong combination rules. | |
| static double | smithKongSigma (double sigma1, double epsilon1, double sigma2, double epsilon2) |
| Smith and Kong combination rules. | |
| static double | unBreak0 (double const r, double const ref, double const period) |
| Undo the separation of two atoms created by the periodic boundaries. | |
| static void | unBreak0 (double r[], double const ref[], double const periods[]) |
| Undo the separation of two atoms created by the periodic boundaries. | |
| Protected Attributes inherited from forcefields::PotentialBase | |
| double | cutoff_ |
| double | periods_ [3] |
| double | switchingWidth_ |
SPC/E+CCl water potential.
This potential combines potential SPC/E (for intermolecular interactions) with potential CCL (for intramolecular interactions). The functions and parameters for the SPC/E are from Berendsen, et al.. References for potential CCL can be found in in class Ccl 's documentation. The rules used to merge these two potentials were taken from Amira, et al.
The Missing Term in Effective Pair Potentials. HJC Berendsen, JR Grigera et al. J. Phys. Chem. 1987, vol. 91, p. 6269-6271
Derivation and evaluation of a flexible SPC model for liquid water. S Amira, D Spangberg, K Hermansson, Chemical Physics, 2004, vol. 303, p. 327-334
Definition at line 36 of file spce_ccl.hpp.
| SpceCcl::SpceCcl | ( | ) |
Definition at line 56 of file spce_ccl.cpp.
| SpceCcl::SpceCcl | ( | double | cutoff, |
| double | switchingWidth ) |
Definition at line 59 of file spce_ccl.cpp.
| void SpceCcl::computeHH_O_ | ( | const int | nAtoms, |
| const double | R[], | ||
| double | F[], | ||
| double & | U, | ||
| const double | b[] ) |
Compute the forces and the energy.
The order of the atoms is very important. For this function the order is H1, H1, H2, H2, etc ... , O1, O2, etc ... The numbers are for the molecules. The suffix HH_O_ is to reminds the ordering of the atoms. It indicates the position of the atoms of the first molecule, while the underscore marks the locations of other atoms.
| [in] | nAtoms | Number of Atoms. |
| [in] | R | coordinates. |
| [out] | F | Forces. |
| [out] | U | Potential energy. |
| [in] | b | Periodic boundaries. |
Definition at line 62 of file spce_ccl.cpp.
| void SpceCcl::computeHH_O_ | ( | const int | nAtoms, |
| const double | R[], | ||
| double | F[], | ||
| double & | U, | ||
| const double | b[], | ||
| const bool | fixed[] ) |
Compute the forces and the energy (with fixed atom optimisation).
In a simulation, some atoms may be fixed (not allowed to move). Computing the interaction between two fixed atoms is useless. When the potential knows which atoms are fixed, it can avoid these useless computations.
| [in] | nAtoms | Number of Atoms. |
| [in] | R | coordinates. |
| [out] | F | Forces. |
| [out] | U | Potential energy. |
| [in] | b | Periodic boundaries. |
| [in] | fixed | The length of the array must be equal to nAtoms in compute(). True when atom is fixed, false otherwise. |
Definition at line 67 of file spce_ccl.cpp.
|
private |
Compute forces and energy.
The function calculates and returns the energy and forces applied on each atom. The function has preconditions with which the user must comply before calling this function. The periodic boundaries must set with (setPeriodicity()). The content of and arrays fh1 , fh2 , fo must be zero for all elements.
Arrays ending in h1 are for the hydrogen one of the molecules and those ending in h2 for hydrogen 2.
| [in] | nMolecules | Number of molecules. |
| [in] | rh1, rh2, ro | Positions of hydrogens and oxygens. |
| [in,out] | fh1, fh2, fo | Forces on hydrogens and oxygens. |
| [in,out] | energy | Potential energy. |
| [in] | b | Periodic boundaries. |
| [in] | xh1, xh2, xo | Tell which atoms are fixed and which are movable. This parameter are optional. When provided, interaction between fixed atoms are skipped. The three arrays xh1, xh2, xo must be provided for the optimisation to work. |
Definition at line 175 of file spce_ccl.cpp.
Interactions between two molecules.
Coulomb interaction between two molecules. Full interaction (i.e. no cutoff).
| [in,out] | w1 | Molecule 1. |
| [in,out] | w2 | Molecule 2. |
| [in,out] | U | Add the potential energy to U. |
Definition at line 133 of file spce_ccl.cpp.
Interactions between two molecules.
Coulomb interaction between two molecules of water with molecules-based cutoff
| [in,out] | w1 | Molecule 1. |
| [in,out] | w2 | Molecule 2. |
| [in,out] | U | Add the potential energy to U. |
Definition at line 104 of file spce_ccl.cpp.
| char const * SpceCcl::getName | ( | ) | const |
Initialise Rho.
Compute Rho coordinates according to Amira's grafting rules:
\[ \rho^{SPC+CCL}=\frac{r-r^{SPC}_e}{r-r^{SPC}_e+r^{CCL}_e} \]
\[ \frac{d\rho}{d\mathbf r}=\frac{-r_e^{CCL}}{\left(r-r^{SPC}_e+r^{CCL}_e\right)^2}\frac{\mathbf r}{r} \]
Definition at line 148 of file spce_ccl.cpp.
|
protected |
Interactions within a molecules.
CCL interaction with Amira's grafting rules.
| [in,out] | water | Add forces. |
| [in,out] | U | Add energy to U. |
Definition at line 159 of file spce_ccl.cpp.
Interactions between two molecules.
Lennard Jones between oxygen only with cutoff
| [in,out] | w1 | Molecule of water 1. |
| [in,out] | w2 | Molecule of water 2. |
| [in,out] | U | Add the potential energy to U. |
Definition at line 86 of file spce_ccl.cpp.
|
staticprotected |
Lennard-Jones.
See PotentialBase::sigma() and PotentialBase::epsilon() for definition
Definition at line 160 of file spce_ccl.hpp.
|
staticprotected |
Lennard-Jones.
See PotentialBase::sigma() and PotentialBase::epsilon() for definition
Definition at line 163 of file spce_ccl.hpp.
|
staticprotected |
Square of # charge_.
Definition at line 157 of file spce_ccl.hpp.
|
staticprotected |
Charge on one hydrogen.
Definition at line 155 of file spce_ccl.hpp.
|
staticprotected |
Lennard-Jones. See PotentialBase::lennardJones() for definition.
Definition at line 167 of file spce_ccl.hpp.
|
staticprotected |
Polarisation correction.
Energy added per molecule (see original publication for definition).
Definition at line 170 of file spce_ccl.hpp.
|
staticprotected |
Distance HH.
Definition at line 153 of file spce_ccl.hpp.
|
staticprotected |
Distance OH.
Definition at line 149 of file spce_ccl.hpp.
|
staticprotected |
Lennard-Jones. See PotentialBase::lennardJones() for definition.
Definition at line 165 of file spce_ccl.hpp.
|
staticprotected |
Angle HOH.
Definition at line 151 of file spce_ccl.hpp.