Use full path for legacyheaders
[alexxy/gromacs.git] / src / gromacs / gmxlib / nonbonded / nb_kernel_sparc64_hpc_ace_double / nb_kernel_ElecEwSw_VdwNone_GeomW4W4_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_GeomW4W4_VF_sparc64_hpc_ace_double
51  * Electrostatics interaction: Ewald
52  * VdW interaction:            None
53  * Geometry:                   Water4-Water4
54  * Calculate force/pot:        PotentialAndForce
55  */
56 void
57 nb_kernel_ElecEwSw_VdwNone_GeomW4W4_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              vdwioffset1;
80     _fjsp_v2r8       ix1,iy1,iz1,fix1,fiy1,fiz1,iq1,isai1;
81     int              vdwioffset2;
82     _fjsp_v2r8       ix2,iy2,iz2,fix2,fiy2,fiz2,iq2,isai2;
83     int              vdwioffset3;
84     _fjsp_v2r8       ix3,iy3,iz3,fix3,fiy3,fiz3,iq3,isai3;
85     int              vdwjidx1A,vdwjidx1B;
86     _fjsp_v2r8       jx1,jy1,jz1,fjx1,fjy1,fjz1,jq1,isaj1;
87     int              vdwjidx2A,vdwjidx2B;
88     _fjsp_v2r8       jx2,jy2,jz2,fjx2,fjy2,fjz2,jq2,isaj2;
89     int              vdwjidx3A,vdwjidx3B;
90     _fjsp_v2r8       jx3,jy3,jz3,fjx3,fjy3,fjz3,jq3,isaj3;
91     _fjsp_v2r8       dx11,dy11,dz11,rsq11,rinv11,rinvsq11,r11,qq11,c6_11,c12_11;
92     _fjsp_v2r8       dx12,dy12,dz12,rsq12,rinv12,rinvsq12,r12,qq12,c6_12,c12_12;
93     _fjsp_v2r8       dx13,dy13,dz13,rsq13,rinv13,rinvsq13,r13,qq13,c6_13,c12_13;
94     _fjsp_v2r8       dx21,dy21,dz21,rsq21,rinv21,rinvsq21,r21,qq21,c6_21,c12_21;
95     _fjsp_v2r8       dx22,dy22,dz22,rsq22,rinv22,rinvsq22,r22,qq22,c6_22,c12_22;
96     _fjsp_v2r8       dx23,dy23,dz23,rsq23,rinv23,rinvsq23,r23,qq23,c6_23,c12_23;
97     _fjsp_v2r8       dx31,dy31,dz31,rsq31,rinv31,rinvsq31,r31,qq31,c6_31,c12_31;
98     _fjsp_v2r8       dx32,dy32,dz32,rsq32,rinv32,rinvsq32,r32,qq32,c6_32,c12_32;
99     _fjsp_v2r8       dx33,dy33,dz33,rsq33,rinv33,rinvsq33,r33,qq33,c6_33,c12_33;
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     iq1              = _fjsp_mul_v2r8(facel,gmx_fjsp_set1_v2r8(charge[inr+1]));
134     iq2              = _fjsp_mul_v2r8(facel,gmx_fjsp_set1_v2r8(charge[inr+2]));
135     iq3              = _fjsp_mul_v2r8(facel,gmx_fjsp_set1_v2r8(charge[inr+3]));
136
137     jq1              = gmx_fjsp_set1_v2r8(charge[inr+1]);
138     jq2              = gmx_fjsp_set1_v2r8(charge[inr+2]);
139     jq3              = gmx_fjsp_set1_v2r8(charge[inr+3]);
140     qq11             = _fjsp_mul_v2r8(iq1,jq1);
141     qq12             = _fjsp_mul_v2r8(iq1,jq2);
142     qq13             = _fjsp_mul_v2r8(iq1,jq3);
143     qq21             = _fjsp_mul_v2r8(iq2,jq1);
144     qq22             = _fjsp_mul_v2r8(iq2,jq2);
145     qq23             = _fjsp_mul_v2r8(iq2,jq3);
146     qq31             = _fjsp_mul_v2r8(iq3,jq1);
147     qq32             = _fjsp_mul_v2r8(iq3,jq2);
148     qq33             = _fjsp_mul_v2r8(iq3,jq3);
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+DIM,
191                                                  &ix1,&iy1,&iz1,&ix2,&iy2,&iz2,&ix3,&iy3,&iz3);
192
193         fix1             = _fjsp_setzero_v2r8();
194         fiy1             = _fjsp_setzero_v2r8();
195         fiz1             = _fjsp_setzero_v2r8();
196         fix2             = _fjsp_setzero_v2r8();
197         fiy2             = _fjsp_setzero_v2r8();
198         fiz2             = _fjsp_setzero_v2r8();
199         fix3             = _fjsp_setzero_v2r8();
200         fiy3             = _fjsp_setzero_v2r8();
201         fiz3             = _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+DIM,x+j_coord_offsetB+DIM,
218                                               &jx1,&jy1,&jz1,&jx2,&jy2,&jz2,&jx3,&jy3,&jz3);
219
220             /* Calculate displacement vector */
221             dx11             = _fjsp_sub_v2r8(ix1,jx1);
222             dy11             = _fjsp_sub_v2r8(iy1,jy1);
223             dz11             = _fjsp_sub_v2r8(iz1,jz1);
224             dx12             = _fjsp_sub_v2r8(ix1,jx2);
225             dy12             = _fjsp_sub_v2r8(iy1,jy2);
226             dz12             = _fjsp_sub_v2r8(iz1,jz2);
227             dx13             = _fjsp_sub_v2r8(ix1,jx3);
228             dy13             = _fjsp_sub_v2r8(iy1,jy3);
229             dz13             = _fjsp_sub_v2r8(iz1,jz3);
230             dx21             = _fjsp_sub_v2r8(ix2,jx1);
231             dy21             = _fjsp_sub_v2r8(iy2,jy1);
232             dz21             = _fjsp_sub_v2r8(iz2,jz1);
233             dx22             = _fjsp_sub_v2r8(ix2,jx2);
234             dy22             = _fjsp_sub_v2r8(iy2,jy2);
235             dz22             = _fjsp_sub_v2r8(iz2,jz2);
236             dx23             = _fjsp_sub_v2r8(ix2,jx3);
237             dy23             = _fjsp_sub_v2r8(iy2,jy3);
238             dz23             = _fjsp_sub_v2r8(iz2,jz3);
239             dx31             = _fjsp_sub_v2r8(ix3,jx1);
240             dy31             = _fjsp_sub_v2r8(iy3,jy1);
241             dz31             = _fjsp_sub_v2r8(iz3,jz1);
242             dx32             = _fjsp_sub_v2r8(ix3,jx2);
243             dy32             = _fjsp_sub_v2r8(iy3,jy2);
244             dz32             = _fjsp_sub_v2r8(iz3,jz2);
245             dx33             = _fjsp_sub_v2r8(ix3,jx3);
246             dy33             = _fjsp_sub_v2r8(iy3,jy3);
247             dz33             = _fjsp_sub_v2r8(iz3,jz3);
248
249             /* Calculate squared distance and things based on it */
250             rsq11            = gmx_fjsp_calc_rsq_v2r8(dx11,dy11,dz11);
251             rsq12            = gmx_fjsp_calc_rsq_v2r8(dx12,dy12,dz12);
252             rsq13            = gmx_fjsp_calc_rsq_v2r8(dx13,dy13,dz13);
253             rsq21            = gmx_fjsp_calc_rsq_v2r8(dx21,dy21,dz21);
254             rsq22            = gmx_fjsp_calc_rsq_v2r8(dx22,dy22,dz22);
255             rsq23            = gmx_fjsp_calc_rsq_v2r8(dx23,dy23,dz23);
256             rsq31            = gmx_fjsp_calc_rsq_v2r8(dx31,dy31,dz31);
257             rsq32            = gmx_fjsp_calc_rsq_v2r8(dx32,dy32,dz32);
258             rsq33            = gmx_fjsp_calc_rsq_v2r8(dx33,dy33,dz33);
259
260             rinv11           = gmx_fjsp_invsqrt_v2r8(rsq11);
261             rinv12           = gmx_fjsp_invsqrt_v2r8(rsq12);
262             rinv13           = gmx_fjsp_invsqrt_v2r8(rsq13);
263             rinv21           = gmx_fjsp_invsqrt_v2r8(rsq21);
264             rinv22           = gmx_fjsp_invsqrt_v2r8(rsq22);
265             rinv23           = gmx_fjsp_invsqrt_v2r8(rsq23);
266             rinv31           = gmx_fjsp_invsqrt_v2r8(rsq31);
267             rinv32           = gmx_fjsp_invsqrt_v2r8(rsq32);
268             rinv33           = gmx_fjsp_invsqrt_v2r8(rsq33);
269
270             rinvsq11         = _fjsp_mul_v2r8(rinv11,rinv11);
271             rinvsq12         = _fjsp_mul_v2r8(rinv12,rinv12);
272             rinvsq13         = _fjsp_mul_v2r8(rinv13,rinv13);
273             rinvsq21         = _fjsp_mul_v2r8(rinv21,rinv21);
274             rinvsq22         = _fjsp_mul_v2r8(rinv22,rinv22);
275             rinvsq23         = _fjsp_mul_v2r8(rinv23,rinv23);
276             rinvsq31         = _fjsp_mul_v2r8(rinv31,rinv31);
277             rinvsq32         = _fjsp_mul_v2r8(rinv32,rinv32);
278             rinvsq33         = _fjsp_mul_v2r8(rinv33,rinv33);
279
280             fjx1             = _fjsp_setzero_v2r8();
281             fjy1             = _fjsp_setzero_v2r8();
282             fjz1             = _fjsp_setzero_v2r8();
283             fjx2             = _fjsp_setzero_v2r8();
284             fjy2             = _fjsp_setzero_v2r8();
285             fjz2             = _fjsp_setzero_v2r8();
286             fjx3             = _fjsp_setzero_v2r8();
287             fjy3             = _fjsp_setzero_v2r8();
288             fjz3             = _fjsp_setzero_v2r8();
289
290             /**************************
291              * CALCULATE INTERACTIONS *
292              **************************/
293
294             if (gmx_fjsp_any_lt_v2r8(rsq11,rcutoff2))
295             {
296
297             r11              = _fjsp_mul_v2r8(rsq11,rinv11);
298
299             /* EWALD ELECTROSTATICS */
300
301             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
302             ewrt             = _fjsp_mul_v2r8(r11,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(qq11,_fjsp_sub_v2r8(rinv11,velec));
316             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq11,rinv11),_fjsp_sub_v2r8(rinvsq11,felec));
317
318             d                = _fjsp_sub_v2r8(r11,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(rinv11,_fjsp_mul_v2r8(velec,dsw)) );
328             velec            = _fjsp_mul_v2r8(velec,sw);
329             cutoff_mask      = _fjsp_cmplt_v2r8(rsq11,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             fix1             = _fjsp_madd_v2r8(dx11,fscal,fix1);
341             fiy1             = _fjsp_madd_v2r8(dy11,fscal,fiy1);
342             fiz1             = _fjsp_madd_v2r8(dz11,fscal,fiz1);
343             
344             fjx1             = _fjsp_madd_v2r8(dx11,fscal,fjx1);
345             fjy1             = _fjsp_madd_v2r8(dy11,fscal,fjy1);
346             fjz1             = _fjsp_madd_v2r8(dz11,fscal,fjz1);
347
348             }
349
350             /**************************
351              * CALCULATE INTERACTIONS *
352              **************************/
353
354             if (gmx_fjsp_any_lt_v2r8(rsq12,rcutoff2))
355             {
356
357             r12              = _fjsp_mul_v2r8(rsq12,rinv12);
358
359             /* EWALD ELECTROSTATICS */
360
361             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
362             ewrt             = _fjsp_mul_v2r8(r12,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(qq12,_fjsp_sub_v2r8(rinv12,velec));
376             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq12,rinv12),_fjsp_sub_v2r8(rinvsq12,felec));
377
378             d                = _fjsp_sub_v2r8(r12,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(rinv12,_fjsp_mul_v2r8(velec,dsw)) );
388             velec            = _fjsp_mul_v2r8(velec,sw);
389             cutoff_mask      = _fjsp_cmplt_v2r8(rsq12,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             fix1             = _fjsp_madd_v2r8(dx12,fscal,fix1);
401             fiy1             = _fjsp_madd_v2r8(dy12,fscal,fiy1);
402             fiz1             = _fjsp_madd_v2r8(dz12,fscal,fiz1);
403             
404             fjx2             = _fjsp_madd_v2r8(dx12,fscal,fjx2);
405             fjy2             = _fjsp_madd_v2r8(dy12,fscal,fjy2);
406             fjz2             = _fjsp_madd_v2r8(dz12,fscal,fjz2);
407
408             }
409
410             /**************************
411              * CALCULATE INTERACTIONS *
412              **************************/
413
414             if (gmx_fjsp_any_lt_v2r8(rsq13,rcutoff2))
415             {
416
417             r13              = _fjsp_mul_v2r8(rsq13,rinv13);
418
419             /* EWALD ELECTROSTATICS */
420
421             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
422             ewrt             = _fjsp_mul_v2r8(r13,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(qq13,_fjsp_sub_v2r8(rinv13,velec));
436             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq13,rinv13),_fjsp_sub_v2r8(rinvsq13,felec));
437
438             d                = _fjsp_sub_v2r8(r13,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(rinv13,_fjsp_mul_v2r8(velec,dsw)) );
448             velec            = _fjsp_mul_v2r8(velec,sw);
449             cutoff_mask      = _fjsp_cmplt_v2r8(rsq13,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             fix1             = _fjsp_madd_v2r8(dx13,fscal,fix1);
461             fiy1             = _fjsp_madd_v2r8(dy13,fscal,fiy1);
462             fiz1             = _fjsp_madd_v2r8(dz13,fscal,fiz1);
463             
464             fjx3             = _fjsp_madd_v2r8(dx13,fscal,fjx3);
465             fjy3             = _fjsp_madd_v2r8(dy13,fscal,fjy3);
466             fjz3             = _fjsp_madd_v2r8(dz13,fscal,fjz3);
467
468             }
469
470             /**************************
471              * CALCULATE INTERACTIONS *
472              **************************/
473
474             if (gmx_fjsp_any_lt_v2r8(rsq21,rcutoff2))
475             {
476
477             r21              = _fjsp_mul_v2r8(rsq21,rinv21);
478
479             /* EWALD ELECTROSTATICS */
480
481             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
482             ewrt             = _fjsp_mul_v2r8(r21,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(qq21,_fjsp_sub_v2r8(rinv21,velec));
496             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq21,rinv21),_fjsp_sub_v2r8(rinvsq21,felec));
497
498             d                = _fjsp_sub_v2r8(r21,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(rinv21,_fjsp_mul_v2r8(velec,dsw)) );
508             velec            = _fjsp_mul_v2r8(velec,sw);
509             cutoff_mask      = _fjsp_cmplt_v2r8(rsq21,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             fix2             = _fjsp_madd_v2r8(dx21,fscal,fix2);
521             fiy2             = _fjsp_madd_v2r8(dy21,fscal,fiy2);
522             fiz2             = _fjsp_madd_v2r8(dz21,fscal,fiz2);
523             
524             fjx1             = _fjsp_madd_v2r8(dx21,fscal,fjx1);
525             fjy1             = _fjsp_madd_v2r8(dy21,fscal,fjy1);
526             fjz1             = _fjsp_madd_v2r8(dz21,fscal,fjz1);
527
528             }
529
530             /**************************
531              * CALCULATE INTERACTIONS *
532              **************************/
533
534             if (gmx_fjsp_any_lt_v2r8(rsq22,rcutoff2))
535             {
536
537             r22              = _fjsp_mul_v2r8(rsq22,rinv22);
538
539             /* EWALD ELECTROSTATICS */
540
541             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
542             ewrt             = _fjsp_mul_v2r8(r22,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(qq22,_fjsp_sub_v2r8(rinv22,velec));
556             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq22,rinv22),_fjsp_sub_v2r8(rinvsq22,felec));
557
558             d                = _fjsp_sub_v2r8(r22,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(rinv22,_fjsp_mul_v2r8(velec,dsw)) );
568             velec            = _fjsp_mul_v2r8(velec,sw);
569             cutoff_mask      = _fjsp_cmplt_v2r8(rsq22,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             fix2             = _fjsp_madd_v2r8(dx22,fscal,fix2);
581             fiy2             = _fjsp_madd_v2r8(dy22,fscal,fiy2);
582             fiz2             = _fjsp_madd_v2r8(dz22,fscal,fiz2);
583             
584             fjx2             = _fjsp_madd_v2r8(dx22,fscal,fjx2);
585             fjy2             = _fjsp_madd_v2r8(dy22,fscal,fjy2);
586             fjz2             = _fjsp_madd_v2r8(dz22,fscal,fjz2);
587
588             }
589
590             /**************************
591              * CALCULATE INTERACTIONS *
592              **************************/
593
594             if (gmx_fjsp_any_lt_v2r8(rsq23,rcutoff2))
595             {
596
597             r23              = _fjsp_mul_v2r8(rsq23,rinv23);
598
599             /* EWALD ELECTROSTATICS */
600
601             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
602             ewrt             = _fjsp_mul_v2r8(r23,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(qq23,_fjsp_sub_v2r8(rinv23,velec));
616             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq23,rinv23),_fjsp_sub_v2r8(rinvsq23,felec));
617
618             d                = _fjsp_sub_v2r8(r23,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(rinv23,_fjsp_mul_v2r8(velec,dsw)) );
628             velec            = _fjsp_mul_v2r8(velec,sw);
629             cutoff_mask      = _fjsp_cmplt_v2r8(rsq23,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             fix2             = _fjsp_madd_v2r8(dx23,fscal,fix2);
641             fiy2             = _fjsp_madd_v2r8(dy23,fscal,fiy2);
642             fiz2             = _fjsp_madd_v2r8(dz23,fscal,fiz2);
643             
644             fjx3             = _fjsp_madd_v2r8(dx23,fscal,fjx3);
645             fjy3             = _fjsp_madd_v2r8(dy23,fscal,fjy3);
646             fjz3             = _fjsp_madd_v2r8(dz23,fscal,fjz3);
647
648             }
649
650             /**************************
651              * CALCULATE INTERACTIONS *
652              **************************/
653
654             if (gmx_fjsp_any_lt_v2r8(rsq31,rcutoff2))
655             {
656
657             r31              = _fjsp_mul_v2r8(rsq31,rinv31);
658
659             /* EWALD ELECTROSTATICS */
660
661             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
662             ewrt             = _fjsp_mul_v2r8(r31,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(qq31,_fjsp_sub_v2r8(rinv31,velec));
676             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq31,rinv31),_fjsp_sub_v2r8(rinvsq31,felec));
677
678             d                = _fjsp_sub_v2r8(r31,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(rinv31,_fjsp_mul_v2r8(velec,dsw)) );
688             velec            = _fjsp_mul_v2r8(velec,sw);
689             cutoff_mask      = _fjsp_cmplt_v2r8(rsq31,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             fix3             = _fjsp_madd_v2r8(dx31,fscal,fix3);
701             fiy3             = _fjsp_madd_v2r8(dy31,fscal,fiy3);
702             fiz3             = _fjsp_madd_v2r8(dz31,fscal,fiz3);
703             
704             fjx1             = _fjsp_madd_v2r8(dx31,fscal,fjx1);
705             fjy1             = _fjsp_madd_v2r8(dy31,fscal,fjy1);
706             fjz1             = _fjsp_madd_v2r8(dz31,fscal,fjz1);
707
708             }
709
710             /**************************
711              * CALCULATE INTERACTIONS *
712              **************************/
713
714             if (gmx_fjsp_any_lt_v2r8(rsq32,rcutoff2))
715             {
716
717             r32              = _fjsp_mul_v2r8(rsq32,rinv32);
718
719             /* EWALD ELECTROSTATICS */
720
721             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
722             ewrt             = _fjsp_mul_v2r8(r32,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(qq32,_fjsp_sub_v2r8(rinv32,velec));
736             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq32,rinv32),_fjsp_sub_v2r8(rinvsq32,felec));
737
738             d                = _fjsp_sub_v2r8(r32,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(rinv32,_fjsp_mul_v2r8(velec,dsw)) );
748             velec            = _fjsp_mul_v2r8(velec,sw);
749             cutoff_mask      = _fjsp_cmplt_v2r8(rsq32,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             fix3             = _fjsp_madd_v2r8(dx32,fscal,fix3);
761             fiy3             = _fjsp_madd_v2r8(dy32,fscal,fiy3);
762             fiz3             = _fjsp_madd_v2r8(dz32,fscal,fiz3);
763             
764             fjx2             = _fjsp_madd_v2r8(dx32,fscal,fjx2);
765             fjy2             = _fjsp_madd_v2r8(dy32,fscal,fjy2);
766             fjz2             = _fjsp_madd_v2r8(dz32,fscal,fjz2);
767
768             }
769
770             /**************************
771              * CALCULATE INTERACTIONS *
772              **************************/
773
774             if (gmx_fjsp_any_lt_v2r8(rsq33,rcutoff2))
775             {
776
777             r33              = _fjsp_mul_v2r8(rsq33,rinv33);
778
779             /* EWALD ELECTROSTATICS */
780
781             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
782             ewrt             = _fjsp_mul_v2r8(r33,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(qq33,_fjsp_sub_v2r8(rinv33,velec));
796             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq33,rinv33),_fjsp_sub_v2r8(rinvsq33,felec));
797
798             d                = _fjsp_sub_v2r8(r33,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(rinv33,_fjsp_mul_v2r8(velec,dsw)) );
808             velec            = _fjsp_mul_v2r8(velec,sw);
809             cutoff_mask      = _fjsp_cmplt_v2r8(rsq33,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             fix3             = _fjsp_madd_v2r8(dx33,fscal,fix3);
821             fiy3             = _fjsp_madd_v2r8(dy33,fscal,fiy3);
822             fiz3             = _fjsp_madd_v2r8(dz33,fscal,fiz3);
823             
824             fjx3             = _fjsp_madd_v2r8(dx33,fscal,fjx3);
825             fjy3             = _fjsp_madd_v2r8(dy33,fscal,fjy3);
826             fjz3             = _fjsp_madd_v2r8(dz33,fscal,fjz3);
827
828             }
829
830             gmx_fjsp_decrement_3rvec_2ptr_swizzle_v2r8(f+j_coord_offsetA+DIM,f+j_coord_offsetB+DIM,fjx1,fjy1,fjz1,fjx2,fjy2,fjz2,fjx3,fjy3,fjz3);
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+DIM,
843                                               &jx1,&jy1,&jz1,&jx2,&jy2,&jz2,&jx3,&jy3,&jz3);
844
845             /* Calculate displacement vector */
846             dx11             = _fjsp_sub_v2r8(ix1,jx1);
847             dy11             = _fjsp_sub_v2r8(iy1,jy1);
848             dz11             = _fjsp_sub_v2r8(iz1,jz1);
849             dx12             = _fjsp_sub_v2r8(ix1,jx2);
850             dy12             = _fjsp_sub_v2r8(iy1,jy2);
851             dz12             = _fjsp_sub_v2r8(iz1,jz2);
852             dx13             = _fjsp_sub_v2r8(ix1,jx3);
853             dy13             = _fjsp_sub_v2r8(iy1,jy3);
854             dz13             = _fjsp_sub_v2r8(iz1,jz3);
855             dx21             = _fjsp_sub_v2r8(ix2,jx1);
856             dy21             = _fjsp_sub_v2r8(iy2,jy1);
857             dz21             = _fjsp_sub_v2r8(iz2,jz1);
858             dx22             = _fjsp_sub_v2r8(ix2,jx2);
859             dy22             = _fjsp_sub_v2r8(iy2,jy2);
860             dz22             = _fjsp_sub_v2r8(iz2,jz2);
861             dx23             = _fjsp_sub_v2r8(ix2,jx3);
862             dy23             = _fjsp_sub_v2r8(iy2,jy3);
863             dz23             = _fjsp_sub_v2r8(iz2,jz3);
864             dx31             = _fjsp_sub_v2r8(ix3,jx1);
865             dy31             = _fjsp_sub_v2r8(iy3,jy1);
866             dz31             = _fjsp_sub_v2r8(iz3,jz1);
867             dx32             = _fjsp_sub_v2r8(ix3,jx2);
868             dy32             = _fjsp_sub_v2r8(iy3,jy2);
869             dz32             = _fjsp_sub_v2r8(iz3,jz2);
870             dx33             = _fjsp_sub_v2r8(ix3,jx3);
871             dy33             = _fjsp_sub_v2r8(iy3,jy3);
872             dz33             = _fjsp_sub_v2r8(iz3,jz3);
873
874             /* Calculate squared distance and things based on it */
875             rsq11            = gmx_fjsp_calc_rsq_v2r8(dx11,dy11,dz11);
876             rsq12            = gmx_fjsp_calc_rsq_v2r8(dx12,dy12,dz12);
877             rsq13            = gmx_fjsp_calc_rsq_v2r8(dx13,dy13,dz13);
878             rsq21            = gmx_fjsp_calc_rsq_v2r8(dx21,dy21,dz21);
879             rsq22            = gmx_fjsp_calc_rsq_v2r8(dx22,dy22,dz22);
880             rsq23            = gmx_fjsp_calc_rsq_v2r8(dx23,dy23,dz23);
881             rsq31            = gmx_fjsp_calc_rsq_v2r8(dx31,dy31,dz31);
882             rsq32            = gmx_fjsp_calc_rsq_v2r8(dx32,dy32,dz32);
883             rsq33            = gmx_fjsp_calc_rsq_v2r8(dx33,dy33,dz33);
884
885             rinv11           = gmx_fjsp_invsqrt_v2r8(rsq11);
886             rinv12           = gmx_fjsp_invsqrt_v2r8(rsq12);
887             rinv13           = gmx_fjsp_invsqrt_v2r8(rsq13);
888             rinv21           = gmx_fjsp_invsqrt_v2r8(rsq21);
889             rinv22           = gmx_fjsp_invsqrt_v2r8(rsq22);
890             rinv23           = gmx_fjsp_invsqrt_v2r8(rsq23);
891             rinv31           = gmx_fjsp_invsqrt_v2r8(rsq31);
892             rinv32           = gmx_fjsp_invsqrt_v2r8(rsq32);
893             rinv33           = gmx_fjsp_invsqrt_v2r8(rsq33);
894
895             rinvsq11         = _fjsp_mul_v2r8(rinv11,rinv11);
896             rinvsq12         = _fjsp_mul_v2r8(rinv12,rinv12);
897             rinvsq13         = _fjsp_mul_v2r8(rinv13,rinv13);
898             rinvsq21         = _fjsp_mul_v2r8(rinv21,rinv21);
899             rinvsq22         = _fjsp_mul_v2r8(rinv22,rinv22);
900             rinvsq23         = _fjsp_mul_v2r8(rinv23,rinv23);
901             rinvsq31         = _fjsp_mul_v2r8(rinv31,rinv31);
902             rinvsq32         = _fjsp_mul_v2r8(rinv32,rinv32);
903             rinvsq33         = _fjsp_mul_v2r8(rinv33,rinv33);
904
905             fjx1             = _fjsp_setzero_v2r8();
906             fjy1             = _fjsp_setzero_v2r8();
907             fjz1             = _fjsp_setzero_v2r8();
908             fjx2             = _fjsp_setzero_v2r8();
909             fjy2             = _fjsp_setzero_v2r8();
910             fjz2             = _fjsp_setzero_v2r8();
911             fjx3             = _fjsp_setzero_v2r8();
912             fjy3             = _fjsp_setzero_v2r8();
913             fjz3             = _fjsp_setzero_v2r8();
914
915             /**************************
916              * CALCULATE INTERACTIONS *
917              **************************/
918
919             if (gmx_fjsp_any_lt_v2r8(rsq11,rcutoff2))
920             {
921
922             r11              = _fjsp_mul_v2r8(rsq11,rinv11);
923
924             /* EWALD ELECTROSTATICS */
925
926             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
927             ewrt             = _fjsp_mul_v2r8(r11,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(qq11,_fjsp_sub_v2r8(rinv11,velec));
941             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq11,rinv11),_fjsp_sub_v2r8(rinvsq11,felec));
942
943             d                = _fjsp_sub_v2r8(r11,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(rinv11,_fjsp_mul_v2r8(velec,dsw)) );
953             velec            = _fjsp_mul_v2r8(velec,sw);
954             cutoff_mask      = _fjsp_cmplt_v2r8(rsq11,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             fix1             = _fjsp_madd_v2r8(dx11,fscal,fix1);
969             fiy1             = _fjsp_madd_v2r8(dy11,fscal,fiy1);
970             fiz1             = _fjsp_madd_v2r8(dz11,fscal,fiz1);
971             
972             fjx1             = _fjsp_madd_v2r8(dx11,fscal,fjx1);
973             fjy1             = _fjsp_madd_v2r8(dy11,fscal,fjy1);
974             fjz1             = _fjsp_madd_v2r8(dz11,fscal,fjz1);
975
976             }
977
978             /**************************
979              * CALCULATE INTERACTIONS *
980              **************************/
981
982             if (gmx_fjsp_any_lt_v2r8(rsq12,rcutoff2))
983             {
984
985             r12              = _fjsp_mul_v2r8(rsq12,rinv12);
986
987             /* EWALD ELECTROSTATICS */
988
989             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
990             ewrt             = _fjsp_mul_v2r8(r12,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(qq12,_fjsp_sub_v2r8(rinv12,velec));
1004             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq12,rinv12),_fjsp_sub_v2r8(rinvsq12,felec));
1005
1006             d                = _fjsp_sub_v2r8(r12,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(rinv12,_fjsp_mul_v2r8(velec,dsw)) );
1016             velec            = _fjsp_mul_v2r8(velec,sw);
1017             cutoff_mask      = _fjsp_cmplt_v2r8(rsq12,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             fix1             = _fjsp_madd_v2r8(dx12,fscal,fix1);
1032             fiy1             = _fjsp_madd_v2r8(dy12,fscal,fiy1);
1033             fiz1             = _fjsp_madd_v2r8(dz12,fscal,fiz1);
1034             
1035             fjx2             = _fjsp_madd_v2r8(dx12,fscal,fjx2);
1036             fjy2             = _fjsp_madd_v2r8(dy12,fscal,fjy2);
1037             fjz2             = _fjsp_madd_v2r8(dz12,fscal,fjz2);
1038
1039             }
1040
1041             /**************************
1042              * CALCULATE INTERACTIONS *
1043              **************************/
1044
1045             if (gmx_fjsp_any_lt_v2r8(rsq13,rcutoff2))
1046             {
1047
1048             r13              = _fjsp_mul_v2r8(rsq13,rinv13);
1049
1050             /* EWALD ELECTROSTATICS */
1051
1052             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
1053             ewrt             = _fjsp_mul_v2r8(r13,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(qq13,_fjsp_sub_v2r8(rinv13,velec));
1067             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq13,rinv13),_fjsp_sub_v2r8(rinvsq13,felec));
1068
1069             d                = _fjsp_sub_v2r8(r13,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(rinv13,_fjsp_mul_v2r8(velec,dsw)) );
1079             velec            = _fjsp_mul_v2r8(velec,sw);
1080             cutoff_mask      = _fjsp_cmplt_v2r8(rsq13,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             fix1             = _fjsp_madd_v2r8(dx13,fscal,fix1);
1095             fiy1             = _fjsp_madd_v2r8(dy13,fscal,fiy1);
1096             fiz1             = _fjsp_madd_v2r8(dz13,fscal,fiz1);
1097             
1098             fjx3             = _fjsp_madd_v2r8(dx13,fscal,fjx3);
1099             fjy3             = _fjsp_madd_v2r8(dy13,fscal,fjy3);
1100             fjz3             = _fjsp_madd_v2r8(dz13,fscal,fjz3);
1101
1102             }
1103
1104             /**************************
1105              * CALCULATE INTERACTIONS *
1106              **************************/
1107
1108             if (gmx_fjsp_any_lt_v2r8(rsq21,rcutoff2))
1109             {
1110
1111             r21              = _fjsp_mul_v2r8(rsq21,rinv21);
1112
1113             /* EWALD ELECTROSTATICS */
1114
1115             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
1116             ewrt             = _fjsp_mul_v2r8(r21,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(qq21,_fjsp_sub_v2r8(rinv21,velec));
1130             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq21,rinv21),_fjsp_sub_v2r8(rinvsq21,felec));
1131
1132             d                = _fjsp_sub_v2r8(r21,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(rinv21,_fjsp_mul_v2r8(velec,dsw)) );
1142             velec            = _fjsp_mul_v2r8(velec,sw);
1143             cutoff_mask      = _fjsp_cmplt_v2r8(rsq21,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             fix2             = _fjsp_madd_v2r8(dx21,fscal,fix2);
1158             fiy2             = _fjsp_madd_v2r8(dy21,fscal,fiy2);
1159             fiz2             = _fjsp_madd_v2r8(dz21,fscal,fiz2);
1160             
1161             fjx1             = _fjsp_madd_v2r8(dx21,fscal,fjx1);
1162             fjy1             = _fjsp_madd_v2r8(dy21,fscal,fjy1);
1163             fjz1             = _fjsp_madd_v2r8(dz21,fscal,fjz1);
1164
1165             }
1166
1167             /**************************
1168              * CALCULATE INTERACTIONS *
1169              **************************/
1170
1171             if (gmx_fjsp_any_lt_v2r8(rsq22,rcutoff2))
1172             {
1173
1174             r22              = _fjsp_mul_v2r8(rsq22,rinv22);
1175
1176             /* EWALD ELECTROSTATICS */
1177
1178             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
1179             ewrt             = _fjsp_mul_v2r8(r22,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(qq22,_fjsp_sub_v2r8(rinv22,velec));
1193             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq22,rinv22),_fjsp_sub_v2r8(rinvsq22,felec));
1194
1195             d                = _fjsp_sub_v2r8(r22,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(rinv22,_fjsp_mul_v2r8(velec,dsw)) );
1205             velec            = _fjsp_mul_v2r8(velec,sw);
1206             cutoff_mask      = _fjsp_cmplt_v2r8(rsq22,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             fix2             = _fjsp_madd_v2r8(dx22,fscal,fix2);
1221             fiy2             = _fjsp_madd_v2r8(dy22,fscal,fiy2);
1222             fiz2             = _fjsp_madd_v2r8(dz22,fscal,fiz2);
1223             
1224             fjx2             = _fjsp_madd_v2r8(dx22,fscal,fjx2);
1225             fjy2             = _fjsp_madd_v2r8(dy22,fscal,fjy2);
1226             fjz2             = _fjsp_madd_v2r8(dz22,fscal,fjz2);
1227
1228             }
1229
1230             /**************************
1231              * CALCULATE INTERACTIONS *
1232              **************************/
1233
1234             if (gmx_fjsp_any_lt_v2r8(rsq23,rcutoff2))
1235             {
1236
1237             r23              = _fjsp_mul_v2r8(rsq23,rinv23);
1238
1239             /* EWALD ELECTROSTATICS */
1240
1241             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
1242             ewrt             = _fjsp_mul_v2r8(r23,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(qq23,_fjsp_sub_v2r8(rinv23,velec));
1256             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq23,rinv23),_fjsp_sub_v2r8(rinvsq23,felec));
1257
1258             d                = _fjsp_sub_v2r8(r23,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(rinv23,_fjsp_mul_v2r8(velec,dsw)) );
1268             velec            = _fjsp_mul_v2r8(velec,sw);
1269             cutoff_mask      = _fjsp_cmplt_v2r8(rsq23,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             fix2             = _fjsp_madd_v2r8(dx23,fscal,fix2);
1284             fiy2             = _fjsp_madd_v2r8(dy23,fscal,fiy2);
1285             fiz2             = _fjsp_madd_v2r8(dz23,fscal,fiz2);
1286             
1287             fjx3             = _fjsp_madd_v2r8(dx23,fscal,fjx3);
1288             fjy3             = _fjsp_madd_v2r8(dy23,fscal,fjy3);
1289             fjz3             = _fjsp_madd_v2r8(dz23,fscal,fjz3);
1290
1291             }
1292
1293             /**************************
1294              * CALCULATE INTERACTIONS *
1295              **************************/
1296
1297             if (gmx_fjsp_any_lt_v2r8(rsq31,rcutoff2))
1298             {
1299
1300             r31              = _fjsp_mul_v2r8(rsq31,rinv31);
1301
1302             /* EWALD ELECTROSTATICS */
1303
1304             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
1305             ewrt             = _fjsp_mul_v2r8(r31,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(qq31,_fjsp_sub_v2r8(rinv31,velec));
1319             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq31,rinv31),_fjsp_sub_v2r8(rinvsq31,felec));
1320
1321             d                = _fjsp_sub_v2r8(r31,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(rinv31,_fjsp_mul_v2r8(velec,dsw)) );
1331             velec            = _fjsp_mul_v2r8(velec,sw);
1332             cutoff_mask      = _fjsp_cmplt_v2r8(rsq31,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             fix3             = _fjsp_madd_v2r8(dx31,fscal,fix3);
1347             fiy3             = _fjsp_madd_v2r8(dy31,fscal,fiy3);
1348             fiz3             = _fjsp_madd_v2r8(dz31,fscal,fiz3);
1349             
1350             fjx1             = _fjsp_madd_v2r8(dx31,fscal,fjx1);
1351             fjy1             = _fjsp_madd_v2r8(dy31,fscal,fjy1);
1352             fjz1             = _fjsp_madd_v2r8(dz31,fscal,fjz1);
1353
1354             }
1355
1356             /**************************
1357              * CALCULATE INTERACTIONS *
1358              **************************/
1359
1360             if (gmx_fjsp_any_lt_v2r8(rsq32,rcutoff2))
1361             {
1362
1363             r32              = _fjsp_mul_v2r8(rsq32,rinv32);
1364
1365             /* EWALD ELECTROSTATICS */
1366
1367             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
1368             ewrt             = _fjsp_mul_v2r8(r32,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(qq32,_fjsp_sub_v2r8(rinv32,velec));
1382             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq32,rinv32),_fjsp_sub_v2r8(rinvsq32,felec));
1383
1384             d                = _fjsp_sub_v2r8(r32,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(rinv32,_fjsp_mul_v2r8(velec,dsw)) );
1394             velec            = _fjsp_mul_v2r8(velec,sw);
1395             cutoff_mask      = _fjsp_cmplt_v2r8(rsq32,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             fix3             = _fjsp_madd_v2r8(dx32,fscal,fix3);
1410             fiy3             = _fjsp_madd_v2r8(dy32,fscal,fiy3);
1411             fiz3             = _fjsp_madd_v2r8(dz32,fscal,fiz3);
1412             
1413             fjx2             = _fjsp_madd_v2r8(dx32,fscal,fjx2);
1414             fjy2             = _fjsp_madd_v2r8(dy32,fscal,fjy2);
1415             fjz2             = _fjsp_madd_v2r8(dz32,fscal,fjz2);
1416
1417             }
1418
1419             /**************************
1420              * CALCULATE INTERACTIONS *
1421              **************************/
1422
1423             if (gmx_fjsp_any_lt_v2r8(rsq33,rcutoff2))
1424             {
1425
1426             r33              = _fjsp_mul_v2r8(rsq33,rinv33);
1427
1428             /* EWALD ELECTROSTATICS */
1429
1430             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
1431             ewrt             = _fjsp_mul_v2r8(r33,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(qq33,_fjsp_sub_v2r8(rinv33,velec));
1445             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq33,rinv33),_fjsp_sub_v2r8(rinvsq33,felec));
1446
1447             d                = _fjsp_sub_v2r8(r33,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(rinv33,_fjsp_mul_v2r8(velec,dsw)) );
1457             velec            = _fjsp_mul_v2r8(velec,sw);
1458             cutoff_mask      = _fjsp_cmplt_v2r8(rsq33,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             fix3             = _fjsp_madd_v2r8(dx33,fscal,fix3);
1473             fiy3             = _fjsp_madd_v2r8(dy33,fscal,fiy3);
1474             fiz3             = _fjsp_madd_v2r8(dz33,fscal,fiz3);
1475             
1476             fjx3             = _fjsp_madd_v2r8(dx33,fscal,fjx3);
1477             fjy3             = _fjsp_madd_v2r8(dy33,fscal,fjy3);
1478             fjz3             = _fjsp_madd_v2r8(dz33,fscal,fjz3);
1479
1480             }
1481
1482             gmx_fjsp_decrement_3rvec_1ptr_swizzle_v2r8(f+j_coord_offsetA+DIM,fjx1,fjy1,fjz1,fjx2,fjy2,fjz2,fjx3,fjy3,fjz3);
1483
1484             /* Inner loop uses 612 flops */
1485         }
1486
1487         /* End of innermost loop */
1488
1489         gmx_fjsp_update_iforce_3atom_swizzle_v2r8(fix1,fiy1,fiz1,fix2,fiy2,fiz2,fix3,fiy3,fiz3,
1490                                               f+i_coord_offset+DIM,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_W4W4_VF,outeriter*19 + inneriter*612);
1508 }
1509 /*
1510  * Gromacs nonbonded kernel:   nb_kernel_ElecEwSw_VdwNone_GeomW4W4_F_sparc64_hpc_ace_double
1511  * Electrostatics interaction: Ewald
1512  * VdW interaction:            None
1513  * Geometry:                   Water4-Water4
1514  * Calculate force/pot:        Force
1515  */
1516 void
1517 nb_kernel_ElecEwSw_VdwNone_GeomW4W4_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              vdwioffset1;
1540     _fjsp_v2r8       ix1,iy1,iz1,fix1,fiy1,fiz1,iq1,isai1;
1541     int              vdwioffset2;
1542     _fjsp_v2r8       ix2,iy2,iz2,fix2,fiy2,fiz2,iq2,isai2;
1543     int              vdwioffset3;
1544     _fjsp_v2r8       ix3,iy3,iz3,fix3,fiy3,fiz3,iq3,isai3;
1545     int              vdwjidx1A,vdwjidx1B;
1546     _fjsp_v2r8       jx1,jy1,jz1,fjx1,fjy1,fjz1,jq1,isaj1;
1547     int              vdwjidx2A,vdwjidx2B;
1548     _fjsp_v2r8       jx2,jy2,jz2,fjx2,fjy2,fjz2,jq2,isaj2;
1549     int              vdwjidx3A,vdwjidx3B;
1550     _fjsp_v2r8       jx3,jy3,jz3,fjx3,fjy3,fjz3,jq3,isaj3;
1551     _fjsp_v2r8       dx11,dy11,dz11,rsq11,rinv11,rinvsq11,r11,qq11,c6_11,c12_11;
1552     _fjsp_v2r8       dx12,dy12,dz12,rsq12,rinv12,rinvsq12,r12,qq12,c6_12,c12_12;
1553     _fjsp_v2r8       dx13,dy13,dz13,rsq13,rinv13,rinvsq13,r13,qq13,c6_13,c12_13;
1554     _fjsp_v2r8       dx21,dy21,dz21,rsq21,rinv21,rinvsq21,r21,qq21,c6_21,c12_21;
1555     _fjsp_v2r8       dx22,dy22,dz22,rsq22,rinv22,rinvsq22,r22,qq22,c6_22,c12_22;
1556     _fjsp_v2r8       dx23,dy23,dz23,rsq23,rinv23,rinvsq23,r23,qq23,c6_23,c12_23;
1557     _fjsp_v2r8       dx31,dy31,dz31,rsq31,rinv31,rinvsq31,r31,qq31,c6_31,c12_31;
1558     _fjsp_v2r8       dx32,dy32,dz32,rsq32,rinv32,rinvsq32,r32,qq32,c6_32,c12_32;
1559     _fjsp_v2r8       dx33,dy33,dz33,rsq33,rinv33,rinvsq33,r33,qq33,c6_33,c12_33;
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     iq1              = _fjsp_mul_v2r8(facel,gmx_fjsp_set1_v2r8(charge[inr+1]));
1594     iq2              = _fjsp_mul_v2r8(facel,gmx_fjsp_set1_v2r8(charge[inr+2]));
1595     iq3              = _fjsp_mul_v2r8(facel,gmx_fjsp_set1_v2r8(charge[inr+3]));
1596
1597     jq1              = gmx_fjsp_set1_v2r8(charge[inr+1]);
1598     jq2              = gmx_fjsp_set1_v2r8(charge[inr+2]);
1599     jq3              = gmx_fjsp_set1_v2r8(charge[inr+3]);
1600     qq11             = _fjsp_mul_v2r8(iq1,jq1);
1601     qq12             = _fjsp_mul_v2r8(iq1,jq2);
1602     qq13             = _fjsp_mul_v2r8(iq1,jq3);
1603     qq21             = _fjsp_mul_v2r8(iq2,jq1);
1604     qq22             = _fjsp_mul_v2r8(iq2,jq2);
1605     qq23             = _fjsp_mul_v2r8(iq2,jq3);
1606     qq31             = _fjsp_mul_v2r8(iq3,jq1);
1607     qq32             = _fjsp_mul_v2r8(iq3,jq2);
1608     qq33             = _fjsp_mul_v2r8(iq3,jq3);
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+DIM,
1651                                                  &ix1,&iy1,&iz1,&ix2,&iy2,&iz2,&ix3,&iy3,&iz3);
1652
1653         fix1             = _fjsp_setzero_v2r8();
1654         fiy1             = _fjsp_setzero_v2r8();
1655         fiz1             = _fjsp_setzero_v2r8();
1656         fix2             = _fjsp_setzero_v2r8();
1657         fiy2             = _fjsp_setzero_v2r8();
1658         fiz2             = _fjsp_setzero_v2r8();
1659         fix3             = _fjsp_setzero_v2r8();
1660         fiy3             = _fjsp_setzero_v2r8();
1661         fiz3             = _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+DIM,x+j_coord_offsetB+DIM,
1675                                               &jx1,&jy1,&jz1,&jx2,&jy2,&jz2,&jx3,&jy3,&jz3);
1676
1677             /* Calculate displacement vector */
1678             dx11             = _fjsp_sub_v2r8(ix1,jx1);
1679             dy11             = _fjsp_sub_v2r8(iy1,jy1);
1680             dz11             = _fjsp_sub_v2r8(iz1,jz1);
1681             dx12             = _fjsp_sub_v2r8(ix1,jx2);
1682             dy12             = _fjsp_sub_v2r8(iy1,jy2);
1683             dz12             = _fjsp_sub_v2r8(iz1,jz2);
1684             dx13             = _fjsp_sub_v2r8(ix1,jx3);
1685             dy13             = _fjsp_sub_v2r8(iy1,jy3);
1686             dz13             = _fjsp_sub_v2r8(iz1,jz3);
1687             dx21             = _fjsp_sub_v2r8(ix2,jx1);
1688             dy21             = _fjsp_sub_v2r8(iy2,jy1);
1689             dz21             = _fjsp_sub_v2r8(iz2,jz1);
1690             dx22             = _fjsp_sub_v2r8(ix2,jx2);
1691             dy22             = _fjsp_sub_v2r8(iy2,jy2);
1692             dz22             = _fjsp_sub_v2r8(iz2,jz2);
1693             dx23             = _fjsp_sub_v2r8(ix2,jx3);
1694             dy23             = _fjsp_sub_v2r8(iy2,jy3);
1695             dz23             = _fjsp_sub_v2r8(iz2,jz3);
1696             dx31             = _fjsp_sub_v2r8(ix3,jx1);
1697             dy31             = _fjsp_sub_v2r8(iy3,jy1);
1698             dz31             = _fjsp_sub_v2r8(iz3,jz1);
1699             dx32             = _fjsp_sub_v2r8(ix3,jx2);
1700             dy32             = _fjsp_sub_v2r8(iy3,jy2);
1701             dz32             = _fjsp_sub_v2r8(iz3,jz2);
1702             dx33             = _fjsp_sub_v2r8(ix3,jx3);
1703             dy33             = _fjsp_sub_v2r8(iy3,jy3);
1704             dz33             = _fjsp_sub_v2r8(iz3,jz3);
1705
1706             /* Calculate squared distance and things based on it */
1707             rsq11            = gmx_fjsp_calc_rsq_v2r8(dx11,dy11,dz11);
1708             rsq12            = gmx_fjsp_calc_rsq_v2r8(dx12,dy12,dz12);
1709             rsq13            = gmx_fjsp_calc_rsq_v2r8(dx13,dy13,dz13);
1710             rsq21            = gmx_fjsp_calc_rsq_v2r8(dx21,dy21,dz21);
1711             rsq22            = gmx_fjsp_calc_rsq_v2r8(dx22,dy22,dz22);
1712             rsq23            = gmx_fjsp_calc_rsq_v2r8(dx23,dy23,dz23);
1713             rsq31            = gmx_fjsp_calc_rsq_v2r8(dx31,dy31,dz31);
1714             rsq32            = gmx_fjsp_calc_rsq_v2r8(dx32,dy32,dz32);
1715             rsq33            = gmx_fjsp_calc_rsq_v2r8(dx33,dy33,dz33);
1716
1717             rinv11           = gmx_fjsp_invsqrt_v2r8(rsq11);
1718             rinv12           = gmx_fjsp_invsqrt_v2r8(rsq12);
1719             rinv13           = gmx_fjsp_invsqrt_v2r8(rsq13);
1720             rinv21           = gmx_fjsp_invsqrt_v2r8(rsq21);
1721             rinv22           = gmx_fjsp_invsqrt_v2r8(rsq22);
1722             rinv23           = gmx_fjsp_invsqrt_v2r8(rsq23);
1723             rinv31           = gmx_fjsp_invsqrt_v2r8(rsq31);
1724             rinv32           = gmx_fjsp_invsqrt_v2r8(rsq32);
1725             rinv33           = gmx_fjsp_invsqrt_v2r8(rsq33);
1726
1727             rinvsq11         = _fjsp_mul_v2r8(rinv11,rinv11);
1728             rinvsq12         = _fjsp_mul_v2r8(rinv12,rinv12);
1729             rinvsq13         = _fjsp_mul_v2r8(rinv13,rinv13);
1730             rinvsq21         = _fjsp_mul_v2r8(rinv21,rinv21);
1731             rinvsq22         = _fjsp_mul_v2r8(rinv22,rinv22);
1732             rinvsq23         = _fjsp_mul_v2r8(rinv23,rinv23);
1733             rinvsq31         = _fjsp_mul_v2r8(rinv31,rinv31);
1734             rinvsq32         = _fjsp_mul_v2r8(rinv32,rinv32);
1735             rinvsq33         = _fjsp_mul_v2r8(rinv33,rinv33);
1736
1737             fjx1             = _fjsp_setzero_v2r8();
1738             fjy1             = _fjsp_setzero_v2r8();
1739             fjz1             = _fjsp_setzero_v2r8();
1740             fjx2             = _fjsp_setzero_v2r8();
1741             fjy2             = _fjsp_setzero_v2r8();
1742             fjz2             = _fjsp_setzero_v2r8();
1743             fjx3             = _fjsp_setzero_v2r8();
1744             fjy3             = _fjsp_setzero_v2r8();
1745             fjz3             = _fjsp_setzero_v2r8();
1746
1747             /**************************
1748              * CALCULATE INTERACTIONS *
1749              **************************/
1750
1751             if (gmx_fjsp_any_lt_v2r8(rsq11,rcutoff2))
1752             {
1753
1754             r11              = _fjsp_mul_v2r8(rsq11,rinv11);
1755
1756             /* EWALD ELECTROSTATICS */
1757
1758             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
1759             ewrt             = _fjsp_mul_v2r8(r11,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(qq11,_fjsp_sub_v2r8(rinv11,velec));
1773             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq11,rinv11),_fjsp_sub_v2r8(rinvsq11,felec));
1774
1775             d                = _fjsp_sub_v2r8(r11,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(rinv11,_fjsp_mul_v2r8(velec,dsw)) );
1785             cutoff_mask      = _fjsp_cmplt_v2r8(rsq11,rcutoff2);
1786
1787             fscal            = felec;
1788
1789             fscal            = _fjsp_and_v2r8(fscal,cutoff_mask);
1790
1791             /* Update vectorial force */
1792             fix1             = _fjsp_madd_v2r8(dx11,fscal,fix1);
1793             fiy1             = _fjsp_madd_v2r8(dy11,fscal,fiy1);
1794             fiz1             = _fjsp_madd_v2r8(dz11,fscal,fiz1);
1795             
1796             fjx1             = _fjsp_madd_v2r8(dx11,fscal,fjx1);
1797             fjy1             = _fjsp_madd_v2r8(dy11,fscal,fjy1);
1798             fjz1             = _fjsp_madd_v2r8(dz11,fscal,fjz1);
1799
1800             }
1801
1802             /**************************
1803              * CALCULATE INTERACTIONS *
1804              **************************/
1805
1806             if (gmx_fjsp_any_lt_v2r8(rsq12,rcutoff2))
1807             {
1808
1809             r12              = _fjsp_mul_v2r8(rsq12,rinv12);
1810
1811             /* EWALD ELECTROSTATICS */
1812
1813             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
1814             ewrt             = _fjsp_mul_v2r8(r12,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(qq12,_fjsp_sub_v2r8(rinv12,velec));
1828             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq12,rinv12),_fjsp_sub_v2r8(rinvsq12,felec));
1829
1830             d                = _fjsp_sub_v2r8(r12,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(rinv12,_fjsp_mul_v2r8(velec,dsw)) );
1840             cutoff_mask      = _fjsp_cmplt_v2r8(rsq12,rcutoff2);
1841
1842             fscal            = felec;
1843
1844             fscal            = _fjsp_and_v2r8(fscal,cutoff_mask);
1845
1846             /* Update vectorial force */
1847             fix1             = _fjsp_madd_v2r8(dx12,fscal,fix1);
1848             fiy1             = _fjsp_madd_v2r8(dy12,fscal,fiy1);
1849             fiz1             = _fjsp_madd_v2r8(dz12,fscal,fiz1);
1850             
1851             fjx2             = _fjsp_madd_v2r8(dx12,fscal,fjx2);
1852             fjy2             = _fjsp_madd_v2r8(dy12,fscal,fjy2);
1853             fjz2             = _fjsp_madd_v2r8(dz12,fscal,fjz2);
1854
1855             }
1856
1857             /**************************
1858              * CALCULATE INTERACTIONS *
1859              **************************/
1860
1861             if (gmx_fjsp_any_lt_v2r8(rsq13,rcutoff2))
1862             {
1863
1864             r13              = _fjsp_mul_v2r8(rsq13,rinv13);
1865
1866             /* EWALD ELECTROSTATICS */
1867
1868             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
1869             ewrt             = _fjsp_mul_v2r8(r13,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(qq13,_fjsp_sub_v2r8(rinv13,velec));
1883             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq13,rinv13),_fjsp_sub_v2r8(rinvsq13,felec));
1884
1885             d                = _fjsp_sub_v2r8(r13,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(rinv13,_fjsp_mul_v2r8(velec,dsw)) );
1895             cutoff_mask      = _fjsp_cmplt_v2r8(rsq13,rcutoff2);
1896
1897             fscal            = felec;
1898
1899             fscal            = _fjsp_and_v2r8(fscal,cutoff_mask);
1900
1901             /* Update vectorial force */
1902             fix1             = _fjsp_madd_v2r8(dx13,fscal,fix1);
1903             fiy1             = _fjsp_madd_v2r8(dy13,fscal,fiy1);
1904             fiz1             = _fjsp_madd_v2r8(dz13,fscal,fiz1);
1905             
1906             fjx3             = _fjsp_madd_v2r8(dx13,fscal,fjx3);
1907             fjy3             = _fjsp_madd_v2r8(dy13,fscal,fjy3);
1908             fjz3             = _fjsp_madd_v2r8(dz13,fscal,fjz3);
1909
1910             }
1911
1912             /**************************
1913              * CALCULATE INTERACTIONS *
1914              **************************/
1915
1916             if (gmx_fjsp_any_lt_v2r8(rsq21,rcutoff2))
1917             {
1918
1919             r21              = _fjsp_mul_v2r8(rsq21,rinv21);
1920
1921             /* EWALD ELECTROSTATICS */
1922
1923             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
1924             ewrt             = _fjsp_mul_v2r8(r21,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(qq21,_fjsp_sub_v2r8(rinv21,velec));
1938             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq21,rinv21),_fjsp_sub_v2r8(rinvsq21,felec));
1939
1940             d                = _fjsp_sub_v2r8(r21,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(rinv21,_fjsp_mul_v2r8(velec,dsw)) );
1950             cutoff_mask      = _fjsp_cmplt_v2r8(rsq21,rcutoff2);
1951
1952             fscal            = felec;
1953
1954             fscal            = _fjsp_and_v2r8(fscal,cutoff_mask);
1955
1956             /* Update vectorial force */
1957             fix2             = _fjsp_madd_v2r8(dx21,fscal,fix2);
1958             fiy2             = _fjsp_madd_v2r8(dy21,fscal,fiy2);
1959             fiz2             = _fjsp_madd_v2r8(dz21,fscal,fiz2);
1960             
1961             fjx1             = _fjsp_madd_v2r8(dx21,fscal,fjx1);
1962             fjy1             = _fjsp_madd_v2r8(dy21,fscal,fjy1);
1963             fjz1             = _fjsp_madd_v2r8(dz21,fscal,fjz1);
1964
1965             }
1966
1967             /**************************
1968              * CALCULATE INTERACTIONS *
1969              **************************/
1970
1971             if (gmx_fjsp_any_lt_v2r8(rsq22,rcutoff2))
1972             {
1973
1974             r22              = _fjsp_mul_v2r8(rsq22,rinv22);
1975
1976             /* EWALD ELECTROSTATICS */
1977
1978             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
1979             ewrt             = _fjsp_mul_v2r8(r22,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(qq22,_fjsp_sub_v2r8(rinv22,velec));
1993             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq22,rinv22),_fjsp_sub_v2r8(rinvsq22,felec));
1994
1995             d                = _fjsp_sub_v2r8(r22,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(rinv22,_fjsp_mul_v2r8(velec,dsw)) );
2005             cutoff_mask      = _fjsp_cmplt_v2r8(rsq22,rcutoff2);
2006
2007             fscal            = felec;
2008
2009             fscal            = _fjsp_and_v2r8(fscal,cutoff_mask);
2010
2011             /* Update vectorial force */
2012             fix2             = _fjsp_madd_v2r8(dx22,fscal,fix2);
2013             fiy2             = _fjsp_madd_v2r8(dy22,fscal,fiy2);
2014             fiz2             = _fjsp_madd_v2r8(dz22,fscal,fiz2);
2015             
2016             fjx2             = _fjsp_madd_v2r8(dx22,fscal,fjx2);
2017             fjy2             = _fjsp_madd_v2r8(dy22,fscal,fjy2);
2018             fjz2             = _fjsp_madd_v2r8(dz22,fscal,fjz2);
2019
2020             }
2021
2022             /**************************
2023              * CALCULATE INTERACTIONS *
2024              **************************/
2025
2026             if (gmx_fjsp_any_lt_v2r8(rsq23,rcutoff2))
2027             {
2028
2029             r23              = _fjsp_mul_v2r8(rsq23,rinv23);
2030
2031             /* EWALD ELECTROSTATICS */
2032
2033             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
2034             ewrt             = _fjsp_mul_v2r8(r23,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(qq23,_fjsp_sub_v2r8(rinv23,velec));
2048             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq23,rinv23),_fjsp_sub_v2r8(rinvsq23,felec));
2049
2050             d                = _fjsp_sub_v2r8(r23,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(rinv23,_fjsp_mul_v2r8(velec,dsw)) );
2060             cutoff_mask      = _fjsp_cmplt_v2r8(rsq23,rcutoff2);
2061
2062             fscal            = felec;
2063
2064             fscal            = _fjsp_and_v2r8(fscal,cutoff_mask);
2065
2066             /* Update vectorial force */
2067             fix2             = _fjsp_madd_v2r8(dx23,fscal,fix2);
2068             fiy2             = _fjsp_madd_v2r8(dy23,fscal,fiy2);
2069             fiz2             = _fjsp_madd_v2r8(dz23,fscal,fiz2);
2070             
2071             fjx3             = _fjsp_madd_v2r8(dx23,fscal,fjx3);
2072             fjy3             = _fjsp_madd_v2r8(dy23,fscal,fjy3);
2073             fjz3             = _fjsp_madd_v2r8(dz23,fscal,fjz3);
2074
2075             }
2076
2077             /**************************
2078              * CALCULATE INTERACTIONS *
2079              **************************/
2080
2081             if (gmx_fjsp_any_lt_v2r8(rsq31,rcutoff2))
2082             {
2083
2084             r31              = _fjsp_mul_v2r8(rsq31,rinv31);
2085
2086             /* EWALD ELECTROSTATICS */
2087
2088             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
2089             ewrt             = _fjsp_mul_v2r8(r31,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(qq31,_fjsp_sub_v2r8(rinv31,velec));
2103             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq31,rinv31),_fjsp_sub_v2r8(rinvsq31,felec));
2104
2105             d                = _fjsp_sub_v2r8(r31,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(rinv31,_fjsp_mul_v2r8(velec,dsw)) );
2115             cutoff_mask      = _fjsp_cmplt_v2r8(rsq31,rcutoff2);
2116
2117             fscal            = felec;
2118
2119             fscal            = _fjsp_and_v2r8(fscal,cutoff_mask);
2120
2121             /* Update vectorial force */
2122             fix3             = _fjsp_madd_v2r8(dx31,fscal,fix3);
2123             fiy3             = _fjsp_madd_v2r8(dy31,fscal,fiy3);
2124             fiz3             = _fjsp_madd_v2r8(dz31,fscal,fiz3);
2125             
2126             fjx1             = _fjsp_madd_v2r8(dx31,fscal,fjx1);
2127             fjy1             = _fjsp_madd_v2r8(dy31,fscal,fjy1);
2128             fjz1             = _fjsp_madd_v2r8(dz31,fscal,fjz1);
2129
2130             }
2131
2132             /**************************
2133              * CALCULATE INTERACTIONS *
2134              **************************/
2135
2136             if (gmx_fjsp_any_lt_v2r8(rsq32,rcutoff2))
2137             {
2138
2139             r32              = _fjsp_mul_v2r8(rsq32,rinv32);
2140
2141             /* EWALD ELECTROSTATICS */
2142
2143             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
2144             ewrt             = _fjsp_mul_v2r8(r32,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(qq32,_fjsp_sub_v2r8(rinv32,velec));
2158             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq32,rinv32),_fjsp_sub_v2r8(rinvsq32,felec));
2159
2160             d                = _fjsp_sub_v2r8(r32,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(rinv32,_fjsp_mul_v2r8(velec,dsw)) );
2170             cutoff_mask      = _fjsp_cmplt_v2r8(rsq32,rcutoff2);
2171
2172             fscal            = felec;
2173
2174             fscal            = _fjsp_and_v2r8(fscal,cutoff_mask);
2175
2176             /* Update vectorial force */
2177             fix3             = _fjsp_madd_v2r8(dx32,fscal,fix3);
2178             fiy3             = _fjsp_madd_v2r8(dy32,fscal,fiy3);
2179             fiz3             = _fjsp_madd_v2r8(dz32,fscal,fiz3);
2180             
2181             fjx2             = _fjsp_madd_v2r8(dx32,fscal,fjx2);
2182             fjy2             = _fjsp_madd_v2r8(dy32,fscal,fjy2);
2183             fjz2             = _fjsp_madd_v2r8(dz32,fscal,fjz2);
2184
2185             }
2186
2187             /**************************
2188              * CALCULATE INTERACTIONS *
2189              **************************/
2190
2191             if (gmx_fjsp_any_lt_v2r8(rsq33,rcutoff2))
2192             {
2193
2194             r33              = _fjsp_mul_v2r8(rsq33,rinv33);
2195
2196             /* EWALD ELECTROSTATICS */
2197
2198             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
2199             ewrt             = _fjsp_mul_v2r8(r33,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(qq33,_fjsp_sub_v2r8(rinv33,velec));
2213             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq33,rinv33),_fjsp_sub_v2r8(rinvsq33,felec));
2214
2215             d                = _fjsp_sub_v2r8(r33,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(rinv33,_fjsp_mul_v2r8(velec,dsw)) );
2225             cutoff_mask      = _fjsp_cmplt_v2r8(rsq33,rcutoff2);
2226
2227             fscal            = felec;
2228
2229             fscal            = _fjsp_and_v2r8(fscal,cutoff_mask);
2230
2231             /* Update vectorial force */
2232             fix3             = _fjsp_madd_v2r8(dx33,fscal,fix3);
2233             fiy3             = _fjsp_madd_v2r8(dy33,fscal,fiy3);
2234             fiz3             = _fjsp_madd_v2r8(dz33,fscal,fiz3);
2235             
2236             fjx3             = _fjsp_madd_v2r8(dx33,fscal,fjx3);
2237             fjy3             = _fjsp_madd_v2r8(dy33,fscal,fjy3);
2238             fjz3             = _fjsp_madd_v2r8(dz33,fscal,fjz3);
2239
2240             }
2241
2242             gmx_fjsp_decrement_3rvec_2ptr_swizzle_v2r8(f+j_coord_offsetA+DIM,f+j_coord_offsetB+DIM,fjx1,fjy1,fjz1,fjx2,fjy2,fjz2,fjx3,fjy3,fjz3);
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+DIM,
2255                                               &jx1,&jy1,&jz1,&jx2,&jy2,&jz2,&jx3,&jy3,&jz3);
2256
2257             /* Calculate displacement vector */
2258             dx11             = _fjsp_sub_v2r8(ix1,jx1);
2259             dy11             = _fjsp_sub_v2r8(iy1,jy1);
2260             dz11             = _fjsp_sub_v2r8(iz1,jz1);
2261             dx12             = _fjsp_sub_v2r8(ix1,jx2);
2262             dy12             = _fjsp_sub_v2r8(iy1,jy2);
2263             dz12             = _fjsp_sub_v2r8(iz1,jz2);
2264             dx13             = _fjsp_sub_v2r8(ix1,jx3);
2265             dy13             = _fjsp_sub_v2r8(iy1,jy3);
2266             dz13             = _fjsp_sub_v2r8(iz1,jz3);
2267             dx21             = _fjsp_sub_v2r8(ix2,jx1);
2268             dy21             = _fjsp_sub_v2r8(iy2,jy1);
2269             dz21             = _fjsp_sub_v2r8(iz2,jz1);
2270             dx22             = _fjsp_sub_v2r8(ix2,jx2);
2271             dy22             = _fjsp_sub_v2r8(iy2,jy2);
2272             dz22             = _fjsp_sub_v2r8(iz2,jz2);
2273             dx23             = _fjsp_sub_v2r8(ix2,jx3);
2274             dy23             = _fjsp_sub_v2r8(iy2,jy3);
2275             dz23             = _fjsp_sub_v2r8(iz2,jz3);
2276             dx31             = _fjsp_sub_v2r8(ix3,jx1);
2277             dy31             = _fjsp_sub_v2r8(iy3,jy1);
2278             dz31             = _fjsp_sub_v2r8(iz3,jz1);
2279             dx32             = _fjsp_sub_v2r8(ix3,jx2);
2280             dy32             = _fjsp_sub_v2r8(iy3,jy2);
2281             dz32             = _fjsp_sub_v2r8(iz3,jz2);
2282             dx33             = _fjsp_sub_v2r8(ix3,jx3);
2283             dy33             = _fjsp_sub_v2r8(iy3,jy3);
2284             dz33             = _fjsp_sub_v2r8(iz3,jz3);
2285
2286             /* Calculate squared distance and things based on it */
2287             rsq11            = gmx_fjsp_calc_rsq_v2r8(dx11,dy11,dz11);
2288             rsq12            = gmx_fjsp_calc_rsq_v2r8(dx12,dy12,dz12);
2289             rsq13            = gmx_fjsp_calc_rsq_v2r8(dx13,dy13,dz13);
2290             rsq21            = gmx_fjsp_calc_rsq_v2r8(dx21,dy21,dz21);
2291             rsq22            = gmx_fjsp_calc_rsq_v2r8(dx22,dy22,dz22);
2292             rsq23            = gmx_fjsp_calc_rsq_v2r8(dx23,dy23,dz23);
2293             rsq31            = gmx_fjsp_calc_rsq_v2r8(dx31,dy31,dz31);
2294             rsq32            = gmx_fjsp_calc_rsq_v2r8(dx32,dy32,dz32);
2295             rsq33            = gmx_fjsp_calc_rsq_v2r8(dx33,dy33,dz33);
2296
2297             rinv11           = gmx_fjsp_invsqrt_v2r8(rsq11);
2298             rinv12           = gmx_fjsp_invsqrt_v2r8(rsq12);
2299             rinv13           = gmx_fjsp_invsqrt_v2r8(rsq13);
2300             rinv21           = gmx_fjsp_invsqrt_v2r8(rsq21);
2301             rinv22           = gmx_fjsp_invsqrt_v2r8(rsq22);
2302             rinv23           = gmx_fjsp_invsqrt_v2r8(rsq23);
2303             rinv31           = gmx_fjsp_invsqrt_v2r8(rsq31);
2304             rinv32           = gmx_fjsp_invsqrt_v2r8(rsq32);
2305             rinv33           = gmx_fjsp_invsqrt_v2r8(rsq33);
2306
2307             rinvsq11         = _fjsp_mul_v2r8(rinv11,rinv11);
2308             rinvsq12         = _fjsp_mul_v2r8(rinv12,rinv12);
2309             rinvsq13         = _fjsp_mul_v2r8(rinv13,rinv13);
2310             rinvsq21         = _fjsp_mul_v2r8(rinv21,rinv21);
2311             rinvsq22         = _fjsp_mul_v2r8(rinv22,rinv22);
2312             rinvsq23         = _fjsp_mul_v2r8(rinv23,rinv23);
2313             rinvsq31         = _fjsp_mul_v2r8(rinv31,rinv31);
2314             rinvsq32         = _fjsp_mul_v2r8(rinv32,rinv32);
2315             rinvsq33         = _fjsp_mul_v2r8(rinv33,rinv33);
2316
2317             fjx1             = _fjsp_setzero_v2r8();
2318             fjy1             = _fjsp_setzero_v2r8();
2319             fjz1             = _fjsp_setzero_v2r8();
2320             fjx2             = _fjsp_setzero_v2r8();
2321             fjy2             = _fjsp_setzero_v2r8();
2322             fjz2             = _fjsp_setzero_v2r8();
2323             fjx3             = _fjsp_setzero_v2r8();
2324             fjy3             = _fjsp_setzero_v2r8();
2325             fjz3             = _fjsp_setzero_v2r8();
2326
2327             /**************************
2328              * CALCULATE INTERACTIONS *
2329              **************************/
2330
2331             if (gmx_fjsp_any_lt_v2r8(rsq11,rcutoff2))
2332             {
2333
2334             r11              = _fjsp_mul_v2r8(rsq11,rinv11);
2335
2336             /* EWALD ELECTROSTATICS */
2337
2338             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
2339             ewrt             = _fjsp_mul_v2r8(r11,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(qq11,_fjsp_sub_v2r8(rinv11,velec));
2353             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq11,rinv11),_fjsp_sub_v2r8(rinvsq11,felec));
2354
2355             d                = _fjsp_sub_v2r8(r11,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(rinv11,_fjsp_mul_v2r8(velec,dsw)) );
2365             cutoff_mask      = _fjsp_cmplt_v2r8(rsq11,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             fix1             = _fjsp_madd_v2r8(dx11,fscal,fix1);
2375             fiy1             = _fjsp_madd_v2r8(dy11,fscal,fiy1);
2376             fiz1             = _fjsp_madd_v2r8(dz11,fscal,fiz1);
2377             
2378             fjx1             = _fjsp_madd_v2r8(dx11,fscal,fjx1);
2379             fjy1             = _fjsp_madd_v2r8(dy11,fscal,fjy1);
2380             fjz1             = _fjsp_madd_v2r8(dz11,fscal,fjz1);
2381
2382             }
2383
2384             /**************************
2385              * CALCULATE INTERACTIONS *
2386              **************************/
2387
2388             if (gmx_fjsp_any_lt_v2r8(rsq12,rcutoff2))
2389             {
2390
2391             r12              = _fjsp_mul_v2r8(rsq12,rinv12);
2392
2393             /* EWALD ELECTROSTATICS */
2394
2395             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
2396             ewrt             = _fjsp_mul_v2r8(r12,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(qq12,_fjsp_sub_v2r8(rinv12,velec));
2410             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq12,rinv12),_fjsp_sub_v2r8(rinvsq12,felec));
2411
2412             d                = _fjsp_sub_v2r8(r12,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(rinv12,_fjsp_mul_v2r8(velec,dsw)) );
2422             cutoff_mask      = _fjsp_cmplt_v2r8(rsq12,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             fix1             = _fjsp_madd_v2r8(dx12,fscal,fix1);
2432             fiy1             = _fjsp_madd_v2r8(dy12,fscal,fiy1);
2433             fiz1             = _fjsp_madd_v2r8(dz12,fscal,fiz1);
2434             
2435             fjx2             = _fjsp_madd_v2r8(dx12,fscal,fjx2);
2436             fjy2             = _fjsp_madd_v2r8(dy12,fscal,fjy2);
2437             fjz2             = _fjsp_madd_v2r8(dz12,fscal,fjz2);
2438
2439             }
2440
2441             /**************************
2442              * CALCULATE INTERACTIONS *
2443              **************************/
2444
2445             if (gmx_fjsp_any_lt_v2r8(rsq13,rcutoff2))
2446             {
2447
2448             r13              = _fjsp_mul_v2r8(rsq13,rinv13);
2449
2450             /* EWALD ELECTROSTATICS */
2451
2452             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
2453             ewrt             = _fjsp_mul_v2r8(r13,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(qq13,_fjsp_sub_v2r8(rinv13,velec));
2467             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq13,rinv13),_fjsp_sub_v2r8(rinvsq13,felec));
2468
2469             d                = _fjsp_sub_v2r8(r13,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(rinv13,_fjsp_mul_v2r8(velec,dsw)) );
2479             cutoff_mask      = _fjsp_cmplt_v2r8(rsq13,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             fix1             = _fjsp_madd_v2r8(dx13,fscal,fix1);
2489             fiy1             = _fjsp_madd_v2r8(dy13,fscal,fiy1);
2490             fiz1             = _fjsp_madd_v2r8(dz13,fscal,fiz1);
2491             
2492             fjx3             = _fjsp_madd_v2r8(dx13,fscal,fjx3);
2493             fjy3             = _fjsp_madd_v2r8(dy13,fscal,fjy3);
2494             fjz3             = _fjsp_madd_v2r8(dz13,fscal,fjz3);
2495
2496             }
2497
2498             /**************************
2499              * CALCULATE INTERACTIONS *
2500              **************************/
2501
2502             if (gmx_fjsp_any_lt_v2r8(rsq21,rcutoff2))
2503             {
2504
2505             r21              = _fjsp_mul_v2r8(rsq21,rinv21);
2506
2507             /* EWALD ELECTROSTATICS */
2508
2509             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
2510             ewrt             = _fjsp_mul_v2r8(r21,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(qq21,_fjsp_sub_v2r8(rinv21,velec));
2524             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq21,rinv21),_fjsp_sub_v2r8(rinvsq21,felec));
2525
2526             d                = _fjsp_sub_v2r8(r21,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(rinv21,_fjsp_mul_v2r8(velec,dsw)) );
2536             cutoff_mask      = _fjsp_cmplt_v2r8(rsq21,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             fix2             = _fjsp_madd_v2r8(dx21,fscal,fix2);
2546             fiy2             = _fjsp_madd_v2r8(dy21,fscal,fiy2);
2547             fiz2             = _fjsp_madd_v2r8(dz21,fscal,fiz2);
2548             
2549             fjx1             = _fjsp_madd_v2r8(dx21,fscal,fjx1);
2550             fjy1             = _fjsp_madd_v2r8(dy21,fscal,fjy1);
2551             fjz1             = _fjsp_madd_v2r8(dz21,fscal,fjz1);
2552
2553             }
2554
2555             /**************************
2556              * CALCULATE INTERACTIONS *
2557              **************************/
2558
2559             if (gmx_fjsp_any_lt_v2r8(rsq22,rcutoff2))
2560             {
2561
2562             r22              = _fjsp_mul_v2r8(rsq22,rinv22);
2563
2564             /* EWALD ELECTROSTATICS */
2565
2566             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
2567             ewrt             = _fjsp_mul_v2r8(r22,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(qq22,_fjsp_sub_v2r8(rinv22,velec));
2581             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq22,rinv22),_fjsp_sub_v2r8(rinvsq22,felec));
2582
2583             d                = _fjsp_sub_v2r8(r22,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(rinv22,_fjsp_mul_v2r8(velec,dsw)) );
2593             cutoff_mask      = _fjsp_cmplt_v2r8(rsq22,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             fix2             = _fjsp_madd_v2r8(dx22,fscal,fix2);
2603             fiy2             = _fjsp_madd_v2r8(dy22,fscal,fiy2);
2604             fiz2             = _fjsp_madd_v2r8(dz22,fscal,fiz2);
2605             
2606             fjx2             = _fjsp_madd_v2r8(dx22,fscal,fjx2);
2607             fjy2             = _fjsp_madd_v2r8(dy22,fscal,fjy2);
2608             fjz2             = _fjsp_madd_v2r8(dz22,fscal,fjz2);
2609
2610             }
2611
2612             /**************************
2613              * CALCULATE INTERACTIONS *
2614              **************************/
2615
2616             if (gmx_fjsp_any_lt_v2r8(rsq23,rcutoff2))
2617             {
2618
2619             r23              = _fjsp_mul_v2r8(rsq23,rinv23);
2620
2621             /* EWALD ELECTROSTATICS */
2622
2623             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
2624             ewrt             = _fjsp_mul_v2r8(r23,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(qq23,_fjsp_sub_v2r8(rinv23,velec));
2638             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq23,rinv23),_fjsp_sub_v2r8(rinvsq23,felec));
2639
2640             d                = _fjsp_sub_v2r8(r23,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(rinv23,_fjsp_mul_v2r8(velec,dsw)) );
2650             cutoff_mask      = _fjsp_cmplt_v2r8(rsq23,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             fix2             = _fjsp_madd_v2r8(dx23,fscal,fix2);
2660             fiy2             = _fjsp_madd_v2r8(dy23,fscal,fiy2);
2661             fiz2             = _fjsp_madd_v2r8(dz23,fscal,fiz2);
2662             
2663             fjx3             = _fjsp_madd_v2r8(dx23,fscal,fjx3);
2664             fjy3             = _fjsp_madd_v2r8(dy23,fscal,fjy3);
2665             fjz3             = _fjsp_madd_v2r8(dz23,fscal,fjz3);
2666
2667             }
2668
2669             /**************************
2670              * CALCULATE INTERACTIONS *
2671              **************************/
2672
2673             if (gmx_fjsp_any_lt_v2r8(rsq31,rcutoff2))
2674             {
2675
2676             r31              = _fjsp_mul_v2r8(rsq31,rinv31);
2677
2678             /* EWALD ELECTROSTATICS */
2679
2680             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
2681             ewrt             = _fjsp_mul_v2r8(r31,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(qq31,_fjsp_sub_v2r8(rinv31,velec));
2695             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq31,rinv31),_fjsp_sub_v2r8(rinvsq31,felec));
2696
2697             d                = _fjsp_sub_v2r8(r31,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(rinv31,_fjsp_mul_v2r8(velec,dsw)) );
2707             cutoff_mask      = _fjsp_cmplt_v2r8(rsq31,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             fix3             = _fjsp_madd_v2r8(dx31,fscal,fix3);
2717             fiy3             = _fjsp_madd_v2r8(dy31,fscal,fiy3);
2718             fiz3             = _fjsp_madd_v2r8(dz31,fscal,fiz3);
2719             
2720             fjx1             = _fjsp_madd_v2r8(dx31,fscal,fjx1);
2721             fjy1             = _fjsp_madd_v2r8(dy31,fscal,fjy1);
2722             fjz1             = _fjsp_madd_v2r8(dz31,fscal,fjz1);
2723
2724             }
2725
2726             /**************************
2727              * CALCULATE INTERACTIONS *
2728              **************************/
2729
2730             if (gmx_fjsp_any_lt_v2r8(rsq32,rcutoff2))
2731             {
2732
2733             r32              = _fjsp_mul_v2r8(rsq32,rinv32);
2734
2735             /* EWALD ELECTROSTATICS */
2736
2737             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
2738             ewrt             = _fjsp_mul_v2r8(r32,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(qq32,_fjsp_sub_v2r8(rinv32,velec));
2752             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq32,rinv32),_fjsp_sub_v2r8(rinvsq32,felec));
2753
2754             d                = _fjsp_sub_v2r8(r32,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(rinv32,_fjsp_mul_v2r8(velec,dsw)) );
2764             cutoff_mask      = _fjsp_cmplt_v2r8(rsq32,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             fix3             = _fjsp_madd_v2r8(dx32,fscal,fix3);
2774             fiy3             = _fjsp_madd_v2r8(dy32,fscal,fiy3);
2775             fiz3             = _fjsp_madd_v2r8(dz32,fscal,fiz3);
2776             
2777             fjx2             = _fjsp_madd_v2r8(dx32,fscal,fjx2);
2778             fjy2             = _fjsp_madd_v2r8(dy32,fscal,fjy2);
2779             fjz2             = _fjsp_madd_v2r8(dz32,fscal,fjz2);
2780
2781             }
2782
2783             /**************************
2784              * CALCULATE INTERACTIONS *
2785              **************************/
2786
2787             if (gmx_fjsp_any_lt_v2r8(rsq33,rcutoff2))
2788             {
2789
2790             r33              = _fjsp_mul_v2r8(rsq33,rinv33);
2791
2792             /* EWALD ELECTROSTATICS */
2793
2794             /* Calculate Ewald table index by multiplying r with scale and truncate to integer */
2795             ewrt             = _fjsp_mul_v2r8(r33,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(qq33,_fjsp_sub_v2r8(rinv33,velec));
2809             felec            = _fjsp_mul_v2r8(_fjsp_mul_v2r8(qq33,rinv33),_fjsp_sub_v2r8(rinvsq33,felec));
2810
2811             d                = _fjsp_sub_v2r8(r33,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(rinv33,_fjsp_mul_v2r8(velec,dsw)) );
2821             cutoff_mask      = _fjsp_cmplt_v2r8(rsq33,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             fix3             = _fjsp_madd_v2r8(dx33,fscal,fix3);
2831             fiy3             = _fjsp_madd_v2r8(dy33,fscal,fiy3);
2832             fiz3             = _fjsp_madd_v2r8(dz33,fscal,fiz3);
2833             
2834             fjx3             = _fjsp_madd_v2r8(dx33,fscal,fjx3);
2835             fjy3             = _fjsp_madd_v2r8(dy33,fscal,fjy3);
2836             fjz3             = _fjsp_madd_v2r8(dz33,fscal,fjz3);
2837
2838             }
2839
2840             gmx_fjsp_decrement_3rvec_1ptr_swizzle_v2r8(f+j_coord_offsetA+DIM,fjx1,fjy1,fjz1,fjx2,fjy2,fjz2,fjx3,fjy3,fjz3);
2841
2842             /* Inner loop uses 585 flops */
2843         }
2844
2845         /* End of innermost loop */
2846
2847         gmx_fjsp_update_iforce_3atom_swizzle_v2r8(fix1,fiy1,fiz1,fix2,fiy2,fiz2,fix3,fiy3,fiz3,
2848                                               f+i_coord_offset+DIM,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_W4W4_F,outeriter*18 + inneriter*585);
2862 }