Bug Summary

File:gromacs/gmxlib/nonbonded/nb_kernel_c/nb_kernel_ElecEwSw_VdwLJSw_GeomW4W4_c.c
Location:line 951, column 5
Description:Value stored to 'sh_ewald' is never read

Annotated Source Code

1/*
2 * This file is part of the GROMACS molecular simulation package.
3 *
4 * Copyright (c) 2012,2013,2014, by the GROMACS development team, led by
5 * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
6 * and including many others, as listed in the AUTHORS file in the
7 * top-level source directory and at http://www.gromacs.org.
8 *
9 * GROMACS is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Lesser General Public License
11 * as published by the Free Software Foundation; either version 2.1
12 * of the License, or (at your option) any later version.
13 *
14 * GROMACS is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * Lesser General Public License for more details.
18 *
19 * You should have received a copy of the GNU Lesser General Public
20 * License along with GROMACS; if not, see
21 * http://www.gnu.org/licenses, or write to the Free Software Foundation,
22 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
23 *
24 * If you want to redistribute modifications to GROMACS, please
25 * consider that scientific software is very special. Version
26 * control is crucial - bugs must be traceable. We will be happy to
27 * consider code for inclusion in the official distribution, but
28 * derived work must not be called official GROMACS. Details are found
29 * in the README & COPYING files - if they are missing, get the
30 * official version at http://www.gromacs.org.
31 *
32 * To help us fund GROMACS development, we humbly ask that you cite
33 * the research papers on the package. Check out http://www.gromacs.org.
34 */
35/*
36 * Note: this file was generated by the GROMACS c kernel generator.
37 */
38#ifdef HAVE_CONFIG_H1
39#include <config.h>
40#endif
41
42#include <math.h>
43
44#include "../nb_kernel.h"
45#include "types/simple.h"
46#include "gromacs/math/vec.h"
47#include "nrnb.h"
48
49/*
50 * Gromacs nonbonded kernel: nb_kernel_ElecEwSw_VdwLJSw_GeomW4W4_VF_c
51 * Electrostatics interaction: Ewald
52 * VdW interaction: LennardJones
53 * Geometry: Water4-Water4
54 * Calculate force/pot: PotentialAndForce
55 */
56void
57nb_kernel_ElecEwSw_VdwLJSw_GeomW4W4_VF_c
58 (t_nblist * gmx_restrict__restrict nlist,
59 rvec * gmx_restrict__restrict xx,
60 rvec * gmx_restrict__restrict ff,
61 t_forcerec * gmx_restrict__restrict fr,
62 t_mdatoms * gmx_restrict__restrict mdatoms,
63 nb_kernel_data_t gmx_unused__attribute__ ((unused)) * gmx_restrict__restrict kernel_data,
64 t_nrnb * gmx_restrict__restrict nrnb)
65{
66 int i_shift_offset,i_coord_offset,j_coord_offset;
67 int j_index_start,j_index_end;
68 int nri,inr,ggid,iidx,jidx,jnr,outeriter,inneriter;
69 real shX,shY,shZ,tx,ty,tz,fscal,rcutoff,rcutoff2;
70 int *iinr,*jindex,*jjnr,*shiftidx,*gid;
71 real *shiftvec,*fshift,*x,*f;
72 int vdwioffset0;
73 real ix0,iy0,iz0,fix0,fiy0,fiz0,iq0,isai0;
74 int vdwioffset1;
75 real ix1,iy1,iz1,fix1,fiy1,fiz1,iq1,isai1;
76 int vdwioffset2;
77 real ix2,iy2,iz2,fix2,fiy2,fiz2,iq2,isai2;
78 int vdwioffset3;
79 real ix3,iy3,iz3,fix3,fiy3,fiz3,iq3,isai3;
80 int vdwjidx0;
81 real jx0,jy0,jz0,fjx0,fjy0,fjz0,jq0,isaj0;
82 int vdwjidx1;
83 real jx1,jy1,jz1,fjx1,fjy1,fjz1,jq1,isaj1;
84 int vdwjidx2;
85 real jx2,jy2,jz2,fjx2,fjy2,fjz2,jq2,isaj2;
86 int vdwjidx3;
87 real jx3,jy3,jz3,fjx3,fjy3,fjz3,jq3,isaj3;
88 real dx00,dy00,dz00,rsq00,rinv00,rinvsq00,r00,qq00,c6_00,c12_00,cexp1_00,cexp2_00;
89 real dx11,dy11,dz11,rsq11,rinv11,rinvsq11,r11,qq11,c6_11,c12_11,cexp1_11,cexp2_11;
90 real dx12,dy12,dz12,rsq12,rinv12,rinvsq12,r12,qq12,c6_12,c12_12,cexp1_12,cexp2_12;
91 real dx13,dy13,dz13,rsq13,rinv13,rinvsq13,r13,qq13,c6_13,c12_13,cexp1_13,cexp2_13;
92 real dx21,dy21,dz21,rsq21,rinv21,rinvsq21,r21,qq21,c6_21,c12_21,cexp1_21,cexp2_21;
93 real dx22,dy22,dz22,rsq22,rinv22,rinvsq22,r22,qq22,c6_22,c12_22,cexp1_22,cexp2_22;
94 real dx23,dy23,dz23,rsq23,rinv23,rinvsq23,r23,qq23,c6_23,c12_23,cexp1_23,cexp2_23;
95 real dx31,dy31,dz31,rsq31,rinv31,rinvsq31,r31,qq31,c6_31,c12_31,cexp1_31,cexp2_31;
96 real dx32,dy32,dz32,rsq32,rinv32,rinvsq32,r32,qq32,c6_32,c12_32,cexp1_32,cexp2_32;
97 real dx33,dy33,dz33,rsq33,rinv33,rinvsq33,r33,qq33,c6_33,c12_33,cexp1_33,cexp2_33;
98 real velec,felec,velecsum,facel,crf,krf,krf2;
99 real *charge;
100 int nvdwtype;
101 real rinvsix,rvdw,vvdw,vvdw6,vvdw12,fvdw,fvdw6,fvdw12,vvdwsum,br,vvdwexp,sh_vdw_invrcut6;
102 int *vdwtype;
103 real *vdwparam;
104 int ewitab;
105 real ewtabscale,eweps,sh_ewald,ewrt,ewtabhalfspace;
106 real *ewtab;
107 real rswitch,swV3,swV4,swV5,swF2,swF3,swF4,d,d2,sw,dsw;
108
109 x = xx[0];
110 f = ff[0];
111
112 nri = nlist->nri;
113 iinr = nlist->iinr;
114 jindex = nlist->jindex;
115 jjnr = nlist->jjnr;
116 shiftidx = nlist->shift;
117 gid = nlist->gid;
118 shiftvec = fr->shift_vec[0];
119 fshift = fr->fshift[0];
120 facel = fr->epsfac;
121 charge = mdatoms->chargeA;
122 nvdwtype = fr->ntype;
123 vdwparam = fr->nbfp;
124 vdwtype = mdatoms->typeA;
125
126 sh_ewald = fr->ic->sh_ewald;
127 ewtab = fr->ic->tabq_coul_FDV0;
128 ewtabscale = fr->ic->tabq_scale;
129 ewtabhalfspace = 0.5/ewtabscale;
130
131 /* Setup water-specific parameters */
132 inr = nlist->iinr[0];
133 iq1 = facel*charge[inr+1];
134 iq2 = facel*charge[inr+2];
135 iq3 = facel*charge[inr+3];
136 vdwioffset0 = 2*nvdwtype*vdwtype[inr+0];
137
138 jq1 = charge[inr+1];
139 jq2 = charge[inr+2];
140 jq3 = charge[inr+3];
141 vdwjidx0 = 2*vdwtype[inr+0];
142 c6_00 = vdwparam[vdwioffset0+vdwjidx0];
143 c12_00 = vdwparam[vdwioffset0+vdwjidx0+1];
144 qq11 = iq1*jq1;
145 qq12 = iq1*jq2;
146 qq13 = iq1*jq3;
147 qq21 = iq2*jq1;
148 qq22 = iq2*jq2;
149 qq23 = iq2*jq3;
150 qq31 = iq3*jq1;
151 qq32 = iq3*jq2;
152 qq33 = iq3*jq3;
153
154 /* When we use explicit cutoffs the value must be identical for elec and VdW, so use elec as an arbitrary choice */
155 rcutoff = fr->rcoulomb;
156 rcutoff2 = rcutoff*rcutoff;
157
158 rswitch = fr->rcoulomb_switch;
159 /* Setup switch parameters */
160 d = rcutoff-rswitch;
161 swV3 = -10.0/(d*d*d);
162 swV4 = 15.0/(d*d*d*d);
163 swV5 = -6.0/(d*d*d*d*d);
164 swF2 = -30.0/(d*d*d);
165 swF3 = 60.0/(d*d*d*d);
166 swF4 = -30.0/(d*d*d*d*d);
167
168 outeriter = 0;
169 inneriter = 0;
170
171 /* Start outer loop over neighborlists */
172 for(iidx=0; iidx<nri; iidx++)
173 {
174 /* Load shift vector for this list */
175 i_shift_offset = DIM3*shiftidx[iidx];
176 shX = shiftvec[i_shift_offset+XX0];
177 shY = shiftvec[i_shift_offset+YY1];
178 shZ = shiftvec[i_shift_offset+ZZ2];
179
180 /* Load limits for loop over neighbors */
181 j_index_start = jindex[iidx];
182 j_index_end = jindex[iidx+1];
183
184 /* Get outer coordinate index */
185 inr = iinr[iidx];
186 i_coord_offset = DIM3*inr;
187
188 /* Load i particle coords and add shift vector */
189 ix0 = shX + x[i_coord_offset+DIM3*0+XX0];
190 iy0 = shY + x[i_coord_offset+DIM3*0+YY1];
191 iz0 = shZ + x[i_coord_offset+DIM3*0+ZZ2];
192 ix1 = shX + x[i_coord_offset+DIM3*1+XX0];
193 iy1 = shY + x[i_coord_offset+DIM3*1+YY1];
194 iz1 = shZ + x[i_coord_offset+DIM3*1+ZZ2];
195 ix2 = shX + x[i_coord_offset+DIM3*2+XX0];
196 iy2 = shY + x[i_coord_offset+DIM3*2+YY1];
197 iz2 = shZ + x[i_coord_offset+DIM3*2+ZZ2];
198 ix3 = shX + x[i_coord_offset+DIM3*3+XX0];
199 iy3 = shY + x[i_coord_offset+DIM3*3+YY1];
200 iz3 = shZ + x[i_coord_offset+DIM3*3+ZZ2];
201
202 fix0 = 0.0;
203 fiy0 = 0.0;
204 fiz0 = 0.0;
205 fix1 = 0.0;
206 fiy1 = 0.0;
207 fiz1 = 0.0;
208 fix2 = 0.0;
209 fiy2 = 0.0;
210 fiz2 = 0.0;
211 fix3 = 0.0;
212 fiy3 = 0.0;
213 fiz3 = 0.0;
214
215 /* Reset potential sums */
216 velecsum = 0.0;
217 vvdwsum = 0.0;
218
219 /* Start inner kernel loop */
220 for(jidx=j_index_start; jidx<j_index_end; jidx++)
221 {
222 /* Get j neighbor index, and coordinate index */
223 jnr = jjnr[jidx];
224 j_coord_offset = DIM3*jnr;
225
226 /* load j atom coordinates */
227 jx0 = x[j_coord_offset+DIM3*0+XX0];
228 jy0 = x[j_coord_offset+DIM3*0+YY1];
229 jz0 = x[j_coord_offset+DIM3*0+ZZ2];
230 jx1 = x[j_coord_offset+DIM3*1+XX0];
231 jy1 = x[j_coord_offset+DIM3*1+YY1];
232 jz1 = x[j_coord_offset+DIM3*1+ZZ2];
233 jx2 = x[j_coord_offset+DIM3*2+XX0];
234 jy2 = x[j_coord_offset+DIM3*2+YY1];
235 jz2 = x[j_coord_offset+DIM3*2+ZZ2];
236 jx3 = x[j_coord_offset+DIM3*3+XX0];
237 jy3 = x[j_coord_offset+DIM3*3+YY1];
238 jz3 = x[j_coord_offset+DIM3*3+ZZ2];
239
240 /* Calculate displacement vector */
241 dx00 = ix0 - jx0;
242 dy00 = iy0 - jy0;
243 dz00 = iz0 - jz0;
244 dx11 = ix1 - jx1;
245 dy11 = iy1 - jy1;
246 dz11 = iz1 - jz1;
247 dx12 = ix1 - jx2;
248 dy12 = iy1 - jy2;
249 dz12 = iz1 - jz2;
250 dx13 = ix1 - jx3;
251 dy13 = iy1 - jy3;
252 dz13 = iz1 - jz3;
253 dx21 = ix2 - jx1;
254 dy21 = iy2 - jy1;
255 dz21 = iz2 - jz1;
256 dx22 = ix2 - jx2;
257 dy22 = iy2 - jy2;
258 dz22 = iz2 - jz2;
259 dx23 = ix2 - jx3;
260 dy23 = iy2 - jy3;
261 dz23 = iz2 - jz3;
262 dx31 = ix3 - jx1;
263 dy31 = iy3 - jy1;
264 dz31 = iz3 - jz1;
265 dx32 = ix3 - jx2;
266 dy32 = iy3 - jy2;
267 dz32 = iz3 - jz2;
268 dx33 = ix3 - jx3;
269 dy33 = iy3 - jy3;
270 dz33 = iz3 - jz3;
271
272 /* Calculate squared distance and things based on it */
273 rsq00 = dx00*dx00+dy00*dy00+dz00*dz00;
274 rsq11 = dx11*dx11+dy11*dy11+dz11*dz11;
275 rsq12 = dx12*dx12+dy12*dy12+dz12*dz12;
276 rsq13 = dx13*dx13+dy13*dy13+dz13*dz13;
277 rsq21 = dx21*dx21+dy21*dy21+dz21*dz21;
278 rsq22 = dx22*dx22+dy22*dy22+dz22*dz22;
279 rsq23 = dx23*dx23+dy23*dy23+dz23*dz23;
280 rsq31 = dx31*dx31+dy31*dy31+dz31*dz31;
281 rsq32 = dx32*dx32+dy32*dy32+dz32*dz32;
282 rsq33 = dx33*dx33+dy33*dy33+dz33*dz33;
283
284 rinv00 = gmx_invsqrt(rsq00)gmx_software_invsqrt(rsq00);
285 rinv11 = gmx_invsqrt(rsq11)gmx_software_invsqrt(rsq11);
286 rinv12 = gmx_invsqrt(rsq12)gmx_software_invsqrt(rsq12);
287 rinv13 = gmx_invsqrt(rsq13)gmx_software_invsqrt(rsq13);
288 rinv21 = gmx_invsqrt(rsq21)gmx_software_invsqrt(rsq21);
289 rinv22 = gmx_invsqrt(rsq22)gmx_software_invsqrt(rsq22);
290 rinv23 = gmx_invsqrt(rsq23)gmx_software_invsqrt(rsq23);
291 rinv31 = gmx_invsqrt(rsq31)gmx_software_invsqrt(rsq31);
292 rinv32 = gmx_invsqrt(rsq32)gmx_software_invsqrt(rsq32);
293 rinv33 = gmx_invsqrt(rsq33)gmx_software_invsqrt(rsq33);
294
295 rinvsq00 = rinv00*rinv00;
296 rinvsq11 = rinv11*rinv11;
297 rinvsq12 = rinv12*rinv12;
298 rinvsq13 = rinv13*rinv13;
299 rinvsq21 = rinv21*rinv21;
300 rinvsq22 = rinv22*rinv22;
301 rinvsq23 = rinv23*rinv23;
302 rinvsq31 = rinv31*rinv31;
303 rinvsq32 = rinv32*rinv32;
304 rinvsq33 = rinv33*rinv33;
305
306 /**************************
307 * CALCULATE INTERACTIONS *
308 **************************/
309
310 if (rsq00<rcutoff2)
311 {
312
313 r00 = rsq00*rinv00;
314
315 /* LENNARD-JONES DISPERSION/REPULSION */
316
317 rinvsix = rinvsq00*rinvsq00*rinvsq00;
318 vvdw6 = c6_00*rinvsix;
319 vvdw12 = c12_00*rinvsix*rinvsix;
320 vvdw = vvdw12*(1.0/12.0) - vvdw6*(1.0/6.0);
321 fvdw = (vvdw12-vvdw6)*rinvsq00;
322
323 d = r00-rswitch;
324 d = (d>0.0) ? d : 0.0;
325 d2 = d*d;
326 sw = 1.0+d2*d*(swV3+d*(swV4+d*swV5));
327
328 dsw = d2*(swF2+d*(swF3+d*swF4));
329
330 /* Evaluate switch function */
331 /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
332 fvdw = fvdw*sw - rinv00*vvdw*dsw;
333 vvdw *= sw;
334
335 /* Update potential sums from outer loop */
336 vvdwsum += vvdw;
337
338 fscal = fvdw;
339
340 /* Calculate temporary vectorial force */
341 tx = fscal*dx00;
342 ty = fscal*dy00;
343 tz = fscal*dz00;
344
345 /* Update vectorial force */
346 fix0 += tx;
347 fiy0 += ty;
348 fiz0 += tz;
349 f[j_coord_offset+DIM3*0+XX0] -= tx;
350 f[j_coord_offset+DIM3*0+YY1] -= ty;
351 f[j_coord_offset+DIM3*0+ZZ2] -= tz;
352
353 }
354
355 /**************************
356 * CALCULATE INTERACTIONS *
357 **************************/
358
359 if (rsq11<rcutoff2)
360 {
361
362 r11 = rsq11*rinv11;
363
364 /* EWALD ELECTROSTATICS */
365
366 /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
367 ewrt = r11*ewtabscale;
368 ewitab = ewrt;
369 eweps = ewrt-ewitab;
370 ewitab = 4*ewitab;
371 felec = ewtab[ewitab]+eweps*ewtab[ewitab+1];
372 velec = qq11*(rinv11-(ewtab[ewitab+2]-ewtabhalfspace*eweps*(ewtab[ewitab]+felec)));
373 felec = qq11*rinv11*(rinvsq11-felec);
374
375 d = r11-rswitch;
376 d = (d>0.0) ? d : 0.0;
377 d2 = d*d;
378 sw = 1.0+d2*d*(swV3+d*(swV4+d*swV5));
379
380 dsw = d2*(swF2+d*(swF3+d*swF4));
381
382 /* Evaluate switch function */
383 /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
384 felec = felec*sw - rinv11*velec*dsw;
385 velec *= sw;
386
387 /* Update potential sums from outer loop */
388 velecsum += velec;
389
390 fscal = felec;
391
392 /* Calculate temporary vectorial force */
393 tx = fscal*dx11;
394 ty = fscal*dy11;
395 tz = fscal*dz11;
396
397 /* Update vectorial force */
398 fix1 += tx;
399 fiy1 += ty;
400 fiz1 += tz;
401 f[j_coord_offset+DIM3*1+XX0] -= tx;
402 f[j_coord_offset+DIM3*1+YY1] -= ty;
403 f[j_coord_offset+DIM3*1+ZZ2] -= tz;
404
405 }
406
407 /**************************
408 * CALCULATE INTERACTIONS *
409 **************************/
410
411 if (rsq12<rcutoff2)
412 {
413
414 r12 = rsq12*rinv12;
415
416 /* EWALD ELECTROSTATICS */
417
418 /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
419 ewrt = r12*ewtabscale;
420 ewitab = ewrt;
421 eweps = ewrt-ewitab;
422 ewitab = 4*ewitab;
423 felec = ewtab[ewitab]+eweps*ewtab[ewitab+1];
424 velec = qq12*(rinv12-(ewtab[ewitab+2]-ewtabhalfspace*eweps*(ewtab[ewitab]+felec)));
425 felec = qq12*rinv12*(rinvsq12-felec);
426
427 d = r12-rswitch;
428 d = (d>0.0) ? d : 0.0;
429 d2 = d*d;
430 sw = 1.0+d2*d*(swV3+d*(swV4+d*swV5));
431
432 dsw = d2*(swF2+d*(swF3+d*swF4));
433
434 /* Evaluate switch function */
435 /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
436 felec = felec*sw - rinv12*velec*dsw;
437 velec *= sw;
438
439 /* Update potential sums from outer loop */
440 velecsum += velec;
441
442 fscal = felec;
443
444 /* Calculate temporary vectorial force */
445 tx = fscal*dx12;
446 ty = fscal*dy12;
447 tz = fscal*dz12;
448
449 /* Update vectorial force */
450 fix1 += tx;
451 fiy1 += ty;
452 fiz1 += tz;
453 f[j_coord_offset+DIM3*2+XX0] -= tx;
454 f[j_coord_offset+DIM3*2+YY1] -= ty;
455 f[j_coord_offset+DIM3*2+ZZ2] -= tz;
456
457 }
458
459 /**************************
460 * CALCULATE INTERACTIONS *
461 **************************/
462
463 if (rsq13<rcutoff2)
464 {
465
466 r13 = rsq13*rinv13;
467
468 /* EWALD ELECTROSTATICS */
469
470 /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
471 ewrt = r13*ewtabscale;
472 ewitab = ewrt;
473 eweps = ewrt-ewitab;
474 ewitab = 4*ewitab;
475 felec = ewtab[ewitab]+eweps*ewtab[ewitab+1];
476 velec = qq13*(rinv13-(ewtab[ewitab+2]-ewtabhalfspace*eweps*(ewtab[ewitab]+felec)));
477 felec = qq13*rinv13*(rinvsq13-felec);
478
479 d = r13-rswitch;
480 d = (d>0.0) ? d : 0.0;
481 d2 = d*d;
482 sw = 1.0+d2*d*(swV3+d*(swV4+d*swV5));
483
484 dsw = d2*(swF2+d*(swF3+d*swF4));
485
486 /* Evaluate switch function */
487 /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
488 felec = felec*sw - rinv13*velec*dsw;
489 velec *= sw;
490
491 /* Update potential sums from outer loop */
492 velecsum += velec;
493
494 fscal = felec;
495
496 /* Calculate temporary vectorial force */
497 tx = fscal*dx13;
498 ty = fscal*dy13;
499 tz = fscal*dz13;
500
501 /* Update vectorial force */
502 fix1 += tx;
503 fiy1 += ty;
504 fiz1 += tz;
505 f[j_coord_offset+DIM3*3+XX0] -= tx;
506 f[j_coord_offset+DIM3*3+YY1] -= ty;
507 f[j_coord_offset+DIM3*3+ZZ2] -= tz;
508
509 }
510
511 /**************************
512 * CALCULATE INTERACTIONS *
513 **************************/
514
515 if (rsq21<rcutoff2)
516 {
517
518 r21 = rsq21*rinv21;
519
520 /* EWALD ELECTROSTATICS */
521
522 /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
523 ewrt = r21*ewtabscale;
524 ewitab = ewrt;
525 eweps = ewrt-ewitab;
526 ewitab = 4*ewitab;
527 felec = ewtab[ewitab]+eweps*ewtab[ewitab+1];
528 velec = qq21*(rinv21-(ewtab[ewitab+2]-ewtabhalfspace*eweps*(ewtab[ewitab]+felec)));
529 felec = qq21*rinv21*(rinvsq21-felec);
530
531 d = r21-rswitch;
532 d = (d>0.0) ? d : 0.0;
533 d2 = d*d;
534 sw = 1.0+d2*d*(swV3+d*(swV4+d*swV5));
535
536 dsw = d2*(swF2+d*(swF3+d*swF4));
537
538 /* Evaluate switch function */
539 /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
540 felec = felec*sw - rinv21*velec*dsw;
541 velec *= sw;
542
543 /* Update potential sums from outer loop */
544 velecsum += velec;
545
546 fscal = felec;
547
548 /* Calculate temporary vectorial force */
549 tx = fscal*dx21;
550 ty = fscal*dy21;
551 tz = fscal*dz21;
552
553 /* Update vectorial force */
554 fix2 += tx;
555 fiy2 += ty;
556 fiz2 += tz;
557 f[j_coord_offset+DIM3*1+XX0] -= tx;
558 f[j_coord_offset+DIM3*1+YY1] -= ty;
559 f[j_coord_offset+DIM3*1+ZZ2] -= tz;
560
561 }
562
563 /**************************
564 * CALCULATE INTERACTIONS *
565 **************************/
566
567 if (rsq22<rcutoff2)
568 {
569
570 r22 = rsq22*rinv22;
571
572 /* EWALD ELECTROSTATICS */
573
574 /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
575 ewrt = r22*ewtabscale;
576 ewitab = ewrt;
577 eweps = ewrt-ewitab;
578 ewitab = 4*ewitab;
579 felec = ewtab[ewitab]+eweps*ewtab[ewitab+1];
580 velec = qq22*(rinv22-(ewtab[ewitab+2]-ewtabhalfspace*eweps*(ewtab[ewitab]+felec)));
581 felec = qq22*rinv22*(rinvsq22-felec);
582
583 d = r22-rswitch;
584 d = (d>0.0) ? d : 0.0;
585 d2 = d*d;
586 sw = 1.0+d2*d*(swV3+d*(swV4+d*swV5));
587
588 dsw = d2*(swF2+d*(swF3+d*swF4));
589
590 /* Evaluate switch function */
591 /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
592 felec = felec*sw - rinv22*velec*dsw;
593 velec *= sw;
594
595 /* Update potential sums from outer loop */
596 velecsum += velec;
597
598 fscal = felec;
599
600 /* Calculate temporary vectorial force */
601 tx = fscal*dx22;
602 ty = fscal*dy22;
603 tz = fscal*dz22;
604
605 /* Update vectorial force */
606 fix2 += tx;
607 fiy2 += ty;
608 fiz2 += tz;
609 f[j_coord_offset+DIM3*2+XX0] -= tx;
610 f[j_coord_offset+DIM3*2+YY1] -= ty;
611 f[j_coord_offset+DIM3*2+ZZ2] -= tz;
612
613 }
614
615 /**************************
616 * CALCULATE INTERACTIONS *
617 **************************/
618
619 if (rsq23<rcutoff2)
620 {
621
622 r23 = rsq23*rinv23;
623
624 /* EWALD ELECTROSTATICS */
625
626 /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
627 ewrt = r23*ewtabscale;
628 ewitab = ewrt;
629 eweps = ewrt-ewitab;
630 ewitab = 4*ewitab;
631 felec = ewtab[ewitab]+eweps*ewtab[ewitab+1];
632 velec = qq23*(rinv23-(ewtab[ewitab+2]-ewtabhalfspace*eweps*(ewtab[ewitab]+felec)));
633 felec = qq23*rinv23*(rinvsq23-felec);
634
635 d = r23-rswitch;
636 d = (d>0.0) ? d : 0.0;
637 d2 = d*d;
638 sw = 1.0+d2*d*(swV3+d*(swV4+d*swV5));
639
640 dsw = d2*(swF2+d*(swF3+d*swF4));
641
642 /* Evaluate switch function */
643 /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
644 felec = felec*sw - rinv23*velec*dsw;
645 velec *= sw;
646
647 /* Update potential sums from outer loop */
648 velecsum += velec;
649
650 fscal = felec;
651
652 /* Calculate temporary vectorial force */
653 tx = fscal*dx23;
654 ty = fscal*dy23;
655 tz = fscal*dz23;
656
657 /* Update vectorial force */
658 fix2 += tx;
659 fiy2 += ty;
660 fiz2 += tz;
661 f[j_coord_offset+DIM3*3+XX0] -= tx;
662 f[j_coord_offset+DIM3*3+YY1] -= ty;
663 f[j_coord_offset+DIM3*3+ZZ2] -= tz;
664
665 }
666
667 /**************************
668 * CALCULATE INTERACTIONS *
669 **************************/
670
671 if (rsq31<rcutoff2)
672 {
673
674 r31 = rsq31*rinv31;
675
676 /* EWALD ELECTROSTATICS */
677
678 /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
679 ewrt = r31*ewtabscale;
680 ewitab = ewrt;
681 eweps = ewrt-ewitab;
682 ewitab = 4*ewitab;
683 felec = ewtab[ewitab]+eweps*ewtab[ewitab+1];
684 velec = qq31*(rinv31-(ewtab[ewitab+2]-ewtabhalfspace*eweps*(ewtab[ewitab]+felec)));
685 felec = qq31*rinv31*(rinvsq31-felec);
686
687 d = r31-rswitch;
688 d = (d>0.0) ? d : 0.0;
689 d2 = d*d;
690 sw = 1.0+d2*d*(swV3+d*(swV4+d*swV5));
691
692 dsw = d2*(swF2+d*(swF3+d*swF4));
693
694 /* Evaluate switch function */
695 /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
696 felec = felec*sw - rinv31*velec*dsw;
697 velec *= sw;
698
699 /* Update potential sums from outer loop */
700 velecsum += velec;
701
702 fscal = felec;
703
704 /* Calculate temporary vectorial force */
705 tx = fscal*dx31;
706 ty = fscal*dy31;
707 tz = fscal*dz31;
708
709 /* Update vectorial force */
710 fix3 += tx;
711 fiy3 += ty;
712 fiz3 += tz;
713 f[j_coord_offset+DIM3*1+XX0] -= tx;
714 f[j_coord_offset+DIM3*1+YY1] -= ty;
715 f[j_coord_offset+DIM3*1+ZZ2] -= tz;
716
717 }
718
719 /**************************
720 * CALCULATE INTERACTIONS *
721 **************************/
722
723 if (rsq32<rcutoff2)
724 {
725
726 r32 = rsq32*rinv32;
727
728 /* EWALD ELECTROSTATICS */
729
730 /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
731 ewrt = r32*ewtabscale;
732 ewitab = ewrt;
733 eweps = ewrt-ewitab;
734 ewitab = 4*ewitab;
735 felec = ewtab[ewitab]+eweps*ewtab[ewitab+1];
736 velec = qq32*(rinv32-(ewtab[ewitab+2]-ewtabhalfspace*eweps*(ewtab[ewitab]+felec)));
737 felec = qq32*rinv32*(rinvsq32-felec);
738
739 d = r32-rswitch;
740 d = (d>0.0) ? d : 0.0;
741 d2 = d*d;
742 sw = 1.0+d2*d*(swV3+d*(swV4+d*swV5));
743
744 dsw = d2*(swF2+d*(swF3+d*swF4));
745
746 /* Evaluate switch function */
747 /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
748 felec = felec*sw - rinv32*velec*dsw;
749 velec *= sw;
750
751 /* Update potential sums from outer loop */
752 velecsum += velec;
753
754 fscal = felec;
755
756 /* Calculate temporary vectorial force */
757 tx = fscal*dx32;
758 ty = fscal*dy32;
759 tz = fscal*dz32;
760
761 /* Update vectorial force */
762 fix3 += tx;
763 fiy3 += ty;
764 fiz3 += tz;
765 f[j_coord_offset+DIM3*2+XX0] -= tx;
766 f[j_coord_offset+DIM3*2+YY1] -= ty;
767 f[j_coord_offset+DIM3*2+ZZ2] -= tz;
768
769 }
770
771 /**************************
772 * CALCULATE INTERACTIONS *
773 **************************/
774
775 if (rsq33<rcutoff2)
776 {
777
778 r33 = rsq33*rinv33;
779
780 /* EWALD ELECTROSTATICS */
781
782 /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
783 ewrt = r33*ewtabscale;
784 ewitab = ewrt;
785 eweps = ewrt-ewitab;
786 ewitab = 4*ewitab;
787 felec = ewtab[ewitab]+eweps*ewtab[ewitab+1];
788 velec = qq33*(rinv33-(ewtab[ewitab+2]-ewtabhalfspace*eweps*(ewtab[ewitab]+felec)));
789 felec = qq33*rinv33*(rinvsq33-felec);
790
791 d = r33-rswitch;
792 d = (d>0.0) ? d : 0.0;
793 d2 = d*d;
794 sw = 1.0+d2*d*(swV3+d*(swV4+d*swV5));
795
796 dsw = d2*(swF2+d*(swF3+d*swF4));
797
798 /* Evaluate switch function */
799 /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
800 felec = felec*sw - rinv33*velec*dsw;
801 velec *= sw;
802
803 /* Update potential sums from outer loop */
804 velecsum += velec;
805
806 fscal = felec;
807
808 /* Calculate temporary vectorial force */
809 tx = fscal*dx33;
810 ty = fscal*dy33;
811 tz = fscal*dz33;
812
813 /* Update vectorial force */
814 fix3 += tx;
815 fiy3 += ty;
816 fiz3 += tz;
817 f[j_coord_offset+DIM3*3+XX0] -= tx;
818 f[j_coord_offset+DIM3*3+YY1] -= ty;
819 f[j_coord_offset+DIM3*3+ZZ2] -= tz;
820
821 }
822
823 /* Inner loop uses 575 flops */
824 }
825 /* End of innermost loop */
826
827 tx = ty = tz = 0;
828 f[i_coord_offset+DIM3*0+XX0] += fix0;
829 f[i_coord_offset+DIM3*0+YY1] += fiy0;
830 f[i_coord_offset+DIM3*0+ZZ2] += fiz0;
831 tx += fix0;
832 ty += fiy0;
833 tz += fiz0;
834 f[i_coord_offset+DIM3*1+XX0] += fix1;
835 f[i_coord_offset+DIM3*1+YY1] += fiy1;
836 f[i_coord_offset+DIM3*1+ZZ2] += fiz1;
837 tx += fix1;
838 ty += fiy1;
839 tz += fiz1;
840 f[i_coord_offset+DIM3*2+XX0] += fix2;
841 f[i_coord_offset+DIM3*2+YY1] += fiy2;
842 f[i_coord_offset+DIM3*2+ZZ2] += fiz2;
843 tx += fix2;
844 ty += fiy2;
845 tz += fiz2;
846 f[i_coord_offset+DIM3*3+XX0] += fix3;
847 f[i_coord_offset+DIM3*3+YY1] += fiy3;
848 f[i_coord_offset+DIM3*3+ZZ2] += fiz3;
849 tx += fix3;
850 ty += fiy3;
851 tz += fiz3;
852 fshift[i_shift_offset+XX0] += tx;
853 fshift[i_shift_offset+YY1] += ty;
854 fshift[i_shift_offset+ZZ2] += tz;
855
856 ggid = gid[iidx];
857 /* Update potential energies */
858 kernel_data->energygrp_elec[ggid] += velecsum;
859 kernel_data->energygrp_vdw[ggid] += vvdwsum;
860
861 /* Increment number of inner iterations */
862 inneriter += j_index_end - j_index_start;
863
864 /* Outer loop uses 41 flops */
865 }
866
867 /* Increment number of outer iterations */
868 outeriter += nri;
869
870 /* Update outer/inner flops */
871
872 inc_nrnb(nrnb,eNR_NBKERNEL_ELEC_VDW_W4W4_VF,outeriter*41 + inneriter*575)(nrnb)->n[eNR_NBKERNEL_ELEC_VDW_W4W4_VF] += outeriter*41 +
inneriter*575
;
873}
874/*
875 * Gromacs nonbonded kernel: nb_kernel_ElecEwSw_VdwLJSw_GeomW4W4_F_c
876 * Electrostatics interaction: Ewald
877 * VdW interaction: LennardJones
878 * Geometry: Water4-Water4
879 * Calculate force/pot: Force
880 */
881void
882nb_kernel_ElecEwSw_VdwLJSw_GeomW4W4_F_c
883 (t_nblist * gmx_restrict__restrict nlist,
884 rvec * gmx_restrict__restrict xx,
885 rvec * gmx_restrict__restrict ff,
886 t_forcerec * gmx_restrict__restrict fr,
887 t_mdatoms * gmx_restrict__restrict mdatoms,
888 nb_kernel_data_t gmx_unused__attribute__ ((unused)) * gmx_restrict__restrict kernel_data,
889 t_nrnb * gmx_restrict__restrict nrnb)
890{
891 int i_shift_offset,i_coord_offset,j_coord_offset;
892 int j_index_start,j_index_end;
893 int nri,inr,ggid,iidx,jidx,jnr,outeriter,inneriter;
894 real shX,shY,shZ,tx,ty,tz,fscal,rcutoff,rcutoff2;
895 int *iinr,*jindex,*jjnr,*shiftidx,*gid;
896 real *shiftvec,*fshift,*x,*f;
897 int vdwioffset0;
898 real ix0,iy0,iz0,fix0,fiy0,fiz0,iq0,isai0;
899 int vdwioffset1;
900 real ix1,iy1,iz1,fix1,fiy1,fiz1,iq1,isai1;
901 int vdwioffset2;
902 real ix2,iy2,iz2,fix2,fiy2,fiz2,iq2,isai2;
903 int vdwioffset3;
904 real ix3,iy3,iz3,fix3,fiy3,fiz3,iq3,isai3;
905 int vdwjidx0;
906 real jx0,jy0,jz0,fjx0,fjy0,fjz0,jq0,isaj0;
907 int vdwjidx1;
908 real jx1,jy1,jz1,fjx1,fjy1,fjz1,jq1,isaj1;
909 int vdwjidx2;
910 real jx2,jy2,jz2,fjx2,fjy2,fjz2,jq2,isaj2;
911 int vdwjidx3;
912 real jx3,jy3,jz3,fjx3,fjy3,fjz3,jq3,isaj3;
913 real dx00,dy00,dz00,rsq00,rinv00,rinvsq00,r00,qq00,c6_00,c12_00,cexp1_00,cexp2_00;
914 real dx11,dy11,dz11,rsq11,rinv11,rinvsq11,r11,qq11,c6_11,c12_11,cexp1_11,cexp2_11;
915 real dx12,dy12,dz12,rsq12,rinv12,rinvsq12,r12,qq12,c6_12,c12_12,cexp1_12,cexp2_12;
916 real dx13,dy13,dz13,rsq13,rinv13,rinvsq13,r13,qq13,c6_13,c12_13,cexp1_13,cexp2_13;
917 real dx21,dy21,dz21,rsq21,rinv21,rinvsq21,r21,qq21,c6_21,c12_21,cexp1_21,cexp2_21;
918 real dx22,dy22,dz22,rsq22,rinv22,rinvsq22,r22,qq22,c6_22,c12_22,cexp1_22,cexp2_22;
919 real dx23,dy23,dz23,rsq23,rinv23,rinvsq23,r23,qq23,c6_23,c12_23,cexp1_23,cexp2_23;
920 real dx31,dy31,dz31,rsq31,rinv31,rinvsq31,r31,qq31,c6_31,c12_31,cexp1_31,cexp2_31;
921 real dx32,dy32,dz32,rsq32,rinv32,rinvsq32,r32,qq32,c6_32,c12_32,cexp1_32,cexp2_32;
922 real dx33,dy33,dz33,rsq33,rinv33,rinvsq33,r33,qq33,c6_33,c12_33,cexp1_33,cexp2_33;
923 real velec,felec,velecsum,facel,crf,krf,krf2;
924 real *charge;
925 int nvdwtype;
926 real rinvsix,rvdw,vvdw,vvdw6,vvdw12,fvdw,fvdw6,fvdw12,vvdwsum,br,vvdwexp,sh_vdw_invrcut6;
927 int *vdwtype;
928 real *vdwparam;
929 int ewitab;
930 real ewtabscale,eweps,sh_ewald,ewrt,ewtabhalfspace;
931 real *ewtab;
932 real rswitch,swV3,swV4,swV5,swF2,swF3,swF4,d,d2,sw,dsw;
933
934 x = xx[0];
935 f = ff[0];
936
937 nri = nlist->nri;
938 iinr = nlist->iinr;
939 jindex = nlist->jindex;
940 jjnr = nlist->jjnr;
941 shiftidx = nlist->shift;
942 gid = nlist->gid;
943 shiftvec = fr->shift_vec[0];
944 fshift = fr->fshift[0];
945 facel = fr->epsfac;
946 charge = mdatoms->chargeA;
947 nvdwtype = fr->ntype;
948 vdwparam = fr->nbfp;
949 vdwtype = mdatoms->typeA;
950
951 sh_ewald = fr->ic->sh_ewald;
Value stored to 'sh_ewald' is never read
952 ewtab = fr->ic->tabq_coul_FDV0;
953 ewtabscale = fr->ic->tabq_scale;
954 ewtabhalfspace = 0.5/ewtabscale;
955
956 /* Setup water-specific parameters */
957 inr = nlist->iinr[0];
958 iq1 = facel*charge[inr+1];
959 iq2 = facel*charge[inr+2];
960 iq3 = facel*charge[inr+3];
961 vdwioffset0 = 2*nvdwtype*vdwtype[inr+0];
962
963 jq1 = charge[inr+1];
964 jq2 = charge[inr+2];
965 jq3 = charge[inr+3];
966 vdwjidx0 = 2*vdwtype[inr+0];
967 c6_00 = vdwparam[vdwioffset0+vdwjidx0];
968 c12_00 = vdwparam[vdwioffset0+vdwjidx0+1];
969 qq11 = iq1*jq1;
970 qq12 = iq1*jq2;
971 qq13 = iq1*jq3;
972 qq21 = iq2*jq1;
973 qq22 = iq2*jq2;
974 qq23 = iq2*jq3;
975 qq31 = iq3*jq1;
976 qq32 = iq3*jq2;
977 qq33 = iq3*jq3;
978
979 /* When we use explicit cutoffs the value must be identical for elec and VdW, so use elec as an arbitrary choice */
980 rcutoff = fr->rcoulomb;
981 rcutoff2 = rcutoff*rcutoff;
982
983 rswitch = fr->rcoulomb_switch;
984 /* Setup switch parameters */
985 d = rcutoff-rswitch;
986 swV3 = -10.0/(d*d*d);
987 swV4 = 15.0/(d*d*d*d);
988 swV5 = -6.0/(d*d*d*d*d);
989 swF2 = -30.0/(d*d*d);
990 swF3 = 60.0/(d*d*d*d);
991 swF4 = -30.0/(d*d*d*d*d);
992
993 outeriter = 0;
994 inneriter = 0;
995
996 /* Start outer loop over neighborlists */
997 for(iidx=0; iidx<nri; iidx++)
998 {
999 /* Load shift vector for this list */
1000 i_shift_offset = DIM3*shiftidx[iidx];
1001 shX = shiftvec[i_shift_offset+XX0];
1002 shY = shiftvec[i_shift_offset+YY1];
1003 shZ = shiftvec[i_shift_offset+ZZ2];
1004
1005 /* Load limits for loop over neighbors */
1006 j_index_start = jindex[iidx];
1007 j_index_end = jindex[iidx+1];
1008
1009 /* Get outer coordinate index */
1010 inr = iinr[iidx];
1011 i_coord_offset = DIM3*inr;
1012
1013 /* Load i particle coords and add shift vector */
1014 ix0 = shX + x[i_coord_offset+DIM3*0+XX0];
1015 iy0 = shY + x[i_coord_offset+DIM3*0+YY1];
1016 iz0 = shZ + x[i_coord_offset+DIM3*0+ZZ2];
1017 ix1 = shX + x[i_coord_offset+DIM3*1+XX0];
1018 iy1 = shY + x[i_coord_offset+DIM3*1+YY1];
1019 iz1 = shZ + x[i_coord_offset+DIM3*1+ZZ2];
1020 ix2 = shX + x[i_coord_offset+DIM3*2+XX0];
1021 iy2 = shY + x[i_coord_offset+DIM3*2+YY1];
1022 iz2 = shZ + x[i_coord_offset+DIM3*2+ZZ2];
1023 ix3 = shX + x[i_coord_offset+DIM3*3+XX0];
1024 iy3 = shY + x[i_coord_offset+DIM3*3+YY1];
1025 iz3 = shZ + x[i_coord_offset+DIM3*3+ZZ2];
1026
1027 fix0 = 0.0;
1028 fiy0 = 0.0;
1029 fiz0 = 0.0;
1030 fix1 = 0.0;
1031 fiy1 = 0.0;
1032 fiz1 = 0.0;
1033 fix2 = 0.0;
1034 fiy2 = 0.0;
1035 fiz2 = 0.0;
1036 fix3 = 0.0;
1037 fiy3 = 0.0;
1038 fiz3 = 0.0;
1039
1040 /* Start inner kernel loop */
1041 for(jidx=j_index_start; jidx<j_index_end; jidx++)
1042 {
1043 /* Get j neighbor index, and coordinate index */
1044 jnr = jjnr[jidx];
1045 j_coord_offset = DIM3*jnr;
1046
1047 /* load j atom coordinates */
1048 jx0 = x[j_coord_offset+DIM3*0+XX0];
1049 jy0 = x[j_coord_offset+DIM3*0+YY1];
1050 jz0 = x[j_coord_offset+DIM3*0+ZZ2];
1051 jx1 = x[j_coord_offset+DIM3*1+XX0];
1052 jy1 = x[j_coord_offset+DIM3*1+YY1];
1053 jz1 = x[j_coord_offset+DIM3*1+ZZ2];
1054 jx2 = x[j_coord_offset+DIM3*2+XX0];
1055 jy2 = x[j_coord_offset+DIM3*2+YY1];
1056 jz2 = x[j_coord_offset+DIM3*2+ZZ2];
1057 jx3 = x[j_coord_offset+DIM3*3+XX0];
1058 jy3 = x[j_coord_offset+DIM3*3+YY1];
1059 jz3 = x[j_coord_offset+DIM3*3+ZZ2];
1060
1061 /* Calculate displacement vector */
1062 dx00 = ix0 - jx0;
1063 dy00 = iy0 - jy0;
1064 dz00 = iz0 - jz0;
1065 dx11 = ix1 - jx1;
1066 dy11 = iy1 - jy1;
1067 dz11 = iz1 - jz1;
1068 dx12 = ix1 - jx2;
1069 dy12 = iy1 - jy2;
1070 dz12 = iz1 - jz2;
1071 dx13 = ix1 - jx3;
1072 dy13 = iy1 - jy3;
1073 dz13 = iz1 - jz3;
1074 dx21 = ix2 - jx1;
1075 dy21 = iy2 - jy1;
1076 dz21 = iz2 - jz1;
1077 dx22 = ix2 - jx2;
1078 dy22 = iy2 - jy2;
1079 dz22 = iz2 - jz2;
1080 dx23 = ix2 - jx3;
1081 dy23 = iy2 - jy3;
1082 dz23 = iz2 - jz3;
1083 dx31 = ix3 - jx1;
1084 dy31 = iy3 - jy1;
1085 dz31 = iz3 - jz1;
1086 dx32 = ix3 - jx2;
1087 dy32 = iy3 - jy2;
1088 dz32 = iz3 - jz2;
1089 dx33 = ix3 - jx3;
1090 dy33 = iy3 - jy3;
1091 dz33 = iz3 - jz3;
1092
1093 /* Calculate squared distance and things based on it */
1094 rsq00 = dx00*dx00+dy00*dy00+dz00*dz00;
1095 rsq11 = dx11*dx11+dy11*dy11+dz11*dz11;
1096 rsq12 = dx12*dx12+dy12*dy12+dz12*dz12;
1097 rsq13 = dx13*dx13+dy13*dy13+dz13*dz13;
1098 rsq21 = dx21*dx21+dy21*dy21+dz21*dz21;
1099 rsq22 = dx22*dx22+dy22*dy22+dz22*dz22;
1100 rsq23 = dx23*dx23+dy23*dy23+dz23*dz23;
1101 rsq31 = dx31*dx31+dy31*dy31+dz31*dz31;
1102 rsq32 = dx32*dx32+dy32*dy32+dz32*dz32;
1103 rsq33 = dx33*dx33+dy33*dy33+dz33*dz33;
1104
1105 rinv00 = gmx_invsqrt(rsq00)gmx_software_invsqrt(rsq00);
1106 rinv11 = gmx_invsqrt(rsq11)gmx_software_invsqrt(rsq11);
1107 rinv12 = gmx_invsqrt(rsq12)gmx_software_invsqrt(rsq12);
1108 rinv13 = gmx_invsqrt(rsq13)gmx_software_invsqrt(rsq13);
1109 rinv21 = gmx_invsqrt(rsq21)gmx_software_invsqrt(rsq21);
1110 rinv22 = gmx_invsqrt(rsq22)gmx_software_invsqrt(rsq22);
1111 rinv23 = gmx_invsqrt(rsq23)gmx_software_invsqrt(rsq23);
1112 rinv31 = gmx_invsqrt(rsq31)gmx_software_invsqrt(rsq31);
1113 rinv32 = gmx_invsqrt(rsq32)gmx_software_invsqrt(rsq32);
1114 rinv33 = gmx_invsqrt(rsq33)gmx_software_invsqrt(rsq33);
1115
1116 rinvsq00 = rinv00*rinv00;
1117 rinvsq11 = rinv11*rinv11;
1118 rinvsq12 = rinv12*rinv12;
1119 rinvsq13 = rinv13*rinv13;
1120 rinvsq21 = rinv21*rinv21;
1121 rinvsq22 = rinv22*rinv22;
1122 rinvsq23 = rinv23*rinv23;
1123 rinvsq31 = rinv31*rinv31;
1124 rinvsq32 = rinv32*rinv32;
1125 rinvsq33 = rinv33*rinv33;
1126
1127 /**************************
1128 * CALCULATE INTERACTIONS *
1129 **************************/
1130
1131 if (rsq00<rcutoff2)
1132 {
1133
1134 r00 = rsq00*rinv00;
1135
1136 /* LENNARD-JONES DISPERSION/REPULSION */
1137
1138 rinvsix = rinvsq00*rinvsq00*rinvsq00;
1139 vvdw6 = c6_00*rinvsix;
1140 vvdw12 = c12_00*rinvsix*rinvsix;
1141 vvdw = vvdw12*(1.0/12.0) - vvdw6*(1.0/6.0);
1142 fvdw = (vvdw12-vvdw6)*rinvsq00;
1143
1144 d = r00-rswitch;
1145 d = (d>0.0) ? d : 0.0;
1146 d2 = d*d;
1147 sw = 1.0+d2*d*(swV3+d*(swV4+d*swV5));
1148
1149 dsw = d2*(swF2+d*(swF3+d*swF4));
1150
1151 /* Evaluate switch function */
1152 /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
1153 fvdw = fvdw*sw - rinv00*vvdw*dsw;
1154
1155 fscal = fvdw;
1156
1157 /* Calculate temporary vectorial force */
1158 tx = fscal*dx00;
1159 ty = fscal*dy00;
1160 tz = fscal*dz00;
1161
1162 /* Update vectorial force */
1163 fix0 += tx;
1164 fiy0 += ty;
1165 fiz0 += tz;
1166 f[j_coord_offset+DIM3*0+XX0] -= tx;
1167 f[j_coord_offset+DIM3*0+YY1] -= ty;
1168 f[j_coord_offset+DIM3*0+ZZ2] -= tz;
1169
1170 }
1171
1172 /**************************
1173 * CALCULATE INTERACTIONS *
1174 **************************/
1175
1176 if (rsq11<rcutoff2)
1177 {
1178
1179 r11 = rsq11*rinv11;
1180
1181 /* EWALD ELECTROSTATICS */
1182
1183 /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
1184 ewrt = r11*ewtabscale;
1185 ewitab = ewrt;
1186 eweps = ewrt-ewitab;
1187 ewitab = 4*ewitab;
1188 felec = ewtab[ewitab]+eweps*ewtab[ewitab+1];
1189 velec = qq11*(rinv11-(ewtab[ewitab+2]-ewtabhalfspace*eweps*(ewtab[ewitab]+felec)));
1190 felec = qq11*rinv11*(rinvsq11-felec);
1191
1192 d = r11-rswitch;
1193 d = (d>0.0) ? d : 0.0;
1194 d2 = d*d;
1195 sw = 1.0+d2*d*(swV3+d*(swV4+d*swV5));
1196
1197 dsw = d2*(swF2+d*(swF3+d*swF4));
1198
1199 /* Evaluate switch function */
1200 /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
1201 felec = felec*sw - rinv11*velec*dsw;
1202
1203 fscal = felec;
1204
1205 /* Calculate temporary vectorial force */
1206 tx = fscal*dx11;
1207 ty = fscal*dy11;
1208 tz = fscal*dz11;
1209
1210 /* Update vectorial force */
1211 fix1 += tx;
1212 fiy1 += ty;
1213 fiz1 += tz;
1214 f[j_coord_offset+DIM3*1+XX0] -= tx;
1215 f[j_coord_offset+DIM3*1+YY1] -= ty;
1216 f[j_coord_offset+DIM3*1+ZZ2] -= tz;
1217
1218 }
1219
1220 /**************************
1221 * CALCULATE INTERACTIONS *
1222 **************************/
1223
1224 if (rsq12<rcutoff2)
1225 {
1226
1227 r12 = rsq12*rinv12;
1228
1229 /* EWALD ELECTROSTATICS */
1230
1231 /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
1232 ewrt = r12*ewtabscale;
1233 ewitab = ewrt;
1234 eweps = ewrt-ewitab;
1235 ewitab = 4*ewitab;
1236 felec = ewtab[ewitab]+eweps*ewtab[ewitab+1];
1237 velec = qq12*(rinv12-(ewtab[ewitab+2]-ewtabhalfspace*eweps*(ewtab[ewitab]+felec)));
1238 felec = qq12*rinv12*(rinvsq12-felec);
1239
1240 d = r12-rswitch;
1241 d = (d>0.0) ? d : 0.0;
1242 d2 = d*d;
1243 sw = 1.0+d2*d*(swV3+d*(swV4+d*swV5));
1244
1245 dsw = d2*(swF2+d*(swF3+d*swF4));
1246
1247 /* Evaluate switch function */
1248 /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
1249 felec = felec*sw - rinv12*velec*dsw;
1250
1251 fscal = felec;
1252
1253 /* Calculate temporary vectorial force */
1254 tx = fscal*dx12;
1255 ty = fscal*dy12;
1256 tz = fscal*dz12;
1257
1258 /* Update vectorial force */
1259 fix1 += tx;
1260 fiy1 += ty;
1261 fiz1 += tz;
1262 f[j_coord_offset+DIM3*2+XX0] -= tx;
1263 f[j_coord_offset+DIM3*2+YY1] -= ty;
1264 f[j_coord_offset+DIM3*2+ZZ2] -= tz;
1265
1266 }
1267
1268 /**************************
1269 * CALCULATE INTERACTIONS *
1270 **************************/
1271
1272 if (rsq13<rcutoff2)
1273 {
1274
1275 r13 = rsq13*rinv13;
1276
1277 /* EWALD ELECTROSTATICS */
1278
1279 /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
1280 ewrt = r13*ewtabscale;
1281 ewitab = ewrt;
1282 eweps = ewrt-ewitab;
1283 ewitab = 4*ewitab;
1284 felec = ewtab[ewitab]+eweps*ewtab[ewitab+1];
1285 velec = qq13*(rinv13-(ewtab[ewitab+2]-ewtabhalfspace*eweps*(ewtab[ewitab]+felec)));
1286 felec = qq13*rinv13*(rinvsq13-felec);
1287
1288 d = r13-rswitch;
1289 d = (d>0.0) ? d : 0.0;
1290 d2 = d*d;
1291 sw = 1.0+d2*d*(swV3+d*(swV4+d*swV5));
1292
1293 dsw = d2*(swF2+d*(swF3+d*swF4));
1294
1295 /* Evaluate switch function */
1296 /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
1297 felec = felec*sw - rinv13*velec*dsw;
1298
1299 fscal = felec;
1300
1301 /* Calculate temporary vectorial force */
1302 tx = fscal*dx13;
1303 ty = fscal*dy13;
1304 tz = fscal*dz13;
1305
1306 /* Update vectorial force */
1307 fix1 += tx;
1308 fiy1 += ty;
1309 fiz1 += tz;
1310 f[j_coord_offset+DIM3*3+XX0] -= tx;
1311 f[j_coord_offset+DIM3*3+YY1] -= ty;
1312 f[j_coord_offset+DIM3*3+ZZ2] -= tz;
1313
1314 }
1315
1316 /**************************
1317 * CALCULATE INTERACTIONS *
1318 **************************/
1319
1320 if (rsq21<rcutoff2)
1321 {
1322
1323 r21 = rsq21*rinv21;
1324
1325 /* EWALD ELECTROSTATICS */
1326
1327 /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
1328 ewrt = r21*ewtabscale;
1329 ewitab = ewrt;
1330 eweps = ewrt-ewitab;
1331 ewitab = 4*ewitab;
1332 felec = ewtab[ewitab]+eweps*ewtab[ewitab+1];
1333 velec = qq21*(rinv21-(ewtab[ewitab+2]-ewtabhalfspace*eweps*(ewtab[ewitab]+felec)));
1334 felec = qq21*rinv21*(rinvsq21-felec);
1335
1336 d = r21-rswitch;
1337 d = (d>0.0) ? d : 0.0;
1338 d2 = d*d;
1339 sw = 1.0+d2*d*(swV3+d*(swV4+d*swV5));
1340
1341 dsw = d2*(swF2+d*(swF3+d*swF4));
1342
1343 /* Evaluate switch function */
1344 /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
1345 felec = felec*sw - rinv21*velec*dsw;
1346
1347 fscal = felec;
1348
1349 /* Calculate temporary vectorial force */
1350 tx = fscal*dx21;
1351 ty = fscal*dy21;
1352 tz = fscal*dz21;
1353
1354 /* Update vectorial force */
1355 fix2 += tx;
1356 fiy2 += ty;
1357 fiz2 += tz;
1358 f[j_coord_offset+DIM3*1+XX0] -= tx;
1359 f[j_coord_offset+DIM3*1+YY1] -= ty;
1360 f[j_coord_offset+DIM3*1+ZZ2] -= tz;
1361
1362 }
1363
1364 /**************************
1365 * CALCULATE INTERACTIONS *
1366 **************************/
1367
1368 if (rsq22<rcutoff2)
1369 {
1370
1371 r22 = rsq22*rinv22;
1372
1373 /* EWALD ELECTROSTATICS */
1374
1375 /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
1376 ewrt = r22*ewtabscale;
1377 ewitab = ewrt;
1378 eweps = ewrt-ewitab;
1379 ewitab = 4*ewitab;
1380 felec = ewtab[ewitab]+eweps*ewtab[ewitab+1];
1381 velec = qq22*(rinv22-(ewtab[ewitab+2]-ewtabhalfspace*eweps*(ewtab[ewitab]+felec)));
1382 felec = qq22*rinv22*(rinvsq22-felec);
1383
1384 d = r22-rswitch;
1385 d = (d>0.0) ? d : 0.0;
1386 d2 = d*d;
1387 sw = 1.0+d2*d*(swV3+d*(swV4+d*swV5));
1388
1389 dsw = d2*(swF2+d*(swF3+d*swF4));
1390
1391 /* Evaluate switch function */
1392 /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
1393 felec = felec*sw - rinv22*velec*dsw;
1394
1395 fscal = felec;
1396
1397 /* Calculate temporary vectorial force */
1398 tx = fscal*dx22;
1399 ty = fscal*dy22;
1400 tz = fscal*dz22;
1401
1402 /* Update vectorial force */
1403 fix2 += tx;
1404 fiy2 += ty;
1405 fiz2 += tz;
1406 f[j_coord_offset+DIM3*2+XX0] -= tx;
1407 f[j_coord_offset+DIM3*2+YY1] -= ty;
1408 f[j_coord_offset+DIM3*2+ZZ2] -= tz;
1409
1410 }
1411
1412 /**************************
1413 * CALCULATE INTERACTIONS *
1414 **************************/
1415
1416 if (rsq23<rcutoff2)
1417 {
1418
1419 r23 = rsq23*rinv23;
1420
1421 /* EWALD ELECTROSTATICS */
1422
1423 /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
1424 ewrt = r23*ewtabscale;
1425 ewitab = ewrt;
1426 eweps = ewrt-ewitab;
1427 ewitab = 4*ewitab;
1428 felec = ewtab[ewitab]+eweps*ewtab[ewitab+1];
1429 velec = qq23*(rinv23-(ewtab[ewitab+2]-ewtabhalfspace*eweps*(ewtab[ewitab]+felec)));
1430 felec = qq23*rinv23*(rinvsq23-felec);
1431
1432 d = r23-rswitch;
1433 d = (d>0.0) ? d : 0.0;
1434 d2 = d*d;
1435 sw = 1.0+d2*d*(swV3+d*(swV4+d*swV5));
1436
1437 dsw = d2*(swF2+d*(swF3+d*swF4));
1438
1439 /* Evaluate switch function */
1440 /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
1441 felec = felec*sw - rinv23*velec*dsw;
1442
1443 fscal = felec;
1444
1445 /* Calculate temporary vectorial force */
1446 tx = fscal*dx23;
1447 ty = fscal*dy23;
1448 tz = fscal*dz23;
1449
1450 /* Update vectorial force */
1451 fix2 += tx;
1452 fiy2 += ty;
1453 fiz2 += tz;
1454 f[j_coord_offset+DIM3*3+XX0] -= tx;
1455 f[j_coord_offset+DIM3*3+YY1] -= ty;
1456 f[j_coord_offset+DIM3*3+ZZ2] -= tz;
1457
1458 }
1459
1460 /**************************
1461 * CALCULATE INTERACTIONS *
1462 **************************/
1463
1464 if (rsq31<rcutoff2)
1465 {
1466
1467 r31 = rsq31*rinv31;
1468
1469 /* EWALD ELECTROSTATICS */
1470
1471 /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
1472 ewrt = r31*ewtabscale;
1473 ewitab = ewrt;
1474 eweps = ewrt-ewitab;
1475 ewitab = 4*ewitab;
1476 felec = ewtab[ewitab]+eweps*ewtab[ewitab+1];
1477 velec = qq31*(rinv31-(ewtab[ewitab+2]-ewtabhalfspace*eweps*(ewtab[ewitab]+felec)));
1478 felec = qq31*rinv31*(rinvsq31-felec);
1479
1480 d = r31-rswitch;
1481 d = (d>0.0) ? d : 0.0;
1482 d2 = d*d;
1483 sw = 1.0+d2*d*(swV3+d*(swV4+d*swV5));
1484
1485 dsw = d2*(swF2+d*(swF3+d*swF4));
1486
1487 /* Evaluate switch function */
1488 /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
1489 felec = felec*sw - rinv31*velec*dsw;
1490
1491 fscal = felec;
1492
1493 /* Calculate temporary vectorial force */
1494 tx = fscal*dx31;
1495 ty = fscal*dy31;
1496 tz = fscal*dz31;
1497
1498 /* Update vectorial force */
1499 fix3 += tx;
1500 fiy3 += ty;
1501 fiz3 += tz;
1502 f[j_coord_offset+DIM3*1+XX0] -= tx;
1503 f[j_coord_offset+DIM3*1+YY1] -= ty;
1504 f[j_coord_offset+DIM3*1+ZZ2] -= tz;
1505
1506 }
1507
1508 /**************************
1509 * CALCULATE INTERACTIONS *
1510 **************************/
1511
1512 if (rsq32<rcutoff2)
1513 {
1514
1515 r32 = rsq32*rinv32;
1516
1517 /* EWALD ELECTROSTATICS */
1518
1519 /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
1520 ewrt = r32*ewtabscale;
1521 ewitab = ewrt;
1522 eweps = ewrt-ewitab;
1523 ewitab = 4*ewitab;
1524 felec = ewtab[ewitab]+eweps*ewtab[ewitab+1];
1525 velec = qq32*(rinv32-(ewtab[ewitab+2]-ewtabhalfspace*eweps*(ewtab[ewitab]+felec)));
1526 felec = qq32*rinv32*(rinvsq32-felec);
1527
1528 d = r32-rswitch;
1529 d = (d>0.0) ? d : 0.0;
1530 d2 = d*d;
1531 sw = 1.0+d2*d*(swV3+d*(swV4+d*swV5));
1532
1533 dsw = d2*(swF2+d*(swF3+d*swF4));
1534
1535 /* Evaluate switch function */
1536 /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
1537 felec = felec*sw - rinv32*velec*dsw;
1538
1539 fscal = felec;
1540
1541 /* Calculate temporary vectorial force */
1542 tx = fscal*dx32;
1543 ty = fscal*dy32;
1544 tz = fscal*dz32;
1545
1546 /* Update vectorial force */
1547 fix3 += tx;
1548 fiy3 += ty;
1549 fiz3 += tz;
1550 f[j_coord_offset+DIM3*2+XX0] -= tx;
1551 f[j_coord_offset+DIM3*2+YY1] -= ty;
1552 f[j_coord_offset+DIM3*2+ZZ2] -= tz;
1553
1554 }
1555
1556 /**************************
1557 * CALCULATE INTERACTIONS *
1558 **************************/
1559
1560 if (rsq33<rcutoff2)
1561 {
1562
1563 r33 = rsq33*rinv33;
1564
1565 /* EWALD ELECTROSTATICS */
1566
1567 /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
1568 ewrt = r33*ewtabscale;
1569 ewitab = ewrt;
1570 eweps = ewrt-ewitab;
1571 ewitab = 4*ewitab;
1572 felec = ewtab[ewitab]+eweps*ewtab[ewitab+1];
1573 velec = qq33*(rinv33-(ewtab[ewitab+2]-ewtabhalfspace*eweps*(ewtab[ewitab]+felec)));
1574 felec = qq33*rinv33*(rinvsq33-felec);
1575
1576 d = r33-rswitch;
1577 d = (d>0.0) ? d : 0.0;
1578 d2 = d*d;
1579 sw = 1.0+d2*d*(swV3+d*(swV4+d*swV5));
1580
1581 dsw = d2*(swF2+d*(swF3+d*swF4));
1582
1583 /* Evaluate switch function */
1584 /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
1585 felec = felec*sw - rinv33*velec*dsw;
1586
1587 fscal = felec;
1588
1589 /* Calculate temporary vectorial force */
1590 tx = fscal*dx33;
1591 ty = fscal*dy33;
1592 tz = fscal*dz33;
1593
1594 /* Update vectorial force */
1595 fix3 += tx;
1596 fiy3 += ty;
1597 fiz3 += tz;
1598 f[j_coord_offset+DIM3*3+XX0] -= tx;
1599 f[j_coord_offset+DIM3*3+YY1] -= ty;
1600 f[j_coord_offset+DIM3*3+ZZ2] -= tz;
1601
1602 }
1603
1604 /* Inner loop uses 555 flops */
1605 }
1606 /* End of innermost loop */
1607
1608 tx = ty = tz = 0;
1609 f[i_coord_offset+DIM3*0+XX0] += fix0;
1610 f[i_coord_offset+DIM3*0+YY1] += fiy0;
1611 f[i_coord_offset+DIM3*0+ZZ2] += fiz0;
1612 tx += fix0;
1613 ty += fiy0;
1614 tz += fiz0;
1615 f[i_coord_offset+DIM3*1+XX0] += fix1;
1616 f[i_coord_offset+DIM3*1+YY1] += fiy1;
1617 f[i_coord_offset+DIM3*1+ZZ2] += fiz1;
1618 tx += fix1;
1619 ty += fiy1;
1620 tz += fiz1;
1621 f[i_coord_offset+DIM3*2+XX0] += fix2;
1622 f[i_coord_offset+DIM3*2+YY1] += fiy2;
1623 f[i_coord_offset+DIM3*2+ZZ2] += fiz2;
1624 tx += fix2;
1625 ty += fiy2;
1626 tz += fiz2;
1627 f[i_coord_offset+DIM3*3+XX0] += fix3;
1628 f[i_coord_offset+DIM3*3+YY1] += fiy3;
1629 f[i_coord_offset+DIM3*3+ZZ2] += fiz3;
1630 tx += fix3;
1631 ty += fiy3;
1632 tz += fiz3;
1633 fshift[i_shift_offset+XX0] += tx;
1634 fshift[i_shift_offset+YY1] += ty;
1635 fshift[i_shift_offset+ZZ2] += tz;
1636
1637 /* Increment number of inner iterations */
1638 inneriter += j_index_end - j_index_start;
1639
1640 /* Outer loop uses 39 flops */
1641 }
1642
1643 /* Increment number of outer iterations */
1644 outeriter += nri;
1645
1646 /* Update outer/inner flops */
1647
1648 inc_nrnb(nrnb,eNR_NBKERNEL_ELEC_VDW_W4W4_F,outeriter*39 + inneriter*555)(nrnb)->n[eNR_NBKERNEL_ELEC_VDW_W4W4_F] += outeriter*39 + inneriter
*555
;
1649}