11KERNEL_NAME : empole_chgpen_cu1
2- TEMPLATE_PARAMS : template <class Ver, class ETYP, int CFLX>
2+ TEMPLATE_PARAMS : template <class Ver, class ETYP, bool CFLX>
33CONSTEXPR_FLAGS : |
44 constexpr bool do_a = Ver::a;
55 constexpr bool do_e = Ver::e;
@@ -53,15 +53,15 @@ I_FORCE:
5353 - def : shared real txi addto:trqx
5454 - def : shared real tyi addto:trqy
5555 - def : shared real tzi addto:trqz
56- - def : shared real poti addto:pot
56+ - def : shared real poti addto:pot onlyif:CFLX
5757K_FORCE :
5858 - def : register real gxk addto:gx
5959 - def : register real gyk addto:gy
6060 - def : register real gzk addto:gz
6161 - def : register real txk addto:trqx
6262 - def : register real tyk addto:trqy
6363 - def : register real tzk addto:trqz
64- - def : register real potk addto:pot
64+ - def : register real potk addto:pot onlyif:CFLX
6565
6666I_VARIABLES :
6767 - def : shared real ci from:rpole,mpl_pme_0
@@ -92,12 +92,64 @@ K_VARIABLES:
9292 - def : register real alphak from:palpha
9393 - def : register real valk from:pval
9494
95- # SCALED_PAIRWISE_INTERACTION: |
95+ SCALED_PAIRWISE_INTERACTION : |
96+ real xr = xk - @xi@;
97+ real yr = yk - @yi@;
98+ real zr = zk - @zi@;
99+
100+ real e;
101+ real pota, potb;
102+ PairMPoleGrad pgrad;
103+ zero(pgrad);
104+
105+ real r2 = image2(xr, yr, zr);
106+ if (r2 <= off * off and incl) {
107+ pair_mpole_chgpen<do_e, do_g, ETYP, CFLX>(
108+ r2, xr, yr, zr, scalea, //
109+ @ci@, @dix@, @diy@, @diz@, @corei@, @vali@, @alphai@, //
110+ @qixx@, @qixy@, @qixz@, @qiyy@, @qiyz@, @qizz@, //
111+ ck, dkx, dky, dkz, corek, valk, alphak, //
112+ qkxx, qkxy, qkxz, qkyy, qkyz, qkzz, //
113+ f, aewald, e, pota, potb, pgrad);
114+
115+ if CONSTEXPR (do_a)
116+ if (e != 0 and scalea != 0)
117+ nemtl += 1;
118+ if CONSTEXPR (do_e)
119+ emtl += cvt_to<ebuf_prec>(e);
120+ if CONSTEXPR (do_g) {
121+ @gxi@ += pgrad.frcx;
122+ @gyi@ += pgrad.frcy;
123+ @gzi@ += pgrad.frcz;
124+ gxk -= pgrad.frcx;
125+ gyk -= pgrad.frcy;
126+ gzk -= pgrad.frcz;
127+
128+ @txi@ += pgrad.ttmi[0];
129+ @tyi@ += pgrad.ttmi[1];
130+ @tzi@ += pgrad.ttmi[2];
131+ txk += pgrad.ttmk[0];
132+ tyk += pgrad.ttmk[1];
133+ tzk += pgrad.ttmk[2];
134+ }
135+ if CONSTEXPR (do_v) {
136+ vemtlxx += cvt_to<vbuf_prec>(-xr * pgrad.frcx);
137+ vemtlyx += cvt_to<vbuf_prec>(-0.5f * (yr * pgrad.frcx + xr * pgrad.frcy));
138+ vemtlzx += cvt_to<vbuf_prec>(-0.5f * (zr * pgrad.frcx + xr * pgrad.frcz));
139+ vemtlyy += cvt_to<vbuf_prec>(-yr * pgrad.frcy);
140+ vemtlzy += cvt_to<vbuf_prec>(-0.5f * (zr * pgrad.frcy + yr * pgrad.frcz));
141+ vemtlzz += cvt_to<vbuf_prec>(-zr * pgrad.frcz);
142+ }
143+ if CONSTEXPR (CFLX) {
144+ @poti@ += pota;
145+ potk += potb;
146+ }
147+ } // end if (include)
96148
97149FULL_PAIRWISE_INTERACTION : |
98- real xr = xk - xi ;
99- real yr = yk - yi ;
100- real zr = zk - zi ;
150+ real xr = xk - @xi@ ;
151+ real yr = yk - @yi@ ;
152+ real zr = zk - @zi@ ;
101153
102154 real e;
103155 real pota, potb;
@@ -107,9 +159,9 @@ FULL_PAIRWISE_INTERACTION: |
107159 real r2 = image2(xr, yr, zr);
108160 if (r2 <= off * off and incl) {
109161 pair_mpole_chgpen<do_e, do_g, ETYP, CFLX>(
110- r2, xr, yr, zr, scalea , //
111- ci, dix, diy, diz, corei, vali, alphai, //
112- qixx, qixy, qixz, qiyy, qiyz, qizz, //
162+ r2, xr, yr, zr, 1 , //
163+ @ci@, @ dix@, @ diy@, @ diz@, @ corei@, @ vali@, @ alphai@ , //
164+ @ qixx@, @ qixy@, @ qixz@, @ qiyy@, @ qiyz@, @ qizz@ , //
113165 ck, dkx, dky, dkz, corek, valk, alphak, //
114166 qkxx, qkxy, qkxz, qkyy, qkyz, qkzz, //
115167 f, aewald, e, pota, potb, pgrad);
@@ -120,16 +172,16 @@ FULL_PAIRWISE_INTERACTION: |
120172 if CONSTEXPR (do_e)
121173 emtl += cvt_to<ebuf_prec>(e);
122174 if CONSTEXPR (do_g) {
123- shgxi[klane] += pgrad.frcx;
124- shgyi[klane] += pgrad.frcy;
125- shgzi[klane] += pgrad.frcz;
175+ @gxi@ += pgrad.frcx;
176+ @gyi@ += pgrad.frcy;
177+ @gzi@ += pgrad.frcz;
126178 gxk -= pgrad.frcx;
127179 gyk -= pgrad.frcy;
128180 gzk -= pgrad.frcz;
129181
130- shtxi[klane] += pgrad.ttmi[0];
131- shtyi[klane] += pgrad.ttmi[1];
132- shtzi[klane] += pgrad.ttmi[2];
182+ @txi@ += pgrad.ttmi[0];
183+ @tyi@ += pgrad.ttmi[1];
184+ @tzi@ += pgrad.ttmi[2];
133185 txk += pgrad.ttmk[0];
134186 tyk += pgrad.ttmk[1];
135187 tzk += pgrad.ttmk[2];
@@ -143,7 +195,7 @@ FULL_PAIRWISE_INTERACTION: |
143195 vemtlzz += cvt_to<vbuf_prec>(-zr * pgrad.frcz);
144196 }
145197 if CONSTEXPR (CFLX) {
146- shpoti[klane] += pota;
198+ @poti@ += pota;
147199 potk += potb;
148200 }
149201 } // end if (include)
0 commit comments