6#include "seq/damp_hippo.h"
20 real r = REAL_SQRT(r2);
21 real invr1 = REAL_RECIP(r);
22 real rr2 = invr1 * invr1;
25 real dmpi[4], dmpk[4];
27 damp_dir(dmpi, dmpk, r, alphai, alphak);
29 if CONSTEXPR (eq<ETYP, EWALD>()) damp_ewald<4>(bn, r, invr1, rr2, aewald);
33 real rr5 = 3 * rr1 * rr2 * rr2;
34 real rr7 = 15 * rr1 * rr2 * rr2 * rr2;
36 real dir = dix * xr + diy * yr + diz * zr;
37 real qix = qixx * xr + qixy * yr + qixz * zr;
38 real qiy = qixy * xr + qiyy * yr + qiyz * zr;
39 real qiz = qixz * xr + qiyz * yr + qizz * zr;
40 real qir = qix * xr + qiy * yr + qiz * zr;
41 real dkr = dkx * xr + dky * yr + dkz * zr;
42 real qkx = qkxx * xr + qkxy * yr + qkxz * zr;
43 real qky = qkxy * xr + qkyy * yr + qkyz * zr;
44 real qkz = qkxz * xr + qkyz * yr + qkzz * zr;
45 real qkr = qkx * xr + qky * yr + qkz * zr;
47 real3 dixyz = make_real3(dix, diy, diz);
48 real3 dkxyz = make_real3(dkx, dky, dkz);
49 real3 qixyz = make_real3(qix, qiy, qiz);
50 real3 qkxyz = make_real3(qkx, qky, qkz);
51 real3 dr = make_real3(xr, yr, zr);
56 real rr3i, rr5i, rr7i;
57 real rr3k, rr5k, rr7k;
59 rr3i = bn[1] - (1 - dscale * dmpi[1]) * rr3;
60 rr5i = bn[2] - (1 - dscale * dmpi[2]) * rr5;
61 rr7i = bn[3] - (1 - dscale * dmpi[3]) * rr7;
62 rr3k = bn[1] - (1 - dscale * dmpk[1]) * rr3;
63 rr5k = bn[2] - (1 - dscale * dmpk[2]) * rr5;
64 rr7k = bn[3] - (1 - dscale * dmpk[3]) * rr7;
65 rr3 = bn[1] - (1 - dscale) * rr3;
66 }
else if CONSTEXPR (eq<ETYP, NON_EWALD>()) {
67 rr3i = dscale * dmpi[1] * rr3;
68 rr5i = dscale * dmpi[2] * rr5;
69 rr7i = dscale * dmpi[3] * rr7;
70 rr3k = dscale * dmpk[1] * rr3;
71 rr5k = dscale * dmpk[2] * rr5;
72 rr7k = dscale * dmpk[3] * rr7;
75 c1 = -(rr3 * corek + rr3k * valk - rr5k * dkr + rr7k * qkr);
76 inci = c1 * dr - rr3k * dkxyz + 2 * rr5k * qkxyz;
81 c1 = (rr3 * corei + rr3i * vali + rr5i * dir + rr7i * qir);
82 inck = c1 * dr - rr3i * dixyz - 2 * rr5i * qixyz;
88#pragma acc routine seq
99 real r = REAL_SQRT(r2);
100 real invr1 = REAL_RECIP(r);
101 real rr2 = invr1 * invr1;
107 scale3 = wscale * dmpik[1];
108 scale5 = wscale * dmpik[2];
111 real rr3 = rr1 * rr2;
112 real rr5 = rr1 * rr2 * rr2;
115 damp_ewald<3>(bn, r, invr1, rr2, aewald);
118 bn[1] += (1 - scale3) * rr3;
119 bn[2] -= 3 * (1 - scale5) * rr5;
120 }
else if CONSTEXPR (eq<ETYP, NON_EWALD>()) {
121 bn[1] = -scale3 * rr3;
122 bn[2] = 3 * scale5 * rr5;
127 real3 dr = make_real3(xr, yr, zr);
128 real3 uid = make_real3(uindi0, uindi1, uindi2);
129 real3 ukd = make_real3(uindk0, uindk1, uindk2);
131 coef = bn[2] *
dot3(dr, ukd);
132 inci = coef * dr + bn[1] * ukd;
137 coef = bn[2] *
dot3(dr, uid);
138 inck = coef * dr + bn[1] * uid;
float x
Definition: acc/realndef.h:49
float y
Definition: acc/realndef.h:49
float z
Definition: acc/realndef.h:49
#define SEQ_CUDA
Definition: acc/seqdef.h:12
Definition: acc/realndef.h:48
#define restrict
Definition: macro.h:51
#define CONSTEXPR
Definition: macro.h:61
__device__ real dot3(real3 a, real3 b)
Definition: realn.h:84
float real
Definition: precision.h:80
__device__ void damp_mut(real *__restrict__ dmpik, real r, real alphai, real alphak)
Definition: damp_hippo.h:410
__device__ void damp_dir(real *__restrict__ dmpi, real *__restrict__ dmpk, real r, real alphai, real alphak)
Definition: damp_hippo.h:403
__device__ void pair_dfield_chgpen(real r2, real xr, real yr, real zr, real dscale, real ci, real dix, real diy, real diz, real corei, real vali, real alphai, real qixx, real qixy, real qixz, real qiyy, real qiyz, real qizz, real ck, real dkx, real dky, real dkz, real corek, real valk, real alphak, real qkxx, real qkxy, real qkxz, real qkyy, real qkyz, real qkzz, real aewald, real &__restrict__ fidx, real &__restrict__ fidy, real &__restrict__ fidz, real &__restrict__ fkdx, real &__restrict__ fkdy, real &__restrict__ fkdz)
Definition: pair_field_chgpen.h:12
__device__ void pair_ufield_chgpen(real r2, real xr, real yr, real zr, real wscale, real uindi0, real uindi1, real uindi2, real corei, real vali, real alphai, real uindk0, real uindk1, real uindk2, real corek, real valk, real alphak, real aewald, real &__restrict__ fidx, real &__restrict__ fidy, real &__restrict__ fidz, real &__restrict__ fkdx, real &__restrict__ fkdy, real &__restrict__ fkdz)
Definition: pair_field_chgpen.h:91