3#include "math/libfunc.h"
26 constexpr bool do_e = Ver::e;
27 constexpr bool do_g = Ver::g;
28 constexpr bool do_v = Ver::v;
30 if CONSTEXPR (do_v) vxx = 0, vyx = 0, vzx = 0, vyy = 0, vzy = 0, vzz = 0;
32 int i =
isb[istrbnd][0];
33 int j =
isb[istrbnd][1];
34 int k =
isb[istrbnd][2];
58 real rab2 = xab * xab + yab * yab + zab * zab;
59 real rcb2 = xcb * xcb + ycb * ycb + zcb * zcb;
61 if (REAL_MIN(rab2, rcb2) != 0) {
62 real rab = REAL_SQRT(rab2);
63 real rcb = REAL_SQRT(rcb2);
64 real xp = ycb * zab - zcb * yab;
65 real yp = zcb * xab - xcb * zab;
66 real zp = xcb * yab - ycb * xab;
67 real rp = REAL_SQRT(xp * xp + yp * yp + zp * zp);
68 rp = REAL_MAX(rp, (
real)(0.0001));
69 real dot = xab * xcb + yab * ycb + zab * zcb;
70 real cosine = dot * REAL_RECIP(rab * rcb);
71 cosine = REAL_MIN((
real)1, REAL_MAX((
real)-1, cosine));
77 real ddtdxia = term1 * (yab * zp - zab * yp);
78 real ddtdyia = term1 * (zab * xp - xab * zp);
79 real ddtdzia = term1 * (xab * yp - yab * xp);
80 real ddtdxic = term2 * (ycb * zp - zcb * yp);
81 real ddtdyic = term2 * (zcb * xp - xcb * zp);
82 real ddtdzic = term2 * (xcb * yp - ycb * xp);
85 term1 = REAL_RECIP(rab);
87 term2 = REAL_RECIP(rcb);
88 real ddrdxia = term1 * xab;
89 real ddrdyia = term1 * yab;
90 real ddrdzia = term1 * zab;
91 real ddrdxic = term2 * xcb;
92 real ddrdyic = term2 * ycb;
93 real ddrdzic = term2 * zcb;
97 real termr = term1 * dr1 + term2 * dr2;
102 real term1t = term1 * dt;
103 real term2t = term2 * dt;
104 real dedxia = term1t * ddrdxia + termr * ddtdxia;
105 real dedyia = term1t * ddrdyia + termr * ddtdyia;
106 real dedzia = term1t * ddrdzia + termr * ddtdzia;
107 real dedxic = term2t * ddrdxic + termr * ddtdxic;
108 real dedyic = term2t * ddrdyic + termr * ddtdyic;
109 real dedzic = term2t * ddrdzic + termr * ddtdzic;
110 real dedxib = -dedxia - dedxic;
111 real dedyib = -dedyia - dedyic;
112 real dedzib = -dedzia - dedzic;
125 vxx = xab * dedxia + xcb * dedxic;
126 vyx = yab * dedxia + ycb * dedxic;
127 vzx = zab * dedxia + zcb * dedxic;
128 vyy = yab * dedyia + ycb * dedyic;
129 vzy = zab * dedyia + zcb * dedyic;
130 vzz = zab * dedzia + zcb * dedzic;
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_strbnd(real &__restrict__ e, real &__restrict__ vxx, real &__restrict__ vyx, real &__restrict__ vzx, real &__restrict__ vyy, real &__restrict__ vzy, real &__restrict__ vzz, grad_prec *__restrict__ debax, grad_prec *__restrict__ debay, grad_prec *__restrict__ debaz, real stbnunit, int istrbnd, const int(*__restrict__ isb)[3], const real(*__restrict__ sbk)[2], const real *__restrict__ bl, const int(*__restrict__ iang)[4], const real *__restrict__ anat, const real *__restrict__ x, const real *__restrict__ y, const real *__restrict__ z)
Definition: strbnd.h:11