Sort all includes in src/gromacs
[alexxy/gromacs.git] / src / gromacs / mdlib / nbnxn_kernels / simd_2xnn / nbnxn_kernel_simd_2xnn.c
index 4bf21fa8249e965e3d1a580e45d5dfcef1ff9d8c..ed1456873bcf373c6844295b7b286eb79e8a5577 100644 (file)
  * kernel type 2xnn.
  */
 
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
+#include "gmxpre.h"
+
+#include "config.h"
 
-#include "typedefs.h"
+#include "gromacs/legacyheaders/typedefs.h"
+#include "gromacs/mdlib/nb_verlet.h"
+#include "gromacs/mdlib/nbnxn_simd.h"
 
 #ifdef GMX_NBNXN_SIMD_2XNN
 
 /* Include the full-width SIMD macros */
-
-#include "gromacs/simd/macros.h"
 #include "gromacs/simd/vector_operations.h"
 
 #if !(GMX_SIMD_REAL_WIDTH == 8 || GMX_SIMD_REAL_WIDTH == 16)
 
 #define GMX_SIMD_J_UNROLL_SIZE 2
 #include "nbnxn_kernel_simd_2xnn.h"
-#include "../nbnxn_kernel_common.h"
-#include "gmx_omp_nthreads.h"
-#include "types/force_flags.h"
-#include "gmx_fatal.h"
+
+#include "gromacs/legacyheaders/gmx_omp_nthreads.h"
+#include "gromacs/legacyheaders/types/force_flags.h"
+#include "gromacs/mdlib/nbnxn_kernels/nbnxn_kernel_common.h"
+#include "gromacs/utility/fatalerror.h"
 
 /*! \brief Kinds of electrostatic treatments in SIMD Verlet kernels
  */
 enum {
-    coultRF, coultTAB, coultTAB_TWIN, coultEWALD, coultEWALD_TWIN, coultNR
+    coulktRF, coulktTAB, coulktTAB_TWIN, coulktEWALD, coulktEWALD_TWIN, coulktNR
+};
+
+/*! \brief Kinds of Van der Waals treatments in SIMD Verlet kernels
+ */
+enum {
+    vdwktLJCUT_COMBGEOM, vdwktLJCUT_COMBLB, vdwktLJCUT_COMBNONE, vdwktLJFORCESWITCH, vdwktLJPOTSWITCH, vdwktLJEWALDCOMBGEOM, vdwktNR
 };
 
 /* Declare and define the kernel function pointer lookup tables.
  * The minor index of the array goes over both the LJ combination rules,
- * which is only supported by plain cut-off, and the LJ switch functions.
+ * which is only supported by plain cut-off, and the LJ switch/PME functions.
  */
-static p_nbk_func_noener p_nbk_noener[coultNR][ljcrNR+2] =
+static p_nbk_func_noener p_nbk_noener[coulktNR][vdwktNR] =
 {
     {
         nbnxn_kernel_ElecRF_VdwLJCombGeom_F_2xnn,
@@ -79,6 +86,7 @@ static p_nbk_func_noener p_nbk_noener[coultNR][ljcrNR+2] =
         nbnxn_kernel_ElecRF_VdwLJ_F_2xnn,
         nbnxn_kernel_ElecRF_VdwLJFSw_F_2xnn,
         nbnxn_kernel_ElecRF_VdwLJPSw_F_2xnn,
+        nbnxn_kernel_ElecRF_VdwLJEwCombGeom_F_2xnn,
     },
     {
         nbnxn_kernel_ElecQSTab_VdwLJCombGeom_F_2xnn,
@@ -86,6 +94,7 @@ static p_nbk_func_noener p_nbk_noener[coultNR][ljcrNR+2] =
         nbnxn_kernel_ElecQSTab_VdwLJ_F_2xnn,
         nbnxn_kernel_ElecQSTab_VdwLJFSw_F_2xnn,
         nbnxn_kernel_ElecQSTab_VdwLJPSw_F_2xnn,
+        nbnxn_kernel_ElecQSTab_VdwLJEwCombGeom_F_2xnn,
     },
     {
         nbnxn_kernel_ElecQSTabTwinCut_VdwLJCombGeom_F_2xnn,
@@ -93,6 +102,7 @@ static p_nbk_func_noener p_nbk_noener[coultNR][ljcrNR+2] =
         nbnxn_kernel_ElecQSTabTwinCut_VdwLJ_F_2xnn,
         nbnxn_kernel_ElecQSTabTwinCut_VdwLJFSw_F_2xnn,
         nbnxn_kernel_ElecQSTabTwinCut_VdwLJPSw_F_2xnn,
+        nbnxn_kernel_ElecQSTabTwinCut_VdwLJEwCombGeom_F_2xnn,
     },
     {
         nbnxn_kernel_ElecEw_VdwLJCombGeom_F_2xnn,
@@ -100,6 +110,7 @@ static p_nbk_func_noener p_nbk_noener[coultNR][ljcrNR+2] =
         nbnxn_kernel_ElecEw_VdwLJ_F_2xnn,
         nbnxn_kernel_ElecEw_VdwLJFSw_F_2xnn,
         nbnxn_kernel_ElecEw_VdwLJPSw_F_2xnn,
+        nbnxn_kernel_ElecEw_VdwLJEwCombGeom_F_2xnn,
     },
     {
         nbnxn_kernel_ElecEwTwinCut_VdwLJCombGeom_F_2xnn,
@@ -107,10 +118,11 @@ static p_nbk_func_noener p_nbk_noener[coultNR][ljcrNR+2] =
         nbnxn_kernel_ElecEwTwinCut_VdwLJ_F_2xnn,
         nbnxn_kernel_ElecEwTwinCut_VdwLJFSw_F_2xnn,
         nbnxn_kernel_ElecEwTwinCut_VdwLJPSw_F_2xnn,
+        nbnxn_kernel_ElecEwTwinCut_VdwLJEwCombGeom_F_2xnn,
     },
 };
 
-static p_nbk_func_ener p_nbk_ener[coultNR][ljcrNR+2] =
+static p_nbk_func_ener p_nbk_ener[coulktNR][vdwktNR] =
 {
     {
         nbnxn_kernel_ElecRF_VdwLJCombGeom_VF_2xnn,
@@ -118,6 +130,7 @@ static p_nbk_func_ener p_nbk_ener[coultNR][ljcrNR+2] =
         nbnxn_kernel_ElecRF_VdwLJ_VF_2xnn,
         nbnxn_kernel_ElecRF_VdwLJFSw_VF_2xnn,
         nbnxn_kernel_ElecRF_VdwLJPSw_VF_2xnn,
+        nbnxn_kernel_ElecRF_VdwLJEwCombGeom_VF_2xnn,
     },
     {
         nbnxn_kernel_ElecQSTab_VdwLJCombGeom_VF_2xnn,
@@ -125,6 +138,7 @@ static p_nbk_func_ener p_nbk_ener[coultNR][ljcrNR+2] =
         nbnxn_kernel_ElecQSTab_VdwLJ_VF_2xnn,
         nbnxn_kernel_ElecQSTab_VdwLJFSw_VF_2xnn,
         nbnxn_kernel_ElecQSTab_VdwLJPSw_VF_2xnn,
+        nbnxn_kernel_ElecQSTab_VdwLJEwCombGeom_VF_2xnn,
     },
     {
         nbnxn_kernel_ElecQSTabTwinCut_VdwLJCombGeom_VF_2xnn,
@@ -132,6 +146,7 @@ static p_nbk_func_ener p_nbk_ener[coultNR][ljcrNR+2] =
         nbnxn_kernel_ElecQSTabTwinCut_VdwLJ_VF_2xnn,
         nbnxn_kernel_ElecQSTabTwinCut_VdwLJFSw_VF_2xnn,
         nbnxn_kernel_ElecQSTabTwinCut_VdwLJPSw_VF_2xnn,
+        nbnxn_kernel_ElecQSTabTwinCut_VdwLJEwCombGeom_VF_2xnn,
     },
     {
         nbnxn_kernel_ElecEw_VdwLJCombGeom_VF_2xnn,
@@ -139,6 +154,7 @@ static p_nbk_func_ener p_nbk_ener[coultNR][ljcrNR+2] =
         nbnxn_kernel_ElecEw_VdwLJ_VF_2xnn,
         nbnxn_kernel_ElecEw_VdwLJFSw_VF_2xnn,
         nbnxn_kernel_ElecEw_VdwLJPSw_VF_2xnn,
+        nbnxn_kernel_ElecEw_VdwLJEwCombGeom_VF_2xnn,
     },
     {
         nbnxn_kernel_ElecEwTwinCut_VdwLJCombGeom_VF_2xnn,
@@ -146,10 +162,11 @@ static p_nbk_func_ener p_nbk_ener[coultNR][ljcrNR+2] =
         nbnxn_kernel_ElecEwTwinCut_VdwLJ_VF_2xnn,
         nbnxn_kernel_ElecEwTwinCut_VdwLJFSw_VF_2xnn,
         nbnxn_kernel_ElecEwTwinCut_VdwLJPSw_VF_2xnn,
+        nbnxn_kernel_ElecEwTwinCut_VdwLJEwCombGeom_VF_2xnn,
     },
 };
 
-static p_nbk_func_ener p_nbk_energrp[coultNR][ljcrNR+2] =
+static p_nbk_func_ener p_nbk_energrp[coulktNR][vdwktNR] =
 {
     {
         nbnxn_kernel_ElecRF_VdwLJCombGeom_VgrpF_2xnn,
@@ -157,6 +174,7 @@ static p_nbk_func_ener p_nbk_energrp[coultNR][ljcrNR+2] =
         nbnxn_kernel_ElecRF_VdwLJ_VgrpF_2xnn,
         nbnxn_kernel_ElecRF_VdwLJFSw_VgrpF_2xnn,
         nbnxn_kernel_ElecRF_VdwLJPSw_VgrpF_2xnn,
+        nbnxn_kernel_ElecRF_VdwLJEwCombGeom_VgrpF_2xnn,
     },
     {
         nbnxn_kernel_ElecQSTab_VdwLJCombGeom_VgrpF_2xnn,
@@ -164,6 +182,7 @@ static p_nbk_func_ener p_nbk_energrp[coultNR][ljcrNR+2] =
         nbnxn_kernel_ElecQSTab_VdwLJ_VgrpF_2xnn,
         nbnxn_kernel_ElecQSTab_VdwLJFSw_VgrpF_2xnn,
         nbnxn_kernel_ElecQSTab_VdwLJPSw_VgrpF_2xnn,
+        nbnxn_kernel_ElecQSTab_VdwLJEwCombGeom_VgrpF_2xnn,
     },
     {
         nbnxn_kernel_ElecQSTabTwinCut_VdwLJCombGeom_VgrpF_2xnn,
@@ -171,6 +190,7 @@ static p_nbk_func_ener p_nbk_energrp[coultNR][ljcrNR+2] =
         nbnxn_kernel_ElecQSTabTwinCut_VdwLJ_VgrpF_2xnn,
         nbnxn_kernel_ElecQSTabTwinCut_VdwLJFSw_VgrpF_2xnn,
         nbnxn_kernel_ElecQSTabTwinCut_VdwLJPSw_VgrpF_2xnn,
+        nbnxn_kernel_ElecQSTabTwinCut_VdwLJEwCombGeom_VgrpF_2xnn,
     },
     {
         nbnxn_kernel_ElecEw_VdwLJCombGeom_VgrpF_2xnn,
@@ -178,6 +198,7 @@ static p_nbk_func_ener p_nbk_energrp[coultNR][ljcrNR+2] =
         nbnxn_kernel_ElecEw_VdwLJ_VgrpF_2xnn,
         nbnxn_kernel_ElecEw_VdwLJFSw_VgrpF_2xnn,
         nbnxn_kernel_ElecEw_VdwLJPSw_VgrpF_2xnn,
+        nbnxn_kernel_ElecEw_VdwLJEwCombGeom_VgrpF_2xnn,
     },
     {
         nbnxn_kernel_ElecEwTwinCut_VdwLJCombGeom_VgrpF_2xnn,
@@ -185,6 +206,7 @@ static p_nbk_func_ener p_nbk_energrp[coultNR][ljcrNR+2] =
         nbnxn_kernel_ElecEwTwinCut_VdwLJ_VgrpF_2xnn,
         nbnxn_kernel_ElecEwTwinCut_VdwLJFSw_VgrpF_2xnn,
         nbnxn_kernel_ElecEwTwinCut_VdwLJPSw_VgrpF_2xnn,
+        nbnxn_kernel_ElecEwTwinCut_VdwLJEwCombGeom_VgrpF_2xnn,
     },
 };
 
@@ -231,7 +253,7 @@ reduce_group_energies(int ng, int ng_2log,
 
 #else /* GMX_NBNXN_SIMD_2XNN */
 
-#include "gmx_fatal.h"
+#include "gromacs/utility/fatalerror.h"
 
 #endif /* GMX_NBNXN_SIMD_2XNN */
 
@@ -250,7 +272,7 @@ nbnxn_kernel_simd_2xnn(nbnxn_pairlist_set_t      gmx_unused *nbl_list,
 {
     int                nnbl;
     nbnxn_pairlist_t **nbl;
-    int                coult, ljtreatment = 0;
+    int                coulkt, vdwkt = 0;
     int                nb;
 
     nnbl = nbl_list->nnbl;
@@ -258,7 +280,7 @@ nbnxn_kernel_simd_2xnn(nbnxn_pairlist_set_t      gmx_unused *nbl_list,
 
     if (EEL_RF(ic->eeltype) || ic->eeltype == eelCUT)
     {
-        coult = coultRF;
+        coulkt = coulktRF;
     }
     else
     {
@@ -266,41 +288,61 @@ nbnxn_kernel_simd_2xnn(nbnxn_pairlist_set_t      gmx_unused *nbl_list,
         {
             if (ic->rcoulomb == ic->rvdw)
             {
-                coult = coultTAB;
+                coulkt = coulktTAB;
             }
             else
             {
-                coult = coultTAB_TWIN;
+                coulkt = coulktTAB_TWIN;
             }
         }
         else
         {
             if (ic->rcoulomb == ic->rvdw)
             {
-                coult = coultEWALD;
+                coulkt = coulktEWALD;
             }
             else
             {
-                coult = coultEWALD_TWIN;
+                coulkt = coulktEWALD_TWIN;
             }
         }
     }
 
-    switch (ic->vdw_modifier)
+    if (ic->vdwtype == evdwCUT)
+    {
+        switch (ic->vdw_modifier)
+        {
+            case eintmodNONE:
+            case eintmodPOTSHIFT:
+                switch (nbat->comb_rule)
+                {
+                    case ljcrGEOM: vdwkt = vdwktLJCUT_COMBGEOM; break;
+                    case ljcrLB:   vdwkt = vdwktLJCUT_COMBLB;   break;
+                    case ljcrNONE: vdwkt = vdwktLJCUT_COMBNONE; break;
+                    default:       gmx_incons("Unknown combination rule");
+                }
+                break;
+            case eintmodFORCESWITCH:
+                vdwkt = vdwktLJFORCESWITCH;
+                break;
+            case eintmodPOTSWITCH:
+                vdwkt = vdwktLJPOTSWITCH;
+                break;
+            default:
+                gmx_incons("Unsupported VdW interaction modifier");
+        }
+    }
+    else if (ic->vdwtype == evdwPME)
+    {
+        if (ic->ljpme_comb_rule == eljpmeLB)
+        {
+            gmx_incons("The nbnxn SIMD kernels don't suport LJ-PME with LB");
+        }
+        vdwkt = vdwktLJEWALDCOMBGEOM;
+    }
+    else
     {
-        case eintmodNONE:
-        case eintmodPOTSHIFT:
-            ljtreatment = nbat->comb_rule;
-            break;
-        /* Switch functions follow after cut-off combination rule kernels */
-        case eintmodFORCESWITCH:
-            ljtreatment = ljcrNR;
-            break;
-        case eintmodPOTSWITCH:
-            ljtreatment = ljcrNR + 1;
-            break;
-        default:
-            gmx_incons("Unsupported VdW interaction modifier");
+        gmx_incons("Unsupported VdW interaction type");
     }
 
 #pragma omp parallel for schedule(static) num_threads(gmx_omp_nthreads_get(emntNonbonded))
@@ -333,11 +375,11 @@ nbnxn_kernel_simd_2xnn(nbnxn_pairlist_set_t      gmx_unused *nbl_list,
         if (!(force_flags & GMX_FORCE_ENERGY))
         {
             /* Don't calculate energies */
-            p_nbk_noener[coult][ljtreatment](nbl[nb], nbat,
-                                             ic,
-                                             shift_vec,
-                                             out->f,
-                                             fshift_p);
+            p_nbk_noener[coulkt][vdwkt](nbl[nb], nbat,
+                                        ic,
+                                        shift_vec,
+                                        out->f,
+                                        fshift_p);
         }
         else if (out->nV == 1)
         {
@@ -345,13 +387,13 @@ nbnxn_kernel_simd_2xnn(nbnxn_pairlist_set_t      gmx_unused *nbl_list,
             out->Vvdw[0] = 0;
             out->Vc[0]   = 0;
 
-            p_nbk_ener[coult][ljtreatment](nbl[nb], nbat,
-                                           ic,
-                                           shift_vec,
-                                           out->f,
-                                           fshift_p,
-                                           out->Vvdw,
-                                           out->Vc);
+            p_nbk_ener[coulkt][vdwkt](nbl[nb], nbat,
+                                      ic,
+                                      shift_vec,
+                                      out->f,
+                                      fshift_p,
+                                      out->Vvdw,
+                                      out->Vc);
         }
         else
         {
@@ -367,13 +409,13 @@ nbnxn_kernel_simd_2xnn(nbnxn_pairlist_set_t      gmx_unused *nbl_list,
                 out->VSc[i] = 0;
             }
 
-            p_nbk_energrp[coult][ljtreatment](nbl[nb], nbat,
-                                              ic,
-                                              shift_vec,
-                                              out->f,
-                                              fshift_p,
-                                              out->VSvdw,
-                                              out->VSc);
+            p_nbk_energrp[coulkt][vdwkt](nbl[nb], nbat,
+                                         ic,
+                                         shift_vec,
+                                         out->f,
+                                         fshift_p,
+                                         out->VSvdw,
+                                         out->VSc);
 
             reduce_group_energies(nbat->nenergrp, nbat->neg_2log,
                                   out->VSvdw, out->VSc,