Merge branch 'master' into pygromacs
[alexxy/gromacs.git] / src / gromacs / mdlib / nbnxn_kernels / simd_2xnn / nbnxn_kernel_simd_2xnn_inner.h
index 2f45b53bafe0acd349b949ad2bf60e603a0e1220..0848a11e2f66dc96444e8be0ee51e75e310ecab6 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * This file is part of the GROMACS molecular simulation package.
  *
- * Copyright (c) 2012,2013,2014, by the GROMACS development team, led by
+ * Copyright (c) 2012,2013,2014,2015, by the GROMACS development team, led by
  * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
  * and including many others, as listed in the AUTHORS file in the
  * top-level source directory and at http://www.gromacs.org.
 
 #if (defined CALC_COULOMB && defined CALC_COUL_TAB) || defined LJ_FORCE_SWITCH || defined LJ_POT_SWITCH
     gmx_simd_real_t r_S0;
+#if (defined CALC_COULOMB && defined CALC_COUL_TAB) || !defined HALF_LJ
     gmx_simd_real_t r_S2;
 #endif
+#endif
 
 #if defined LJ_FORCE_SWITCH || defined LJ_POT_SWITCH
-    gmx_simd_real_t  rsw_S0, rsw2_S0, rsw2_r_S0;
+    gmx_simd_real_t  rsw_S0, rsw2_S0;
 #ifndef HALF_LJ
-    gmx_simd_real_t  rsw_S2, rsw2_S2, rsw2_r_S2;
+    gmx_simd_real_t  rsw_S2, rsw2_S2;
 #endif
 #endif
 
     int         aj2;
 #endif
 
-#ifndef FIX_LJ_C
-    /* LJ C6 and C12 parameters, used with geometric comb. rule */
-    gmx_simd_real_t  c6_S0, c12_S0;
-#ifndef HALF_LJ
-    gmx_simd_real_t  c6_S2, c12_S2;
-#endif
-#endif
-
     /* Intermediate variables for LJ calculation */
 #ifndef LJ_COMB_LB
     gmx_simd_real_t  rinvsix_S0;
 #ifndef HALF_LJ
     gmx_simd_real_t  FrLJ6_S2, FrLJ12_S2, frLJ_S2;
 #endif
-#if defined CALC_ENERGIES || defined LJ_POT_SWITCH
-    gmx_simd_real_t  VLJ6_S0, VLJ12_S0, VLJ_S0;
-#ifndef HALF_LJ
-    gmx_simd_real_t  VLJ6_S2, VLJ12_S2, VLJ_S2;
-#endif
-#endif
 #endif /* CALC_LJ */
 
     gmx_mm_hpr fjx_S, fjy_S, fjz_S;
 #ifdef CALC_LJ
 
 #if !defined LJ_COMB_GEOM && !defined LJ_COMB_LB && !defined FIX_LJ_C
+    gmx_simd_real_t c6_S0, c12_S0;
     load_lj_pair_params2(nbfp0, nbfp1, type, aj, &c6_S0, &c12_S0);
 #ifndef HALF_LJ
+    gmx_simd_real_t c6_S2, c12_S2;
     load_lj_pair_params2(nbfp2, nbfp3, type, aj, &c6_S2, &c12_S2);
 #endif
 #endif /* not defined any LJ rule */
 #ifdef LJ_COMB_GEOM
     gmx_loaddh_pr(&c6s_j_S,  ljc+aj2+0);
     gmx_loaddh_pr(&c12s_j_S, ljc+aj2+STRIDE);
-    c6_S0       = gmx_simd_mul_r(c6s_S0, c6s_j_S );
+    gmx_simd_real_t c6_S0       = gmx_simd_mul_r(c6s_S0, c6s_j_S );
 #ifndef HALF_LJ
-    c6_S2       = gmx_simd_mul_r(c6s_S2, c6s_j_S );
+    gmx_simd_real_t c6_S2       = gmx_simd_mul_r(c6s_S2, c6s_j_S );
 #endif
-    c12_S0      = gmx_simd_mul_r(c12s_S0, c12s_j_S);
+    gmx_simd_real_t c12_S0      = gmx_simd_mul_r(c12s_S0, c12s_j_S);
 #ifndef HALF_LJ
-    c12_S2      = gmx_simd_mul_r(c12s_S2, c12s_j_S);
+    gmx_simd_real_t c12_S2      = gmx_simd_mul_r(c12s_S2, c12s_j_S);
 #endif
 #endif /* LJ_COMB_GEOM */
 
     r_S0        = gmx_simd_mul_r(rsq_S0, rinv_S0);
     rsw_S0      = gmx_simd_max_r(gmx_simd_sub_r(r_S0, rswitch_S), zero_S);
     rsw2_S0     = gmx_simd_mul_r(rsw_S0, rsw_S0);
-    rsw2_r_S0   = gmx_simd_mul_r(rsw2_S0, r_S0);
 #ifndef HALF_LJ
     r_S2        = gmx_simd_mul_r(rsq_S2, rinv_S2);
     rsw_S2      = gmx_simd_max_r(gmx_simd_sub_r(r_S2, rswitch_S), zero_S);
     rsw2_S2     = gmx_simd_mul_r(rsw_S2, rsw_S2);
-    rsw2_r_S2   = gmx_simd_mul_r(rsw2_S2, r_S2);
 #endif
 #endif
 
 #ifdef LJ_FORCE_SWITCH
 
 #define add_fr_switch(fr, rsw, rsw2_r, c2, c3) gmx_simd_fmadd_r(gmx_simd_fmadd_r(c3, rsw, c2), rsw2_r, fr)
-
+    gmx_simd_real_t rsw2_r_S0 = gmx_simd_mul_r(rsw2_S0, r_S0);
     FrLJ6_S0    = gmx_simd_mul_r(c6_S0, add_fr_switch(rinvsix_S0, rsw_S0, rsw2_r_S0, p6_fc2_S, p6_fc3_S));
 #ifndef HALF_LJ
+    gmx_simd_real_t rsw2_r_S2 = gmx_simd_mul_r(rsw2_S2, r_S2);
     FrLJ6_S2    = gmx_simd_mul_r(c6_S2, add_fr_switch(rinvsix_S2, rsw_S2, rsw2_r_S2, p6_fc2_S, p6_fc3_S));
 #endif
     FrLJ12_S0   = gmx_simd_mul_r(c12_S0, add_fr_switch(gmx_simd_mul_r(rinvsix_S0, rinvsix_S0), rsw_S0, rsw2_r_S0, p12_fc2_S, p12_fc3_S));
 #ifndef HALF_LJ
     sig6_S2     = gmx_simd_mul_r(sig2_S2, gmx_simd_mul_r(sig2_S2, sig2_S2));
 #endif
-    c6_S0       = gmx_simd_mul_r(eps_S0, sig6_S0);
+    gmx_simd_real_t c6_S0  = gmx_simd_mul_r(eps_S0, sig6_S0);
 #ifndef HALF_LJ
-    c6_S2       = gmx_simd_mul_r(eps_S2, sig6_S2);
+    gmx_simd_real_t c6_S2  = gmx_simd_mul_r(eps_S2, sig6_S2);
 #endif
-    c12_S0      = gmx_simd_mul_r(c6_S0, sig6_S0);
+    gmx_simd_real_t c12_S0 = gmx_simd_mul_r(c6_S0, sig6_S0);
 #ifndef HALF_LJ
-    c12_S2      = gmx_simd_mul_r(c6_S2, sig6_S2);
+    gmx_simd_real_t c12_S2 = gmx_simd_mul_r(c6_S2, sig6_S2);
 #endif
 #endif
 #endif /* LJ_COMB_LB */
 
 #ifdef LJ_CUT
     /* Calculate the LJ energies, with constant potential shift */
-    VLJ6_S0     = gmx_simd_mul_r(sixth_S, gmx_simd_fmadd_r(c6_S0, p6_cpot_S, FrLJ6_S0));
+    gmx_simd_real_t VLJ6_S0  = gmx_simd_mul_r(sixth_S, gmx_simd_fmadd_r(c6_S0, p6_cpot_S, FrLJ6_S0));
 #ifndef HALF_LJ
-    VLJ6_S2     = gmx_simd_mul_r(sixth_S, gmx_simd_fmadd_r(c6_S2, p6_cpot_S, FrLJ6_S2));
+    gmx_simd_real_t VLJ6_S2  = gmx_simd_mul_r(sixth_S, gmx_simd_fmadd_r(c6_S2, p6_cpot_S, FrLJ6_S2));
 #endif
-    VLJ12_S0    = gmx_simd_mul_r(twelveth_S, gmx_simd_fmadd_r(c12_S0, p12_cpot_S, FrLJ12_S0));
+    gmx_simd_real_t VLJ12_S0 = gmx_simd_mul_r(twelveth_S, gmx_simd_fmadd_r(c12_S0, p12_cpot_S, FrLJ12_S0));
 #ifndef HALF_LJ
-    VLJ12_S2    = gmx_simd_mul_r(twelveth_S, gmx_simd_fmadd_r(c12_S2, p12_cpot_S, FrLJ12_S2));
+    gmx_simd_real_t VLJ12_S2 = gmx_simd_mul_r(twelveth_S, gmx_simd_fmadd_r(c12_S2, p12_cpot_S, FrLJ12_S2));
 #endif
 #endif /* LJ_CUT */
 
 #ifdef LJ_FORCE_SWITCH
 #define v_fswitch_pr(rsw, rsw2, c0, c3, c4) gmx_simd_fmadd_r(gmx_simd_fmadd_r(c4, rsw, c3), gmx_simd_mul_r(rsw2, rsw), c0)
 
-    VLJ6_S0     = gmx_simd_mul_r(c6_S0, gmx_simd_fmadd_r(sixth_S, rinvsix_S0, v_fswitch_pr(rsw_S0, rsw2_S0, p6_6cpot_S, p6_vc3_S, p6_vc4_S)));
+    gmx_simd_real_t VLJ6_S0     = gmx_simd_mul_r(c6_S0, gmx_simd_fmadd_r(sixth_S, rinvsix_S0, v_fswitch_pr(rsw_S0, rsw2_S0, p6_6cpot_S, p6_vc3_S, p6_vc4_S)));
 #ifndef HALF_LJ
-    VLJ6_S2     = gmx_simd_mul_r(c6_S2, gmx_simd_fmadd_r(sixth_S, rinvsix_S2, v_fswitch_pr(rsw_S2, rsw2_S2, p6_6cpot_S, p6_vc3_S, p6_vc4_S)));
+    gmx_simd_real_t VLJ6_S2     = gmx_simd_mul_r(c6_S2, gmx_simd_fmadd_r(sixth_S, rinvsix_S2, v_fswitch_pr(rsw_S2, rsw2_S2, p6_6cpot_S, p6_vc3_S, p6_vc4_S)));
 #endif
-    VLJ12_S0    = gmx_simd_mul_r(c12_S0, gmx_simd_fmadd_r(twelveth_S, gmx_simd_mul_r(rinvsix_S0, rinvsix_S0), v_fswitch_pr(rsw_S0, rsw2_S0, p12_12cpot_S, p12_vc3_S, p12_vc4_S)));
+    gmx_simd_real_t VLJ12_S0    = gmx_simd_mul_r(c12_S0, gmx_simd_fmadd_r(twelveth_S, gmx_simd_mul_r(rinvsix_S0, rinvsix_S0), v_fswitch_pr(rsw_S0, rsw2_S0, p12_12cpot_S, p12_vc3_S, p12_vc4_S)));
 #ifndef HALF_LJ
-    VLJ12_S2    = gmx_simd_mul_r(c12_S2, gmx_simd_fmadd_r(twelveth_S, gmx_simd_mul_r(rinvsix_S2, rinvsix_S2), v_fswitch_pr(rsw_S2, rsw2_S2, p12_12cpot_S, p12_vc3_S, p12_vc4_S)));
+    gmx_simd_real_t VLJ12_S2    = gmx_simd_mul_r(c12_S2, gmx_simd_fmadd_r(twelveth_S, gmx_simd_mul_r(rinvsix_S2, rinvsix_S2), v_fswitch_pr(rsw_S2, rsw2_S2, p12_12cpot_S, p12_vc3_S, p12_vc4_S)));
 #endif
 #undef v_fswitch_pr
 #endif /* LJ_FORCE_SWITCH */
 
     /* Add up the repulsion and dispersion */
-    VLJ_S0      = gmx_simd_sub_r(VLJ12_S0, VLJ6_S0);
+    gmx_simd_real_t VLJ_S0      = gmx_simd_sub_r(VLJ12_S0, VLJ6_S0);
 #ifndef HALF_LJ
-    VLJ_S2      = gmx_simd_sub_r(VLJ12_S2, VLJ6_S2);
+    gmx_simd_real_t VLJ_S2      = gmx_simd_sub_r(VLJ12_S2, VLJ6_S2);
 #endif
 
 #endif /* (LJ_CUT || LJ_FORCE_SWITCH) && CALC_ENERGIES */
 
 #ifdef LJ_POT_SWITCH
     /* We always need the potential, since it is needed for the force */
-    VLJ_S0 = gmx_simd_fnmadd_r(sixth_S, FrLJ6_S0, gmx_simd_mul_r(twelveth_S, FrLJ12_S0));
+    gmx_simd_real_t VLJ_S0 = gmx_simd_fnmadd_r(sixth_S, FrLJ6_S0, gmx_simd_mul_r(twelveth_S, FrLJ12_S0));
 #ifndef HALF_LJ
-    VLJ_S2 = gmx_simd_fnmadd_r(sixth_S, FrLJ6_S2, gmx_simd_mul_r(twelveth_S, FrLJ12_S2));
+    gmx_simd_real_t VLJ_S2 = gmx_simd_fnmadd_r(sixth_S, FrLJ6_S2, gmx_simd_mul_r(twelveth_S, FrLJ12_S2));
 #endif
 
     {