aefa98e235d51e6eaf3a1160d5192b3bf721d99f
[alexxy/gromacs.git] / src / gromacs / gmxlib / nonbonded / nb_kernel_sparc64_hpc_ace_double / nb_kernel_ElecEwSw_VdwNone_GeomW3W3_sparc64_hpc_ace_double.c
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 sparc64_hpc_ace_double kernel generator.
37  */
38 #include "config.h"
39
40 #include <math.h>
41
42 #include "../nb_kernel.h"
43 #include "gromacs/legacyheaders/types/simple.h"
44 #include "gromacs/math/vec.h"
45 #include "gromacs/legacyheaders/nrnb.h"
46
47 #include "kernelutil_sparc64_hpc_ace_double.h"
48
49 /*
50  * Gromacs nonbonded kernel:   nb_kernel_ElecEwSw_VdwNone_GeomW3W3_VF_sparc64_hpc_ace_double
51  * Electrostatics interaction: Ewald
52  * VdW interaction:            None
53  * Geometry:                   Water3-Water3
54  * Calculate force/pot:        PotentialAndForce
55  */
56 void
57 nb_kernel_ElecEwSw_VdwNone_GeomW3W3_VF_sparc64_hpc_ace_double
58                     (t_nblist                    * gmx_restrict       nlist,
59                      rvec                        * gmx_restrict          xx,
60                      rvec                        * gmx_restrict          ff,
61                      t_forcerec                  * gmx_restrict          fr,
62                      t_mdatoms                   * gmx_restrict     mdatoms,
63                      nb_kernel_data_t gmx_unused * gmx_restrict kernel_data,
64                      t_nrnb                      * gmx_restrict        nrnb)
65 {
66     /* Suffixes 0,1,2,3 refer to particle indices for waters in the inner or outer loop, or
67      * just 0 for non-waters.
68      * Suffixes A,B refer to j loop unrolling done with double precision SIMD, e.g. for the two different
69      * jnr indices corresponding to data put in the four positions in the SIMD register.
70      */
71     int              i_shift_offset,i_coord_offset,outeriter,inneriter;
72     int              j_index_start,j_index_end,jidx,nri,inr,ggid,iidx;
73     int              jnrA,jnrB;
74     int              j_coord_offsetA,j_coord_offsetB;
75     int              *iinr,*jindex,*jjnr,*shiftidx,*gid;
76     real             rcutoff_scalar;
77     real             *shiftvec,*fshift,*x,*f;
78     _fjsp_v2r8       tx,ty,tz,fscal,rcutoff,rcutoff2,jidxall;
79     int              vdwioffset0;
80     _fjsp_v2r8       ix0,iy0,iz0,fix0,fiy0,fiz0,iq0,isai0;
81     int              vdwioffset1;
82     _fjsp_v2r8       ix1,iy1,iz1,fix1,fiy1,fiz1,iq1,isai1;
83     int              vdwioffset2;
84     _fjsp_v2r8       ix2,iy2,iz2,fix2,fiy2,fiz2,iq2,isai2;
85     int              vdwjidx0A,vdwjidx0B;
86     _fjsp_v2r8       jx0,jy0,jz0,fjx0,fjy0,fjz0,jq0,isaj0;
87     int              vdwjidx1A,vdwjidx1B;
88     _fjsp_v2r8       jx1,jy1,jz1,fjx1,fjy1,fjz1,jq1,isaj1;
89     int              vdwjidx2A,vdwjidx2B;
90     _fjsp_v2r8       jx2,jy2,jz2,fjx2,fjy2,fjz2,jq2,isaj2;
91     _fjsp_v2r8       dx00,dy00,dz00,rsq00,rinv00,rinvsq00,r00,qq00,c6_00,c12_00;
92     _fjsp_v2r8       dx01,dy01,dz01,rsq01,rinv01,rinvsq01,r01,qq01,c6_01,c12_01;
93     _fjsp_v2r8       dx02,dy02,dz02,rsq02,rinv02,rinvsq02,r02,qq02,c6_02,c12_02;
94     _fjsp_v2r8       dx10,dy10,dz10,rsq10,rinv10,rinvsq10,r10,qq10,c6_10,c12_10;
95     _fjsp_v2r8       dx11,dy11,dz11,rsq11,rinv11,rinvsq11,r11,qq11,c6_11,c12_11;
96     _fjsp_v2r8       dx12,dy12,dz12,rsq12,rinv12,rinvsq12,r12,qq12,c6_12,c12_12;
97     _fjsp_v2r8       dx20,dy20,dz20,rsq20,rinv20,rinvsq20,r20,qq20,c6_20,c12_20;
98     _fjsp_v2r8       dx21,dy21,dz21,rsq21,rinv21,rinvsq21,r21,qq21,c6_21,c12_21;
99     _fjsp_v2r8       dx22,dy22,dz22,rsq22,rinv22,rinvsq22,r22,qq22,c6_22,c12_22;
100     _fjsp_v2r8       velec,felec,velecsum,facel,crf,krf,krf2;
101     real             *charge;
102     _fjsp_v2r8       ewtabscale,eweps,sh_ewald,ewrt,ewtabhalfspace,ewtabF,ewtabFn,ewtabD,ewtabV;
103     real             *ewtab;
104     _fjsp_v2r8       rswitch,swV3,swV4,swV5,swF2,swF3,swF4,d,d2,sw,dsw;
105     real             rswitch_scalar,d_scalar;
106     _fjsp_v2r8       itab_tmp;
107     _fjsp_v2r8       dummy_mask,cutoff_mask;
108     _fjsp_v2r8       one     = gmx_fjsp_set1_v2r8(1.0);
109     _fjsp_v2r8       two     = gmx_fjsp_set1_v2r8(2.0);
110     union { _fjsp_v2r8 simd; long long int i[2]; } vfconv,gbconv,ewconv;
111
112     x                = xx[0];
113     f                = ff[0];
114
115     nri              = nlist->nri;
116     iinr             = nlist->iinr;
117     jindex           = nlist->jindex;
118     jjnr             = nlist->jjnr;
119     shiftidx         = nlist->shift;
120     gid              = nlist->gid;
121     shiftvec         = fr->shift_vec[0];
122     fshift           = fr->fshift[0];
123     facel            = gmx_fjsp_set1_v2r8(fr->epsfac);
124     charge           = mdatoms->chargeA;
125
126     sh_ewald         = gmx_fjsp_set1_v2r8(fr->ic->sh_ewald);
127     ewtab            = fr->ic->tabq_coul_FDV0;
128     ewtabscale       = gmx_fjsp_set1_v2r8(fr->ic->tabq_scale);
129     ewtabhalfspace   = gmx_fjsp_set1_v2r8(0.5/fr->ic->tabq_scale);
130
131     /* Setup water-specific parameters */
132     inr              = nlist->iinr[0];
133     iq0              = _fjsp_mul_v2r8(facel,gmx_fjsp_set1_v2r8(charge[inr+0]));
134     iq1              = _fjsp_mul_v2r8(facel,gmx_fjsp_set1_v2r8(charge[inr+1]));
135     iq2              = _fjsp_mul_v2r8(facel,gmx_fjsp_set1_v2r8(charge[inr+2]));
136
137     jq0              = gmx_fjsp_set1_v2r8(charge[inr+0]);
138     jq1              = gmx_fjsp_set1_v2r8(charge[inr+1]);
139     jq2              = gmx_fjsp_set1_v2r8(charge[inr+2]);
140     qq00             = _fjsp_mul_v2r8(iq0,jq0);
141     qq01             = _fjsp_mul_v2r8(iq0,jq1);
142     qq02             = _fjsp_mul_v2r8(iq0,jq2);
143     qq10             = _fjsp_mul_v2r8(iq1,jq0);
144     qq11             = _fjsp_mul_v2r8(iq1,jq1);
145     qq12             = _fjsp_mul_v2r8(iq1,jq2);
146     qq20             = _fjsp_mul_v2r8(iq2,jq0);
147     qq21             = _fjsp_mul_v2r8(iq2,jq1);
148     qq22             = _fjsp_mul_v2r8(iq2,jq2);
149
150     /* When we use explicit cutoffs the value must be identical for elec and VdW, so use elec as an arbitrary choice */
151     rcutoff_scalar   = fr->rcoulomb;
152     rcutoff          = gmx_fjsp_set1_v2r8(rcutoff_scalar);
153     rcutoff2         = _fjsp_mul_v2r8(rcutoff,rcutoff);
154
155     rswitch_scalar   = fr->rcoulomb_switch;
156     rswitch          = gmx_fjsp_set1_v2r8(rswitch_scalar);
157     /* Setup switch parameters */
158     d_scalar         = rcutoff_scalar-rswitch_scalar;
159     d                = gmx_fjsp_set1_v2r8(d_scalar);
160     swV3             = gmx_fjsp_set1_v2r8(-10.0/(d_scalar*d_scalar*d_scalar));
161     swV4             = gmx_fjsp_set1_v2r8( 15.0/(d_scalar*d_scalar*d_scalar*d_scalar));
162     swV5             = gmx_fjsp_set1_v2r8( -6.0/(d_scalar*d_scalar*d_scalar*d_scalar*d_scalar));
163     swF2             = gmx_fjsp_set1_v2r8(-30.0/(d_scalar*d_scalar*d_scalar));
164     swF3             = gmx_fjsp_set1_v2r8( 60.0/(d_scalar*d_scalar*d_scalar*d_scalar));
165     swF4             = gmx_fjsp_set1_v2r8(-30.0/(d_scalar*d_scalar*d_scalar*d_scalar*d_scalar));
166
167     /* Avoid stupid compiler warnings */
168     jnrA = jnrB = 0;
169     j_coord_offsetA = 0;
170     j_coord_offsetB = 0;
171
172     outeriter        = 0;
173     inneriter        = 0;
174
175     /* Start outer loop over neighborlists */
176     for(iidx=0; iidx<nri; iidx++)
177     {
178         /* Load shift vector for this list */
179         i_shift_offset   = DIM*shiftidx[iidx];
180
181         /* Load limits for loop over neighbors */
182         j_index_start    = jindex[iidx];
183         j_index_end      = jindex[iidx+1];
184
185         /* Get outer coordinate index */
186         inr              = iinr[iidx];
187         i_coord_offset   = DIM*inr;
188
189         /* Load i particle coords and add shift vector */
190         gmx_fjsp_load_shift_and_3rvec_broadcast_v2r8(shiftvec+i_shift_offset,x+i_coord_offset,
191                                                  &ix0,&iy0,&iz0,&ix1,&iy1,&iz1,&ix2,&iy2,&iz2);
192
193         fix0             = _fjsp_setzero_v2r8();
194         fiy0             = _fjsp_setzero_v2r8();
195         fiz0             = _fjsp_setzero_v2r8();
196         fix1             = _fjsp_setzero_v2r8();
197         fiy1             = _fjsp_setzero_v2r8();
198         fiz1             = _fjsp_setzero_v2r8();
199         fix2             = _fjsp_setzero_v2r8();
200         fiy2             = _fjsp_setzero_v2r8();
201         fiz2             = _fjsp_setzero_v2r8();
202
203         /* Reset potential sums */
204         velecsum         = _fjsp_setzero_v2r8();
205
206         /* Start inner kernel loop */
207         for(jidx=j_index_start; jidx<j_index_end-1; jidx+=2)
208         {
209
210             /* Get j neighbor index, and coordinate index */
211             jnrA             = jjnr[jidx];
212             jnrB             = jjnr[jidx+1];
213             j_coord_offsetA  = DIM*jnrA;
214             j_coord_offsetB  = DIM*jnrB;
215
216             /* load j atom coordinates */
217             gmx_fjsp_load_3rvec_2ptr_swizzle_v2r8(x+j_coord_offsetA,x+j_coord_offsetB,
218                                               &jx0,&jy0,&jz0,&jx1,&jy1,&jz1,&jx2,&jy2,&jz2);
219
220             /* Calculate displacement vector */
221             dx00             = _fjsp_sub_v2r8(ix0,jx0);
222             dy00             = _fjsp_sub_v2r8(iy0,jy0);
223             dz00             = _fjsp_sub_v2r8(iz0,jz0);
224             dx01             = _fjsp_sub_v2r8(ix0,jx1);
225             dy01             = _fjsp_sub_v2r8(iy0,jy1);
226             dz01             = _fjsp_sub_v2r8(iz0,jz1);
227             dx02             = _fjsp_sub_v2r8(ix0,jx2);
228             dy02             = _fjsp_sub_v2r8(iy0,jy2);
229             dz02             = _fjsp_sub_v2r8(iz0,jz2);
230             dx10             = _fjsp_sub_v2r8(ix1,jx0);
231             dy10             = _fjsp_sub_v2r8(iy1,jy0);
232             dz10             = _fjsp_sub_v2r8(iz1,jz0);
233             dx11             = _fjsp_sub_v2r8(ix1,jx1);
234             dy11             = _fjsp_sub_v2r8(iy1,jy1);
235             dz11             = _fjsp_sub_v2r8(iz1,jz1);
236             dx12             = _fjsp_sub_v2r8(ix1,jx2);
237             dy12             = _fjsp_sub_v2r8(iy1,jy2);
238             dz12             = _fjsp_sub_v2r8(iz1,jz2);
239             dx20             = _fjsp_sub_v2r8(ix2,jx0);
240             dy20             = _fjsp_sub_v2r8(iy2,jy0);
241             dz20             = _fjsp_sub_v2r8(iz2,jz0);
242             dx21             = _fjsp_sub_v2r8(ix2,jx1);
243             dy21             = _fjsp_sub_v2r8(iy2,jy1);
244             dz21             = _fjsp_sub_v2r8(iz2,jz1);
245             dx22             = _fjsp_sub_v2r8(ix2,jx2);
246             dy22             = _fjsp_sub_v2r8(iy2,jy2);
247             dz22             = _fjsp_sub_v2r8(iz2,jz2);
248
249             /* Calculate squared distance and things based on it */
250             rsq00            = gmx_fjsp_calc_rsq_v2r8(dx00,dy00,dz00);
251             rsq01            = gmx_fjsp_calc_rsq_v2r8(dx01,dy01,dz01);
252             rsq02            = gmx_fjsp_calc_rsq_v2r8(dx02,dy02,dz02);
253             rsq10            = gmx_fjsp_calc_rsq_v2r8(dx10,dy10,dz10);
254             rsq11            = gmx_fjsp_calc_rsq_v2r8(dx11,dy11,dz11);
255             rsq12            = gmx_fjsp_calc_rsq_v2r8(dx12,dy12,dz12);
256             rsq20            = gmx_fjsp_calc_rsq_v2r8(dx20,dy20,dz20);
257             rsq21            = gmx_fjsp_calc_rsq_v2r8(dx21,dy21,dz21);
258             rsq22            = gmx_fjsp_calc_rsq_v2r8(dx22,dy22,dz22);
259
260             rinv00           = gmx_fjsp_invsqrt_v2r8(rsq00);
261             rinv01           = gmx_fjsp_invsqrt_v2r8(rsq01);
262             rinv02           = gmx_fjsp_invsqrt_v2r8(rsq02);
263             rinv10           = gmx_fjsp_invsqrt_v2r8(rsq10);
264             rinv11           = gmx_fjsp_invsqrt_v2r8(rsq11);
265             rinv12           = gmx_fjsp_invsqrt_v2r8(rsq12);
266             rinv20           = gmx_fjsp_invsqrt_v2r8(rsq20);
267             rinv21           = gmx_fjsp_invsqrt_v2r8(rsq21);
268             rinv22           = gmx_fjsp_invsqrt_v2r8(rsq22);
269
270             rinvsq00         = _fjsp_mul_v2r8(rinv00,rinv00);
271             rinvsq01         = _fjsp_mul_v2r8(rinv01,rinv01);
272             rinvsq02         = _fjsp_mul_v2r8(rinv02,rinv02);
273             rinvsq10         = _fjsp_mul_v2r8(rinv10,rinv10);
274             rinvsq11         = _fjsp_mul_v2r8(rinv11,rinv11);
275             rinvsq12         = _fjsp_mul_v2r8(rinv12,rinv12);
276             rinvsq20         = _fjsp_mul_v2r8(rinv20,rinv20);
277             rinvsq21         = _fjsp_mul_v2r8(rinv21,rinv21);
278             rinvsq22         = _fjsp_mul_v2r8(rinv22,rinv22);
279
280             fjx0             = _fjsp_setzero_v2r8();
281             fjy0             = _fjsp_setzero_v2r8();
282             fjz0             = _fjsp_setzero_v2r8();
283             fjx1             = _fjsp_setzero_v2r8();
284             fjy1             = _fjsp_setzero_v2r8();
285             fjz1             = _fjsp_setzero_v2r8();
286             fjx2             = _fjsp_setzero_v2r8();
287             fjy2             = _fjsp_setzero_v2r8();
288             fjz2             = _fjsp_setzero_v2r8();
289
290             /**************************
291              * CALCULATE INTERACTIONS *
292              **************************/
293
294             if (gmx_fjsp_any_lt_v2r8(rsq00,rcutoff2))
295             {
296
297             r00              = _fjsp_mul_v2r8(rsq00,rinv00);
298
299             /* EWALD ELECTROSTATICS */
300
301             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
302             ewrt             = _fjsp_mul_v2r8(r00,ewtabscale);
303             itab_tmp         = _fjsp_dtox_v2r8(ewrt);
304             eweps            = _fjsp_sub_v2r8(ewrt,_fjsp_xtod_v2r8(itab_tmp));
305             _fjsp_store_v2r8(&ewconv.simd,itab_tmp);
306
307             ewtabF           = _fjsp_load_v2r8( ewtab + 4*ewconv.i[0] );
308             ewtabD           = _fjsp_load_v2r8( ewtab + 4*ewconv.i[1] );
309             GMX_FJSP_TRANSPOSE2_V2R8(ewtabF,ewtabD);
310             ewtabV           = _fjsp_loadl_v2r8(_fjsp_setzero_v2r8(), ewtab + 4*ewconv.i[0] +2);
311             ewtabFn          = _fjsp_loadl_v2r8(_fjsp_setzero_v2r8(), ewtab + 4*ewconv.i[1] +2);
312             GMX_FJSP_TRANSPOSE2_V2R8(ewtabV,ewtabFn);
313             felec            = _fjsp_madd_v2r8(eweps,ewtabD,ewtabF);
314             velec            = _fjsp_nmsub_v2r8(_fjsp_mul_v2r8(ewtabhalfspace,eweps) ,_fjsp_add_v2r8(ewtabF,felec), ewtabV);
315             velec            = _fjsp_mul_v2r8(qq00,_fjsp_sub_v2r8(rinv00,velec));
316             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq00,rinv00),_fjsp_sub_v2r8(rinvsq00,felec));
317
318             d                = _fjsp_sub_v2r8(r00,rswitch);
319             d                = _fjsp_max_v2r8(d,_fjsp_setzero_v2r8());
320             d2               = _fjsp_mul_v2r8(d,d);
321             sw               = _fjsp_add_v2r8(one,_fjsp_mul_v2r8(d2,_fjsp_mul_v2r8(d,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swV5,swV4),swV3))));
322
323             dsw              = _fjsp_mul_v2r8(d2,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swF4,swF3),swF2));
324
325             /* Evaluate switch function */
326             /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
327             felec            = _fjsp_msub_v2r8( felec,sw , _fjsp_mul_v2r8(rinv00,_fjsp_mul_v2r8(velec,dsw)) );
328             velec            = _fjsp_mul_v2r8(velec,sw);
329             cutoff_mask      = _fjsp_cmplt_v2r8(rsq00,rcutoff2);
330
331             /* Update potential sum for this i atom from the interaction with this j atom. */
332             velec            = _fjsp_and_v2r8(velec,cutoff_mask);
333             velecsum         = _fjsp_add_v2r8(velecsum,velec);
334
335             fscal            = felec;
336
337             fscal            = _fjsp_and_v2r8(fscal,cutoff_mask);
338
339             /* Update vectorial force */
340             fix0             = _fjsp_madd_v2r8(dx00,fscal,fix0);
341             fiy0             = _fjsp_madd_v2r8(dy00,fscal,fiy0);
342             fiz0             = _fjsp_madd_v2r8(dz00,fscal,fiz0);
343             
344             fjx0             = _fjsp_madd_v2r8(dx00,fscal,fjx0);
345             fjy0             = _fjsp_madd_v2r8(dy00,fscal,fjy0);
346             fjz0             = _fjsp_madd_v2r8(dz00,fscal,fjz0);
347
348             }
349
350             /**************************
351              * CALCULATE INTERACTIONS *
352              **************************/
353
354             if (gmx_fjsp_any_lt_v2r8(rsq01,rcutoff2))
355             {
356
357             r01              = _fjsp_mul_v2r8(rsq01,rinv01);
358
359             /* EWALD ELECTROSTATICS */
360
361             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
362             ewrt             = _fjsp_mul_v2r8(r01,ewtabscale);
363             itab_tmp         = _fjsp_dtox_v2r8(ewrt);
364             eweps            = _fjsp_sub_v2r8(ewrt,_fjsp_xtod_v2r8(itab_tmp));
365             _fjsp_store_v2r8(&ewconv.simd,itab_tmp);
366
367             ewtabF           = _fjsp_load_v2r8( ewtab + 4*ewconv.i[0] );
368             ewtabD           = _fjsp_load_v2r8( ewtab + 4*ewconv.i[1] );
369             GMX_FJSP_TRANSPOSE2_V2R8(ewtabF,ewtabD);
370             ewtabV           = _fjsp_loadl_v2r8(_fjsp_setzero_v2r8(), ewtab + 4*ewconv.i[0] +2);
371             ewtabFn          = _fjsp_loadl_v2r8(_fjsp_setzero_v2r8(), ewtab + 4*ewconv.i[1] +2);
372             GMX_FJSP_TRANSPOSE2_V2R8(ewtabV,ewtabFn);
373             felec            = _fjsp_madd_v2r8(eweps,ewtabD,ewtabF);
374             velec            = _fjsp_nmsub_v2r8(_fjsp_mul_v2r8(ewtabhalfspace,eweps) ,_fjsp_add_v2r8(ewtabF,felec), ewtabV);
375             velec            = _fjsp_mul_v2r8(qq01,_fjsp_sub_v2r8(rinv01,velec));
376             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq01,rinv01),_fjsp_sub_v2r8(rinvsq01,felec));
377
378             d                = _fjsp_sub_v2r8(r01,rswitch);
379             d                = _fjsp_max_v2r8(d,_fjsp_setzero_v2r8());
380             d2               = _fjsp_mul_v2r8(d,d);
381             sw               = _fjsp_add_v2r8(one,_fjsp_mul_v2r8(d2,_fjsp_mul_v2r8(d,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swV5,swV4),swV3))));
382
383             dsw              = _fjsp_mul_v2r8(d2,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swF4,swF3),swF2));
384
385             /* Evaluate switch function */
386             /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
387             felec            = _fjsp_msub_v2r8( felec,sw , _fjsp_mul_v2r8(rinv01,_fjsp_mul_v2r8(velec,dsw)) );
388             velec            = _fjsp_mul_v2r8(velec,sw);
389             cutoff_mask      = _fjsp_cmplt_v2r8(rsq01,rcutoff2);
390
391             /* Update potential sum for this i atom from the interaction with this j atom. */
392             velec            = _fjsp_and_v2r8(velec,cutoff_mask);
393             velecsum         = _fjsp_add_v2r8(velecsum,velec);
394
395             fscal            = felec;
396
397             fscal            = _fjsp_and_v2r8(fscal,cutoff_mask);
398
399             /* Update vectorial force */
400             fix0             = _fjsp_madd_v2r8(dx01,fscal,fix0);
401             fiy0             = _fjsp_madd_v2r8(dy01,fscal,fiy0);
402             fiz0             = _fjsp_madd_v2r8(dz01,fscal,fiz0);
403             
404             fjx1             = _fjsp_madd_v2r8(dx01,fscal,fjx1);
405             fjy1             = _fjsp_madd_v2r8(dy01,fscal,fjy1);
406             fjz1             = _fjsp_madd_v2r8(dz01,fscal,fjz1);
407
408             }
409
410             /**************************
411              * CALCULATE INTERACTIONS *
412              **************************/
413
414             if (gmx_fjsp_any_lt_v2r8(rsq02,rcutoff2))
415             {
416
417             r02              = _fjsp_mul_v2r8(rsq02,rinv02);
418
419             /* EWALD ELECTROSTATICS */
420
421             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
422             ewrt             = _fjsp_mul_v2r8(r02,ewtabscale);
423             itab_tmp         = _fjsp_dtox_v2r8(ewrt);
424             eweps            = _fjsp_sub_v2r8(ewrt,_fjsp_xtod_v2r8(itab_tmp));
425             _fjsp_store_v2r8(&ewconv.simd,itab_tmp);
426
427             ewtabF           = _fjsp_load_v2r8( ewtab + 4*ewconv.i[0] );
428             ewtabD           = _fjsp_load_v2r8( ewtab + 4*ewconv.i[1] );
429             GMX_FJSP_TRANSPOSE2_V2R8(ewtabF,ewtabD);
430             ewtabV           = _fjsp_loadl_v2r8(_fjsp_setzero_v2r8(), ewtab + 4*ewconv.i[0] +2);
431             ewtabFn          = _fjsp_loadl_v2r8(_fjsp_setzero_v2r8(), ewtab + 4*ewconv.i[1] +2);
432             GMX_FJSP_TRANSPOSE2_V2R8(ewtabV,ewtabFn);
433             felec            = _fjsp_madd_v2r8(eweps,ewtabD,ewtabF);
434             velec            = _fjsp_nmsub_v2r8(_fjsp_mul_v2r8(ewtabhalfspace,eweps) ,_fjsp_add_v2r8(ewtabF,felec), ewtabV);
435             velec            = _fjsp_mul_v2r8(qq02,_fjsp_sub_v2r8(rinv02,velec));
436             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq02,rinv02),_fjsp_sub_v2r8(rinvsq02,felec));
437
438             d                = _fjsp_sub_v2r8(r02,rswitch);
439             d                = _fjsp_max_v2r8(d,_fjsp_setzero_v2r8());
440             d2               = _fjsp_mul_v2r8(d,d);
441             sw               = _fjsp_add_v2r8(one,_fjsp_mul_v2r8(d2,_fjsp_mul_v2r8(d,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swV5,swV4),swV3))));
442
443             dsw              = _fjsp_mul_v2r8(d2,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swF4,swF3),swF2));
444
445             /* Evaluate switch function */
446             /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
447             felec            = _fjsp_msub_v2r8( felec,sw , _fjsp_mul_v2r8(rinv02,_fjsp_mul_v2r8(velec,dsw)) );
448             velec            = _fjsp_mul_v2r8(velec,sw);
449             cutoff_mask      = _fjsp_cmplt_v2r8(rsq02,rcutoff2);
450
451             /* Update potential sum for this i atom from the interaction with this j atom. */
452             velec            = _fjsp_and_v2r8(velec,cutoff_mask);
453             velecsum         = _fjsp_add_v2r8(velecsum,velec);
454
455             fscal            = felec;
456
457             fscal            = _fjsp_and_v2r8(fscal,cutoff_mask);
458
459             /* Update vectorial force */
460             fix0             = _fjsp_madd_v2r8(dx02,fscal,fix0);
461             fiy0             = _fjsp_madd_v2r8(dy02,fscal,fiy0);
462             fiz0             = _fjsp_madd_v2r8(dz02,fscal,fiz0);
463             
464             fjx2             = _fjsp_madd_v2r8(dx02,fscal,fjx2);
465             fjy2             = _fjsp_madd_v2r8(dy02,fscal,fjy2);
466             fjz2             = _fjsp_madd_v2r8(dz02,fscal,fjz2);
467
468             }
469
470             /**************************
471              * CALCULATE INTERACTIONS *
472              **************************/
473
474             if (gmx_fjsp_any_lt_v2r8(rsq10,rcutoff2))
475             {
476
477             r10              = _fjsp_mul_v2r8(rsq10,rinv10);
478
479             /* EWALD ELECTROSTATICS */
480
481             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
482             ewrt             = _fjsp_mul_v2r8(r10,ewtabscale);
483             itab_tmp         = _fjsp_dtox_v2r8(ewrt);
484             eweps            = _fjsp_sub_v2r8(ewrt,_fjsp_xtod_v2r8(itab_tmp));
485             _fjsp_store_v2r8(&ewconv.simd,itab_tmp);
486
487             ewtabF           = _fjsp_load_v2r8( ewtab + 4*ewconv.i[0] );
488             ewtabD           = _fjsp_load_v2r8( ewtab + 4*ewconv.i[1] );
489             GMX_FJSP_TRANSPOSE2_V2R8(ewtabF,ewtabD);
490             ewtabV           = _fjsp_loadl_v2r8(_fjsp_setzero_v2r8(), ewtab + 4*ewconv.i[0] +2);
491             ewtabFn          = _fjsp_loadl_v2r8(_fjsp_setzero_v2r8(), ewtab + 4*ewconv.i[1] +2);
492             GMX_FJSP_TRANSPOSE2_V2R8(ewtabV,ewtabFn);
493             felec            = _fjsp_madd_v2r8(eweps,ewtabD,ewtabF);
494             velec            = _fjsp_nmsub_v2r8(_fjsp_mul_v2r8(ewtabhalfspace,eweps) ,_fjsp_add_v2r8(ewtabF,felec), ewtabV);
495             velec            = _fjsp_mul_v2r8(qq10,_fjsp_sub_v2r8(rinv10,velec));
496             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq10,rinv10),_fjsp_sub_v2r8(rinvsq10,felec));
497
498             d                = _fjsp_sub_v2r8(r10,rswitch);
499             d                = _fjsp_max_v2r8(d,_fjsp_setzero_v2r8());
500             d2               = _fjsp_mul_v2r8(d,d);
501             sw               = _fjsp_add_v2r8(one,_fjsp_mul_v2r8(d2,_fjsp_mul_v2r8(d,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swV5,swV4),swV3))));
502
503             dsw              = _fjsp_mul_v2r8(d2,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swF4,swF3),swF2));
504
505             /* Evaluate switch function */
506             /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
507             felec            = _fjsp_msub_v2r8( felec,sw , _fjsp_mul_v2r8(rinv10,_fjsp_mul_v2r8(velec,dsw)) );
508             velec            = _fjsp_mul_v2r8(velec,sw);
509             cutoff_mask      = _fjsp_cmplt_v2r8(rsq10,rcutoff2);
510
511             /* Update potential sum for this i atom from the interaction with this j atom. */
512             velec            = _fjsp_and_v2r8(velec,cutoff_mask);
513             velecsum         = _fjsp_add_v2r8(velecsum,velec);
514
515             fscal            = felec;
516
517             fscal            = _fjsp_and_v2r8(fscal,cutoff_mask);
518
519             /* Update vectorial force */
520             fix1             = _fjsp_madd_v2r8(dx10,fscal,fix1);
521             fiy1             = _fjsp_madd_v2r8(dy10,fscal,fiy1);
522             fiz1             = _fjsp_madd_v2r8(dz10,fscal,fiz1);
523             
524             fjx0             = _fjsp_madd_v2r8(dx10,fscal,fjx0);
525             fjy0             = _fjsp_madd_v2r8(dy10,fscal,fjy0);
526             fjz0             = _fjsp_madd_v2r8(dz10,fscal,fjz0);
527
528             }
529
530             /**************************
531              * CALCULATE INTERACTIONS *
532              **************************/
533
534             if (gmx_fjsp_any_lt_v2r8(rsq11,rcutoff2))
535             {
536
537             r11              = _fjsp_mul_v2r8(rsq11,rinv11);
538
539             /* EWALD ELECTROSTATICS */
540
541             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
542             ewrt             = _fjsp_mul_v2r8(r11,ewtabscale);
543             itab_tmp         = _fjsp_dtox_v2r8(ewrt);
544             eweps            = _fjsp_sub_v2r8(ewrt,_fjsp_xtod_v2r8(itab_tmp));
545             _fjsp_store_v2r8(&ewconv.simd,itab_tmp);
546
547             ewtabF           = _fjsp_load_v2r8( ewtab + 4*ewconv.i[0] );
548             ewtabD           = _fjsp_load_v2r8( ewtab + 4*ewconv.i[1] );
549             GMX_FJSP_TRANSPOSE2_V2R8(ewtabF,ewtabD);
550             ewtabV           = _fjsp_loadl_v2r8(_fjsp_setzero_v2r8(), ewtab + 4*ewconv.i[0] +2);
551             ewtabFn          = _fjsp_loadl_v2r8(_fjsp_setzero_v2r8(), ewtab + 4*ewconv.i[1] +2);
552             GMX_FJSP_TRANSPOSE2_V2R8(ewtabV,ewtabFn);
553             felec            = _fjsp_madd_v2r8(eweps,ewtabD,ewtabF);
554             velec            = _fjsp_nmsub_v2r8(_fjsp_mul_v2r8(ewtabhalfspace,eweps) ,_fjsp_add_v2r8(ewtabF,felec), ewtabV);
555             velec            = _fjsp_mul_v2r8(qq11,_fjsp_sub_v2r8(rinv11,velec));
556             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq11,rinv11),_fjsp_sub_v2r8(rinvsq11,felec));
557
558             d                = _fjsp_sub_v2r8(r11,rswitch);
559             d                = _fjsp_max_v2r8(d,_fjsp_setzero_v2r8());
560             d2               = _fjsp_mul_v2r8(d,d);
561             sw               = _fjsp_add_v2r8(one,_fjsp_mul_v2r8(d2,_fjsp_mul_v2r8(d,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swV5,swV4),swV3))));
562
563             dsw              = _fjsp_mul_v2r8(d2,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swF4,swF3),swF2));
564
565             /* Evaluate switch function */
566             /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
567             felec            = _fjsp_msub_v2r8( felec,sw , _fjsp_mul_v2r8(rinv11,_fjsp_mul_v2r8(velec,dsw)) );
568             velec            = _fjsp_mul_v2r8(velec,sw);
569             cutoff_mask      = _fjsp_cmplt_v2r8(rsq11,rcutoff2);
570
571             /* Update potential sum for this i atom from the interaction with this j atom. */
572             velec            = _fjsp_and_v2r8(velec,cutoff_mask);
573             velecsum         = _fjsp_add_v2r8(velecsum,velec);
574
575             fscal            = felec;
576
577             fscal            = _fjsp_and_v2r8(fscal,cutoff_mask);
578
579             /* Update vectorial force */
580             fix1             = _fjsp_madd_v2r8(dx11,fscal,fix1);
581             fiy1             = _fjsp_madd_v2r8(dy11,fscal,fiy1);
582             fiz1             = _fjsp_madd_v2r8(dz11,fscal,fiz1);
583             
584             fjx1             = _fjsp_madd_v2r8(dx11,fscal,fjx1);
585             fjy1             = _fjsp_madd_v2r8(dy11,fscal,fjy1);
586             fjz1             = _fjsp_madd_v2r8(dz11,fscal,fjz1);
587
588             }
589
590             /**************************
591              * CALCULATE INTERACTIONS *
592              **************************/
593
594             if (gmx_fjsp_any_lt_v2r8(rsq12,rcutoff2))
595             {
596
597             r12              = _fjsp_mul_v2r8(rsq12,rinv12);
598
599             /* EWALD ELECTROSTATICS */
600
601             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
602             ewrt             = _fjsp_mul_v2r8(r12,ewtabscale);
603             itab_tmp         = _fjsp_dtox_v2r8(ewrt);
604             eweps            = _fjsp_sub_v2r8(ewrt,_fjsp_xtod_v2r8(itab_tmp));
605             _fjsp_store_v2r8(&ewconv.simd,itab_tmp);
606
607             ewtabF           = _fjsp_load_v2r8( ewtab + 4*ewconv.i[0] );
608             ewtabD           = _fjsp_load_v2r8( ewtab + 4*ewconv.i[1] );
609             GMX_FJSP_TRANSPOSE2_V2R8(ewtabF,ewtabD);
610             ewtabV           = _fjsp_loadl_v2r8(_fjsp_setzero_v2r8(), ewtab + 4*ewconv.i[0] +2);
611             ewtabFn          = _fjsp_loadl_v2r8(_fjsp_setzero_v2r8(), ewtab + 4*ewconv.i[1] +2);
612             GMX_FJSP_TRANSPOSE2_V2R8(ewtabV,ewtabFn);
613             felec            = _fjsp_madd_v2r8(eweps,ewtabD,ewtabF);
614             velec            = _fjsp_nmsub_v2r8(_fjsp_mul_v2r8(ewtabhalfspace,eweps) ,_fjsp_add_v2r8(ewtabF,felec), ewtabV);
615             velec            = _fjsp_mul_v2r8(qq12,_fjsp_sub_v2r8(rinv12,velec));
616             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq12,rinv12),_fjsp_sub_v2r8(rinvsq12,felec));
617
618             d                = _fjsp_sub_v2r8(r12,rswitch);
619             d                = _fjsp_max_v2r8(d,_fjsp_setzero_v2r8());
620             d2               = _fjsp_mul_v2r8(d,d);
621             sw               = _fjsp_add_v2r8(one,_fjsp_mul_v2r8(d2,_fjsp_mul_v2r8(d,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swV5,swV4),swV3))));
622
623             dsw              = _fjsp_mul_v2r8(d2,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swF4,swF3),swF2));
624
625             /* Evaluate switch function */
626             /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
627             felec            = _fjsp_msub_v2r8( felec,sw , _fjsp_mul_v2r8(rinv12,_fjsp_mul_v2r8(velec,dsw)) );
628             velec            = _fjsp_mul_v2r8(velec,sw);
629             cutoff_mask      = _fjsp_cmplt_v2r8(rsq12,rcutoff2);
630
631             /* Update potential sum for this i atom from the interaction with this j atom. */
632             velec            = _fjsp_and_v2r8(velec,cutoff_mask);
633             velecsum         = _fjsp_add_v2r8(velecsum,velec);
634
635             fscal            = felec;
636
637             fscal            = _fjsp_and_v2r8(fscal,cutoff_mask);
638
639             /* Update vectorial force */
640             fix1             = _fjsp_madd_v2r8(dx12,fscal,fix1);
641             fiy1             = _fjsp_madd_v2r8(dy12,fscal,fiy1);
642             fiz1             = _fjsp_madd_v2r8(dz12,fscal,fiz1);
643             
644             fjx2             = _fjsp_madd_v2r8(dx12,fscal,fjx2);
645             fjy2             = _fjsp_madd_v2r8(dy12,fscal,fjy2);
646             fjz2             = _fjsp_madd_v2r8(dz12,fscal,fjz2);
647
648             }
649
650             /**************************
651              * CALCULATE INTERACTIONS *
652              **************************/
653
654             if (gmx_fjsp_any_lt_v2r8(rsq20,rcutoff2))
655             {
656
657             r20              = _fjsp_mul_v2r8(rsq20,rinv20);
658
659             /* EWALD ELECTROSTATICS */
660
661             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
662             ewrt             = _fjsp_mul_v2r8(r20,ewtabscale);
663             itab_tmp         = _fjsp_dtox_v2r8(ewrt);
664             eweps            = _fjsp_sub_v2r8(ewrt,_fjsp_xtod_v2r8(itab_tmp));
665             _fjsp_store_v2r8(&ewconv.simd,itab_tmp);
666
667             ewtabF           = _fjsp_load_v2r8( ewtab + 4*ewconv.i[0] );
668             ewtabD           = _fjsp_load_v2r8( ewtab + 4*ewconv.i[1] );
669             GMX_FJSP_TRANSPOSE2_V2R8(ewtabF,ewtabD);
670             ewtabV           = _fjsp_loadl_v2r8(_fjsp_setzero_v2r8(), ewtab + 4*ewconv.i[0] +2);
671             ewtabFn          = _fjsp_loadl_v2r8(_fjsp_setzero_v2r8(), ewtab + 4*ewconv.i[1] +2);
672             GMX_FJSP_TRANSPOSE2_V2R8(ewtabV,ewtabFn);
673             felec            = _fjsp_madd_v2r8(eweps,ewtabD,ewtabF);
674             velec            = _fjsp_nmsub_v2r8(_fjsp_mul_v2r8(ewtabhalfspace,eweps) ,_fjsp_add_v2r8(ewtabF,felec), ewtabV);
675             velec            = _fjsp_mul_v2r8(qq20,_fjsp_sub_v2r8(rinv20,velec));
676             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq20,rinv20),_fjsp_sub_v2r8(rinvsq20,felec));
677
678             d                = _fjsp_sub_v2r8(r20,rswitch);
679             d                = _fjsp_max_v2r8(d,_fjsp_setzero_v2r8());
680             d2               = _fjsp_mul_v2r8(d,d);
681             sw               = _fjsp_add_v2r8(one,_fjsp_mul_v2r8(d2,_fjsp_mul_v2r8(d,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swV5,swV4),swV3))));
682
683             dsw              = _fjsp_mul_v2r8(d2,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swF4,swF3),swF2));
684
685             /* Evaluate switch function */
686             /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
687             felec            = _fjsp_msub_v2r8( felec,sw , _fjsp_mul_v2r8(rinv20,_fjsp_mul_v2r8(velec,dsw)) );
688             velec            = _fjsp_mul_v2r8(velec,sw);
689             cutoff_mask      = _fjsp_cmplt_v2r8(rsq20,rcutoff2);
690
691             /* Update potential sum for this i atom from the interaction with this j atom. */
692             velec            = _fjsp_and_v2r8(velec,cutoff_mask);
693             velecsum         = _fjsp_add_v2r8(velecsum,velec);
694
695             fscal            = felec;
696
697             fscal            = _fjsp_and_v2r8(fscal,cutoff_mask);
698
699             /* Update vectorial force */
700             fix2             = _fjsp_madd_v2r8(dx20,fscal,fix2);
701             fiy2             = _fjsp_madd_v2r8(dy20,fscal,fiy2);
702             fiz2             = _fjsp_madd_v2r8(dz20,fscal,fiz2);
703             
704             fjx0             = _fjsp_madd_v2r8(dx20,fscal,fjx0);
705             fjy0             = _fjsp_madd_v2r8(dy20,fscal,fjy0);
706             fjz0             = _fjsp_madd_v2r8(dz20,fscal,fjz0);
707
708             }
709
710             /**************************
711              * CALCULATE INTERACTIONS *
712              **************************/
713
714             if (gmx_fjsp_any_lt_v2r8(rsq21,rcutoff2))
715             {
716
717             r21              = _fjsp_mul_v2r8(rsq21,rinv21);
718
719             /* EWALD ELECTROSTATICS */
720
721             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
722             ewrt             = _fjsp_mul_v2r8(r21,ewtabscale);
723             itab_tmp         = _fjsp_dtox_v2r8(ewrt);
724             eweps            = _fjsp_sub_v2r8(ewrt,_fjsp_xtod_v2r8(itab_tmp));
725             _fjsp_store_v2r8(&ewconv.simd,itab_tmp);
726
727             ewtabF           = _fjsp_load_v2r8( ewtab + 4*ewconv.i[0] );
728             ewtabD           = _fjsp_load_v2r8( ewtab + 4*ewconv.i[1] );
729             GMX_FJSP_TRANSPOSE2_V2R8(ewtabF,ewtabD);
730             ewtabV           = _fjsp_loadl_v2r8(_fjsp_setzero_v2r8(), ewtab + 4*ewconv.i[0] +2);
731             ewtabFn          = _fjsp_loadl_v2r8(_fjsp_setzero_v2r8(), ewtab + 4*ewconv.i[1] +2);
732             GMX_FJSP_TRANSPOSE2_V2R8(ewtabV,ewtabFn);
733             felec            = _fjsp_madd_v2r8(eweps,ewtabD,ewtabF);
734             velec            = _fjsp_nmsub_v2r8(_fjsp_mul_v2r8(ewtabhalfspace,eweps) ,_fjsp_add_v2r8(ewtabF,felec), ewtabV);
735             velec            = _fjsp_mul_v2r8(qq21,_fjsp_sub_v2r8(rinv21,velec));
736             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq21,rinv21),_fjsp_sub_v2r8(rinvsq21,felec));
737
738             d                = _fjsp_sub_v2r8(r21,rswitch);
739             d                = _fjsp_max_v2r8(d,_fjsp_setzero_v2r8());
740             d2               = _fjsp_mul_v2r8(d,d);
741             sw               = _fjsp_add_v2r8(one,_fjsp_mul_v2r8(d2,_fjsp_mul_v2r8(d,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swV5,swV4),swV3))));
742
743             dsw              = _fjsp_mul_v2r8(d2,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swF4,swF3),swF2));
744
745             /* Evaluate switch function */
746             /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
747             felec            = _fjsp_msub_v2r8( felec,sw , _fjsp_mul_v2r8(rinv21,_fjsp_mul_v2r8(velec,dsw)) );
748             velec            = _fjsp_mul_v2r8(velec,sw);
749             cutoff_mask      = _fjsp_cmplt_v2r8(rsq21,rcutoff2);
750
751             /* Update potential sum for this i atom from the interaction with this j atom. */
752             velec            = _fjsp_and_v2r8(velec,cutoff_mask);
753             velecsum         = _fjsp_add_v2r8(velecsum,velec);
754
755             fscal            = felec;
756
757             fscal            = _fjsp_and_v2r8(fscal,cutoff_mask);
758
759             /* Update vectorial force */
760             fix2             = _fjsp_madd_v2r8(dx21,fscal,fix2);
761             fiy2             = _fjsp_madd_v2r8(dy21,fscal,fiy2);
762             fiz2             = _fjsp_madd_v2r8(dz21,fscal,fiz2);
763             
764             fjx1             = _fjsp_madd_v2r8(dx21,fscal,fjx1);
765             fjy1             = _fjsp_madd_v2r8(dy21,fscal,fjy1);
766             fjz1             = _fjsp_madd_v2r8(dz21,fscal,fjz1);
767
768             }
769
770             /**************************
771              * CALCULATE INTERACTIONS *
772              **************************/
773
774             if (gmx_fjsp_any_lt_v2r8(rsq22,rcutoff2))
775             {
776
777             r22              = _fjsp_mul_v2r8(rsq22,rinv22);
778
779             /* EWALD ELECTROSTATICS */
780
781             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
782             ewrt             = _fjsp_mul_v2r8(r22,ewtabscale);
783             itab_tmp         = _fjsp_dtox_v2r8(ewrt);
784             eweps            = _fjsp_sub_v2r8(ewrt,_fjsp_xtod_v2r8(itab_tmp));
785             _fjsp_store_v2r8(&ewconv.simd,itab_tmp);
786
787             ewtabF           = _fjsp_load_v2r8( ewtab + 4*ewconv.i[0] );
788             ewtabD           = _fjsp_load_v2r8( ewtab + 4*ewconv.i[1] );
789             GMX_FJSP_TRANSPOSE2_V2R8(ewtabF,ewtabD);
790             ewtabV           = _fjsp_loadl_v2r8(_fjsp_setzero_v2r8(), ewtab + 4*ewconv.i[0] +2);
791             ewtabFn          = _fjsp_loadl_v2r8(_fjsp_setzero_v2r8(), ewtab + 4*ewconv.i[1] +2);
792             GMX_FJSP_TRANSPOSE2_V2R8(ewtabV,ewtabFn);
793             felec            = _fjsp_madd_v2r8(eweps,ewtabD,ewtabF);
794             velec            = _fjsp_nmsub_v2r8(_fjsp_mul_v2r8(ewtabhalfspace,eweps) ,_fjsp_add_v2r8(ewtabF,felec), ewtabV);
795             velec            = _fjsp_mul_v2r8(qq22,_fjsp_sub_v2r8(rinv22,velec));
796             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq22,rinv22),_fjsp_sub_v2r8(rinvsq22,felec));
797
798             d                = _fjsp_sub_v2r8(r22,rswitch);
799             d                = _fjsp_max_v2r8(d,_fjsp_setzero_v2r8());
800             d2               = _fjsp_mul_v2r8(d,d);
801             sw               = _fjsp_add_v2r8(one,_fjsp_mul_v2r8(d2,_fjsp_mul_v2r8(d,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swV5,swV4),swV3))));
802
803             dsw              = _fjsp_mul_v2r8(d2,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swF4,swF3),swF2));
804
805             /* Evaluate switch function */
806             /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
807             felec            = _fjsp_msub_v2r8( felec,sw , _fjsp_mul_v2r8(rinv22,_fjsp_mul_v2r8(velec,dsw)) );
808             velec            = _fjsp_mul_v2r8(velec,sw);
809             cutoff_mask      = _fjsp_cmplt_v2r8(rsq22,rcutoff2);
810
811             /* Update potential sum for this i atom from the interaction with this j atom. */
812             velec            = _fjsp_and_v2r8(velec,cutoff_mask);
813             velecsum         = _fjsp_add_v2r8(velecsum,velec);
814
815             fscal            = felec;
816
817             fscal            = _fjsp_and_v2r8(fscal,cutoff_mask);
818
819             /* Update vectorial force */
820             fix2             = _fjsp_madd_v2r8(dx22,fscal,fix2);
821             fiy2             = _fjsp_madd_v2r8(dy22,fscal,fiy2);
822             fiz2             = _fjsp_madd_v2r8(dz22,fscal,fiz2);
823             
824             fjx2             = _fjsp_madd_v2r8(dx22,fscal,fjx2);
825             fjy2             = _fjsp_madd_v2r8(dy22,fscal,fjy2);
826             fjz2             = _fjsp_madd_v2r8(dz22,fscal,fjz2);
827
828             }
829
830             gmx_fjsp_decrement_3rvec_2ptr_swizzle_v2r8(f+j_coord_offsetA,f+j_coord_offsetB,fjx0,fjy0,fjz0,fjx1,fjy1,fjz1,fjx2,fjy2,fjz2);
831
832             /* Inner loop uses 612 flops */
833         }
834
835         if(jidx<j_index_end)
836         {
837
838             jnrA             = jjnr[jidx];
839             j_coord_offsetA  = DIM*jnrA;
840
841             /* load j atom coordinates */
842             gmx_fjsp_load_3rvec_1ptr_swizzle_v2r8(x+j_coord_offsetA,
843                                               &jx0,&jy0,&jz0,&jx1,&jy1,&jz1,&jx2,&jy2,&jz2);
844
845             /* Calculate displacement vector */
846             dx00             = _fjsp_sub_v2r8(ix0,jx0);
847             dy00             = _fjsp_sub_v2r8(iy0,jy0);
848             dz00             = _fjsp_sub_v2r8(iz0,jz0);
849             dx01             = _fjsp_sub_v2r8(ix0,jx1);
850             dy01             = _fjsp_sub_v2r8(iy0,jy1);
851             dz01             = _fjsp_sub_v2r8(iz0,jz1);
852             dx02             = _fjsp_sub_v2r8(ix0,jx2);
853             dy02             = _fjsp_sub_v2r8(iy0,jy2);
854             dz02             = _fjsp_sub_v2r8(iz0,jz2);
855             dx10             = _fjsp_sub_v2r8(ix1,jx0);
856             dy10             = _fjsp_sub_v2r8(iy1,jy0);
857             dz10             = _fjsp_sub_v2r8(iz1,jz0);
858             dx11             = _fjsp_sub_v2r8(ix1,jx1);
859             dy11             = _fjsp_sub_v2r8(iy1,jy1);
860             dz11             = _fjsp_sub_v2r8(iz1,jz1);
861             dx12             = _fjsp_sub_v2r8(ix1,jx2);
862             dy12             = _fjsp_sub_v2r8(iy1,jy2);
863             dz12             = _fjsp_sub_v2r8(iz1,jz2);
864             dx20             = _fjsp_sub_v2r8(ix2,jx0);
865             dy20             = _fjsp_sub_v2r8(iy2,jy0);
866             dz20             = _fjsp_sub_v2r8(iz2,jz0);
867             dx21             = _fjsp_sub_v2r8(ix2,jx1);
868             dy21             = _fjsp_sub_v2r8(iy2,jy1);
869             dz21             = _fjsp_sub_v2r8(iz2,jz1);
870             dx22             = _fjsp_sub_v2r8(ix2,jx2);
871             dy22             = _fjsp_sub_v2r8(iy2,jy2);
872             dz22             = _fjsp_sub_v2r8(iz2,jz2);
873
874             /* Calculate squared distance and things based on it */
875             rsq00            = gmx_fjsp_calc_rsq_v2r8(dx00,dy00,dz00);
876             rsq01            = gmx_fjsp_calc_rsq_v2r8(dx01,dy01,dz01);
877             rsq02            = gmx_fjsp_calc_rsq_v2r8(dx02,dy02,dz02);
878             rsq10            = gmx_fjsp_calc_rsq_v2r8(dx10,dy10,dz10);
879             rsq11            = gmx_fjsp_calc_rsq_v2r8(dx11,dy11,dz11);
880             rsq12            = gmx_fjsp_calc_rsq_v2r8(dx12,dy12,dz12);
881             rsq20            = gmx_fjsp_calc_rsq_v2r8(dx20,dy20,dz20);
882             rsq21            = gmx_fjsp_calc_rsq_v2r8(dx21,dy21,dz21);
883             rsq22            = gmx_fjsp_calc_rsq_v2r8(dx22,dy22,dz22);
884
885             rinv00           = gmx_fjsp_invsqrt_v2r8(rsq00);
886             rinv01           = gmx_fjsp_invsqrt_v2r8(rsq01);
887             rinv02           = gmx_fjsp_invsqrt_v2r8(rsq02);
888             rinv10           = gmx_fjsp_invsqrt_v2r8(rsq10);
889             rinv11           = gmx_fjsp_invsqrt_v2r8(rsq11);
890             rinv12           = gmx_fjsp_invsqrt_v2r8(rsq12);
891             rinv20           = gmx_fjsp_invsqrt_v2r8(rsq20);
892             rinv21           = gmx_fjsp_invsqrt_v2r8(rsq21);
893             rinv22           = gmx_fjsp_invsqrt_v2r8(rsq22);
894
895             rinvsq00         = _fjsp_mul_v2r8(rinv00,rinv00);
896             rinvsq01         = _fjsp_mul_v2r8(rinv01,rinv01);
897             rinvsq02         = _fjsp_mul_v2r8(rinv02,rinv02);
898             rinvsq10         = _fjsp_mul_v2r8(rinv10,rinv10);
899             rinvsq11         = _fjsp_mul_v2r8(rinv11,rinv11);
900             rinvsq12         = _fjsp_mul_v2r8(rinv12,rinv12);
901             rinvsq20         = _fjsp_mul_v2r8(rinv20,rinv20);
902             rinvsq21         = _fjsp_mul_v2r8(rinv21,rinv21);
903             rinvsq22         = _fjsp_mul_v2r8(rinv22,rinv22);
904
905             fjx0             = _fjsp_setzero_v2r8();
906             fjy0             = _fjsp_setzero_v2r8();
907             fjz0             = _fjsp_setzero_v2r8();
908             fjx1             = _fjsp_setzero_v2r8();
909             fjy1             = _fjsp_setzero_v2r8();
910             fjz1             = _fjsp_setzero_v2r8();
911             fjx2             = _fjsp_setzero_v2r8();
912             fjy2             = _fjsp_setzero_v2r8();
913             fjz2             = _fjsp_setzero_v2r8();
914
915             /**************************
916              * CALCULATE INTERACTIONS *
917              **************************/
918
919             if (gmx_fjsp_any_lt_v2r8(rsq00,rcutoff2))
920             {
921
922             r00              = _fjsp_mul_v2r8(rsq00,rinv00);
923
924             /* EWALD ELECTROSTATICS */
925
926             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
927             ewrt             = _fjsp_mul_v2r8(r00,ewtabscale);
928             itab_tmp         = _fjsp_dtox_v2r8(ewrt);
929             eweps            = _fjsp_sub_v2r8(ewrt,_fjsp_xtod_v2r8(itab_tmp));
930             _fjsp_store_v2r8(&ewconv.simd,itab_tmp);
931
932             ewtabF           = _fjsp_load_v2r8( ewtab + 4*ewconv.i[0] );
933             ewtabD           = _fjsp_setzero_v2r8();
934             GMX_FJSP_TRANSPOSE2_V2R8(ewtabF,ewtabD);
935             ewtabV           = _fjsp_loadl_v2r8(_fjsp_setzero_v2r8(), ewtab + 4*ewconv.i[0] +2);
936             ewtabFn          = _fjsp_setzero_v2r8();
937             GMX_FJSP_TRANSPOSE2_V2R8(ewtabV,ewtabFn);
938             felec            = _fjsp_madd_v2r8(eweps,ewtabD,ewtabF);
939             velec            = _fjsp_nmsub_v2r8(_fjsp_mul_v2r8(ewtabhalfspace,eweps) ,_fjsp_add_v2r8(ewtabF,felec), ewtabV);
940             velec            = _fjsp_mul_v2r8(qq00,_fjsp_sub_v2r8(rinv00,velec));
941             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq00,rinv00),_fjsp_sub_v2r8(rinvsq00,felec));
942
943             d                = _fjsp_sub_v2r8(r00,rswitch);
944             d                = _fjsp_max_v2r8(d,_fjsp_setzero_v2r8());
945             d2               = _fjsp_mul_v2r8(d,d);
946             sw               = _fjsp_add_v2r8(one,_fjsp_mul_v2r8(d2,_fjsp_mul_v2r8(d,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swV5,swV4),swV3))));
947
948             dsw              = _fjsp_mul_v2r8(d2,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swF4,swF3),swF2));
949
950             /* Evaluate switch function */
951             /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
952             felec            = _fjsp_msub_v2r8( felec,sw , _fjsp_mul_v2r8(rinv00,_fjsp_mul_v2r8(velec,dsw)) );
953             velec            = _fjsp_mul_v2r8(velec,sw);
954             cutoff_mask      = _fjsp_cmplt_v2r8(rsq00,rcutoff2);
955
956             /* Update potential sum for this i atom from the interaction with this j atom. */
957             velec            = _fjsp_and_v2r8(velec,cutoff_mask);
958             velec            = _fjsp_unpacklo_v2r8(velec,_fjsp_setzero_v2r8());
959             velecsum         = _fjsp_add_v2r8(velecsum,velec);
960
961             fscal            = felec;
962
963             fscal            = _fjsp_and_v2r8(fscal,cutoff_mask);
964
965             fscal            = _fjsp_unpacklo_v2r8(fscal,_fjsp_setzero_v2r8());
966
967             /* Update vectorial force */
968             fix0             = _fjsp_madd_v2r8(dx00,fscal,fix0);
969             fiy0             = _fjsp_madd_v2r8(dy00,fscal,fiy0);
970             fiz0             = _fjsp_madd_v2r8(dz00,fscal,fiz0);
971             
972             fjx0             = _fjsp_madd_v2r8(dx00,fscal,fjx0);
973             fjy0             = _fjsp_madd_v2r8(dy00,fscal,fjy0);
974             fjz0             = _fjsp_madd_v2r8(dz00,fscal,fjz0);
975
976             }
977
978             /**************************
979              * CALCULATE INTERACTIONS *
980              **************************/
981
982             if (gmx_fjsp_any_lt_v2r8(rsq01,rcutoff2))
983             {
984
985             r01              = _fjsp_mul_v2r8(rsq01,rinv01);
986
987             /* EWALD ELECTROSTATICS */
988
989             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
990             ewrt             = _fjsp_mul_v2r8(r01,ewtabscale);
991             itab_tmp         = _fjsp_dtox_v2r8(ewrt);
992             eweps            = _fjsp_sub_v2r8(ewrt,_fjsp_xtod_v2r8(itab_tmp));
993             _fjsp_store_v2r8(&ewconv.simd,itab_tmp);
994
995             ewtabF           = _fjsp_load_v2r8( ewtab + 4*ewconv.i[0] );
996             ewtabD           = _fjsp_setzero_v2r8();
997             GMX_FJSP_TRANSPOSE2_V2R8(ewtabF,ewtabD);
998             ewtabV           = _fjsp_loadl_v2r8(_fjsp_setzero_v2r8(), ewtab + 4*ewconv.i[0] +2);
999             ewtabFn          = _fjsp_setzero_v2r8();
1000             GMX_FJSP_TRANSPOSE2_V2R8(ewtabV,ewtabFn);
1001             felec            = _fjsp_madd_v2r8(eweps,ewtabD,ewtabF);
1002             velec            = _fjsp_nmsub_v2r8(_fjsp_mul_v2r8(ewtabhalfspace,eweps) ,_fjsp_add_v2r8(ewtabF,felec), ewtabV);
1003             velec            = _fjsp_mul_v2r8(qq01,_fjsp_sub_v2r8(rinv01,velec));
1004             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq01,rinv01),_fjsp_sub_v2r8(rinvsq01,felec));
1005
1006             d                = _fjsp_sub_v2r8(r01,rswitch);
1007             d                = _fjsp_max_v2r8(d,_fjsp_setzero_v2r8());
1008             d2               = _fjsp_mul_v2r8(d,d);
1009             sw               = _fjsp_add_v2r8(one,_fjsp_mul_v2r8(d2,_fjsp_mul_v2r8(d,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swV5,swV4),swV3))));
1010
1011             dsw              = _fjsp_mul_v2r8(d2,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swF4,swF3),swF2));
1012
1013             /* Evaluate switch function */
1014             /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
1015             felec            = _fjsp_msub_v2r8( felec,sw , _fjsp_mul_v2r8(rinv01,_fjsp_mul_v2r8(velec,dsw)) );
1016             velec            = _fjsp_mul_v2r8(velec,sw);
1017             cutoff_mask      = _fjsp_cmplt_v2r8(rsq01,rcutoff2);
1018
1019             /* Update potential sum for this i atom from the interaction with this j atom. */
1020             velec            = _fjsp_and_v2r8(velec,cutoff_mask);
1021             velec            = _fjsp_unpacklo_v2r8(velec,_fjsp_setzero_v2r8());
1022             velecsum         = _fjsp_add_v2r8(velecsum,velec);
1023
1024             fscal            = felec;
1025
1026             fscal            = _fjsp_and_v2r8(fscal,cutoff_mask);
1027
1028             fscal            = _fjsp_unpacklo_v2r8(fscal,_fjsp_setzero_v2r8());
1029
1030             /* Update vectorial force */
1031             fix0             = _fjsp_madd_v2r8(dx01,fscal,fix0);
1032             fiy0             = _fjsp_madd_v2r8(dy01,fscal,fiy0);
1033             fiz0             = _fjsp_madd_v2r8(dz01,fscal,fiz0);
1034             
1035             fjx1             = _fjsp_madd_v2r8(dx01,fscal,fjx1);
1036             fjy1             = _fjsp_madd_v2r8(dy01,fscal,fjy1);
1037             fjz1             = _fjsp_madd_v2r8(dz01,fscal,fjz1);
1038
1039             }
1040
1041             /**************************
1042              * CALCULATE INTERACTIONS *
1043              **************************/
1044
1045             if (gmx_fjsp_any_lt_v2r8(rsq02,rcutoff2))
1046             {
1047
1048             r02              = _fjsp_mul_v2r8(rsq02,rinv02);
1049
1050             /* EWALD ELECTROSTATICS */
1051
1052             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
1053             ewrt             = _fjsp_mul_v2r8(r02,ewtabscale);
1054             itab_tmp         = _fjsp_dtox_v2r8(ewrt);
1055             eweps            = _fjsp_sub_v2r8(ewrt,_fjsp_xtod_v2r8(itab_tmp));
1056             _fjsp_store_v2r8(&ewconv.simd,itab_tmp);
1057
1058             ewtabF           = _fjsp_load_v2r8( ewtab + 4*ewconv.i[0] );
1059             ewtabD           = _fjsp_setzero_v2r8();
1060             GMX_FJSP_TRANSPOSE2_V2R8(ewtabF,ewtabD);
1061             ewtabV           = _fjsp_loadl_v2r8(_fjsp_setzero_v2r8(), ewtab + 4*ewconv.i[0] +2);
1062             ewtabFn          = _fjsp_setzero_v2r8();
1063             GMX_FJSP_TRANSPOSE2_V2R8(ewtabV,ewtabFn);
1064             felec            = _fjsp_madd_v2r8(eweps,ewtabD,ewtabF);
1065             velec            = _fjsp_nmsub_v2r8(_fjsp_mul_v2r8(ewtabhalfspace,eweps) ,_fjsp_add_v2r8(ewtabF,felec), ewtabV);
1066             velec            = _fjsp_mul_v2r8(qq02,_fjsp_sub_v2r8(rinv02,velec));
1067             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq02,rinv02),_fjsp_sub_v2r8(rinvsq02,felec));
1068
1069             d                = _fjsp_sub_v2r8(r02,rswitch);
1070             d                = _fjsp_max_v2r8(d,_fjsp_setzero_v2r8());
1071             d2               = _fjsp_mul_v2r8(d,d);
1072             sw               = _fjsp_add_v2r8(one,_fjsp_mul_v2r8(d2,_fjsp_mul_v2r8(d,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swV5,swV4),swV3))));
1073
1074             dsw              = _fjsp_mul_v2r8(d2,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swF4,swF3),swF2));
1075
1076             /* Evaluate switch function */
1077             /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
1078             felec            = _fjsp_msub_v2r8( felec,sw , _fjsp_mul_v2r8(rinv02,_fjsp_mul_v2r8(velec,dsw)) );
1079             velec            = _fjsp_mul_v2r8(velec,sw);
1080             cutoff_mask      = _fjsp_cmplt_v2r8(rsq02,rcutoff2);
1081
1082             /* Update potential sum for this i atom from the interaction with this j atom. */
1083             velec            = _fjsp_and_v2r8(velec,cutoff_mask);
1084             velec            = _fjsp_unpacklo_v2r8(velec,_fjsp_setzero_v2r8());
1085             velecsum         = _fjsp_add_v2r8(velecsum,velec);
1086
1087             fscal            = felec;
1088
1089             fscal            = _fjsp_and_v2r8(fscal,cutoff_mask);
1090
1091             fscal            = _fjsp_unpacklo_v2r8(fscal,_fjsp_setzero_v2r8());
1092
1093             /* Update vectorial force */
1094             fix0             = _fjsp_madd_v2r8(dx02,fscal,fix0);
1095             fiy0             = _fjsp_madd_v2r8(dy02,fscal,fiy0);
1096             fiz0             = _fjsp_madd_v2r8(dz02,fscal,fiz0);
1097             
1098             fjx2             = _fjsp_madd_v2r8(dx02,fscal,fjx2);
1099             fjy2             = _fjsp_madd_v2r8(dy02,fscal,fjy2);
1100             fjz2             = _fjsp_madd_v2r8(dz02,fscal,fjz2);
1101
1102             }
1103
1104             /**************************
1105              * CALCULATE INTERACTIONS *
1106              **************************/
1107
1108             if (gmx_fjsp_any_lt_v2r8(rsq10,rcutoff2))
1109             {
1110
1111             r10              = _fjsp_mul_v2r8(rsq10,rinv10);
1112
1113             /* EWALD ELECTROSTATICS */
1114
1115             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
1116             ewrt             = _fjsp_mul_v2r8(r10,ewtabscale);
1117             itab_tmp         = _fjsp_dtox_v2r8(ewrt);
1118             eweps            = _fjsp_sub_v2r8(ewrt,_fjsp_xtod_v2r8(itab_tmp));
1119             _fjsp_store_v2r8(&ewconv.simd,itab_tmp);
1120
1121             ewtabF           = _fjsp_load_v2r8( ewtab + 4*ewconv.i[0] );
1122             ewtabD           = _fjsp_setzero_v2r8();
1123             GMX_FJSP_TRANSPOSE2_V2R8(ewtabF,ewtabD);
1124             ewtabV           = _fjsp_loadl_v2r8(_fjsp_setzero_v2r8(), ewtab + 4*ewconv.i[0] +2);
1125             ewtabFn          = _fjsp_setzero_v2r8();
1126             GMX_FJSP_TRANSPOSE2_V2R8(ewtabV,ewtabFn);
1127             felec            = _fjsp_madd_v2r8(eweps,ewtabD,ewtabF);
1128             velec            = _fjsp_nmsub_v2r8(_fjsp_mul_v2r8(ewtabhalfspace,eweps) ,_fjsp_add_v2r8(ewtabF,felec), ewtabV);
1129             velec            = _fjsp_mul_v2r8(qq10,_fjsp_sub_v2r8(rinv10,velec));
1130             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq10,rinv10),_fjsp_sub_v2r8(rinvsq10,felec));
1131
1132             d                = _fjsp_sub_v2r8(r10,rswitch);
1133             d                = _fjsp_max_v2r8(d,_fjsp_setzero_v2r8());
1134             d2               = _fjsp_mul_v2r8(d,d);
1135             sw               = _fjsp_add_v2r8(one,_fjsp_mul_v2r8(d2,_fjsp_mul_v2r8(d,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swV5,swV4),swV3))));
1136
1137             dsw              = _fjsp_mul_v2r8(d2,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swF4,swF3),swF2));
1138
1139             /* Evaluate switch function */
1140             /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
1141             felec            = _fjsp_msub_v2r8( felec,sw , _fjsp_mul_v2r8(rinv10,_fjsp_mul_v2r8(velec,dsw)) );
1142             velec            = _fjsp_mul_v2r8(velec,sw);
1143             cutoff_mask      = _fjsp_cmplt_v2r8(rsq10,rcutoff2);
1144
1145             /* Update potential sum for this i atom from the interaction with this j atom. */
1146             velec            = _fjsp_and_v2r8(velec,cutoff_mask);
1147             velec            = _fjsp_unpacklo_v2r8(velec,_fjsp_setzero_v2r8());
1148             velecsum         = _fjsp_add_v2r8(velecsum,velec);
1149
1150             fscal            = felec;
1151
1152             fscal            = _fjsp_and_v2r8(fscal,cutoff_mask);
1153
1154             fscal            = _fjsp_unpacklo_v2r8(fscal,_fjsp_setzero_v2r8());
1155
1156             /* Update vectorial force */
1157             fix1             = _fjsp_madd_v2r8(dx10,fscal,fix1);
1158             fiy1             = _fjsp_madd_v2r8(dy10,fscal,fiy1);
1159             fiz1             = _fjsp_madd_v2r8(dz10,fscal,fiz1);
1160             
1161             fjx0             = _fjsp_madd_v2r8(dx10,fscal,fjx0);
1162             fjy0             = _fjsp_madd_v2r8(dy10,fscal,fjy0);
1163             fjz0             = _fjsp_madd_v2r8(dz10,fscal,fjz0);
1164
1165             }
1166
1167             /**************************
1168              * CALCULATE INTERACTIONS *
1169              **************************/
1170
1171             if (gmx_fjsp_any_lt_v2r8(rsq11,rcutoff2))
1172             {
1173
1174             r11              = _fjsp_mul_v2r8(rsq11,rinv11);
1175
1176             /* EWALD ELECTROSTATICS */
1177
1178             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
1179             ewrt             = _fjsp_mul_v2r8(r11,ewtabscale);
1180             itab_tmp         = _fjsp_dtox_v2r8(ewrt);
1181             eweps            = _fjsp_sub_v2r8(ewrt,_fjsp_xtod_v2r8(itab_tmp));
1182             _fjsp_store_v2r8(&ewconv.simd,itab_tmp);
1183
1184             ewtabF           = _fjsp_load_v2r8( ewtab + 4*ewconv.i[0] );
1185             ewtabD           = _fjsp_setzero_v2r8();
1186             GMX_FJSP_TRANSPOSE2_V2R8(ewtabF,ewtabD);
1187             ewtabV           = _fjsp_loadl_v2r8(_fjsp_setzero_v2r8(), ewtab + 4*ewconv.i[0] +2);
1188             ewtabFn          = _fjsp_setzero_v2r8();
1189             GMX_FJSP_TRANSPOSE2_V2R8(ewtabV,ewtabFn);
1190             felec            = _fjsp_madd_v2r8(eweps,ewtabD,ewtabF);
1191             velec            = _fjsp_nmsub_v2r8(_fjsp_mul_v2r8(ewtabhalfspace,eweps) ,_fjsp_add_v2r8(ewtabF,felec), ewtabV);
1192             velec            = _fjsp_mul_v2r8(qq11,_fjsp_sub_v2r8(rinv11,velec));
1193             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq11,rinv11),_fjsp_sub_v2r8(rinvsq11,felec));
1194
1195             d                = _fjsp_sub_v2r8(r11,rswitch);
1196             d                = _fjsp_max_v2r8(d,_fjsp_setzero_v2r8());
1197             d2               = _fjsp_mul_v2r8(d,d);
1198             sw               = _fjsp_add_v2r8(one,_fjsp_mul_v2r8(d2,_fjsp_mul_v2r8(d,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swV5,swV4),swV3))));
1199
1200             dsw              = _fjsp_mul_v2r8(d2,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swF4,swF3),swF2));
1201
1202             /* Evaluate switch function */
1203             /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
1204             felec            = _fjsp_msub_v2r8( felec,sw , _fjsp_mul_v2r8(rinv11,_fjsp_mul_v2r8(velec,dsw)) );
1205             velec            = _fjsp_mul_v2r8(velec,sw);
1206             cutoff_mask      = _fjsp_cmplt_v2r8(rsq11,rcutoff2);
1207
1208             /* Update potential sum for this i atom from the interaction with this j atom. */
1209             velec            = _fjsp_and_v2r8(velec,cutoff_mask);
1210             velec            = _fjsp_unpacklo_v2r8(velec,_fjsp_setzero_v2r8());
1211             velecsum         = _fjsp_add_v2r8(velecsum,velec);
1212
1213             fscal            = felec;
1214
1215             fscal            = _fjsp_and_v2r8(fscal,cutoff_mask);
1216
1217             fscal            = _fjsp_unpacklo_v2r8(fscal,_fjsp_setzero_v2r8());
1218
1219             /* Update vectorial force */
1220             fix1             = _fjsp_madd_v2r8(dx11,fscal,fix1);
1221             fiy1             = _fjsp_madd_v2r8(dy11,fscal,fiy1);
1222             fiz1             = _fjsp_madd_v2r8(dz11,fscal,fiz1);
1223             
1224             fjx1             = _fjsp_madd_v2r8(dx11,fscal,fjx1);
1225             fjy1             = _fjsp_madd_v2r8(dy11,fscal,fjy1);
1226             fjz1             = _fjsp_madd_v2r8(dz11,fscal,fjz1);
1227
1228             }
1229
1230             /**************************
1231              * CALCULATE INTERACTIONS *
1232              **************************/
1233
1234             if (gmx_fjsp_any_lt_v2r8(rsq12,rcutoff2))
1235             {
1236
1237             r12              = _fjsp_mul_v2r8(rsq12,rinv12);
1238
1239             /* EWALD ELECTROSTATICS */
1240
1241             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
1242             ewrt             = _fjsp_mul_v2r8(r12,ewtabscale);
1243             itab_tmp         = _fjsp_dtox_v2r8(ewrt);
1244             eweps            = _fjsp_sub_v2r8(ewrt,_fjsp_xtod_v2r8(itab_tmp));
1245             _fjsp_store_v2r8(&ewconv.simd,itab_tmp);
1246
1247             ewtabF           = _fjsp_load_v2r8( ewtab + 4*ewconv.i[0] );
1248             ewtabD           = _fjsp_setzero_v2r8();
1249             GMX_FJSP_TRANSPOSE2_V2R8(ewtabF,ewtabD);
1250             ewtabV           = _fjsp_loadl_v2r8(_fjsp_setzero_v2r8(), ewtab + 4*ewconv.i[0] +2);
1251             ewtabFn          = _fjsp_setzero_v2r8();
1252             GMX_FJSP_TRANSPOSE2_V2R8(ewtabV,ewtabFn);
1253             felec            = _fjsp_madd_v2r8(eweps,ewtabD,ewtabF);
1254             velec            = _fjsp_nmsub_v2r8(_fjsp_mul_v2r8(ewtabhalfspace,eweps) ,_fjsp_add_v2r8(ewtabF,felec), ewtabV);
1255             velec            = _fjsp_mul_v2r8(qq12,_fjsp_sub_v2r8(rinv12,velec));
1256             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq12,rinv12),_fjsp_sub_v2r8(rinvsq12,felec));
1257
1258             d                = _fjsp_sub_v2r8(r12,rswitch);
1259             d                = _fjsp_max_v2r8(d,_fjsp_setzero_v2r8());
1260             d2               = _fjsp_mul_v2r8(d,d);
1261             sw               = _fjsp_add_v2r8(one,_fjsp_mul_v2r8(d2,_fjsp_mul_v2r8(d,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swV5,swV4),swV3))));
1262
1263             dsw              = _fjsp_mul_v2r8(d2,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swF4,swF3),swF2));
1264
1265             /* Evaluate switch function */
1266             /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
1267             felec            = _fjsp_msub_v2r8( felec,sw , _fjsp_mul_v2r8(rinv12,_fjsp_mul_v2r8(velec,dsw)) );
1268             velec            = _fjsp_mul_v2r8(velec,sw);
1269             cutoff_mask      = _fjsp_cmplt_v2r8(rsq12,rcutoff2);
1270
1271             /* Update potential sum for this i atom from the interaction with this j atom. */
1272             velec            = _fjsp_and_v2r8(velec,cutoff_mask);
1273             velec            = _fjsp_unpacklo_v2r8(velec,_fjsp_setzero_v2r8());
1274             velecsum         = _fjsp_add_v2r8(velecsum,velec);
1275
1276             fscal            = felec;
1277
1278             fscal            = _fjsp_and_v2r8(fscal,cutoff_mask);
1279
1280             fscal            = _fjsp_unpacklo_v2r8(fscal,_fjsp_setzero_v2r8());
1281
1282             /* Update vectorial force */
1283             fix1             = _fjsp_madd_v2r8(dx12,fscal,fix1);
1284             fiy1             = _fjsp_madd_v2r8(dy12,fscal,fiy1);
1285             fiz1             = _fjsp_madd_v2r8(dz12,fscal,fiz1);
1286             
1287             fjx2             = _fjsp_madd_v2r8(dx12,fscal,fjx2);
1288             fjy2             = _fjsp_madd_v2r8(dy12,fscal,fjy2);
1289             fjz2             = _fjsp_madd_v2r8(dz12,fscal,fjz2);
1290
1291             }
1292
1293             /**************************
1294              * CALCULATE INTERACTIONS *
1295              **************************/
1296
1297             if (gmx_fjsp_any_lt_v2r8(rsq20,rcutoff2))
1298             {
1299
1300             r20              = _fjsp_mul_v2r8(rsq20,rinv20);
1301
1302             /* EWALD ELECTROSTATICS */
1303
1304             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
1305             ewrt             = _fjsp_mul_v2r8(r20,ewtabscale);
1306             itab_tmp         = _fjsp_dtox_v2r8(ewrt);
1307             eweps            = _fjsp_sub_v2r8(ewrt,_fjsp_xtod_v2r8(itab_tmp));
1308             _fjsp_store_v2r8(&ewconv.simd,itab_tmp);
1309
1310             ewtabF           = _fjsp_load_v2r8( ewtab + 4*ewconv.i[0] );
1311             ewtabD           = _fjsp_setzero_v2r8();
1312             GMX_FJSP_TRANSPOSE2_V2R8(ewtabF,ewtabD);
1313             ewtabV           = _fjsp_loadl_v2r8(_fjsp_setzero_v2r8(), ewtab + 4*ewconv.i[0] +2);
1314             ewtabFn          = _fjsp_setzero_v2r8();
1315             GMX_FJSP_TRANSPOSE2_V2R8(ewtabV,ewtabFn);
1316             felec            = _fjsp_madd_v2r8(eweps,ewtabD,ewtabF);
1317             velec            = _fjsp_nmsub_v2r8(_fjsp_mul_v2r8(ewtabhalfspace,eweps) ,_fjsp_add_v2r8(ewtabF,felec), ewtabV);
1318             velec            = _fjsp_mul_v2r8(qq20,_fjsp_sub_v2r8(rinv20,velec));
1319             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq20,rinv20),_fjsp_sub_v2r8(rinvsq20,felec));
1320
1321             d                = _fjsp_sub_v2r8(r20,rswitch);
1322             d                = _fjsp_max_v2r8(d,_fjsp_setzero_v2r8());
1323             d2               = _fjsp_mul_v2r8(d,d);
1324             sw               = _fjsp_add_v2r8(one,_fjsp_mul_v2r8(d2,_fjsp_mul_v2r8(d,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swV5,swV4),swV3))));
1325
1326             dsw              = _fjsp_mul_v2r8(d2,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swF4,swF3),swF2));
1327
1328             /* Evaluate switch function */
1329             /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
1330             felec            = _fjsp_msub_v2r8( felec,sw , _fjsp_mul_v2r8(rinv20,_fjsp_mul_v2r8(velec,dsw)) );
1331             velec            = _fjsp_mul_v2r8(velec,sw);
1332             cutoff_mask      = _fjsp_cmplt_v2r8(rsq20,rcutoff2);
1333
1334             /* Update potential sum for this i atom from the interaction with this j atom. */
1335             velec            = _fjsp_and_v2r8(velec,cutoff_mask);
1336             velec            = _fjsp_unpacklo_v2r8(velec,_fjsp_setzero_v2r8());
1337             velecsum         = _fjsp_add_v2r8(velecsum,velec);
1338
1339             fscal            = felec;
1340
1341             fscal            = _fjsp_and_v2r8(fscal,cutoff_mask);
1342
1343             fscal            = _fjsp_unpacklo_v2r8(fscal,_fjsp_setzero_v2r8());
1344
1345             /* Update vectorial force */
1346             fix2             = _fjsp_madd_v2r8(dx20,fscal,fix2);
1347             fiy2             = _fjsp_madd_v2r8(dy20,fscal,fiy2);
1348             fiz2             = _fjsp_madd_v2r8(dz20,fscal,fiz2);
1349             
1350             fjx0             = _fjsp_madd_v2r8(dx20,fscal,fjx0);
1351             fjy0             = _fjsp_madd_v2r8(dy20,fscal,fjy0);
1352             fjz0             = _fjsp_madd_v2r8(dz20,fscal,fjz0);
1353
1354             }
1355
1356             /**************************
1357              * CALCULATE INTERACTIONS *
1358              **************************/
1359
1360             if (gmx_fjsp_any_lt_v2r8(rsq21,rcutoff2))
1361             {
1362
1363             r21              = _fjsp_mul_v2r8(rsq21,rinv21);
1364
1365             /* EWALD ELECTROSTATICS */
1366
1367             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
1368             ewrt             = _fjsp_mul_v2r8(r21,ewtabscale);
1369             itab_tmp         = _fjsp_dtox_v2r8(ewrt);
1370             eweps            = _fjsp_sub_v2r8(ewrt,_fjsp_xtod_v2r8(itab_tmp));
1371             _fjsp_store_v2r8(&ewconv.simd,itab_tmp);
1372
1373             ewtabF           = _fjsp_load_v2r8( ewtab + 4*ewconv.i[0] );
1374             ewtabD           = _fjsp_setzero_v2r8();
1375             GMX_FJSP_TRANSPOSE2_V2R8(ewtabF,ewtabD);
1376             ewtabV           = _fjsp_loadl_v2r8(_fjsp_setzero_v2r8(), ewtab + 4*ewconv.i[0] +2);
1377             ewtabFn          = _fjsp_setzero_v2r8();
1378             GMX_FJSP_TRANSPOSE2_V2R8(ewtabV,ewtabFn);
1379             felec            = _fjsp_madd_v2r8(eweps,ewtabD,ewtabF);
1380             velec            = _fjsp_nmsub_v2r8(_fjsp_mul_v2r8(ewtabhalfspace,eweps) ,_fjsp_add_v2r8(ewtabF,felec), ewtabV);
1381             velec            = _fjsp_mul_v2r8(qq21,_fjsp_sub_v2r8(rinv21,velec));
1382             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq21,rinv21),_fjsp_sub_v2r8(rinvsq21,felec));
1383
1384             d                = _fjsp_sub_v2r8(r21,rswitch);
1385             d                = _fjsp_max_v2r8(d,_fjsp_setzero_v2r8());
1386             d2               = _fjsp_mul_v2r8(d,d);
1387             sw               = _fjsp_add_v2r8(one,_fjsp_mul_v2r8(d2,_fjsp_mul_v2r8(d,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swV5,swV4),swV3))));
1388
1389             dsw              = _fjsp_mul_v2r8(d2,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swF4,swF3),swF2));
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            = _fjsp_msub_v2r8( felec,sw , _fjsp_mul_v2r8(rinv21,_fjsp_mul_v2r8(velec,dsw)) );
1394             velec            = _fjsp_mul_v2r8(velec,sw);
1395             cutoff_mask      = _fjsp_cmplt_v2r8(rsq21,rcutoff2);
1396
1397             /* Update potential sum for this i atom from the interaction with this j atom. */
1398             velec            = _fjsp_and_v2r8(velec,cutoff_mask);
1399             velec            = _fjsp_unpacklo_v2r8(velec,_fjsp_setzero_v2r8());
1400             velecsum         = _fjsp_add_v2r8(velecsum,velec);
1401
1402             fscal            = felec;
1403
1404             fscal            = _fjsp_and_v2r8(fscal,cutoff_mask);
1405
1406             fscal            = _fjsp_unpacklo_v2r8(fscal,_fjsp_setzero_v2r8());
1407
1408             /* Update vectorial force */
1409             fix2             = _fjsp_madd_v2r8(dx21,fscal,fix2);
1410             fiy2             = _fjsp_madd_v2r8(dy21,fscal,fiy2);
1411             fiz2             = _fjsp_madd_v2r8(dz21,fscal,fiz2);
1412             
1413             fjx1             = _fjsp_madd_v2r8(dx21,fscal,fjx1);
1414             fjy1             = _fjsp_madd_v2r8(dy21,fscal,fjy1);
1415             fjz1             = _fjsp_madd_v2r8(dz21,fscal,fjz1);
1416
1417             }
1418
1419             /**************************
1420              * CALCULATE INTERACTIONS *
1421              **************************/
1422
1423             if (gmx_fjsp_any_lt_v2r8(rsq22,rcutoff2))
1424             {
1425
1426             r22              = _fjsp_mul_v2r8(rsq22,rinv22);
1427
1428             /* EWALD ELECTROSTATICS */
1429
1430             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
1431             ewrt             = _fjsp_mul_v2r8(r22,ewtabscale);
1432             itab_tmp         = _fjsp_dtox_v2r8(ewrt);
1433             eweps            = _fjsp_sub_v2r8(ewrt,_fjsp_xtod_v2r8(itab_tmp));
1434             _fjsp_store_v2r8(&ewconv.simd,itab_tmp);
1435
1436             ewtabF           = _fjsp_load_v2r8( ewtab + 4*ewconv.i[0] );
1437             ewtabD           = _fjsp_setzero_v2r8();
1438             GMX_FJSP_TRANSPOSE2_V2R8(ewtabF,ewtabD);
1439             ewtabV           = _fjsp_loadl_v2r8(_fjsp_setzero_v2r8(), ewtab + 4*ewconv.i[0] +2);
1440             ewtabFn          = _fjsp_setzero_v2r8();
1441             GMX_FJSP_TRANSPOSE2_V2R8(ewtabV,ewtabFn);
1442             felec            = _fjsp_madd_v2r8(eweps,ewtabD,ewtabF);
1443             velec            = _fjsp_nmsub_v2r8(_fjsp_mul_v2r8(ewtabhalfspace,eweps) ,_fjsp_add_v2r8(ewtabF,felec), ewtabV);
1444             velec            = _fjsp_mul_v2r8(qq22,_fjsp_sub_v2r8(rinv22,velec));
1445             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq22,rinv22),_fjsp_sub_v2r8(rinvsq22,felec));
1446
1447             d                = _fjsp_sub_v2r8(r22,rswitch);
1448             d                = _fjsp_max_v2r8(d,_fjsp_setzero_v2r8());
1449             d2               = _fjsp_mul_v2r8(d,d);
1450             sw               = _fjsp_add_v2r8(one,_fjsp_mul_v2r8(d2,_fjsp_mul_v2r8(d,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swV5,swV4),swV3))));
1451
1452             dsw              = _fjsp_mul_v2r8(d2,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swF4,swF3),swF2));
1453
1454             /* Evaluate switch function */
1455             /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
1456             felec            = _fjsp_msub_v2r8( felec,sw , _fjsp_mul_v2r8(rinv22,_fjsp_mul_v2r8(velec,dsw)) );
1457             velec            = _fjsp_mul_v2r8(velec,sw);
1458             cutoff_mask      = _fjsp_cmplt_v2r8(rsq22,rcutoff2);
1459
1460             /* Update potential sum for this i atom from the interaction with this j atom. */
1461             velec            = _fjsp_and_v2r8(velec,cutoff_mask);
1462             velec            = _fjsp_unpacklo_v2r8(velec,_fjsp_setzero_v2r8());
1463             velecsum         = _fjsp_add_v2r8(velecsum,velec);
1464
1465             fscal            = felec;
1466
1467             fscal            = _fjsp_and_v2r8(fscal,cutoff_mask);
1468
1469             fscal            = _fjsp_unpacklo_v2r8(fscal,_fjsp_setzero_v2r8());
1470
1471             /* Update vectorial force */
1472             fix2             = _fjsp_madd_v2r8(dx22,fscal,fix2);
1473             fiy2             = _fjsp_madd_v2r8(dy22,fscal,fiy2);
1474             fiz2             = _fjsp_madd_v2r8(dz22,fscal,fiz2);
1475             
1476             fjx2             = _fjsp_madd_v2r8(dx22,fscal,fjx2);
1477             fjy2             = _fjsp_madd_v2r8(dy22,fscal,fjy2);
1478             fjz2             = _fjsp_madd_v2r8(dz22,fscal,fjz2);
1479
1480             }
1481
1482             gmx_fjsp_decrement_3rvec_1ptr_swizzle_v2r8(f+j_coord_offsetA,fjx0,fjy0,fjz0,fjx1,fjy1,fjz1,fjx2,fjy2,fjz2);
1483
1484             /* Inner loop uses 612 flops */
1485         }
1486
1487         /* End of innermost loop */
1488
1489         gmx_fjsp_update_iforce_3atom_swizzle_v2r8(fix0,fiy0,fiz0,fix1,fiy1,fiz1,fix2,fiy2,fiz2,
1490                                               f+i_coord_offset,fshift+i_shift_offset);
1491
1492         ggid                        = gid[iidx];
1493         /* Update potential energies */
1494         gmx_fjsp_update_1pot_v2r8(velecsum,kernel_data->energygrp_elec+ggid);
1495
1496         /* Increment number of inner iterations */
1497         inneriter                  += j_index_end - j_index_start;
1498
1499         /* Outer loop uses 19 flops */
1500     }
1501
1502     /* Increment number of outer iterations */
1503     outeriter        += nri;
1504
1505     /* Update outer/inner flops */
1506
1507     inc_nrnb(nrnb,eNR_NBKERNEL_ELEC_W3W3_VF,outeriter*19 + inneriter*612);
1508 }
1509 /*
1510  * Gromacs nonbonded kernel:   nb_kernel_ElecEwSw_VdwNone_GeomW3W3_F_sparc64_hpc_ace_double
1511  * Electrostatics interaction: Ewald
1512  * VdW interaction:            None
1513  * Geometry:                   Water3-Water3
1514  * Calculate force/pot:        Force
1515  */
1516 void
1517 nb_kernel_ElecEwSw_VdwNone_GeomW3W3_F_sparc64_hpc_ace_double
1518                     (t_nblist                    * gmx_restrict       nlist,
1519                      rvec                        * gmx_restrict          xx,
1520                      rvec                        * gmx_restrict          ff,
1521                      t_forcerec                  * gmx_restrict          fr,
1522                      t_mdatoms                   * gmx_restrict     mdatoms,
1523                      nb_kernel_data_t gmx_unused * gmx_restrict kernel_data,
1524                      t_nrnb                      * gmx_restrict        nrnb)
1525 {
1526     /* Suffixes 0,1,2,3 refer to particle indices for waters in the inner or outer loop, or
1527      * just 0 for non-waters.
1528      * Suffixes A,B refer to j loop unrolling done with double precision SIMD, e.g. for the two different
1529      * jnr indices corresponding to data put in the four positions in the SIMD register.
1530      */
1531     int              i_shift_offset,i_coord_offset,outeriter,inneriter;
1532     int              j_index_start,j_index_end,jidx,nri,inr,ggid,iidx;
1533     int              jnrA,jnrB;
1534     int              j_coord_offsetA,j_coord_offsetB;
1535     int              *iinr,*jindex,*jjnr,*shiftidx,*gid;
1536     real             rcutoff_scalar;
1537     real             *shiftvec,*fshift,*x,*f;
1538     _fjsp_v2r8       tx,ty,tz,fscal,rcutoff,rcutoff2,jidxall;
1539     int              vdwioffset0;
1540     _fjsp_v2r8       ix0,iy0,iz0,fix0,fiy0,fiz0,iq0,isai0;
1541     int              vdwioffset1;
1542     _fjsp_v2r8       ix1,iy1,iz1,fix1,fiy1,fiz1,iq1,isai1;
1543     int              vdwioffset2;
1544     _fjsp_v2r8       ix2,iy2,iz2,fix2,fiy2,fiz2,iq2,isai2;
1545     int              vdwjidx0A,vdwjidx0B;
1546     _fjsp_v2r8       jx0,jy0,jz0,fjx0,fjy0,fjz0,jq0,isaj0;
1547     int              vdwjidx1A,vdwjidx1B;
1548     _fjsp_v2r8       jx1,jy1,jz1,fjx1,fjy1,fjz1,jq1,isaj1;
1549     int              vdwjidx2A,vdwjidx2B;
1550     _fjsp_v2r8       jx2,jy2,jz2,fjx2,fjy2,fjz2,jq2,isaj2;
1551     _fjsp_v2r8       dx00,dy00,dz00,rsq00,rinv00,rinvsq00,r00,qq00,c6_00,c12_00;
1552     _fjsp_v2r8       dx01,dy01,dz01,rsq01,rinv01,rinvsq01,r01,qq01,c6_01,c12_01;
1553     _fjsp_v2r8       dx02,dy02,dz02,rsq02,rinv02,rinvsq02,r02,qq02,c6_02,c12_02;
1554     _fjsp_v2r8       dx10,dy10,dz10,rsq10,rinv10,rinvsq10,r10,qq10,c6_10,c12_10;
1555     _fjsp_v2r8       dx11,dy11,dz11,rsq11,rinv11,rinvsq11,r11,qq11,c6_11,c12_11;
1556     _fjsp_v2r8       dx12,dy12,dz12,rsq12,rinv12,rinvsq12,r12,qq12,c6_12,c12_12;
1557     _fjsp_v2r8       dx20,dy20,dz20,rsq20,rinv20,rinvsq20,r20,qq20,c6_20,c12_20;
1558     _fjsp_v2r8       dx21,dy21,dz21,rsq21,rinv21,rinvsq21,r21,qq21,c6_21,c12_21;
1559     _fjsp_v2r8       dx22,dy22,dz22,rsq22,rinv22,rinvsq22,r22,qq22,c6_22,c12_22;
1560     _fjsp_v2r8       velec,felec,velecsum,facel,crf,krf,krf2;
1561     real             *charge;
1562     _fjsp_v2r8       ewtabscale,eweps,sh_ewald,ewrt,ewtabhalfspace,ewtabF,ewtabFn,ewtabD,ewtabV;
1563     real             *ewtab;
1564     _fjsp_v2r8       rswitch,swV3,swV4,swV5,swF2,swF3,swF4,d,d2,sw,dsw;
1565     real             rswitch_scalar,d_scalar;
1566     _fjsp_v2r8       itab_tmp;
1567     _fjsp_v2r8       dummy_mask,cutoff_mask;
1568     _fjsp_v2r8       one     = gmx_fjsp_set1_v2r8(1.0);
1569     _fjsp_v2r8       two     = gmx_fjsp_set1_v2r8(2.0);
1570     union { _fjsp_v2r8 simd; long long int i[2]; } vfconv,gbconv,ewconv;
1571
1572     x                = xx[0];
1573     f                = ff[0];
1574
1575     nri              = nlist->nri;
1576     iinr             = nlist->iinr;
1577     jindex           = nlist->jindex;
1578     jjnr             = nlist->jjnr;
1579     shiftidx         = nlist->shift;
1580     gid              = nlist->gid;
1581     shiftvec         = fr->shift_vec[0];
1582     fshift           = fr->fshift[0];
1583     facel            = gmx_fjsp_set1_v2r8(fr->epsfac);
1584     charge           = mdatoms->chargeA;
1585
1586     sh_ewald         = gmx_fjsp_set1_v2r8(fr->ic->sh_ewald);
1587     ewtab            = fr->ic->tabq_coul_FDV0;
1588     ewtabscale       = gmx_fjsp_set1_v2r8(fr->ic->tabq_scale);
1589     ewtabhalfspace   = gmx_fjsp_set1_v2r8(0.5/fr->ic->tabq_scale);
1590
1591     /* Setup water-specific parameters */
1592     inr              = nlist->iinr[0];
1593     iq0              = _fjsp_mul_v2r8(facel,gmx_fjsp_set1_v2r8(charge[inr+0]));
1594     iq1              = _fjsp_mul_v2r8(facel,gmx_fjsp_set1_v2r8(charge[inr+1]));
1595     iq2              = _fjsp_mul_v2r8(facel,gmx_fjsp_set1_v2r8(charge[inr+2]));
1596
1597     jq0              = gmx_fjsp_set1_v2r8(charge[inr+0]);
1598     jq1              = gmx_fjsp_set1_v2r8(charge[inr+1]);
1599     jq2              = gmx_fjsp_set1_v2r8(charge[inr+2]);
1600     qq00             = _fjsp_mul_v2r8(iq0,jq0);
1601     qq01             = _fjsp_mul_v2r8(iq0,jq1);
1602     qq02             = _fjsp_mul_v2r8(iq0,jq2);
1603     qq10             = _fjsp_mul_v2r8(iq1,jq0);
1604     qq11             = _fjsp_mul_v2r8(iq1,jq1);
1605     qq12             = _fjsp_mul_v2r8(iq1,jq2);
1606     qq20             = _fjsp_mul_v2r8(iq2,jq0);
1607     qq21             = _fjsp_mul_v2r8(iq2,jq1);
1608     qq22             = _fjsp_mul_v2r8(iq2,jq2);
1609
1610     /* When we use explicit cutoffs the value must be identical for elec and VdW, so use elec as an arbitrary choice */
1611     rcutoff_scalar   = fr->rcoulomb;
1612     rcutoff          = gmx_fjsp_set1_v2r8(rcutoff_scalar);
1613     rcutoff2         = _fjsp_mul_v2r8(rcutoff,rcutoff);
1614
1615     rswitch_scalar   = fr->rcoulomb_switch;
1616     rswitch          = gmx_fjsp_set1_v2r8(rswitch_scalar);
1617     /* Setup switch parameters */
1618     d_scalar         = rcutoff_scalar-rswitch_scalar;
1619     d                = gmx_fjsp_set1_v2r8(d_scalar);
1620     swV3             = gmx_fjsp_set1_v2r8(-10.0/(d_scalar*d_scalar*d_scalar));
1621     swV4             = gmx_fjsp_set1_v2r8( 15.0/(d_scalar*d_scalar*d_scalar*d_scalar));
1622     swV5             = gmx_fjsp_set1_v2r8( -6.0/(d_scalar*d_scalar*d_scalar*d_scalar*d_scalar));
1623     swF2             = gmx_fjsp_set1_v2r8(-30.0/(d_scalar*d_scalar*d_scalar));
1624     swF3             = gmx_fjsp_set1_v2r8( 60.0/(d_scalar*d_scalar*d_scalar*d_scalar));
1625     swF4             = gmx_fjsp_set1_v2r8(-30.0/(d_scalar*d_scalar*d_scalar*d_scalar*d_scalar));
1626
1627     /* Avoid stupid compiler warnings */
1628     jnrA = jnrB = 0;
1629     j_coord_offsetA = 0;
1630     j_coord_offsetB = 0;
1631
1632     outeriter        = 0;
1633     inneriter        = 0;
1634
1635     /* Start outer loop over neighborlists */
1636     for(iidx=0; iidx<nri; iidx++)
1637     {
1638         /* Load shift vector for this list */
1639         i_shift_offset   = DIM*shiftidx[iidx];
1640
1641         /* Load limits for loop over neighbors */
1642         j_index_start    = jindex[iidx];
1643         j_index_end      = jindex[iidx+1];
1644
1645         /* Get outer coordinate index */
1646         inr              = iinr[iidx];
1647         i_coord_offset   = DIM*inr;
1648
1649         /* Load i particle coords and add shift vector */
1650         gmx_fjsp_load_shift_and_3rvec_broadcast_v2r8(shiftvec+i_shift_offset,x+i_coord_offset,
1651                                                  &ix0,&iy0,&iz0,&ix1,&iy1,&iz1,&ix2,&iy2,&iz2);
1652
1653         fix0             = _fjsp_setzero_v2r8();
1654         fiy0             = _fjsp_setzero_v2r8();
1655         fiz0             = _fjsp_setzero_v2r8();
1656         fix1             = _fjsp_setzero_v2r8();
1657         fiy1             = _fjsp_setzero_v2r8();
1658         fiz1             = _fjsp_setzero_v2r8();
1659         fix2             = _fjsp_setzero_v2r8();
1660         fiy2             = _fjsp_setzero_v2r8();
1661         fiz2             = _fjsp_setzero_v2r8();
1662
1663         /* Start inner kernel loop */
1664         for(jidx=j_index_start; jidx<j_index_end-1; jidx+=2)
1665         {
1666
1667             /* Get j neighbor index, and coordinate index */
1668             jnrA             = jjnr[jidx];
1669             jnrB             = jjnr[jidx+1];
1670             j_coord_offsetA  = DIM*jnrA;
1671             j_coord_offsetB  = DIM*jnrB;
1672
1673             /* load j atom coordinates */
1674             gmx_fjsp_load_3rvec_2ptr_swizzle_v2r8(x+j_coord_offsetA,x+j_coord_offsetB,
1675                                               &jx0,&jy0,&jz0,&jx1,&jy1,&jz1,&jx2,&jy2,&jz2);
1676
1677             /* Calculate displacement vector */
1678             dx00             = _fjsp_sub_v2r8(ix0,jx0);
1679             dy00             = _fjsp_sub_v2r8(iy0,jy0);
1680             dz00             = _fjsp_sub_v2r8(iz0,jz0);
1681             dx01             = _fjsp_sub_v2r8(ix0,jx1);
1682             dy01             = _fjsp_sub_v2r8(iy0,jy1);
1683             dz01             = _fjsp_sub_v2r8(iz0,jz1);
1684             dx02             = _fjsp_sub_v2r8(ix0,jx2);
1685             dy02             = _fjsp_sub_v2r8(iy0,jy2);
1686             dz02             = _fjsp_sub_v2r8(iz0,jz2);
1687             dx10             = _fjsp_sub_v2r8(ix1,jx0);
1688             dy10             = _fjsp_sub_v2r8(iy1,jy0);
1689             dz10             = _fjsp_sub_v2r8(iz1,jz0);
1690             dx11             = _fjsp_sub_v2r8(ix1,jx1);
1691             dy11             = _fjsp_sub_v2r8(iy1,jy1);
1692             dz11             = _fjsp_sub_v2r8(iz1,jz1);
1693             dx12             = _fjsp_sub_v2r8(ix1,jx2);
1694             dy12             = _fjsp_sub_v2r8(iy1,jy2);
1695             dz12             = _fjsp_sub_v2r8(iz1,jz2);
1696             dx20             = _fjsp_sub_v2r8(ix2,jx0);
1697             dy20             = _fjsp_sub_v2r8(iy2,jy0);
1698             dz20             = _fjsp_sub_v2r8(iz2,jz0);
1699             dx21             = _fjsp_sub_v2r8(ix2,jx1);
1700             dy21             = _fjsp_sub_v2r8(iy2,jy1);
1701             dz21             = _fjsp_sub_v2r8(iz2,jz1);
1702             dx22             = _fjsp_sub_v2r8(ix2,jx2);
1703             dy22             = _fjsp_sub_v2r8(iy2,jy2);
1704             dz22             = _fjsp_sub_v2r8(iz2,jz2);
1705
1706             /* Calculate squared distance and things based on it */
1707             rsq00            = gmx_fjsp_calc_rsq_v2r8(dx00,dy00,dz00);
1708             rsq01            = gmx_fjsp_calc_rsq_v2r8(dx01,dy01,dz01);
1709             rsq02            = gmx_fjsp_calc_rsq_v2r8(dx02,dy02,dz02);
1710             rsq10            = gmx_fjsp_calc_rsq_v2r8(dx10,dy10,dz10);
1711             rsq11            = gmx_fjsp_calc_rsq_v2r8(dx11,dy11,dz11);
1712             rsq12            = gmx_fjsp_calc_rsq_v2r8(dx12,dy12,dz12);
1713             rsq20            = gmx_fjsp_calc_rsq_v2r8(dx20,dy20,dz20);
1714             rsq21            = gmx_fjsp_calc_rsq_v2r8(dx21,dy21,dz21);
1715             rsq22            = gmx_fjsp_calc_rsq_v2r8(dx22,dy22,dz22);
1716
1717             rinv00           = gmx_fjsp_invsqrt_v2r8(rsq00);
1718             rinv01           = gmx_fjsp_invsqrt_v2r8(rsq01);
1719             rinv02           = gmx_fjsp_invsqrt_v2r8(rsq02);
1720             rinv10           = gmx_fjsp_invsqrt_v2r8(rsq10);
1721             rinv11           = gmx_fjsp_invsqrt_v2r8(rsq11);
1722             rinv12           = gmx_fjsp_invsqrt_v2r8(rsq12);
1723             rinv20           = gmx_fjsp_invsqrt_v2r8(rsq20);
1724             rinv21           = gmx_fjsp_invsqrt_v2r8(rsq21);
1725             rinv22           = gmx_fjsp_invsqrt_v2r8(rsq22);
1726
1727             rinvsq00         = _fjsp_mul_v2r8(rinv00,rinv00);
1728             rinvsq01         = _fjsp_mul_v2r8(rinv01,rinv01);
1729             rinvsq02         = _fjsp_mul_v2r8(rinv02,rinv02);
1730             rinvsq10         = _fjsp_mul_v2r8(rinv10,rinv10);
1731             rinvsq11         = _fjsp_mul_v2r8(rinv11,rinv11);
1732             rinvsq12         = _fjsp_mul_v2r8(rinv12,rinv12);
1733             rinvsq20         = _fjsp_mul_v2r8(rinv20,rinv20);
1734             rinvsq21         = _fjsp_mul_v2r8(rinv21,rinv21);
1735             rinvsq22         = _fjsp_mul_v2r8(rinv22,rinv22);
1736
1737             fjx0             = _fjsp_setzero_v2r8();
1738             fjy0             = _fjsp_setzero_v2r8();
1739             fjz0             = _fjsp_setzero_v2r8();
1740             fjx1             = _fjsp_setzero_v2r8();
1741             fjy1             = _fjsp_setzero_v2r8();
1742             fjz1             = _fjsp_setzero_v2r8();
1743             fjx2             = _fjsp_setzero_v2r8();
1744             fjy2             = _fjsp_setzero_v2r8();
1745             fjz2             = _fjsp_setzero_v2r8();
1746
1747             /**************************
1748              * CALCULATE INTERACTIONS *
1749              **************************/
1750
1751             if (gmx_fjsp_any_lt_v2r8(rsq00,rcutoff2))
1752             {
1753
1754             r00              = _fjsp_mul_v2r8(rsq00,rinv00);
1755
1756             /* EWALD ELECTROSTATICS */
1757
1758             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
1759             ewrt             = _fjsp_mul_v2r8(r00,ewtabscale);
1760             itab_tmp         = _fjsp_dtox_v2r8(ewrt);
1761             eweps            = _fjsp_sub_v2r8(ewrt,_fjsp_xtod_v2r8(itab_tmp));
1762             _fjsp_store_v2r8(&ewconv.simd,itab_tmp);
1763
1764             ewtabF           = _fjsp_load_v2r8( ewtab + 4*ewconv.i[0] );
1765             ewtabD           = _fjsp_load_v2r8( ewtab + 4*ewconv.i[1] );
1766             GMX_FJSP_TRANSPOSE2_V2R8(ewtabF,ewtabD);
1767             ewtabV           = _fjsp_loadl_v2r8(_fjsp_setzero_v2r8(), ewtab + 4*ewconv.i[0] +2);
1768             ewtabFn          = _fjsp_loadl_v2r8(_fjsp_setzero_v2r8(), ewtab + 4*ewconv.i[1] +2);
1769             GMX_FJSP_TRANSPOSE2_V2R8(ewtabV,ewtabFn);
1770             felec            = _fjsp_madd_v2r8(eweps,ewtabD,ewtabF);
1771             velec            = _fjsp_nmsub_v2r8(_fjsp_mul_v2r8(ewtabhalfspace,eweps) ,_fjsp_add_v2r8(ewtabF,felec), ewtabV);
1772             velec            = _fjsp_mul_v2r8(qq00,_fjsp_sub_v2r8(rinv00,velec));
1773             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq00,rinv00),_fjsp_sub_v2r8(rinvsq00,felec));
1774
1775             d                = _fjsp_sub_v2r8(r00,rswitch);
1776             d                = _fjsp_max_v2r8(d,_fjsp_setzero_v2r8());
1777             d2               = _fjsp_mul_v2r8(d,d);
1778             sw               = _fjsp_add_v2r8(one,_fjsp_mul_v2r8(d2,_fjsp_mul_v2r8(d,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swV5,swV4),swV3))));
1779
1780             dsw              = _fjsp_mul_v2r8(d2,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swF4,swF3),swF2));
1781
1782             /* Evaluate switch function */
1783             /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
1784             felec            = _fjsp_msub_v2r8( felec,sw , _fjsp_mul_v2r8(rinv00,_fjsp_mul_v2r8(velec,dsw)) );
1785             cutoff_mask      = _fjsp_cmplt_v2r8(rsq00,rcutoff2);
1786
1787             fscal            = felec;
1788
1789             fscal            = _fjsp_and_v2r8(fscal,cutoff_mask);
1790
1791             /* Update vectorial force */
1792             fix0             = _fjsp_madd_v2r8(dx00,fscal,fix0);
1793             fiy0             = _fjsp_madd_v2r8(dy00,fscal,fiy0);
1794             fiz0             = _fjsp_madd_v2r8(dz00,fscal,fiz0);
1795             
1796             fjx0             = _fjsp_madd_v2r8(dx00,fscal,fjx0);
1797             fjy0             = _fjsp_madd_v2r8(dy00,fscal,fjy0);
1798             fjz0             = _fjsp_madd_v2r8(dz00,fscal,fjz0);
1799
1800             }
1801
1802             /**************************
1803              * CALCULATE INTERACTIONS *
1804              **************************/
1805
1806             if (gmx_fjsp_any_lt_v2r8(rsq01,rcutoff2))
1807             {
1808
1809             r01              = _fjsp_mul_v2r8(rsq01,rinv01);
1810
1811             /* EWALD ELECTROSTATICS */
1812
1813             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
1814             ewrt             = _fjsp_mul_v2r8(r01,ewtabscale);
1815             itab_tmp         = _fjsp_dtox_v2r8(ewrt);
1816             eweps            = _fjsp_sub_v2r8(ewrt,_fjsp_xtod_v2r8(itab_tmp));
1817             _fjsp_store_v2r8(&ewconv.simd,itab_tmp);
1818
1819             ewtabF           = _fjsp_load_v2r8( ewtab + 4*ewconv.i[0] );
1820             ewtabD           = _fjsp_load_v2r8( ewtab + 4*ewconv.i[1] );
1821             GMX_FJSP_TRANSPOSE2_V2R8(ewtabF,ewtabD);
1822             ewtabV           = _fjsp_loadl_v2r8(_fjsp_setzero_v2r8(), ewtab + 4*ewconv.i[0] +2);
1823             ewtabFn          = _fjsp_loadl_v2r8(_fjsp_setzero_v2r8(), ewtab + 4*ewconv.i[1] +2);
1824             GMX_FJSP_TRANSPOSE2_V2R8(ewtabV,ewtabFn);
1825             felec            = _fjsp_madd_v2r8(eweps,ewtabD,ewtabF);
1826             velec            = _fjsp_nmsub_v2r8(_fjsp_mul_v2r8(ewtabhalfspace,eweps) ,_fjsp_add_v2r8(ewtabF,felec), ewtabV);
1827             velec            = _fjsp_mul_v2r8(qq01,_fjsp_sub_v2r8(rinv01,velec));
1828             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq01,rinv01),_fjsp_sub_v2r8(rinvsq01,felec));
1829
1830             d                = _fjsp_sub_v2r8(r01,rswitch);
1831             d                = _fjsp_max_v2r8(d,_fjsp_setzero_v2r8());
1832             d2               = _fjsp_mul_v2r8(d,d);
1833             sw               = _fjsp_add_v2r8(one,_fjsp_mul_v2r8(d2,_fjsp_mul_v2r8(d,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swV5,swV4),swV3))));
1834
1835             dsw              = _fjsp_mul_v2r8(d2,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swF4,swF3),swF2));
1836
1837             /* Evaluate switch function */
1838             /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
1839             felec            = _fjsp_msub_v2r8( felec,sw , _fjsp_mul_v2r8(rinv01,_fjsp_mul_v2r8(velec,dsw)) );
1840             cutoff_mask      = _fjsp_cmplt_v2r8(rsq01,rcutoff2);
1841
1842             fscal            = felec;
1843
1844             fscal            = _fjsp_and_v2r8(fscal,cutoff_mask);
1845
1846             /* Update vectorial force */
1847             fix0             = _fjsp_madd_v2r8(dx01,fscal,fix0);
1848             fiy0             = _fjsp_madd_v2r8(dy01,fscal,fiy0);
1849             fiz0             = _fjsp_madd_v2r8(dz01,fscal,fiz0);
1850             
1851             fjx1             = _fjsp_madd_v2r8(dx01,fscal,fjx1);
1852             fjy1             = _fjsp_madd_v2r8(dy01,fscal,fjy1);
1853             fjz1             = _fjsp_madd_v2r8(dz01,fscal,fjz1);
1854
1855             }
1856
1857             /**************************
1858              * CALCULATE INTERACTIONS *
1859              **************************/
1860
1861             if (gmx_fjsp_any_lt_v2r8(rsq02,rcutoff2))
1862             {
1863
1864             r02              = _fjsp_mul_v2r8(rsq02,rinv02);
1865
1866             /* EWALD ELECTROSTATICS */
1867
1868             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
1869             ewrt             = _fjsp_mul_v2r8(r02,ewtabscale);
1870             itab_tmp         = _fjsp_dtox_v2r8(ewrt);
1871             eweps            = _fjsp_sub_v2r8(ewrt,_fjsp_xtod_v2r8(itab_tmp));
1872             _fjsp_store_v2r8(&ewconv.simd,itab_tmp);
1873
1874             ewtabF           = _fjsp_load_v2r8( ewtab + 4*ewconv.i[0] );
1875             ewtabD           = _fjsp_load_v2r8( ewtab + 4*ewconv.i[1] );
1876             GMX_FJSP_TRANSPOSE2_V2R8(ewtabF,ewtabD);
1877             ewtabV           = _fjsp_loadl_v2r8(_fjsp_setzero_v2r8(), ewtab + 4*ewconv.i[0] +2);
1878             ewtabFn          = _fjsp_loadl_v2r8(_fjsp_setzero_v2r8(), ewtab + 4*ewconv.i[1] +2);
1879             GMX_FJSP_TRANSPOSE2_V2R8(ewtabV,ewtabFn);
1880             felec            = _fjsp_madd_v2r8(eweps,ewtabD,ewtabF);
1881             velec            = _fjsp_nmsub_v2r8(_fjsp_mul_v2r8(ewtabhalfspace,eweps) ,_fjsp_add_v2r8(ewtabF,felec), ewtabV);
1882             velec            = _fjsp_mul_v2r8(qq02,_fjsp_sub_v2r8(rinv02,velec));
1883             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq02,rinv02),_fjsp_sub_v2r8(rinvsq02,felec));
1884
1885             d                = _fjsp_sub_v2r8(r02,rswitch);
1886             d                = _fjsp_max_v2r8(d,_fjsp_setzero_v2r8());
1887             d2               = _fjsp_mul_v2r8(d,d);
1888             sw               = _fjsp_add_v2r8(one,_fjsp_mul_v2r8(d2,_fjsp_mul_v2r8(d,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swV5,swV4),swV3))));
1889
1890             dsw              = _fjsp_mul_v2r8(d2,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swF4,swF3),swF2));
1891
1892             /* Evaluate switch function */
1893             /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
1894             felec            = _fjsp_msub_v2r8( felec,sw , _fjsp_mul_v2r8(rinv02,_fjsp_mul_v2r8(velec,dsw)) );
1895             cutoff_mask      = _fjsp_cmplt_v2r8(rsq02,rcutoff2);
1896
1897             fscal            = felec;
1898
1899             fscal            = _fjsp_and_v2r8(fscal,cutoff_mask);
1900
1901             /* Update vectorial force */
1902             fix0             = _fjsp_madd_v2r8(dx02,fscal,fix0);
1903             fiy0             = _fjsp_madd_v2r8(dy02,fscal,fiy0);
1904             fiz0             = _fjsp_madd_v2r8(dz02,fscal,fiz0);
1905             
1906             fjx2             = _fjsp_madd_v2r8(dx02,fscal,fjx2);
1907             fjy2             = _fjsp_madd_v2r8(dy02,fscal,fjy2);
1908             fjz2             = _fjsp_madd_v2r8(dz02,fscal,fjz2);
1909
1910             }
1911
1912             /**************************
1913              * CALCULATE INTERACTIONS *
1914              **************************/
1915
1916             if (gmx_fjsp_any_lt_v2r8(rsq10,rcutoff2))
1917             {
1918
1919             r10              = _fjsp_mul_v2r8(rsq10,rinv10);
1920
1921             /* EWALD ELECTROSTATICS */
1922
1923             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
1924             ewrt             = _fjsp_mul_v2r8(r10,ewtabscale);
1925             itab_tmp         = _fjsp_dtox_v2r8(ewrt);
1926             eweps            = _fjsp_sub_v2r8(ewrt,_fjsp_xtod_v2r8(itab_tmp));
1927             _fjsp_store_v2r8(&ewconv.simd,itab_tmp);
1928
1929             ewtabF           = _fjsp_load_v2r8( ewtab + 4*ewconv.i[0] );
1930             ewtabD           = _fjsp_load_v2r8( ewtab + 4*ewconv.i[1] );
1931             GMX_FJSP_TRANSPOSE2_V2R8(ewtabF,ewtabD);
1932             ewtabV           = _fjsp_loadl_v2r8(_fjsp_setzero_v2r8(), ewtab + 4*ewconv.i[0] +2);
1933             ewtabFn          = _fjsp_loadl_v2r8(_fjsp_setzero_v2r8(), ewtab + 4*ewconv.i[1] +2);
1934             GMX_FJSP_TRANSPOSE2_V2R8(ewtabV,ewtabFn);
1935             felec            = _fjsp_madd_v2r8(eweps,ewtabD,ewtabF);
1936             velec            = _fjsp_nmsub_v2r8(_fjsp_mul_v2r8(ewtabhalfspace,eweps) ,_fjsp_add_v2r8(ewtabF,felec), ewtabV);
1937             velec            = _fjsp_mul_v2r8(qq10,_fjsp_sub_v2r8(rinv10,velec));
1938             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq10,rinv10),_fjsp_sub_v2r8(rinvsq10,felec));
1939
1940             d                = _fjsp_sub_v2r8(r10,rswitch);
1941             d                = _fjsp_max_v2r8(d,_fjsp_setzero_v2r8());
1942             d2               = _fjsp_mul_v2r8(d,d);
1943             sw               = _fjsp_add_v2r8(one,_fjsp_mul_v2r8(d2,_fjsp_mul_v2r8(d,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swV5,swV4),swV3))));
1944
1945             dsw              = _fjsp_mul_v2r8(d2,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swF4,swF3),swF2));
1946
1947             /* Evaluate switch function */
1948             /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
1949             felec            = _fjsp_msub_v2r8( felec,sw , _fjsp_mul_v2r8(rinv10,_fjsp_mul_v2r8(velec,dsw)) );
1950             cutoff_mask      = _fjsp_cmplt_v2r8(rsq10,rcutoff2);
1951
1952             fscal            = felec;
1953
1954             fscal            = _fjsp_and_v2r8(fscal,cutoff_mask);
1955
1956             /* Update vectorial force */
1957             fix1             = _fjsp_madd_v2r8(dx10,fscal,fix1);
1958             fiy1             = _fjsp_madd_v2r8(dy10,fscal,fiy1);
1959             fiz1             = _fjsp_madd_v2r8(dz10,fscal,fiz1);
1960             
1961             fjx0             = _fjsp_madd_v2r8(dx10,fscal,fjx0);
1962             fjy0             = _fjsp_madd_v2r8(dy10,fscal,fjy0);
1963             fjz0             = _fjsp_madd_v2r8(dz10,fscal,fjz0);
1964
1965             }
1966
1967             /**************************
1968              * CALCULATE INTERACTIONS *
1969              **************************/
1970
1971             if (gmx_fjsp_any_lt_v2r8(rsq11,rcutoff2))
1972             {
1973
1974             r11              = _fjsp_mul_v2r8(rsq11,rinv11);
1975
1976             /* EWALD ELECTROSTATICS */
1977
1978             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
1979             ewrt             = _fjsp_mul_v2r8(r11,ewtabscale);
1980             itab_tmp         = _fjsp_dtox_v2r8(ewrt);
1981             eweps            = _fjsp_sub_v2r8(ewrt,_fjsp_xtod_v2r8(itab_tmp));
1982             _fjsp_store_v2r8(&ewconv.simd,itab_tmp);
1983
1984             ewtabF           = _fjsp_load_v2r8( ewtab + 4*ewconv.i[0] );
1985             ewtabD           = _fjsp_load_v2r8( ewtab + 4*ewconv.i[1] );
1986             GMX_FJSP_TRANSPOSE2_V2R8(ewtabF,ewtabD);
1987             ewtabV           = _fjsp_loadl_v2r8(_fjsp_setzero_v2r8(), ewtab + 4*ewconv.i[0] +2);
1988             ewtabFn          = _fjsp_loadl_v2r8(_fjsp_setzero_v2r8(), ewtab + 4*ewconv.i[1] +2);
1989             GMX_FJSP_TRANSPOSE2_V2R8(ewtabV,ewtabFn);
1990             felec            = _fjsp_madd_v2r8(eweps,ewtabD,ewtabF);
1991             velec            = _fjsp_nmsub_v2r8(_fjsp_mul_v2r8(ewtabhalfspace,eweps) ,_fjsp_add_v2r8(ewtabF,felec), ewtabV);
1992             velec            = _fjsp_mul_v2r8(qq11,_fjsp_sub_v2r8(rinv11,velec));
1993             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq11,rinv11),_fjsp_sub_v2r8(rinvsq11,felec));
1994
1995             d                = _fjsp_sub_v2r8(r11,rswitch);
1996             d                = _fjsp_max_v2r8(d,_fjsp_setzero_v2r8());
1997             d2               = _fjsp_mul_v2r8(d,d);
1998             sw               = _fjsp_add_v2r8(one,_fjsp_mul_v2r8(d2,_fjsp_mul_v2r8(d,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swV5,swV4),swV3))));
1999
2000             dsw              = _fjsp_mul_v2r8(d2,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swF4,swF3),swF2));
2001
2002             /* Evaluate switch function */
2003             /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
2004             felec            = _fjsp_msub_v2r8( felec,sw , _fjsp_mul_v2r8(rinv11,_fjsp_mul_v2r8(velec,dsw)) );
2005             cutoff_mask      = _fjsp_cmplt_v2r8(rsq11,rcutoff2);
2006
2007             fscal            = felec;
2008
2009             fscal            = _fjsp_and_v2r8(fscal,cutoff_mask);
2010
2011             /* Update vectorial force */
2012             fix1             = _fjsp_madd_v2r8(dx11,fscal,fix1);
2013             fiy1             = _fjsp_madd_v2r8(dy11,fscal,fiy1);
2014             fiz1             = _fjsp_madd_v2r8(dz11,fscal,fiz1);
2015             
2016             fjx1             = _fjsp_madd_v2r8(dx11,fscal,fjx1);
2017             fjy1             = _fjsp_madd_v2r8(dy11,fscal,fjy1);
2018             fjz1             = _fjsp_madd_v2r8(dz11,fscal,fjz1);
2019
2020             }
2021
2022             /**************************
2023              * CALCULATE INTERACTIONS *
2024              **************************/
2025
2026             if (gmx_fjsp_any_lt_v2r8(rsq12,rcutoff2))
2027             {
2028
2029             r12              = _fjsp_mul_v2r8(rsq12,rinv12);
2030
2031             /* EWALD ELECTROSTATICS */
2032
2033             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
2034             ewrt             = _fjsp_mul_v2r8(r12,ewtabscale);
2035             itab_tmp         = _fjsp_dtox_v2r8(ewrt);
2036             eweps            = _fjsp_sub_v2r8(ewrt,_fjsp_xtod_v2r8(itab_tmp));
2037             _fjsp_store_v2r8(&ewconv.simd,itab_tmp);
2038
2039             ewtabF           = _fjsp_load_v2r8( ewtab + 4*ewconv.i[0] );
2040             ewtabD           = _fjsp_load_v2r8( ewtab + 4*ewconv.i[1] );
2041             GMX_FJSP_TRANSPOSE2_V2R8(ewtabF,ewtabD);
2042             ewtabV           = _fjsp_loadl_v2r8(_fjsp_setzero_v2r8(), ewtab + 4*ewconv.i[0] +2);
2043             ewtabFn          = _fjsp_loadl_v2r8(_fjsp_setzero_v2r8(), ewtab + 4*ewconv.i[1] +2);
2044             GMX_FJSP_TRANSPOSE2_V2R8(ewtabV,ewtabFn);
2045             felec            = _fjsp_madd_v2r8(eweps,ewtabD,ewtabF);
2046             velec            = _fjsp_nmsub_v2r8(_fjsp_mul_v2r8(ewtabhalfspace,eweps) ,_fjsp_add_v2r8(ewtabF,felec), ewtabV);
2047             velec            = _fjsp_mul_v2r8(qq12,_fjsp_sub_v2r8(rinv12,velec));
2048             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq12,rinv12),_fjsp_sub_v2r8(rinvsq12,felec));
2049
2050             d                = _fjsp_sub_v2r8(r12,rswitch);
2051             d                = _fjsp_max_v2r8(d,_fjsp_setzero_v2r8());
2052             d2               = _fjsp_mul_v2r8(d,d);
2053             sw               = _fjsp_add_v2r8(one,_fjsp_mul_v2r8(d2,_fjsp_mul_v2r8(d,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swV5,swV4),swV3))));
2054
2055             dsw              = _fjsp_mul_v2r8(d2,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swF4,swF3),swF2));
2056
2057             /* Evaluate switch function */
2058             /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
2059             felec            = _fjsp_msub_v2r8( felec,sw , _fjsp_mul_v2r8(rinv12,_fjsp_mul_v2r8(velec,dsw)) );
2060             cutoff_mask      = _fjsp_cmplt_v2r8(rsq12,rcutoff2);
2061
2062             fscal            = felec;
2063
2064             fscal            = _fjsp_and_v2r8(fscal,cutoff_mask);
2065
2066             /* Update vectorial force */
2067             fix1             = _fjsp_madd_v2r8(dx12,fscal,fix1);
2068             fiy1             = _fjsp_madd_v2r8(dy12,fscal,fiy1);
2069             fiz1             = _fjsp_madd_v2r8(dz12,fscal,fiz1);
2070             
2071             fjx2             = _fjsp_madd_v2r8(dx12,fscal,fjx2);
2072             fjy2             = _fjsp_madd_v2r8(dy12,fscal,fjy2);
2073             fjz2             = _fjsp_madd_v2r8(dz12,fscal,fjz2);
2074
2075             }
2076
2077             /**************************
2078              * CALCULATE INTERACTIONS *
2079              **************************/
2080
2081             if (gmx_fjsp_any_lt_v2r8(rsq20,rcutoff2))
2082             {
2083
2084             r20              = _fjsp_mul_v2r8(rsq20,rinv20);
2085
2086             /* EWALD ELECTROSTATICS */
2087
2088             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
2089             ewrt             = _fjsp_mul_v2r8(r20,ewtabscale);
2090             itab_tmp         = _fjsp_dtox_v2r8(ewrt);
2091             eweps            = _fjsp_sub_v2r8(ewrt,_fjsp_xtod_v2r8(itab_tmp));
2092             _fjsp_store_v2r8(&ewconv.simd,itab_tmp);
2093
2094             ewtabF           = _fjsp_load_v2r8( ewtab + 4*ewconv.i[0] );
2095             ewtabD           = _fjsp_load_v2r8( ewtab + 4*ewconv.i[1] );
2096             GMX_FJSP_TRANSPOSE2_V2R8(ewtabF,ewtabD);
2097             ewtabV           = _fjsp_loadl_v2r8(_fjsp_setzero_v2r8(), ewtab + 4*ewconv.i[0] +2);
2098             ewtabFn          = _fjsp_loadl_v2r8(_fjsp_setzero_v2r8(), ewtab + 4*ewconv.i[1] +2);
2099             GMX_FJSP_TRANSPOSE2_V2R8(ewtabV,ewtabFn);
2100             felec            = _fjsp_madd_v2r8(eweps,ewtabD,ewtabF);
2101             velec            = _fjsp_nmsub_v2r8(_fjsp_mul_v2r8(ewtabhalfspace,eweps) ,_fjsp_add_v2r8(ewtabF,felec), ewtabV);
2102             velec            = _fjsp_mul_v2r8(qq20,_fjsp_sub_v2r8(rinv20,velec));
2103             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq20,rinv20),_fjsp_sub_v2r8(rinvsq20,felec));
2104
2105             d                = _fjsp_sub_v2r8(r20,rswitch);
2106             d                = _fjsp_max_v2r8(d,_fjsp_setzero_v2r8());
2107             d2               = _fjsp_mul_v2r8(d,d);
2108             sw               = _fjsp_add_v2r8(one,_fjsp_mul_v2r8(d2,_fjsp_mul_v2r8(d,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swV5,swV4),swV3))));
2109
2110             dsw              = _fjsp_mul_v2r8(d2,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swF4,swF3),swF2));
2111
2112             /* Evaluate switch function */
2113             /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
2114             felec            = _fjsp_msub_v2r8( felec,sw , _fjsp_mul_v2r8(rinv20,_fjsp_mul_v2r8(velec,dsw)) );
2115             cutoff_mask      = _fjsp_cmplt_v2r8(rsq20,rcutoff2);
2116
2117             fscal            = felec;
2118
2119             fscal            = _fjsp_and_v2r8(fscal,cutoff_mask);
2120
2121             /* Update vectorial force */
2122             fix2             = _fjsp_madd_v2r8(dx20,fscal,fix2);
2123             fiy2             = _fjsp_madd_v2r8(dy20,fscal,fiy2);
2124             fiz2             = _fjsp_madd_v2r8(dz20,fscal,fiz2);
2125             
2126             fjx0             = _fjsp_madd_v2r8(dx20,fscal,fjx0);
2127             fjy0             = _fjsp_madd_v2r8(dy20,fscal,fjy0);
2128             fjz0             = _fjsp_madd_v2r8(dz20,fscal,fjz0);
2129
2130             }
2131
2132             /**************************
2133              * CALCULATE INTERACTIONS *
2134              **************************/
2135
2136             if (gmx_fjsp_any_lt_v2r8(rsq21,rcutoff2))
2137             {
2138
2139             r21              = _fjsp_mul_v2r8(rsq21,rinv21);
2140
2141             /* EWALD ELECTROSTATICS */
2142
2143             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
2144             ewrt             = _fjsp_mul_v2r8(r21,ewtabscale);
2145             itab_tmp         = _fjsp_dtox_v2r8(ewrt);
2146             eweps            = _fjsp_sub_v2r8(ewrt,_fjsp_xtod_v2r8(itab_tmp));
2147             _fjsp_store_v2r8(&ewconv.simd,itab_tmp);
2148
2149             ewtabF           = _fjsp_load_v2r8( ewtab + 4*ewconv.i[0] );
2150             ewtabD           = _fjsp_load_v2r8( ewtab + 4*ewconv.i[1] );
2151             GMX_FJSP_TRANSPOSE2_V2R8(ewtabF,ewtabD);
2152             ewtabV           = _fjsp_loadl_v2r8(_fjsp_setzero_v2r8(), ewtab + 4*ewconv.i[0] +2);
2153             ewtabFn          = _fjsp_loadl_v2r8(_fjsp_setzero_v2r8(), ewtab + 4*ewconv.i[1] +2);
2154             GMX_FJSP_TRANSPOSE2_V2R8(ewtabV,ewtabFn);
2155             felec            = _fjsp_madd_v2r8(eweps,ewtabD,ewtabF);
2156             velec            = _fjsp_nmsub_v2r8(_fjsp_mul_v2r8(ewtabhalfspace,eweps) ,_fjsp_add_v2r8(ewtabF,felec), ewtabV);
2157             velec            = _fjsp_mul_v2r8(qq21,_fjsp_sub_v2r8(rinv21,velec));
2158             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq21,rinv21),_fjsp_sub_v2r8(rinvsq21,felec));
2159
2160             d                = _fjsp_sub_v2r8(r21,rswitch);
2161             d                = _fjsp_max_v2r8(d,_fjsp_setzero_v2r8());
2162             d2               = _fjsp_mul_v2r8(d,d);
2163             sw               = _fjsp_add_v2r8(one,_fjsp_mul_v2r8(d2,_fjsp_mul_v2r8(d,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swV5,swV4),swV3))));
2164
2165             dsw              = _fjsp_mul_v2r8(d2,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swF4,swF3),swF2));
2166
2167             /* Evaluate switch function */
2168             /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
2169             felec            = _fjsp_msub_v2r8( felec,sw , _fjsp_mul_v2r8(rinv21,_fjsp_mul_v2r8(velec,dsw)) );
2170             cutoff_mask      = _fjsp_cmplt_v2r8(rsq21,rcutoff2);
2171
2172             fscal            = felec;
2173
2174             fscal            = _fjsp_and_v2r8(fscal,cutoff_mask);
2175
2176             /* Update vectorial force */
2177             fix2             = _fjsp_madd_v2r8(dx21,fscal,fix2);
2178             fiy2             = _fjsp_madd_v2r8(dy21,fscal,fiy2);
2179             fiz2             = _fjsp_madd_v2r8(dz21,fscal,fiz2);
2180             
2181             fjx1             = _fjsp_madd_v2r8(dx21,fscal,fjx1);
2182             fjy1             = _fjsp_madd_v2r8(dy21,fscal,fjy1);
2183             fjz1             = _fjsp_madd_v2r8(dz21,fscal,fjz1);
2184
2185             }
2186
2187             /**************************
2188              * CALCULATE INTERACTIONS *
2189              **************************/
2190
2191             if (gmx_fjsp_any_lt_v2r8(rsq22,rcutoff2))
2192             {
2193
2194             r22              = _fjsp_mul_v2r8(rsq22,rinv22);
2195
2196             /* EWALD ELECTROSTATICS */
2197
2198             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
2199             ewrt             = _fjsp_mul_v2r8(r22,ewtabscale);
2200             itab_tmp         = _fjsp_dtox_v2r8(ewrt);
2201             eweps            = _fjsp_sub_v2r8(ewrt,_fjsp_xtod_v2r8(itab_tmp));
2202             _fjsp_store_v2r8(&ewconv.simd,itab_tmp);
2203
2204             ewtabF           = _fjsp_load_v2r8( ewtab + 4*ewconv.i[0] );
2205             ewtabD           = _fjsp_load_v2r8( ewtab + 4*ewconv.i[1] );
2206             GMX_FJSP_TRANSPOSE2_V2R8(ewtabF,ewtabD);
2207             ewtabV           = _fjsp_loadl_v2r8(_fjsp_setzero_v2r8(), ewtab + 4*ewconv.i[0] +2);
2208             ewtabFn          = _fjsp_loadl_v2r8(_fjsp_setzero_v2r8(), ewtab + 4*ewconv.i[1] +2);
2209             GMX_FJSP_TRANSPOSE2_V2R8(ewtabV,ewtabFn);
2210             felec            = _fjsp_madd_v2r8(eweps,ewtabD,ewtabF);
2211             velec            = _fjsp_nmsub_v2r8(_fjsp_mul_v2r8(ewtabhalfspace,eweps) ,_fjsp_add_v2r8(ewtabF,felec), ewtabV);
2212             velec            = _fjsp_mul_v2r8(qq22,_fjsp_sub_v2r8(rinv22,velec));
2213             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq22,rinv22),_fjsp_sub_v2r8(rinvsq22,felec));
2214
2215             d                = _fjsp_sub_v2r8(r22,rswitch);
2216             d                = _fjsp_max_v2r8(d,_fjsp_setzero_v2r8());
2217             d2               = _fjsp_mul_v2r8(d,d);
2218             sw               = _fjsp_add_v2r8(one,_fjsp_mul_v2r8(d2,_fjsp_mul_v2r8(d,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swV5,swV4),swV3))));
2219
2220             dsw              = _fjsp_mul_v2r8(d2,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swF4,swF3),swF2));
2221
2222             /* Evaluate switch function */
2223             /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
2224             felec            = _fjsp_msub_v2r8( felec,sw , _fjsp_mul_v2r8(rinv22,_fjsp_mul_v2r8(velec,dsw)) );
2225             cutoff_mask      = _fjsp_cmplt_v2r8(rsq22,rcutoff2);
2226
2227             fscal            = felec;
2228
2229             fscal            = _fjsp_and_v2r8(fscal,cutoff_mask);
2230
2231             /* Update vectorial force */
2232             fix2             = _fjsp_madd_v2r8(dx22,fscal,fix2);
2233             fiy2             = _fjsp_madd_v2r8(dy22,fscal,fiy2);
2234             fiz2             = _fjsp_madd_v2r8(dz22,fscal,fiz2);
2235             
2236             fjx2             = _fjsp_madd_v2r8(dx22,fscal,fjx2);
2237             fjy2             = _fjsp_madd_v2r8(dy22,fscal,fjy2);
2238             fjz2             = _fjsp_madd_v2r8(dz22,fscal,fjz2);
2239
2240             }
2241
2242             gmx_fjsp_decrement_3rvec_2ptr_swizzle_v2r8(f+j_coord_offsetA,f+j_coord_offsetB,fjx0,fjy0,fjz0,fjx1,fjy1,fjz1,fjx2,fjy2,fjz2);
2243
2244             /* Inner loop uses 585 flops */
2245         }
2246
2247         if(jidx<j_index_end)
2248         {
2249
2250             jnrA             = jjnr[jidx];
2251             j_coord_offsetA  = DIM*jnrA;
2252
2253             /* load j atom coordinates */
2254             gmx_fjsp_load_3rvec_1ptr_swizzle_v2r8(x+j_coord_offsetA,
2255                                               &jx0,&jy0,&jz0,&jx1,&jy1,&jz1,&jx2,&jy2,&jz2);
2256
2257             /* Calculate displacement vector */
2258             dx00             = _fjsp_sub_v2r8(ix0,jx0);
2259             dy00             = _fjsp_sub_v2r8(iy0,jy0);
2260             dz00             = _fjsp_sub_v2r8(iz0,jz0);
2261             dx01             = _fjsp_sub_v2r8(ix0,jx1);
2262             dy01             = _fjsp_sub_v2r8(iy0,jy1);
2263             dz01             = _fjsp_sub_v2r8(iz0,jz1);
2264             dx02             = _fjsp_sub_v2r8(ix0,jx2);
2265             dy02             = _fjsp_sub_v2r8(iy0,jy2);
2266             dz02             = _fjsp_sub_v2r8(iz0,jz2);
2267             dx10             = _fjsp_sub_v2r8(ix1,jx0);
2268             dy10             = _fjsp_sub_v2r8(iy1,jy0);
2269             dz10             = _fjsp_sub_v2r8(iz1,jz0);
2270             dx11             = _fjsp_sub_v2r8(ix1,jx1);
2271             dy11             = _fjsp_sub_v2r8(iy1,jy1);
2272             dz11             = _fjsp_sub_v2r8(iz1,jz1);
2273             dx12             = _fjsp_sub_v2r8(ix1,jx2);
2274             dy12             = _fjsp_sub_v2r8(iy1,jy2);
2275             dz12             = _fjsp_sub_v2r8(iz1,jz2);
2276             dx20             = _fjsp_sub_v2r8(ix2,jx0);
2277             dy20             = _fjsp_sub_v2r8(iy2,jy0);
2278             dz20             = _fjsp_sub_v2r8(iz2,jz0);
2279             dx21             = _fjsp_sub_v2r8(ix2,jx1);
2280             dy21             = _fjsp_sub_v2r8(iy2,jy1);
2281             dz21             = _fjsp_sub_v2r8(iz2,jz1);
2282             dx22             = _fjsp_sub_v2r8(ix2,jx2);
2283             dy22             = _fjsp_sub_v2r8(iy2,jy2);
2284             dz22             = _fjsp_sub_v2r8(iz2,jz2);
2285
2286             /* Calculate squared distance and things based on it */
2287             rsq00            = gmx_fjsp_calc_rsq_v2r8(dx00,dy00,dz00);
2288             rsq01            = gmx_fjsp_calc_rsq_v2r8(dx01,dy01,dz01);
2289             rsq02            = gmx_fjsp_calc_rsq_v2r8(dx02,dy02,dz02);
2290             rsq10            = gmx_fjsp_calc_rsq_v2r8(dx10,dy10,dz10);
2291             rsq11            = gmx_fjsp_calc_rsq_v2r8(dx11,dy11,dz11);
2292             rsq12            = gmx_fjsp_calc_rsq_v2r8(dx12,dy12,dz12);
2293             rsq20            = gmx_fjsp_calc_rsq_v2r8(dx20,dy20,dz20);
2294             rsq21            = gmx_fjsp_calc_rsq_v2r8(dx21,dy21,dz21);
2295             rsq22            = gmx_fjsp_calc_rsq_v2r8(dx22,dy22,dz22);
2296
2297             rinv00           = gmx_fjsp_invsqrt_v2r8(rsq00);
2298             rinv01           = gmx_fjsp_invsqrt_v2r8(rsq01);
2299             rinv02           = gmx_fjsp_invsqrt_v2r8(rsq02);
2300             rinv10           = gmx_fjsp_invsqrt_v2r8(rsq10);
2301             rinv11           = gmx_fjsp_invsqrt_v2r8(rsq11);
2302             rinv12           = gmx_fjsp_invsqrt_v2r8(rsq12);
2303             rinv20           = gmx_fjsp_invsqrt_v2r8(rsq20);
2304             rinv21           = gmx_fjsp_invsqrt_v2r8(rsq21);
2305             rinv22           = gmx_fjsp_invsqrt_v2r8(rsq22);
2306
2307             rinvsq00         = _fjsp_mul_v2r8(rinv00,rinv00);
2308             rinvsq01         = _fjsp_mul_v2r8(rinv01,rinv01);
2309             rinvsq02         = _fjsp_mul_v2r8(rinv02,rinv02);
2310             rinvsq10         = _fjsp_mul_v2r8(rinv10,rinv10);
2311             rinvsq11         = _fjsp_mul_v2r8(rinv11,rinv11);
2312             rinvsq12         = _fjsp_mul_v2r8(rinv12,rinv12);
2313             rinvsq20         = _fjsp_mul_v2r8(rinv20,rinv20);
2314             rinvsq21         = _fjsp_mul_v2r8(rinv21,rinv21);
2315             rinvsq22         = _fjsp_mul_v2r8(rinv22,rinv22);
2316
2317             fjx0             = _fjsp_setzero_v2r8();
2318             fjy0             = _fjsp_setzero_v2r8();
2319             fjz0             = _fjsp_setzero_v2r8();
2320             fjx1             = _fjsp_setzero_v2r8();
2321             fjy1             = _fjsp_setzero_v2r8();
2322             fjz1             = _fjsp_setzero_v2r8();
2323             fjx2             = _fjsp_setzero_v2r8();
2324             fjy2             = _fjsp_setzero_v2r8();
2325             fjz2             = _fjsp_setzero_v2r8();
2326
2327             /**************************
2328              * CALCULATE INTERACTIONS *
2329              **************************/
2330
2331             if (gmx_fjsp_any_lt_v2r8(rsq00,rcutoff2))
2332             {
2333
2334             r00              = _fjsp_mul_v2r8(rsq00,rinv00);
2335
2336             /* EWALD ELECTROSTATICS */
2337
2338             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
2339             ewrt             = _fjsp_mul_v2r8(r00,ewtabscale);
2340             itab_tmp         = _fjsp_dtox_v2r8(ewrt);
2341             eweps            = _fjsp_sub_v2r8(ewrt,_fjsp_xtod_v2r8(itab_tmp));
2342             _fjsp_store_v2r8(&ewconv.simd,itab_tmp);
2343
2344             ewtabF           = _fjsp_load_v2r8( ewtab + 4*ewconv.i[0] );
2345             ewtabD           = _fjsp_setzero_v2r8();
2346             GMX_FJSP_TRANSPOSE2_V2R8(ewtabF,ewtabD);
2347             ewtabV           = _fjsp_loadl_v2r8(_fjsp_setzero_v2r8(), ewtab + 4*ewconv.i[0] +2);
2348             ewtabFn          = _fjsp_setzero_v2r8();
2349             GMX_FJSP_TRANSPOSE2_V2R8(ewtabV,ewtabFn);
2350             felec            = _fjsp_madd_v2r8(eweps,ewtabD,ewtabF);
2351             velec            = _fjsp_nmsub_v2r8(_fjsp_mul_v2r8(ewtabhalfspace,eweps) ,_fjsp_add_v2r8(ewtabF,felec), ewtabV);
2352             velec            = _fjsp_mul_v2r8(qq00,_fjsp_sub_v2r8(rinv00,velec));
2353             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq00,rinv00),_fjsp_sub_v2r8(rinvsq00,felec));
2354
2355             d                = _fjsp_sub_v2r8(r00,rswitch);
2356             d                = _fjsp_max_v2r8(d,_fjsp_setzero_v2r8());
2357             d2               = _fjsp_mul_v2r8(d,d);
2358             sw               = _fjsp_add_v2r8(one,_fjsp_mul_v2r8(d2,_fjsp_mul_v2r8(d,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swV5,swV4),swV3))));
2359
2360             dsw              = _fjsp_mul_v2r8(d2,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swF4,swF3),swF2));
2361
2362             /* Evaluate switch function */
2363             /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
2364             felec            = _fjsp_msub_v2r8( felec,sw , _fjsp_mul_v2r8(rinv00,_fjsp_mul_v2r8(velec,dsw)) );
2365             cutoff_mask      = _fjsp_cmplt_v2r8(rsq00,rcutoff2);
2366
2367             fscal            = felec;
2368
2369             fscal            = _fjsp_and_v2r8(fscal,cutoff_mask);
2370
2371             fscal            = _fjsp_unpacklo_v2r8(fscal,_fjsp_setzero_v2r8());
2372
2373             /* Update vectorial force */
2374             fix0             = _fjsp_madd_v2r8(dx00,fscal,fix0);
2375             fiy0             = _fjsp_madd_v2r8(dy00,fscal,fiy0);
2376             fiz0             = _fjsp_madd_v2r8(dz00,fscal,fiz0);
2377             
2378             fjx0             = _fjsp_madd_v2r8(dx00,fscal,fjx0);
2379             fjy0             = _fjsp_madd_v2r8(dy00,fscal,fjy0);
2380             fjz0             = _fjsp_madd_v2r8(dz00,fscal,fjz0);
2381
2382             }
2383
2384             /**************************
2385              * CALCULATE INTERACTIONS *
2386              **************************/
2387
2388             if (gmx_fjsp_any_lt_v2r8(rsq01,rcutoff2))
2389             {
2390
2391             r01              = _fjsp_mul_v2r8(rsq01,rinv01);
2392
2393             /* EWALD ELECTROSTATICS */
2394
2395             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
2396             ewrt             = _fjsp_mul_v2r8(r01,ewtabscale);
2397             itab_tmp         = _fjsp_dtox_v2r8(ewrt);
2398             eweps            = _fjsp_sub_v2r8(ewrt,_fjsp_xtod_v2r8(itab_tmp));
2399             _fjsp_store_v2r8(&ewconv.simd,itab_tmp);
2400
2401             ewtabF           = _fjsp_load_v2r8( ewtab + 4*ewconv.i[0] );
2402             ewtabD           = _fjsp_setzero_v2r8();
2403             GMX_FJSP_TRANSPOSE2_V2R8(ewtabF,ewtabD);
2404             ewtabV           = _fjsp_loadl_v2r8(_fjsp_setzero_v2r8(), ewtab + 4*ewconv.i[0] +2);
2405             ewtabFn          = _fjsp_setzero_v2r8();
2406             GMX_FJSP_TRANSPOSE2_V2R8(ewtabV,ewtabFn);
2407             felec            = _fjsp_madd_v2r8(eweps,ewtabD,ewtabF);
2408             velec            = _fjsp_nmsub_v2r8(_fjsp_mul_v2r8(ewtabhalfspace,eweps) ,_fjsp_add_v2r8(ewtabF,felec), ewtabV);
2409             velec            = _fjsp_mul_v2r8(qq01,_fjsp_sub_v2r8(rinv01,velec));
2410             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq01,rinv01),_fjsp_sub_v2r8(rinvsq01,felec));
2411
2412             d                = _fjsp_sub_v2r8(r01,rswitch);
2413             d                = _fjsp_max_v2r8(d,_fjsp_setzero_v2r8());
2414             d2               = _fjsp_mul_v2r8(d,d);
2415             sw               = _fjsp_add_v2r8(one,_fjsp_mul_v2r8(d2,_fjsp_mul_v2r8(d,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swV5,swV4),swV3))));
2416
2417             dsw              = _fjsp_mul_v2r8(d2,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swF4,swF3),swF2));
2418
2419             /* Evaluate switch function */
2420             /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
2421             felec            = _fjsp_msub_v2r8( felec,sw , _fjsp_mul_v2r8(rinv01,_fjsp_mul_v2r8(velec,dsw)) );
2422             cutoff_mask      = _fjsp_cmplt_v2r8(rsq01,rcutoff2);
2423
2424             fscal            = felec;
2425
2426             fscal            = _fjsp_and_v2r8(fscal,cutoff_mask);
2427
2428             fscal            = _fjsp_unpacklo_v2r8(fscal,_fjsp_setzero_v2r8());
2429
2430             /* Update vectorial force */
2431             fix0             = _fjsp_madd_v2r8(dx01,fscal,fix0);
2432             fiy0             = _fjsp_madd_v2r8(dy01,fscal,fiy0);
2433             fiz0             = _fjsp_madd_v2r8(dz01,fscal,fiz0);
2434             
2435             fjx1             = _fjsp_madd_v2r8(dx01,fscal,fjx1);
2436             fjy1             = _fjsp_madd_v2r8(dy01,fscal,fjy1);
2437             fjz1             = _fjsp_madd_v2r8(dz01,fscal,fjz1);
2438
2439             }
2440
2441             /**************************
2442              * CALCULATE INTERACTIONS *
2443              **************************/
2444
2445             if (gmx_fjsp_any_lt_v2r8(rsq02,rcutoff2))
2446             {
2447
2448             r02              = _fjsp_mul_v2r8(rsq02,rinv02);
2449
2450             /* EWALD ELECTROSTATICS */
2451
2452             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
2453             ewrt             = _fjsp_mul_v2r8(r02,ewtabscale);
2454             itab_tmp         = _fjsp_dtox_v2r8(ewrt);
2455             eweps            = _fjsp_sub_v2r8(ewrt,_fjsp_xtod_v2r8(itab_tmp));
2456             _fjsp_store_v2r8(&ewconv.simd,itab_tmp);
2457
2458             ewtabF           = _fjsp_load_v2r8( ewtab + 4*ewconv.i[0] );
2459             ewtabD           = _fjsp_setzero_v2r8();
2460             GMX_FJSP_TRANSPOSE2_V2R8(ewtabF,ewtabD);
2461             ewtabV           = _fjsp_loadl_v2r8(_fjsp_setzero_v2r8(), ewtab + 4*ewconv.i[0] +2);
2462             ewtabFn          = _fjsp_setzero_v2r8();
2463             GMX_FJSP_TRANSPOSE2_V2R8(ewtabV,ewtabFn);
2464             felec            = _fjsp_madd_v2r8(eweps,ewtabD,ewtabF);
2465             velec            = _fjsp_nmsub_v2r8(_fjsp_mul_v2r8(ewtabhalfspace,eweps) ,_fjsp_add_v2r8(ewtabF,felec), ewtabV);
2466             velec            = _fjsp_mul_v2r8(qq02,_fjsp_sub_v2r8(rinv02,velec));
2467             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq02,rinv02),_fjsp_sub_v2r8(rinvsq02,felec));
2468
2469             d                = _fjsp_sub_v2r8(r02,rswitch);
2470             d                = _fjsp_max_v2r8(d,_fjsp_setzero_v2r8());
2471             d2               = _fjsp_mul_v2r8(d,d);
2472             sw               = _fjsp_add_v2r8(one,_fjsp_mul_v2r8(d2,_fjsp_mul_v2r8(d,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swV5,swV4),swV3))));
2473
2474             dsw              = _fjsp_mul_v2r8(d2,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swF4,swF3),swF2));
2475
2476             /* Evaluate switch function */
2477             /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
2478             felec            = _fjsp_msub_v2r8( felec,sw , _fjsp_mul_v2r8(rinv02,_fjsp_mul_v2r8(velec,dsw)) );
2479             cutoff_mask      = _fjsp_cmplt_v2r8(rsq02,rcutoff2);
2480
2481             fscal            = felec;
2482
2483             fscal            = _fjsp_and_v2r8(fscal,cutoff_mask);
2484
2485             fscal            = _fjsp_unpacklo_v2r8(fscal,_fjsp_setzero_v2r8());
2486
2487             /* Update vectorial force */
2488             fix0             = _fjsp_madd_v2r8(dx02,fscal,fix0);
2489             fiy0             = _fjsp_madd_v2r8(dy02,fscal,fiy0);
2490             fiz0             = _fjsp_madd_v2r8(dz02,fscal,fiz0);
2491             
2492             fjx2             = _fjsp_madd_v2r8(dx02,fscal,fjx2);
2493             fjy2             = _fjsp_madd_v2r8(dy02,fscal,fjy2);
2494             fjz2             = _fjsp_madd_v2r8(dz02,fscal,fjz2);
2495
2496             }
2497
2498             /**************************
2499              * CALCULATE INTERACTIONS *
2500              **************************/
2501
2502             if (gmx_fjsp_any_lt_v2r8(rsq10,rcutoff2))
2503             {
2504
2505             r10              = _fjsp_mul_v2r8(rsq10,rinv10);
2506
2507             /* EWALD ELECTROSTATICS */
2508
2509             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
2510             ewrt             = _fjsp_mul_v2r8(r10,ewtabscale);
2511             itab_tmp         = _fjsp_dtox_v2r8(ewrt);
2512             eweps            = _fjsp_sub_v2r8(ewrt,_fjsp_xtod_v2r8(itab_tmp));
2513             _fjsp_store_v2r8(&ewconv.simd,itab_tmp);
2514
2515             ewtabF           = _fjsp_load_v2r8( ewtab + 4*ewconv.i[0] );
2516             ewtabD           = _fjsp_setzero_v2r8();
2517             GMX_FJSP_TRANSPOSE2_V2R8(ewtabF,ewtabD);
2518             ewtabV           = _fjsp_loadl_v2r8(_fjsp_setzero_v2r8(), ewtab + 4*ewconv.i[0] +2);
2519             ewtabFn          = _fjsp_setzero_v2r8();
2520             GMX_FJSP_TRANSPOSE2_V2R8(ewtabV,ewtabFn);
2521             felec            = _fjsp_madd_v2r8(eweps,ewtabD,ewtabF);
2522             velec            = _fjsp_nmsub_v2r8(_fjsp_mul_v2r8(ewtabhalfspace,eweps) ,_fjsp_add_v2r8(ewtabF,felec), ewtabV);
2523             velec            = _fjsp_mul_v2r8(qq10,_fjsp_sub_v2r8(rinv10,velec));
2524             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq10,rinv10),_fjsp_sub_v2r8(rinvsq10,felec));
2525
2526             d                = _fjsp_sub_v2r8(r10,rswitch);
2527             d                = _fjsp_max_v2r8(d,_fjsp_setzero_v2r8());
2528             d2               = _fjsp_mul_v2r8(d,d);
2529             sw               = _fjsp_add_v2r8(one,_fjsp_mul_v2r8(d2,_fjsp_mul_v2r8(d,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swV5,swV4),swV3))));
2530
2531             dsw              = _fjsp_mul_v2r8(d2,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swF4,swF3),swF2));
2532
2533             /* Evaluate switch function */
2534             /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
2535             felec            = _fjsp_msub_v2r8( felec,sw , _fjsp_mul_v2r8(rinv10,_fjsp_mul_v2r8(velec,dsw)) );
2536             cutoff_mask      = _fjsp_cmplt_v2r8(rsq10,rcutoff2);
2537
2538             fscal            = felec;
2539
2540             fscal            = _fjsp_and_v2r8(fscal,cutoff_mask);
2541
2542             fscal            = _fjsp_unpacklo_v2r8(fscal,_fjsp_setzero_v2r8());
2543
2544             /* Update vectorial force */
2545             fix1             = _fjsp_madd_v2r8(dx10,fscal,fix1);
2546             fiy1             = _fjsp_madd_v2r8(dy10,fscal,fiy1);
2547             fiz1             = _fjsp_madd_v2r8(dz10,fscal,fiz1);
2548             
2549             fjx0             = _fjsp_madd_v2r8(dx10,fscal,fjx0);
2550             fjy0             = _fjsp_madd_v2r8(dy10,fscal,fjy0);
2551             fjz0             = _fjsp_madd_v2r8(dz10,fscal,fjz0);
2552
2553             }
2554
2555             /**************************
2556              * CALCULATE INTERACTIONS *
2557              **************************/
2558
2559             if (gmx_fjsp_any_lt_v2r8(rsq11,rcutoff2))
2560             {
2561
2562             r11              = _fjsp_mul_v2r8(rsq11,rinv11);
2563
2564             /* EWALD ELECTROSTATICS */
2565
2566             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
2567             ewrt             = _fjsp_mul_v2r8(r11,ewtabscale);
2568             itab_tmp         = _fjsp_dtox_v2r8(ewrt);
2569             eweps            = _fjsp_sub_v2r8(ewrt,_fjsp_xtod_v2r8(itab_tmp));
2570             _fjsp_store_v2r8(&ewconv.simd,itab_tmp);
2571
2572             ewtabF           = _fjsp_load_v2r8( ewtab + 4*ewconv.i[0] );
2573             ewtabD           = _fjsp_setzero_v2r8();
2574             GMX_FJSP_TRANSPOSE2_V2R8(ewtabF,ewtabD);
2575             ewtabV           = _fjsp_loadl_v2r8(_fjsp_setzero_v2r8(), ewtab + 4*ewconv.i[0] +2);
2576             ewtabFn          = _fjsp_setzero_v2r8();
2577             GMX_FJSP_TRANSPOSE2_V2R8(ewtabV,ewtabFn);
2578             felec            = _fjsp_madd_v2r8(eweps,ewtabD,ewtabF);
2579             velec            = _fjsp_nmsub_v2r8(_fjsp_mul_v2r8(ewtabhalfspace,eweps) ,_fjsp_add_v2r8(ewtabF,felec), ewtabV);
2580             velec            = _fjsp_mul_v2r8(qq11,_fjsp_sub_v2r8(rinv11,velec));
2581             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq11,rinv11),_fjsp_sub_v2r8(rinvsq11,felec));
2582
2583             d                = _fjsp_sub_v2r8(r11,rswitch);
2584             d                = _fjsp_max_v2r8(d,_fjsp_setzero_v2r8());
2585             d2               = _fjsp_mul_v2r8(d,d);
2586             sw               = _fjsp_add_v2r8(one,_fjsp_mul_v2r8(d2,_fjsp_mul_v2r8(d,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swV5,swV4),swV3))));
2587
2588             dsw              = _fjsp_mul_v2r8(d2,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swF4,swF3),swF2));
2589
2590             /* Evaluate switch function */
2591             /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
2592             felec            = _fjsp_msub_v2r8( felec,sw , _fjsp_mul_v2r8(rinv11,_fjsp_mul_v2r8(velec,dsw)) );
2593             cutoff_mask      = _fjsp_cmplt_v2r8(rsq11,rcutoff2);
2594
2595             fscal            = felec;
2596
2597             fscal            = _fjsp_and_v2r8(fscal,cutoff_mask);
2598
2599             fscal            = _fjsp_unpacklo_v2r8(fscal,_fjsp_setzero_v2r8());
2600
2601             /* Update vectorial force */
2602             fix1             = _fjsp_madd_v2r8(dx11,fscal,fix1);
2603             fiy1             = _fjsp_madd_v2r8(dy11,fscal,fiy1);
2604             fiz1             = _fjsp_madd_v2r8(dz11,fscal,fiz1);
2605             
2606             fjx1             = _fjsp_madd_v2r8(dx11,fscal,fjx1);
2607             fjy1             = _fjsp_madd_v2r8(dy11,fscal,fjy1);
2608             fjz1             = _fjsp_madd_v2r8(dz11,fscal,fjz1);
2609
2610             }
2611
2612             /**************************
2613              * CALCULATE INTERACTIONS *
2614              **************************/
2615
2616             if (gmx_fjsp_any_lt_v2r8(rsq12,rcutoff2))
2617             {
2618
2619             r12              = _fjsp_mul_v2r8(rsq12,rinv12);
2620
2621             /* EWALD ELECTROSTATICS */
2622
2623             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
2624             ewrt             = _fjsp_mul_v2r8(r12,ewtabscale);
2625             itab_tmp         = _fjsp_dtox_v2r8(ewrt);
2626             eweps            = _fjsp_sub_v2r8(ewrt,_fjsp_xtod_v2r8(itab_tmp));
2627             _fjsp_store_v2r8(&ewconv.simd,itab_tmp);
2628
2629             ewtabF           = _fjsp_load_v2r8( ewtab + 4*ewconv.i[0] );
2630             ewtabD           = _fjsp_setzero_v2r8();
2631             GMX_FJSP_TRANSPOSE2_V2R8(ewtabF,ewtabD);
2632             ewtabV           = _fjsp_loadl_v2r8(_fjsp_setzero_v2r8(), ewtab + 4*ewconv.i[0] +2);
2633             ewtabFn          = _fjsp_setzero_v2r8();
2634             GMX_FJSP_TRANSPOSE2_V2R8(ewtabV,ewtabFn);
2635             felec            = _fjsp_madd_v2r8(eweps,ewtabD,ewtabF);
2636             velec            = _fjsp_nmsub_v2r8(_fjsp_mul_v2r8(ewtabhalfspace,eweps) ,_fjsp_add_v2r8(ewtabF,felec), ewtabV);
2637             velec            = _fjsp_mul_v2r8(qq12,_fjsp_sub_v2r8(rinv12,velec));
2638             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq12,rinv12),_fjsp_sub_v2r8(rinvsq12,felec));
2639
2640             d                = _fjsp_sub_v2r8(r12,rswitch);
2641             d                = _fjsp_max_v2r8(d,_fjsp_setzero_v2r8());
2642             d2               = _fjsp_mul_v2r8(d,d);
2643             sw               = _fjsp_add_v2r8(one,_fjsp_mul_v2r8(d2,_fjsp_mul_v2r8(d,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swV5,swV4),swV3))));
2644
2645             dsw              = _fjsp_mul_v2r8(d2,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swF4,swF3),swF2));
2646
2647             /* Evaluate switch function */
2648             /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
2649             felec            = _fjsp_msub_v2r8( felec,sw , _fjsp_mul_v2r8(rinv12,_fjsp_mul_v2r8(velec,dsw)) );
2650             cutoff_mask      = _fjsp_cmplt_v2r8(rsq12,rcutoff2);
2651
2652             fscal            = felec;
2653
2654             fscal            = _fjsp_and_v2r8(fscal,cutoff_mask);
2655
2656             fscal            = _fjsp_unpacklo_v2r8(fscal,_fjsp_setzero_v2r8());
2657
2658             /* Update vectorial force */
2659             fix1             = _fjsp_madd_v2r8(dx12,fscal,fix1);
2660             fiy1             = _fjsp_madd_v2r8(dy12,fscal,fiy1);
2661             fiz1             = _fjsp_madd_v2r8(dz12,fscal,fiz1);
2662             
2663             fjx2             = _fjsp_madd_v2r8(dx12,fscal,fjx2);
2664             fjy2             = _fjsp_madd_v2r8(dy12,fscal,fjy2);
2665             fjz2             = _fjsp_madd_v2r8(dz12,fscal,fjz2);
2666
2667             }
2668
2669             /**************************
2670              * CALCULATE INTERACTIONS *
2671              **************************/
2672
2673             if (gmx_fjsp_any_lt_v2r8(rsq20,rcutoff2))
2674             {
2675
2676             r20              = _fjsp_mul_v2r8(rsq20,rinv20);
2677
2678             /* EWALD ELECTROSTATICS */
2679
2680             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
2681             ewrt             = _fjsp_mul_v2r8(r20,ewtabscale);
2682             itab_tmp         = _fjsp_dtox_v2r8(ewrt);
2683             eweps            = _fjsp_sub_v2r8(ewrt,_fjsp_xtod_v2r8(itab_tmp));
2684             _fjsp_store_v2r8(&ewconv.simd,itab_tmp);
2685
2686             ewtabF           = _fjsp_load_v2r8( ewtab + 4*ewconv.i[0] );
2687             ewtabD           = _fjsp_setzero_v2r8();
2688             GMX_FJSP_TRANSPOSE2_V2R8(ewtabF,ewtabD);
2689             ewtabV           = _fjsp_loadl_v2r8(_fjsp_setzero_v2r8(), ewtab + 4*ewconv.i[0] +2);
2690             ewtabFn          = _fjsp_setzero_v2r8();
2691             GMX_FJSP_TRANSPOSE2_V2R8(ewtabV,ewtabFn);
2692             felec            = _fjsp_madd_v2r8(eweps,ewtabD,ewtabF);
2693             velec            = _fjsp_nmsub_v2r8(_fjsp_mul_v2r8(ewtabhalfspace,eweps) ,_fjsp_add_v2r8(ewtabF,felec), ewtabV);
2694             velec            = _fjsp_mul_v2r8(qq20,_fjsp_sub_v2r8(rinv20,velec));
2695             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq20,rinv20),_fjsp_sub_v2r8(rinvsq20,felec));
2696
2697             d                = _fjsp_sub_v2r8(r20,rswitch);
2698             d                = _fjsp_max_v2r8(d,_fjsp_setzero_v2r8());
2699             d2               = _fjsp_mul_v2r8(d,d);
2700             sw               = _fjsp_add_v2r8(one,_fjsp_mul_v2r8(d2,_fjsp_mul_v2r8(d,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swV5,swV4),swV3))));
2701
2702             dsw              = _fjsp_mul_v2r8(d2,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swF4,swF3),swF2));
2703
2704             /* Evaluate switch function */
2705             /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
2706             felec            = _fjsp_msub_v2r8( felec,sw , _fjsp_mul_v2r8(rinv20,_fjsp_mul_v2r8(velec,dsw)) );
2707             cutoff_mask      = _fjsp_cmplt_v2r8(rsq20,rcutoff2);
2708
2709             fscal            = felec;
2710
2711             fscal            = _fjsp_and_v2r8(fscal,cutoff_mask);
2712
2713             fscal            = _fjsp_unpacklo_v2r8(fscal,_fjsp_setzero_v2r8());
2714
2715             /* Update vectorial force */
2716             fix2             = _fjsp_madd_v2r8(dx20,fscal,fix2);
2717             fiy2             = _fjsp_madd_v2r8(dy20,fscal,fiy2);
2718             fiz2             = _fjsp_madd_v2r8(dz20,fscal,fiz2);
2719             
2720             fjx0             = _fjsp_madd_v2r8(dx20,fscal,fjx0);
2721             fjy0             = _fjsp_madd_v2r8(dy20,fscal,fjy0);
2722             fjz0             = _fjsp_madd_v2r8(dz20,fscal,fjz0);
2723
2724             }
2725
2726             /**************************
2727              * CALCULATE INTERACTIONS *
2728              **************************/
2729
2730             if (gmx_fjsp_any_lt_v2r8(rsq21,rcutoff2))
2731             {
2732
2733             r21              = _fjsp_mul_v2r8(rsq21,rinv21);
2734
2735             /* EWALD ELECTROSTATICS */
2736
2737             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
2738             ewrt             = _fjsp_mul_v2r8(r21,ewtabscale);
2739             itab_tmp         = _fjsp_dtox_v2r8(ewrt);
2740             eweps            = _fjsp_sub_v2r8(ewrt,_fjsp_xtod_v2r8(itab_tmp));
2741             _fjsp_store_v2r8(&ewconv.simd,itab_tmp);
2742
2743             ewtabF           = _fjsp_load_v2r8( ewtab + 4*ewconv.i[0] );
2744             ewtabD           = _fjsp_setzero_v2r8();
2745             GMX_FJSP_TRANSPOSE2_V2R8(ewtabF,ewtabD);
2746             ewtabV           = _fjsp_loadl_v2r8(_fjsp_setzero_v2r8(), ewtab + 4*ewconv.i[0] +2);
2747             ewtabFn          = _fjsp_setzero_v2r8();
2748             GMX_FJSP_TRANSPOSE2_V2R8(ewtabV,ewtabFn);
2749             felec            = _fjsp_madd_v2r8(eweps,ewtabD,ewtabF);
2750             velec            = _fjsp_nmsub_v2r8(_fjsp_mul_v2r8(ewtabhalfspace,eweps) ,_fjsp_add_v2r8(ewtabF,felec), ewtabV);
2751             velec            = _fjsp_mul_v2r8(qq21,_fjsp_sub_v2r8(rinv21,velec));
2752             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq21,rinv21),_fjsp_sub_v2r8(rinvsq21,felec));
2753
2754             d                = _fjsp_sub_v2r8(r21,rswitch);
2755             d                = _fjsp_max_v2r8(d,_fjsp_setzero_v2r8());
2756             d2               = _fjsp_mul_v2r8(d,d);
2757             sw               = _fjsp_add_v2r8(one,_fjsp_mul_v2r8(d2,_fjsp_mul_v2r8(d,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swV5,swV4),swV3))));
2758
2759             dsw              = _fjsp_mul_v2r8(d2,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swF4,swF3),swF2));
2760
2761             /* Evaluate switch function */
2762             /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
2763             felec            = _fjsp_msub_v2r8( felec,sw , _fjsp_mul_v2r8(rinv21,_fjsp_mul_v2r8(velec,dsw)) );
2764             cutoff_mask      = _fjsp_cmplt_v2r8(rsq21,rcutoff2);
2765
2766             fscal            = felec;
2767
2768             fscal            = _fjsp_and_v2r8(fscal,cutoff_mask);
2769
2770             fscal            = _fjsp_unpacklo_v2r8(fscal,_fjsp_setzero_v2r8());
2771
2772             /* Update vectorial force */
2773             fix2             = _fjsp_madd_v2r8(dx21,fscal,fix2);
2774             fiy2             = _fjsp_madd_v2r8(dy21,fscal,fiy2);
2775             fiz2             = _fjsp_madd_v2r8(dz21,fscal,fiz2);
2776             
2777             fjx1             = _fjsp_madd_v2r8(dx21,fscal,fjx1);
2778             fjy1             = _fjsp_madd_v2r8(dy21,fscal,fjy1);
2779             fjz1             = _fjsp_madd_v2r8(dz21,fscal,fjz1);
2780
2781             }
2782
2783             /**************************
2784              * CALCULATE INTERACTIONS *
2785              **************************/
2786
2787             if (gmx_fjsp_any_lt_v2r8(rsq22,rcutoff2))
2788             {
2789
2790             r22              = _fjsp_mul_v2r8(rsq22,rinv22);
2791
2792             /* EWALD ELECTROSTATICS */
2793
2794             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
2795             ewrt             = _fjsp_mul_v2r8(r22,ewtabscale);
2796             itab_tmp         = _fjsp_dtox_v2r8(ewrt);
2797             eweps            = _fjsp_sub_v2r8(ewrt,_fjsp_xtod_v2r8(itab_tmp));
2798             _fjsp_store_v2r8(&ewconv.simd,itab_tmp);
2799
2800             ewtabF           = _fjsp_load_v2r8( ewtab + 4*ewconv.i[0] );
2801             ewtabD           = _fjsp_setzero_v2r8();
2802             GMX_FJSP_TRANSPOSE2_V2R8(ewtabF,ewtabD);
2803             ewtabV           = _fjsp_loadl_v2r8(_fjsp_setzero_v2r8(), ewtab + 4*ewconv.i[0] +2);
2804             ewtabFn          = _fjsp_setzero_v2r8();
2805             GMX_FJSP_TRANSPOSE2_V2R8(ewtabV,ewtabFn);
2806             felec            = _fjsp_madd_v2r8(eweps,ewtabD,ewtabF);
2807             velec            = _fjsp_nmsub_v2r8(_fjsp_mul_v2r8(ewtabhalfspace,eweps) ,_fjsp_add_v2r8(ewtabF,felec), ewtabV);
2808             velec            = _fjsp_mul_v2r8(qq22,_fjsp_sub_v2r8(rinv22,velec));
2809             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq22,rinv22),_fjsp_sub_v2r8(rinvsq22,felec));
2810
2811             d                = _fjsp_sub_v2r8(r22,rswitch);
2812             d                = _fjsp_max_v2r8(d,_fjsp_setzero_v2r8());
2813             d2               = _fjsp_mul_v2r8(d,d);
2814             sw               = _fjsp_add_v2r8(one,_fjsp_mul_v2r8(d2,_fjsp_mul_v2r8(d,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swV5,swV4),swV3))));
2815
2816             dsw              = _fjsp_mul_v2r8(d2,_fjsp_madd_v2r8(d,_fjsp_madd_v2r8(d,swF4,swF3),swF2));
2817
2818             /* Evaluate switch function */
2819             /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
2820             felec            = _fjsp_msub_v2r8( felec,sw , _fjsp_mul_v2r8(rinv22,_fjsp_mul_v2r8(velec,dsw)) );
2821             cutoff_mask      = _fjsp_cmplt_v2r8(rsq22,rcutoff2);
2822
2823             fscal            = felec;
2824
2825             fscal            = _fjsp_and_v2r8(fscal,cutoff_mask);
2826
2827             fscal            = _fjsp_unpacklo_v2r8(fscal,_fjsp_setzero_v2r8());
2828
2829             /* Update vectorial force */
2830             fix2             = _fjsp_madd_v2r8(dx22,fscal,fix2);
2831             fiy2             = _fjsp_madd_v2r8(dy22,fscal,fiy2);
2832             fiz2             = _fjsp_madd_v2r8(dz22,fscal,fiz2);
2833             
2834             fjx2             = _fjsp_madd_v2r8(dx22,fscal,fjx2);
2835             fjy2             = _fjsp_madd_v2r8(dy22,fscal,fjy2);
2836             fjz2             = _fjsp_madd_v2r8(dz22,fscal,fjz2);
2837
2838             }
2839
2840             gmx_fjsp_decrement_3rvec_1ptr_swizzle_v2r8(f+j_coord_offsetA,fjx0,fjy0,fjz0,fjx1,fjy1,fjz1,fjx2,fjy2,fjz2);
2841
2842             /* Inner loop uses 585 flops */
2843         }
2844
2845         /* End of innermost loop */
2846
2847         gmx_fjsp_update_iforce_3atom_swizzle_v2r8(fix0,fiy0,fiz0,fix1,fiy1,fiz1,fix2,fiy2,fiz2,
2848                                               f+i_coord_offset,fshift+i_shift_offset);
2849
2850         /* Increment number of inner iterations */
2851         inneriter                  += j_index_end - j_index_start;
2852
2853         /* Outer loop uses 18 flops */
2854     }
2855
2856     /* Increment number of outer iterations */
2857     outeriter        += nri;
2858
2859     /* Update outer/inner flops */
2860
2861     inc_nrnb(nrnb,eNR_NBKERNEL_ELEC_W3W3_F,outeriter*18 + inneriter*585);
2862 }