67 auto const dui = d * ui;
68 auto const duj = d * uj;
69 auto const rui = r * ui;
70 auto const ruj = r * uj;
71 auto const uij = ui * uj;
72 auto const oo1 = (dui + duj) / (1 + chi1 * uij);
73 auto const oo2 = (dui - duj) / (1 - chi1 * uij);
74 auto const tt1 = (dui + duj) / (1 + chi2 * uij);
75 auto const tt2 = (dui - duj) / (1 - chi2 * uij);
76 auto const o1 = sqr(rui + ruj) / (1 + chi1 * uij);
77 auto const o2 = sqr(rui - ruj) / (1 - chi1 * uij);
78 auto const t1 = sqr(rui + ruj) / (1 + chi2 * uij);
79 auto const t2 = sqr(rui - ruj) / (1 - chi2 * uij);
80 auto const Brhi1 = chi1 * (o1 + o2);
81 auto const Brhi2 = chi2 * (t1 + t2);
83 auto const e1 = 1. / (1. - sqr(chi1 * uij));
84 auto const e2 = 1. - 0.5 * Brhi2;
85 auto const e = 4 * e0 * pow(e1, 0.5 * nu) * pow(e2, mu);
87 auto const s1 = 1. / sqrt(1. - 0.5 * Brhi1);
88 auto const s = s0 * s1;
90 auto Koef2 = int_pow<3>(s1) * 0.5;
92 auto const X = s0 / (dist - s + s0);
93 auto const Xcut = s0 / (ia_params.
gay_berne.
cut - s + s0);
95 auto const X6 = int_pow<6>(X);
96 auto const Xcut6 = int_pow<6>(Xcut);
98 auto const Bra12 = 6 * X6 * X * (2 * X6 - 1);
99 auto const Bra12Cut = 6 * Xcut6 * Xcut * (2 * Xcut6 - 1);
100 auto const Brack = X6 * (X6 - 1);
101 auto const BrackCut = Xcut6 * (Xcut6 - 1);
105 auto const dU_dr = e *
106 (Koef1 * Brhi2 * (Brack - BrackCut) -
107 Koef2 * Brhi1 * (Bra12 - Bra12Cut) - Bra12 * dist / s0) /
110 Koef1 *= chi2 / sqr(dist);
111 Koef2 *= chi1 / sqr(dist);
113 auto const dU_da = e * (Koef1 * (tt1 + tt2) * (BrackCut - Brack) +
114 Koef2 * (oo1 + oo2) * (Bra12 - Bra12Cut));
115 auto const dU_db = e * (Koef1 * (tt2 - tt1) * (Brack - BrackCut) +
116 Koef2 * (oo1 - oo2) * (Bra12 - Bra12Cut));
118 e * ((Brack - BrackCut) * (nu * e1 * sqr(chi1) * uij +
119 0.5 * Koef1 * chi2 * (sqr(tt1) - sqr(tt2))) -
120 (Bra12 - Bra12Cut) * 0.5 * Koef2 * chi1 * (sqr(oo1) - sqr(oo2)));
123 auto const G2 = -dU_da * d - dU_dc * uj;
153 auto const uij = ui * uj;
154 auto const rui = r * ui;
155 auto const ruj = r * uj;
157 auto const o1 = sqr(rui + ruj) / (1 + chi1 * uij);
158 auto const o2 = sqr(rui - ruj) / (1 - chi1 * uij);
159 auto const t1 = sqr(rui + ruj) / (1 + chi2 * uij);
160 auto const t2 = sqr(rui - ruj) / (1 - chi2 * uij);
162 auto const e1 = std::pow(1. - sqr(chi1 * uij), -0.5 * nu);
163 auto const e2 = std::pow(1. - 0.5 * chi2 * (t1 + t2), mu);
164 auto const e = e0 * e1 * e2;
166 auto const s1 = 1. / std::sqrt(1. - 0.5 * chi1 * (o1 + o2));
167 auto const s = s0 * s1;
169 auto r_eff = [=](
double r) {
return (r - s + s0) / s0; };
170 auto E = [=](
double r) {
171 return 4. * e * (int_pow<12>(1. / r) - int_pow<6>(1. / r));
174 return E(r_eff(dist)) - E(r_eff(ia_params.
gay_berne.
cut));
double gb_pair_energy(Utils::Quaternion< double > const &qi, Utils::Quaternion< double > const &qj, IA_parameters const &ia_params, Utils::Vector3d const &d, double dist)
Calculate Gay-Berne energy.
ParticleForce gb_pair_force(Utils::Vector3d const &ui, Utils::Vector3d const &uj, IA_parameters const &ia_params, Utils::Vector3d const &d, double dist)
Calculate Gay-Berne force and torques.
Force information on a particle.