2#include "math/libfunc.h"
22 constexpr bool do_e = Ver::e;
23 constexpr bool do_g = Ver::g;
24 constexpr bool do_v = Ver::v;
26 if CONSTEXPR (do_v) vxx = 0, vyx = 0, vzx = 0, vyy = 0, vzy = 0, vzz = 0;
28 const int ia =
ipit[i][0];
29 const int ib =
ipit[i][1];
30 const int ic =
ipit[i][2];
31 const int id =
ipit[i][3];
32 const int ie =
ipit[i][4];
33 const int ig =
ipit[i][5];
66 real xip = yad * zbd - ybd * zad + xic;
67 real yip = zad * xbd - zbd * xad + yic;
68 real zip = xad * ybd - xbd * yad + zic;
69 real xiq = yec * zgc - ygc * zec + xid;
70 real yiq = zec * xgc - zgc * xec + yid;
71 real ziq = xec * ygc - xgc * yec + zid;
82 real xt = ycp * zdc - ydc * zcp;
83 real yt = zcp * xdc - zdc * xcp;
84 real zt = xcp * ydc - xdc * ycp;
85 real xu = ydc * zqd - yqd * zdc;
86 real yu = zdc * xqd - zqd * xdc;
87 real zu = xdc * yqd - xqd * ydc;
88 real xtu = yt * zu - yu * zt;
89 real ytu = zt * xu - zu * xt;
90 real ztu = xt * yu - xu * yt;
91 real rt2 = xt * xt + yt * yt + zt * zt;
92 real ru2 = xu * xu + yu * yu + zu * zu;
93 real rtru = REAL_SQRT(rt2 * ru2);
96 real rdc = REAL_SQRT(xdc * xdc + ydc * ydc + zdc * zdc);
97 real cosine = (xt * xu + yt * yu + zt * zu) * REAL_RECIP(rtru);
98 real sine = (xdc * xtu + ydc * ytu + zdc * ztu) * REAL_RECIP(rdc * rtru);
108 real cosine2 = cosine * cosine - sine * sine;
109 real sine2 = 2 * cosine * sine;
110 real phi2 = 1 + (cosine2 * c2 + sine2 * s2);
117 real dphi2 = 2 * (cosine2 * s2 - sine2 * c2);
122 real xdp = xid - xip;
123 real ydp = yid - yip;
124 real zdp = zid - zip;
125 real xqc = xiq - xic;
126 real yqc = yiq - yic;
127 real zqc = ziq - zic;
128 real rt2rdc_inv = REAL_RECIP(rt2 * rdc);
129 real ru2rdc_inv = REAL_RECIP(ru2 * rdc);
130 real dedxt = dedphi * (yt * zdc - ydc * zt) * rt2rdc_inv;
131 real dedyt = dedphi * (zt * xdc - zdc * xt) * rt2rdc_inv;
132 real dedzt = dedphi * (xt * ydc - xdc * yt) * rt2rdc_inv;
133 real dedxu = -dedphi * (yu * zdc - ydc * zu) * ru2rdc_inv;
134 real dedyu = -dedphi * (zu * xdc - zdc * xu) * ru2rdc_inv;
135 real dedzu = -dedphi * (xu * ydc - xdc * yu) * ru2rdc_inv;
139 real dedxip = zdc * dedyt - ydc * dedzt;
140 real dedyip = xdc * dedzt - zdc * dedxt;
141 real dedzip = ydc * dedxt - xdc * dedyt;
142 real dedxic = ydp * dedzt - zdp * dedyt + zqd * dedyu - yqd * dedzu;
143 real dedyic = zdp * dedxt - xdp * dedzt + xqd * dedzu - zqd * dedxu;
144 real dedzic = xdp * dedyt - ydp * dedxt + yqd * dedxu - xqd * dedyu;
145 real dedxid = zcp * dedyt - ycp * dedzt + yqc * dedzu - zqc * dedyu;
146 real dedyid = xcp * dedzt - zcp * dedxt + zqc * dedxu - xqc * dedzu;
147 real dedzid = ycp * dedxt - xcp * dedyt + xqc * dedyu - yqc * dedxu;
148 real dedxiq = zdc * dedyu - ydc * dedzu;
149 real dedyiq = xdc * dedzu - zdc * dedxu;
150 real dedziq = ydc * dedxu - xdc * dedyu;
154 real dedxia = ybd * dedzip - zbd * dedyip;
155 real dedyia = zbd * dedxip - xbd * dedzip;
156 real dedzia = xbd * dedyip - ybd * dedxip;
157 real dedxib = zad * dedyip - yad * dedzip;
158 real dedyib = xad * dedzip - zad * dedxip;
159 real dedzib = yad * dedxip - xad * dedyip;
160 real dedxie = ygc * dedziq - zgc * dedyiq;
161 real dedyie = zgc * dedxiq - xgc * dedziq;
162 real dedzie = xgc * dedyiq - ygc * dedxiq;
163 real dedxig = zec * dedyiq - yec * dedziq;
164 real dedyig = xec * dedziq - zec * dedxiq;
165 real dedzig = yec * dedxiq - xec * dedyiq;
167 dedxic += (dedxip - dedxie - dedxig);
168 dedyic += (dedyip - dedyie - dedyig);
169 dedzic += (dedzip - dedzie - dedzig);
170 dedxid += (dedxiq - dedxia - dedxib);
171 dedyid += (dedyiq - dedyia - dedyib);
172 dedzid += (dedziq - dedzia - dedzib);
194 real vxterm = dedxid + dedxia + dedxib;
195 real vyterm = dedyid + dedyia + dedyib;
196 real vzterm = dedzid + dedzia + dedzib;
197 vxx = xdc * vxterm + xcp * dedxip - xqd * dedxiq;
198 vyx = ydc * vxterm + ycp * dedxip - yqd * dedxiq;
199 vzx = zdc * vxterm + zcp * dedxip - zqd * dedxiq;
200 vyy = ydc * vyterm + ycp * dedyip - yqd * dedyiq;
201 vzy = zdc * vyterm + zcp * dedyip - zqd * dedyiq;
202 vzz = zdc * vzterm + zcp * dedzip - zqd * dedziq;
void atomic_add(T value, T *buffer, size_t offset=0)
Definition: acc/adddef.h:14
#define SEQ_CUDA
Definition: acc/seqdef.h:12
#define restrict
Definition: macro.h:51
#define CONSTEXPR
Definition: macro.h:61
real * z
Current coordinates used in energy evaluation and neighbor lists.
real * x
Number of the trajectory frames.
real * y
Current coordinates used in energy evaluation and neighbor lists.
float real
Definition: precision.h:80
fixed grad_prec
Definition: precision.h:103
__device__ void dk_pitors(real &__restrict__ e, real &__restrict__ vxx, real &__restrict__ vyx, real &__restrict__ vzx, real &__restrict__ vyy, real &__restrict__ vzy, real &__restrict__ vzz, grad_prec *__restrict__ deptx, grad_prec *__restrict__ depty, grad_prec *__restrict__ deptz, real ptorunit, int i, const int(*__restrict__ ipit)[6], const real *__restrict__ kpit, const real *__restrict__ x, const real *__restrict__ y, const real *__restrict__ z)
Definition: pitors.h:10