Loading...
Searching...
No Matches
ccl.hpp
Go to the documentation of this file.
1/*
2** This file is part of eOn.
3**
4** SPDX-License-Identifier: BSD-3-Clause
5**
6** Copyright (c) 2010--present, eOn Development Team
7** All rights reserved.
8**
9** Repo:
10** https://github.com/TheochemUI/eOn
11*/
12#pragma once
13#include "potential_base.hpp"
14
21namespace forcefields {
22class Ccl : public PotentialBase {
23public:
24 Ccl() {}
25 void computeHH_O_(const int nAtoms, const double R[], double F[], double &U,
26 const double b[]);
27 void computeHH_O_(const int nAtoms, const double R[], double F[], double &U,
28 const double b[], const bool fixed[]);
29 char const *getName() const;
30
31protected:
32 Ccl(double cutoff, double switchingWidth);
33 void intramolecular(double const rh1[], double const rh2[], double const ro[],
34 double fh1[], double fh2[], double fo[], double &energy);
36 struct Rho {
37 double _1;
38 double _2;
39 double _3;
40 double n[3];
41 };
42
43 struct Dtheta {
44 double _1;
45 double _2;
46 double _3;
47 double n1[3];
49 double n2[3];
50 };
51 void initialiseRho(Vector3 const &v, Rho &r);
52 void initialiseDtheta(Vector3 const &v1, Vector3 const &v2, Dtheta &dth,
53 double const thetaEquilibrium);
54 void intramolecular(Rho const &ro1, Rho const &ro2, Dtheta const &dth,
55 double &energy, double fh1[], double fh2[], double fo[]);
56 static double const re_;
57 static double const thetae_;
58
59private:
60 template <int H, int O>
61 void computeTemplate(const int nMolecules, const double (*const rh1)[H * 3],
62 const double (*const rh2)[H * 3],
63 const double (*const ro)[O * 3],
64 double (*const fh1)[H * 3], double (*const fh2)[H * 3],
65 double (*const fo)[O * 3], double &energy,
66 double const b[], bool const (*const xh1)[H] = 0,
67 bool const (*const xh2)[H] = 0,
68 bool const (*const xo)[O] = 0);
69 void ro_2(Rho const &ro1, Rho const &ro2, double &energy, double &d1,
70 double &d2);
71 void ro1_ro2(Rho const &s1, Rho const &s2, double &energy, double &d1,
72 double &d2);
73 void ro_theta(Rho const &s1, Rho const &s2, Dtheta const &s3, double &energy,
74 double &d1, double &d2, double &d3);
75 void theta_2(Dtheta const &s3, double &energy, double &d3);
76
77 void ro_3(Rho const &s1, Rho const &s2, double &energy, double &d1,
78 double &d2);
79 void ro_ro1_ro2(Rho const &s1, Rho const &s2, double &energy, double &d1,
80 double &d2);
81 void ro_2_theta(Rho const &s1, Rho const &s2, Dtheta const &s3,
82 double &energy, double &d1, double &d2, double &d3);
83 void ro1_ro2_theta(Rho const &s1, Rho const &s2, Dtheta const &s3,
84 double &energy, double &d1, double &d2, double &d3);
85 void ro_theta_2(Rho const &s1, Rho const &s2, Dtheta const &s3,
86 double &energy, double &d1, double &d2, double &d3);
87 void theta_3(Dtheta const &s3, double &energy, double &d3);
88
89 void ro_4(Rho const &s1, Rho const &s2, double &energy, double &d1,
90 double &d2);
91 void ro1_ro2_ro_2(Rho const &s1, Rho const &s2, double &energy, double &d1,
92 double &d2);
93 void ro1_2_ro2_2(Rho const &s1, Rho const &s2, double &energy, double &d1,
94 double &d2);
95 void ro_3_theta(Rho const &s1, Rho const &s2, Dtheta const &s3,
96 double &energy, double &d1, double &d2, double &d3);
97 void ro_ro1_ro2_theta(Rho const &s1, Rho const &s2, Dtheta const &s3,
98 double &energy, double &d1, double &d2, double &d3);
99 void ro_2_theta_2(Rho const &s1, Rho const &s2, Dtheta const &s3,
100 double &energy, double &d1, double &d2, double &d3);
101 void ro1_ro2_theta_2(Rho const &s1, Rho const &s2, Dtheta const &s3,
102 double &energy, double &d1, double &d2, double &d3);
103 // ro_theta_3 = 0
104 void theta_4(Dtheta const &s3, double &energy, double &d3);
105};
106} // namespace forcefields
static double const re_
Distance OH at equilibrium.
Definition ccl.hpp:56
static double const thetae_
Distance OH at equilibrium.
Definition ccl.hpp:57
void theta_4(Dtheta const &s3, double &energy, double &d3)
Definition ccl.cpp:504
void ro_3(Rho const &s1, Rho const &s2, double &energy, double &d1, double &d2)
Definition ccl.cpp:400
void theta_3(Dtheta const &s3, double &energy, double &d3)
Definition ccl.cpp:438
void ro_ro1_ro2_theta(Rho const &s1, Rho const &s2, Dtheta const &s3, double &energy, double &d1, double &d2, double &d3)
Definition ccl.cpp:475
void ro_theta(Rho const &s1, Rho const &s2, Dtheta const &s3, double &energy, double &d1, double &d2, double &d3)
Definition ccl.cpp:375
void ro_3_theta(Rho const &s1, Rho const &s2, Dtheta const &s3, double &energy, double &d1, double &d2, double &d3)
Definition ccl.cpp:467
void theta_2(Dtheta const &s3, double &energy, double &d3)
Energy and derivatives for Term 4.
Definition ccl.cpp:392
void ro1_ro2_theta(Rho const &s1, Rho const &s2, Dtheta const &s3, double &energy, double &d1, double &d2, double &d3)
Definition ccl.cpp:422
void ro1_ro2(Rho const &s1, Rho const &s2, double &energy, double &d1, double &d2)
Definition ccl.cpp:368
char const * getName() const
Name of the potential.
Definition ccl.cpp:166
void initialiseRho(Vector3 const &v, Rho &r)
Initialise Rho.
Definition ccl.cpp:199
void initialiseDtheta(Vector3 const &v1, Vector3 const &v2, Dtheta &dth, double const thetaEquilibrium)
Initialise Dtheta.
Definition ccl.cpp:209
void intramolecular(double const rh1[], double const rh2[], double const ro[], double fh1[], double fh2[], double fo[], double &energy)
Interactions inside one molecules.
Definition ccl.cpp:238
void ro_2(Rho const &ro1, Rho const &ro2, double &energy, double &d1, double &d2)
Energy and derivatives for Term 1.
Definition ccl.cpp:361
void ro_4(Rho const &s1, Rho const &s2, double &energy, double &d1, double &d2)
Definition ccl.cpp:446
void ro_2_theta_2(Rho const &s1, Rho const &s2, Dtheta const &s3, double &energy, double &d1, double &d2, double &d3)
Definition ccl.cpp:487
void ro_2_theta(Rho const &s1, Rho const &s2, Dtheta const &s3, double &energy, double &d1, double &d2, double &d3)
Definition ccl.cpp:414
void computeHH_O_(const int nAtoms, const double R[], double F[], double &U, const double b[])
Compute the forces and the energy.
Definition ccl.cpp:130
void ro1_ro2_ro_2(Rho const &s1, Rho const &s2, double &energy, double &d1, double &d2)
Definition ccl.cpp:453
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.
Definition ccl.cpp:323
void ro_theta_2(Rho const &s1, Rho const &s2, Dtheta const &s3, double &energy, double &d1, double &d2, double &d3)
Definition ccl.cpp:430
void ro1_ro2_theta_2(Rho const &s1, Rho const &s2, Dtheta const &s3, double &energy, double &d1, double &d2, double &d3)
Definition ccl.cpp:495
void ro_ro1_ro2(Rho const &s1, Rho const &s2, double &energy, double &d1, double &d2)
Definition ccl.cpp:407
void ro1_2_ro2_2(Rho const &s1, Rho const &s2, double &energy, double &d1, double &d2)
Definition ccl.cpp:460
PotentialBase()
Non bond interaction cutoff.
Basic tools to write potentials.
parameter in paper.
Definition ccl.hpp:43
double n2[3]
Same as n1 but for hydrogen 2.
Definition ccl.hpp:49
double _2
(Delta theta)^2
Definition ccl.hpp:45
double n1[3]
Convert derivative to force.
Definition ccl.hpp:47
double _3
(Delta theta)^3
Definition ccl.hpp:46
double _1
Delta theta.
Definition ccl.hpp:44
parameter in paper.
Definition ccl.hpp:36
double _2
rho^2
Definition ccl.hpp:38
double _3
rho^3
Definition ccl.hpp:39
double n[3]
Convert derivative to force.
Definition ccl.hpp:40
double _1
rho^1
Definition ccl.hpp:37