2#include "math/libfunc.h"
12#if TINKER_REAL_SIZE == 8
14#elif TINKER_REAL_SIZE == 4
18 real diff = REAL_ABS(alphai - alphak);
20 if (diff < eps) alphai = 0.5f * (alphai + alphak);
22 real dampi = alphai * r;
23 real dampk = alphak * r;
24 real expi = REAL_EXP(-dampi);
25 real expk = REAL_EXP(-dampk);
27 real dampi2 = dampi * dampi;
28 real dampi3 = dampi * dampi2;
37 dmpi[1] = (1 + dampi) * expi;
38 dmpi[2] = (1 + dampi + dampi2 * div3) * expi;
39 dmpi[3] = (1 + dampi + 0.4f * dampi2 + dampi3 * div15) * expi;
48 real dampi4 = dampi2 * dampi2;
49 real dampi5 = dampi2 * dampi3;
55 dmpik[0] = (1.0f + 0.5f * dampi) * expi;
56 dmpik[1] = (1.0f + dampi + 0.5f * dampi2) * expi;
57 dmpik[2] = (1.0f + dampi + 0.5f * dampi2 + dampi3 * div6) * expi;
58 dmpik[3] = (1.0f + dampi + 0.5f * dampi2 + dampi3 * div6 + dampi4 * div30)
60 dmpik[4] = (1.0f + dampi + 0.5f * dampi2 + dampi3 * div6
61 + 4.0f * dampi4 * div105 + dampi5 * div210)
64 real dampi6 = dampi3 * dampi3;
67 const real div1890 = 1 / ((
real)1890);
68 dmpik[5] = (1.0f + dampi + 0.5f * dampi2 + dampi3 * div6
69 + 5.0f * dampi4 * div126 + 2.0f * dampi5 * div315
74 real dampi2 = dampi * dampi;
75 real dampi3 = dampi * dampi2;
76 real dampi4 = dampi2 * dampi2;
77 real dampk2 = dampk * dampk;
78 real dampk3 = dampk * dampk2;
79 real dampk4 = dampk2 * dampk2;
85 dmpk[1] = (1 + dampk) * expk;
86 dmpk[2] = (1 + dampk + dampk2 * div3) * expk;
87 dmpk[3] = (1 + dampk + 0.4f * dampk2 + dampk3 * div15) * expk;
90 real alphai2 = alphai * alphai;
91 real alphak2 = alphak * alphak;
92 real alphaik = ((alphak + alphai) * (alphak - alphai));
93 real termi = alphak2 / alphaik;
94 real termk = -alphai2 / alphaik;
96 dmpik[0] = termi * expi + termk * expk;
97 dmpik[1] = termi * (1 + dampi) * expi + termk * (1 + dampk) * expk;
98 dmpik[2] = termi * (1 + dampi + dampi2 * div3) * expi
99 + termk * (1 + dampk + dampk2 * div3) * expk;
100 dmpik[3] = termi * (1 + dampi + 0.4f * dampi2 + dampi3 * div15) * expi
101 + termk * (1 + dampk + 0.4f * dampk2 + dampk3 * div15) * expk;
103 * (1 + dampi + 3.0f * dampi2 * div7 + 2.0f * dampi3 * div21
107 * (1 + dampk + 3.0f * dampk2 * div7 + 2.0f * dampk3 * div21
114 const real div945 = 1 / ((
real)945);
115 real dampi5 = dampi2 * dampi3;
116 real dampk5 = dampk2 * dampk3;
118 * (1 + dampi + 4.0f * dampi2 * div9 + dampi3 * div9
119 + dampi4 * div63 + dampi5 * div945)
122 * (1 + dampk + 4.0f * dampk2 * div9 + dampk3 * div9
123 + dampk4 * div63 + dampk5 * div945)
134 real pgamma = REAL_MIN(ddi, ddk);
135 real damp = pdi * pdk;
136 real ratio = r * REAL_RECIP(damp);
137 damp = (damp == 0 ? 0 : pgamma * REAL_SQRT(ratio * ratio * ratio));
138 real damp2 = damp * damp;
139 real expdamp = REAL_EXP(-damp);
140 scale3 = 1 - expdamp;
141 scale5 = 1 - expdamp * (1 + (
real)0.5 * damp);
142 scale7 = 1 - expdamp * (1 + (
real)0.65 * damp + (
real)0.15 * damp2);
153 real pgamma = REAL_MIN(ddi, ddk);
154 real damp = pdi * pdk;
155 real ratio = r * REAL_RECIP(damp);
156 damp = (damp == 0 ? 0 : pgamma * REAL_SQRT(ratio * ratio * ratio));
157 real damp2 = damp * damp;
158 scale31 = REAL_EXP(-damp);
159 scale51 = scale31 * (1 + (
real)0.5 * damp);
160 scale71 = scale31 * (1 + (
real)0.65 * damp + (
real)0.15 * damp2);
161 real temp3 = (
real)1.5 * damp * scale31 * rr2;
162 real temp5 = (
real)0.5 * (1 + damp);
#define SEQ_ROUTINE
Definition: acc/seqdef.h:7
#define SEQ_CUDA
Definition: acc/seqdef.h:12
#define restrict
Definition: macro.h:51
#define CONSTEXPR
Definition: macro.h:61
float real
Definition: precision.h:80
__device__ void damp_gordon2(real *__restrict__ dmpik, real *__restrict__ dmpi, real *__restrict__ dmpk, real r, real alphai, real alphak)
Definition: dampaplus.h:9
__device__ void damp_aplus3g(real r, real rr2, real xr, real yr, real zr, real pdi, real ddi, real pdk, real ddk, real &__restrict__ scale31, real &__restrict__ scale51, real &__restrict__ scale71, real &__restrict__ rc31, real &__restrict__ rc32, real &__restrict__ rc33, real &__restrict__ rc51, real &__restrict__ rc52, real &__restrict__ rc53, real &__restrict__ rc71, real &__restrict__ rc72, real &__restrict__ rc73)
Definition: dampaplus.h:146
__device__ void damp_aplus3(real r, real pdi, real ddi, real pdk, real ddk, real &__restrict__ scale3, real &__restrict__ scale5, real &__restrict__ scale7)
Definition: dampaplus.h:131