3#include "math/libfunc.h"
24 constexpr bool do_e = Ver::e;
25 constexpr bool do_g = Ver::g;
26 constexpr bool do_v = Ver::v;
28 if CONSTEXPR (do_v) vxx = 0, vyx = 0, vzx = 0, vyy = 0, vzy = 0, vzz = 0;
30 const int ia =
iiprop[i][0];
31 const int ib =
iiprop[i][1];
32 const int ic =
iiprop[i][2];
33 const int id =
iiprop[i][3];
59 real xt = yba * zcb - ycb * zba;
60 real yt = zba * xcb - zcb * xba;
61 real zt = xba * ycb - xcb * yba;
62 real xu = ycb * zdc - ydc * zcb;
63 real yu = zcb * xdc - zdc * xcb;
64 real zu = xcb * ydc - xdc * ycb;
65 real xtu = yt * zu - yu * zt;
66 real ytu = zt * xu - zu * xt;
67 real ztu = xt * yu - xu * yt;
68 real rt2 = xt * xt + yt * yt + zt * zt;
69 real ru2 = xu * xu + yu * yu + zu * zu;
70 real rtru = REAL_SQRT(rt2 * ru2);
73 real rcb = REAL_SQRT(xcb * xcb + ycb * ycb + zcb * zcb);
74 real sine = (xcb * xtu + ycb * ytu + zcb * ztu) * REAL_RECIP(rcb * rtru);
77 if (REAL_ABS(angle + ideal) < REAL_ABS(angle - ideal)) ideal = -ideal;
78 real dt = angle - ideal;
79 if (dt > 180) dt -= 360;
80 if (dt < -180) dt += 360;
93 real dedxt = dedphi * (yt * zcb - ycb * zt) * REAL_RECIP(rt2 * rcb);
94 real dedyt = dedphi * (zt * xcb - zcb * xt) * REAL_RECIP(rt2 * rcb);
95 real dedzt = dedphi * (xt * ycb - xcb * yt) * REAL_RECIP(rt2 * rcb);
96 real dedxu = -dedphi * (yu * zcb - ycb * zu) * REAL_RECIP(ru2 * rcb);
97 real dedyu = -dedphi * (zu * xcb - zcb * xu) * REAL_RECIP(ru2 * rcb);
98 real dedzu = -dedphi * (xu * ycb - xcb * yu) * REAL_RECIP(ru2 * rcb);
100 real dedxia = zcb * dedyt - ycb * dedzt;
101 real dedyia = xcb * dedzt - zcb * dedxt;
102 real dedzia = ycb * dedxt - xcb * dedyt;
103 real dedxib = yca * dedzt - zca * dedyt + zdc * dedyu - ydc * dedzu;
104 real dedyib = zca * dedxt - xca * dedzt + xdc * dedzu - zdc * dedxu;
105 real dedzib = xca * dedyt - yca * dedxt + ydc * dedxu - xdc * dedyu;
106 real dedxic = zba * dedyt - yba * dedzt + ydb * dedzu - zdb * dedyu;
107 real dedyic = xba * dedzt - zba * dedxt + zdb * dedxu - xdb * dedzu;
108 real dedzic = yba * dedxt - xba * dedyt + xdb * dedyu - ydb * dedxu;
109 real dedxid = zcb * dedyu - ycb * dedzu;
110 real dedyid = xcb * dedzu - zcb * dedxu;
111 real dedzid = ycb * dedxu - xcb * dedyu;
127 vxx = xcb * (dedxic + dedxid) - xba * dedxia + xdc * dedxid;
128 vyx = ycb * (dedxic + dedxid) - yba * dedxia + ydc * dedxid;
129 vzx = zcb * (dedxic + dedxid) - zba * dedxia + zdc * dedxid;
130 vyy = ycb * (dedyic + dedyid) - yba * dedyia + ydc * dedyid;
131 vzy = zcb * (dedyic + dedyid) - zba * dedyia + zdc * dedyid;
132 vzz = zcb * (dedzic + dedzid) - zba * dedzia + zdc * dedzid;
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.
constexpr real radian
Definition: const.h:14
float real
Definition: precision.h:80
fixed grad_prec
Definition: precision.h:103
__device__ void dk_improp(real &__restrict__ e, real &__restrict__ vxx, real &__restrict__ vyx, real &__restrict__ vzx, real &__restrict__ vyy, real &__restrict__ vzy, real &__restrict__ vzz, grad_prec *__restrict__ deidx, grad_prec *__restrict__ deidy, grad_prec *__restrict__ deidz, real idihunit, int i, const int(*__restrict__ iiprop)[4], const real *__restrict__ kprop, const real *__restrict__ vprop, const real *__restrict__ x, const real *__restrict__ y, const real *__restrict__ z)
Definition: improp.h:12