Skip to content

Commit ba3d315

Browse files
committed
Merge branch 'python' of ssh://github.com/espressomd/espresso into lb_pull_scheme
2 parents f62111b + 4aa06e7 commit ba3d315

File tree

3 files changed

+54
-18
lines changed

3 files changed

+54
-18
lines changed

src/core/constraints/ShapeBasedConstraint.cpp

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,11 @@ ParticleForce ShapeBasedConstraint::force(Particle const &p,
9191

9292
if (dist > 0) {
9393
outer_normal_vec = -dist_vec / dist;
94-
pf = calc_non_bonded_pair_force(p, part_rep, ia_params, dist_vec, dist,
95-
get_ptr(coulomb_kernel));
94+
pf = calc_central_radial_force(p, part_rep, ia_params, dist_vec, dist) +
95+
calc_central_radial_charge_force(p, part_rep, ia_params, dist_vec,
96+
dist, get_ptr(coulomb_kernel)) +
97+
calc_non_central_force(p, part_rep, ia_params, dist_vec, dist);
98+
9699
#ifdef DPD
97100
if (thermo_switch & THERMO_DPD) {
98101
dpd_force =
@@ -103,8 +106,12 @@ ParticleForce ShapeBasedConstraint::force(Particle const &p,
103106
#endif
104107
} else if (m_penetrable && (dist <= 0)) {
105108
if ((!m_only_positive) && (dist < 0)) {
106-
pf = calc_non_bonded_pair_force(p, part_rep, ia_params, dist_vec, -dist,
107-
get_ptr(coulomb_kernel));
109+
pf =
110+
calc_central_radial_force(p, part_rep, ia_params, dist_vec, -dist) +
111+
calc_central_radial_charge_force(p, part_rep, ia_params, dist_vec,
112+
-dist, get_ptr(coulomb_kernel)) +
113+
calc_non_central_force(p, part_rep, ia_params, dist_vec, -dist);
114+
108115
#ifdef DPD
109116
if (thermo_switch & THERMO_DPD) {
110117
dpd_force = dpd_pair_force(p, part_rep, ia_params, dist_vec, dist,

src/core/forces_inline.hpp

Lines changed: 38 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -74,10 +74,11 @@
7474

7575
#include <tuple>
7676

77-
inline ParticleForce calc_non_bonded_pair_force(
78-
Particle const &p1, Particle const &p2, IA_parameters const &ia_params,
79-
Utils::Vector3d const &d, double const dist,
80-
Coulomb::ShortRangeForceKernel::kernel_type const *coulomb_kernel) {
77+
inline ParticleForce calc_central_radial_force(Particle const &p1,
78+
Particle const &p2,
79+
IA_parameters const &ia_params,
80+
Utils::Vector3d const &d,
81+
double const dist) {
8182

8283
ParticleForce pf{};
8384
double force_factor = 0;
@@ -133,19 +134,39 @@ inline ParticleForce calc_non_bonded_pair_force(
133134
#ifdef LJCOS2
134135
force_factor += ljcos2_pair_force_factor(ia_params, dist);
135136
#endif
136-
/* Thole damping */
137-
#ifdef THOLE
138-
pf.f += thole_pair_force(p1, p2, ia_params, d, dist, coulomb_kernel);
139-
#endif
140137
/* tabulated */
141138
#ifdef TABULATED
142139
force_factor += tabulated_pair_force_factor(ia_params, dist);
143140
#endif
141+
pf.f += force_factor * d;
142+
return pf;
143+
}
144+
145+
inline ParticleForce calc_central_radial_charge_force(
146+
Particle const &p1, Particle const &p2, IA_parameters const &ia_params,
147+
Utils::Vector3d const &d, double const dist,
148+
Coulomb::ShortRangeForceKernel::kernel_type const *coulomb_kernel) {
149+
150+
ParticleForce pf{};
151+
/* Thole damping */
152+
#ifdef THOLE
153+
pf.f += thole_pair_force(p1, p2, ia_params, d, dist, coulomb_kernel);
154+
#endif
155+
156+
return pf;
157+
}
158+
159+
inline ParticleForce calc_non_central_force(Particle const &p1,
160+
Particle const &p2,
161+
IA_parameters const &ia_params,
162+
Utils::Vector3d const &d,
163+
double const dist) {
164+
165+
ParticleForce pf{};
144166
/* Gay-Berne */
145167
#ifdef GAY_BERNE
146168
pf += gb_pair_force(p1.quat(), p2.quat(), ia_params, d, dist);
147169
#endif
148-
pf.f += force_factor * d;
149170
return pf;
150171
}
151172

@@ -189,10 +210,15 @@ inline void add_non_bonded_pair_force(
189210

190211
if (dist < ia_params.max_cut) {
191212
#ifdef EXCLUSIONS
192-
if (do_nonbonded(p1, p2))
213+
if (do_nonbonded(p1, p2)) {
214+
#endif
215+
pf += calc_central_radial_force(p1, p2, ia_params, d, dist);
216+
pf += calc_central_radial_charge_force(p1, p2, ia_params, d, dist,
217+
coulomb_kernel);
218+
pf += calc_non_central_force(p1, p2, ia_params, d, dist);
219+
#ifdef EXCLUSIONS
220+
}
193221
#endif
194-
pf += calc_non_bonded_pair_force(p1, p2, ia_params, d, dist,
195-
coulomb_kernel);
196222
}
197223

198224
/***********************************************/

src/core/pressure_inline.hpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,11 @@ inline void add_non_bonded_pair_virials(
6464
#endif
6565
{
6666
auto const &ia_params = get_ia_param(p1.type(), p2.type());
67-
auto const force =
68-
calc_non_bonded_pair_force(p1, p2, ia_params, d, dist, kernel_forces).f;
67+
auto const force = calc_central_radial_force(p1, p2, ia_params, d, dist).f +
68+
calc_central_radial_charge_force(p1, p2, ia_params, d,
69+
dist, kernel_forces)
70+
.f +
71+
calc_non_central_force(p1, p2, ia_params, d, dist).f;
6972
auto const stress = Utils::tensor_product(d, force);
7073

7174
auto const type1 = p1.mol_id();

0 commit comments

Comments
 (0)