Fixed bug in the new switch-modified interactions in C kernels
authorErik Lindahl <erik@kth.se>
Thu, 8 Nov 2012 22:27:15 +0000 (23:27 +0100)
committerErik Lindahl <erik@kth.se>
Thu, 8 Nov 2012 22:27:15 +0000 (23:27 +0100)
Fixed an error in the switch application formula, and another
table-related bug for PME interactions using the switch modifier
just introduced when only forces were calculated. This will not
have affected any other code unless you dug in the source and
tested the new switch modifiers the last 12h.

Change-Id: Ie323f45f2ce60ff1aacc2cccd9b395826f39cdf8

30 files changed:
src/gmxlib/nonbonded/nb_generic.c
src/gmxlib/nonbonded/nb_kernel_c/make_nb_kernel_c.py
src/gmxlib/nonbonded/nb_kernel_c/nb_kernel_ElecEwSw_VdwBhamSw_GeomP1P1_c.c
src/gmxlib/nonbonded/nb_kernel_c/nb_kernel_ElecEwSw_VdwBhamSw_GeomW3P1_c.c
src/gmxlib/nonbonded/nb_kernel_c/nb_kernel_ElecEwSw_VdwBhamSw_GeomW3W3_c.c
src/gmxlib/nonbonded/nb_kernel_c/nb_kernel_ElecEwSw_VdwBhamSw_GeomW4P1_c.c
src/gmxlib/nonbonded/nb_kernel_c/nb_kernel_ElecEwSw_VdwBhamSw_GeomW4W4_c.c
src/gmxlib/nonbonded/nb_kernel_c/nb_kernel_ElecEwSw_VdwLJSw_GeomP1P1_c.c
src/gmxlib/nonbonded/nb_kernel_c/nb_kernel_ElecEwSw_VdwLJSw_GeomW3P1_c.c
src/gmxlib/nonbonded/nb_kernel_c/nb_kernel_ElecEwSw_VdwLJSw_GeomW3W3_c.c
src/gmxlib/nonbonded/nb_kernel_c/nb_kernel_ElecEwSw_VdwLJSw_GeomW4P1_c.c
src/gmxlib/nonbonded/nb_kernel_c/nb_kernel_ElecEwSw_VdwLJSw_GeomW4W4_c.c
src/gmxlib/nonbonded/nb_kernel_c/nb_kernel_ElecEwSw_VdwNone_GeomP1P1_c.c
src/gmxlib/nonbonded/nb_kernel_c/nb_kernel_ElecEwSw_VdwNone_GeomW3P1_c.c
src/gmxlib/nonbonded/nb_kernel_c/nb_kernel_ElecEwSw_VdwNone_GeomW3W3_c.c
src/gmxlib/nonbonded/nb_kernel_c/nb_kernel_ElecEwSw_VdwNone_GeomW4P1_c.c
src/gmxlib/nonbonded/nb_kernel_c/nb_kernel_ElecEwSw_VdwNone_GeomW4W4_c.c
src/gmxlib/nonbonded/nb_kernel_c/nb_kernel_ElecNone_VdwBhamSw_GeomP1P1_c.c
src/gmxlib/nonbonded/nb_kernel_c/nb_kernel_ElecNone_VdwLJSw_GeomP1P1_c.c
src/gmxlib/nonbonded/nb_kernel_c/nb_kernel_ElecRFCut_VdwBhamSw_GeomP1P1_c.c
src/gmxlib/nonbonded/nb_kernel_c/nb_kernel_ElecRFCut_VdwBhamSw_GeomW3P1_c.c
src/gmxlib/nonbonded/nb_kernel_c/nb_kernel_ElecRFCut_VdwBhamSw_GeomW3W3_c.c
src/gmxlib/nonbonded/nb_kernel_c/nb_kernel_ElecRFCut_VdwBhamSw_GeomW4P1_c.c
src/gmxlib/nonbonded/nb_kernel_c/nb_kernel_ElecRFCut_VdwBhamSw_GeomW4W4_c.c
src/gmxlib/nonbonded/nb_kernel_c/nb_kernel_ElecRFCut_VdwLJSw_GeomP1P1_c.c
src/gmxlib/nonbonded/nb_kernel_c/nb_kernel_ElecRFCut_VdwLJSw_GeomW3P1_c.c
src/gmxlib/nonbonded/nb_kernel_c/nb_kernel_ElecRFCut_VdwLJSw_GeomW3W3_c.c
src/gmxlib/nonbonded/nb_kernel_c/nb_kernel_ElecRFCut_VdwLJSw_GeomW4P1_c.c
src/gmxlib/nonbonded/nb_kernel_c/nb_kernel_ElecRFCut_VdwLJSw_GeomW4W4_c.c
src/gmxlib/nonbonded/nb_kernel_c/nb_kernel_template_c.pre

index b052049de291fdada83b9fe78659bb95e53257ec..a9e39ca3b4c553ffeb19484d313b47051d697b76 100644 (file)
@@ -296,8 +296,13 @@ gmx_nb_generic_kernel(t_nblist *                nlist,
                     d2               = d*d;
                     sw               = 1.0+d2*d*(elec_swV3+d*(elec_swV4+d*elec_swV5));
                     dsw              = d2*(elec_swF2+d*(elec_swF3+d*elec_swF4));
+                    /* Apply switch function. Note that felec=f/r since it will be multiplied
+                     * by the i-j displacement vector. This means felec'=f'/r=-(v*sw)'/r=
+                     * -(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=felec*sw-v*dsw/r
+                     */
+                    felec            = felec*sw - rinv*velec*dsw;
+                    /* Once we have used velec to update felec we can modify velec too */
                     velec           *= sw;
-                    felec            = felec*sw + velec*dsw;
                 }
                 if(bExactElecCutoff)
                 {
@@ -394,8 +399,9 @@ gmx_nb_generic_kernel(t_nblist *                nlist,
                     d2               = d*d;
                     sw               = 1.0+d2*d*(vdw_swV3+d*(vdw_swV4+d*vdw_swV5));
                     dsw              = d2*(vdw_swF2+d*(vdw_swF3+d*vdw_swF4));
+                    /* See coulomb interaction for the force-switch formula */
+                    fvdw             = fvdw*sw - rinv*vvdw*dsw;
                     vvdw            *= sw;
-                    fvdw             = fvdw*sw + vvdw*dsw;
                 }
                 if(bExactVdwCutoff)
                 {
index d4913083fa445d9a0c8f118c85589e03aec3286f..579b49063baccb7185ac4b836eb8f800c0329bb6 100755 (executable)
@@ -113,7 +113,7 @@ ModifierList = {
     'None'                    : [],
     'ExactCutoff'             : ['exactcutoff'],        # Zero the interaction outside the cutoff, used for reaction-field-zero
     'PotentialShift'          : ['shift','exactcutoff'],
-    'PotentialSwitch'         : ['r','switch','exactcutoff']
+    'PotentialSwitch'         : ['rinv','r','switch','exactcutoff']
 }
 
 
index fe8ab2847a4b90c4a80aef05d23196a6b711ee02..a6355fc02f4289b120e9b02adc04cb5fea6749c5 100644 (file)
@@ -211,10 +211,11 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomP1P1_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv00*velec*dsw;
+            fvdw             = fvdw*sw - rinv00*vvdw*dsw;
             velec           *= sw;
             vvdw            *= sw;
-            felec            = felec*sw + velec*dsw;
-            fvdw             = fvdw*sw + vvdw*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -327,7 +328,7 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomP1P1_F_c
     vdwtype          = mdatoms->typeA;
 
     sh_ewald         = fr->ic->sh_ewald;
-    ewtab            = fr->ic->tabq_coul_F;
+    ewtab            = fr->ic->tabq_coul_FDV0;
     ewtabscale       = fr->ic->tabq_scale;
     ewtabhalfspace   = 0.5/ewtabscale;
 
@@ -447,8 +448,9 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomP1P1_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
-            fvdw             = fvdw*sw + vvdw*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv00*velec*dsw;
+            fvdw             = fvdw*sw - rinv00*vvdw*dsw;
 
             fscal            = felec+fvdw;
 
index 0eca1c68043c33502eab90d92d19afc331977d0d..929fcb3c740decd41473b7cd2d0aabe66acfbdd0 100644 (file)
@@ -244,10 +244,11 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomW3P1_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv00*velec*dsw;
+            fvdw             = fvdw*sw - rinv00*vvdw*dsw;
             velec           *= sw;
             vvdw            *= sw;
-            felec            = felec*sw + velec*dsw;
-            fvdw             = fvdw*sw + vvdw*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -300,8 +301,9 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomW3P1_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv10*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -353,8 +355,9 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomW3P1_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv20*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -484,7 +487,7 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomW3P1_F_c
     vdwtype          = mdatoms->typeA;
 
     sh_ewald         = fr->ic->sh_ewald;
-    ewtab            = fr->ic->tabq_coul_F;
+    ewtab            = fr->ic->tabq_coul_FDV0;
     ewtabscale       = fr->ic->tabq_scale;
     ewtabhalfspace   = 0.5/ewtabscale;
 
@@ -631,8 +634,9 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomW3P1_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
-            fvdw             = fvdw*sw + vvdw*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv00*velec*dsw;
+            fvdw             = fvdw*sw - rinv00*vvdw*dsw;
 
             fscal            = felec+fvdw;
 
@@ -681,7 +685,8 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomW3P1_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv10*velec*dsw;
 
             fscal            = felec;
 
@@ -730,7 +735,8 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomW3P1_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv20*velec*dsw;
 
             fscal            = felec;
 
index e0002e0f7cf32b378030e9e7073cc46f0381f801..d81ba8230b71118b5b1bbdceb4b43dfefdc99158 100644 (file)
@@ -304,10 +304,11 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomW3W3_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv00*velec*dsw;
+            fvdw             = fvdw*sw - rinv00*vvdw*dsw;
             velec           *= sw;
             vvdw            *= sw;
-            felec            = felec*sw + velec*dsw;
-            fvdw             = fvdw*sw + vvdw*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -358,8 +359,9 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomW3W3_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv01*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -409,8 +411,9 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomW3W3_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv02*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -460,8 +463,9 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomW3W3_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv10*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -511,8 +515,9 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomW3W3_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv11*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -562,8 +567,9 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomW3W3_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv12*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -613,8 +619,9 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomW3W3_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv20*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -664,8 +671,9 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomW3W3_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv21*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -715,8 +723,9 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomW3W3_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv22*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -856,7 +865,7 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomW3W3_F_c
     vdwtype          = mdatoms->typeA;
 
     sh_ewald         = fr->ic->sh_ewald;
-    ewtab            = fr->ic->tabq_coul_F;
+    ewtab            = fr->ic->tabq_coul_FDV0;
     ewtabscale       = fr->ic->tabq_scale;
     ewtabhalfspace   = 0.5/ewtabscale;
 
@@ -1053,8 +1062,9 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomW3W3_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
-            fvdw             = fvdw*sw + vvdw*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv00*velec*dsw;
+            fvdw             = fvdw*sw - rinv00*vvdw*dsw;
 
             fscal            = felec+fvdw;
 
@@ -1101,7 +1111,8 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomW3W3_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv01*velec*dsw;
 
             fscal            = felec;
 
@@ -1148,7 +1159,8 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomW3W3_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv02*velec*dsw;
 
             fscal            = felec;
 
@@ -1195,7 +1207,8 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomW3W3_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv10*velec*dsw;
 
             fscal            = felec;
 
@@ -1242,7 +1255,8 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomW3W3_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv11*velec*dsw;
 
             fscal            = felec;
 
@@ -1289,7 +1303,8 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomW3W3_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv12*velec*dsw;
 
             fscal            = felec;
 
@@ -1336,7 +1351,8 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomW3W3_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv20*velec*dsw;
 
             fscal            = felec;
 
@@ -1383,7 +1399,8 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomW3W3_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv21*velec*dsw;
 
             fscal            = felec;
 
@@ -1430,7 +1447,8 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomW3W3_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv22*velec*dsw;
 
             fscal            = felec;
 
index 76c59f2f67a437e8a75201f7254efd24c07815ed..a74856f5139aa600f5c65cb99735c14a4b9899c2 100644 (file)
@@ -247,8 +247,9 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomW4P1_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            fvdw             = fvdw*sw - rinv00*vvdw*dsw;
             vvdw            *= sw;
-            fvdw             = fvdw*sw + vvdw*dsw;
 
             /* Update potential sums from outer loop */
             vvdwsum         += vvdw;
@@ -300,8 +301,9 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomW4P1_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv10*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -353,8 +355,9 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomW4P1_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv20*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -406,8 +409,9 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomW4P1_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv30*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -546,7 +550,7 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomW4P1_F_c
     vdwtype          = mdatoms->typeA;
 
     sh_ewald         = fr->ic->sh_ewald;
-    ewtab            = fr->ic->tabq_coul_F;
+    ewtab            = fr->ic->tabq_coul_FDV0;
     ewtabscale       = fr->ic->tabq_scale;
     ewtabhalfspace   = 0.5/ewtabscale;
 
@@ -693,7 +697,8 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomW4P1_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            fvdw             = fvdw*sw + vvdw*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            fvdw             = fvdw*sw - rinv00*vvdw*dsw;
 
             fscal            = fvdw;
 
@@ -742,7 +747,8 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomW4P1_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv10*velec*dsw;
 
             fscal            = felec;
 
@@ -791,7 +797,8 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomW4P1_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv20*velec*dsw;
 
             fscal            = felec;
 
@@ -840,7 +847,8 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomW4P1_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv30*velec*dsw;
 
             fscal            = felec;
 
index 743fb405c10645a4114e8342b79afc20d0780f11..72efffe030196bb36738dc286b26a3ec9f1345e8 100644 (file)
@@ -313,8 +313,9 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomW4W4_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            fvdw             = fvdw*sw - rinv00*vvdw*dsw;
             vvdw            *= sw;
-            fvdw             = fvdw*sw + vvdw*dsw;
 
             /* Update potential sums from outer loop */
             vvdwsum         += vvdw;
@@ -364,8 +365,9 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomW4W4_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv11*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -415,8 +417,9 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomW4W4_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv12*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -466,8 +469,9 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomW4W4_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv13*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -517,8 +521,9 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomW4W4_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv21*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -568,8 +573,9 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomW4W4_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv22*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -619,8 +625,9 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomW4W4_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv23*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -670,8 +677,9 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomW4W4_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv31*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -721,8 +729,9 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomW4W4_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv32*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -772,8 +781,9 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomW4W4_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv33*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -924,7 +934,7 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomW4W4_F_c
     vdwtype          = mdatoms->typeA;
 
     sh_ewald         = fr->ic->sh_ewald;
-    ewtab            = fr->ic->tabq_coul_F;
+    ewtab            = fr->ic->tabq_coul_FDV0;
     ewtabscale       = fr->ic->tabq_scale;
     ewtabhalfspace   = 0.5/ewtabscale;
 
@@ -1125,7 +1135,8 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomW4W4_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            fvdw             = fvdw*sw + vvdw*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            fvdw             = fvdw*sw - rinv00*vvdw*dsw;
 
             fscal            = fvdw;
 
@@ -1172,7 +1183,8 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomW4W4_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv11*velec*dsw;
 
             fscal            = felec;
 
@@ -1219,7 +1231,8 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomW4W4_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv12*velec*dsw;
 
             fscal            = felec;
 
@@ -1266,7 +1279,8 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomW4W4_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv13*velec*dsw;
 
             fscal            = felec;
 
@@ -1313,7 +1327,8 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomW4W4_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv21*velec*dsw;
 
             fscal            = felec;
 
@@ -1360,7 +1375,8 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomW4W4_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv22*velec*dsw;
 
             fscal            = felec;
 
@@ -1407,7 +1423,8 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomW4W4_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv23*velec*dsw;
 
             fscal            = felec;
 
@@ -1454,7 +1471,8 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomW4W4_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv31*velec*dsw;
 
             fscal            = felec;
 
@@ -1501,7 +1519,8 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomW4W4_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv32*velec*dsw;
 
             fscal            = felec;
 
@@ -1548,7 +1567,8 @@ nb_kernel_ElecEwSw_VdwBhamSw_GeomW4W4_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv33*velec*dsw;
 
             fscal            = felec;
 
index 07159bf00ef99b4440c45e4bcab530fbc110961c..2778e51c27fba3ca39b6a4e560e6eb6a02b65c28 100644 (file)
@@ -210,10 +210,11 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomP1P1_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv00*velec*dsw;
+            fvdw             = fvdw*sw - rinv00*vvdw*dsw;
             velec           *= sw;
             vvdw            *= sw;
-            felec            = felec*sw + velec*dsw;
-            fvdw             = fvdw*sw + vvdw*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -326,7 +327,7 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomP1P1_F_c
     vdwtype          = mdatoms->typeA;
 
     sh_ewald         = fr->ic->sh_ewald;
-    ewtab            = fr->ic->tabq_coul_F;
+    ewtab            = fr->ic->tabq_coul_FDV0;
     ewtabscale       = fr->ic->tabq_scale;
     ewtabhalfspace   = 0.5/ewtabscale;
 
@@ -445,8 +446,9 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomP1P1_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
-            fvdw             = fvdw*sw + vvdw*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv00*velec*dsw;
+            fvdw             = fvdw*sw - rinv00*vvdw*dsw;
 
             fscal            = felec+fvdw;
 
index b49875a406e9a1825ccfe054773f85174992b1ef..6b8bb55c351b58446afaab30134e5d7501b61bc5 100644 (file)
@@ -243,10 +243,11 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomW3P1_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv00*velec*dsw;
+            fvdw             = fvdw*sw - rinv00*vvdw*dsw;
             velec           *= sw;
             vvdw            *= sw;
-            felec            = felec*sw + velec*dsw;
-            fvdw             = fvdw*sw + vvdw*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -299,8 +300,9 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomW3P1_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv10*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -352,8 +354,9 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomW3P1_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv20*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -483,7 +486,7 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomW3P1_F_c
     vdwtype          = mdatoms->typeA;
 
     sh_ewald         = fr->ic->sh_ewald;
-    ewtab            = fr->ic->tabq_coul_F;
+    ewtab            = fr->ic->tabq_coul_FDV0;
     ewtabscale       = fr->ic->tabq_scale;
     ewtabhalfspace   = 0.5/ewtabscale;
 
@@ -629,8 +632,9 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomW3P1_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
-            fvdw             = fvdw*sw + vvdw*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv00*velec*dsw;
+            fvdw             = fvdw*sw - rinv00*vvdw*dsw;
 
             fscal            = felec+fvdw;
 
@@ -679,7 +683,8 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomW3P1_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv10*velec*dsw;
 
             fscal            = felec;
 
@@ -728,7 +733,8 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomW3P1_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv20*velec*dsw;
 
             fscal            = felec;
 
index 3634b5d32eefca1a3e3d83fadab0dac0aa6098a6..c3127b11b42fc9c11f5f9623b8689ceb7472f21d 100644 (file)
@@ -303,10 +303,11 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomW3W3_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv00*velec*dsw;
+            fvdw             = fvdw*sw - rinv00*vvdw*dsw;
             velec           *= sw;
             vvdw            *= sw;
-            felec            = felec*sw + velec*dsw;
-            fvdw             = fvdw*sw + vvdw*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -357,8 +358,9 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomW3W3_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv01*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -408,8 +410,9 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomW3W3_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv02*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -459,8 +462,9 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomW3W3_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv10*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -510,8 +514,9 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomW3W3_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv11*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -561,8 +566,9 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomW3W3_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv12*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -612,8 +618,9 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomW3W3_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv20*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -663,8 +670,9 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomW3W3_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv21*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -714,8 +722,9 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomW3W3_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv22*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -855,7 +864,7 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomW3W3_F_c
     vdwtype          = mdatoms->typeA;
 
     sh_ewald         = fr->ic->sh_ewald;
-    ewtab            = fr->ic->tabq_coul_F;
+    ewtab            = fr->ic->tabq_coul_FDV0;
     ewtabscale       = fr->ic->tabq_scale;
     ewtabhalfspace   = 0.5/ewtabscale;
 
@@ -1051,8 +1060,9 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomW3W3_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
-            fvdw             = fvdw*sw + vvdw*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv00*velec*dsw;
+            fvdw             = fvdw*sw - rinv00*vvdw*dsw;
 
             fscal            = felec+fvdw;
 
@@ -1099,7 +1109,8 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomW3W3_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv01*velec*dsw;
 
             fscal            = felec;
 
@@ -1146,7 +1157,8 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomW3W3_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv02*velec*dsw;
 
             fscal            = felec;
 
@@ -1193,7 +1205,8 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomW3W3_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv10*velec*dsw;
 
             fscal            = felec;
 
@@ -1240,7 +1253,8 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomW3W3_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv11*velec*dsw;
 
             fscal            = felec;
 
@@ -1287,7 +1301,8 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomW3W3_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv12*velec*dsw;
 
             fscal            = felec;
 
@@ -1334,7 +1349,8 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomW3W3_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv20*velec*dsw;
 
             fscal            = felec;
 
@@ -1381,7 +1397,8 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomW3W3_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv21*velec*dsw;
 
             fscal            = felec;
 
@@ -1428,7 +1445,8 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomW3W3_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv22*velec*dsw;
 
             fscal            = felec;
 
index 333cf6c1dc6f0f40a8134d4768f3180985fe6a8f..4c67fca85ef097c5f773ff5c4405d48669a609de 100644 (file)
@@ -246,8 +246,9 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomW4P1_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            fvdw             = fvdw*sw - rinv00*vvdw*dsw;
             vvdw            *= sw;
-            fvdw             = fvdw*sw + vvdw*dsw;
 
             /* Update potential sums from outer loop */
             vvdwsum         += vvdw;
@@ -299,8 +300,9 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomW4P1_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv10*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -352,8 +354,9 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomW4P1_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv20*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -405,8 +408,9 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomW4P1_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv30*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -545,7 +549,7 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomW4P1_F_c
     vdwtype          = mdatoms->typeA;
 
     sh_ewald         = fr->ic->sh_ewald;
-    ewtab            = fr->ic->tabq_coul_F;
+    ewtab            = fr->ic->tabq_coul_FDV0;
     ewtabscale       = fr->ic->tabq_scale;
     ewtabhalfspace   = 0.5/ewtabscale;
 
@@ -691,7 +695,8 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomW4P1_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            fvdw             = fvdw*sw + vvdw*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            fvdw             = fvdw*sw - rinv00*vvdw*dsw;
 
             fscal            = fvdw;
 
@@ -740,7 +745,8 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomW4P1_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv10*velec*dsw;
 
             fscal            = felec;
 
@@ -789,7 +795,8 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomW4P1_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv20*velec*dsw;
 
             fscal            = felec;
 
@@ -838,7 +845,8 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomW4P1_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv30*velec*dsw;
 
             fscal            = felec;
 
index 0872f4db43a0ab1d66f6bc6c1df29b80232ff404..002b30d61a148d208457545dbda259ac0e2bd069 100644 (file)
@@ -312,8 +312,9 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomW4W4_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            fvdw             = fvdw*sw - rinv00*vvdw*dsw;
             vvdw            *= sw;
-            fvdw             = fvdw*sw + vvdw*dsw;
 
             /* Update potential sums from outer loop */
             vvdwsum         += vvdw;
@@ -363,8 +364,9 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomW4W4_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv11*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -414,8 +416,9 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomW4W4_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv12*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -465,8 +468,9 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomW4W4_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv13*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -516,8 +520,9 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomW4W4_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv21*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -567,8 +572,9 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomW4W4_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv22*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -618,8 +624,9 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomW4W4_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv23*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -669,8 +676,9 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomW4W4_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv31*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -720,8 +728,9 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomW4W4_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv32*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -771,8 +780,9 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomW4W4_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv33*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -923,7 +933,7 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomW4W4_F_c
     vdwtype          = mdatoms->typeA;
 
     sh_ewald         = fr->ic->sh_ewald;
-    ewtab            = fr->ic->tabq_coul_F;
+    ewtab            = fr->ic->tabq_coul_FDV0;
     ewtabscale       = fr->ic->tabq_scale;
     ewtabhalfspace   = 0.5/ewtabscale;
 
@@ -1123,7 +1133,8 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomW4W4_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            fvdw             = fvdw*sw + vvdw*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            fvdw             = fvdw*sw - rinv00*vvdw*dsw;
 
             fscal            = fvdw;
 
@@ -1170,7 +1181,8 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomW4W4_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv11*velec*dsw;
 
             fscal            = felec;
 
@@ -1217,7 +1229,8 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomW4W4_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv12*velec*dsw;
 
             fscal            = felec;
 
@@ -1264,7 +1277,8 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomW4W4_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv13*velec*dsw;
 
             fscal            = felec;
 
@@ -1311,7 +1325,8 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomW4W4_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv21*velec*dsw;
 
             fscal            = felec;
 
@@ -1358,7 +1373,8 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomW4W4_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv22*velec*dsw;
 
             fscal            = felec;
 
@@ -1405,7 +1421,8 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomW4W4_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv23*velec*dsw;
 
             fscal            = felec;
 
@@ -1452,7 +1469,8 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomW4W4_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv31*velec*dsw;
 
             fscal            = felec;
 
@@ -1499,7 +1517,8 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomW4W4_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv32*velec*dsw;
 
             fscal            = felec;
 
@@ -1546,7 +1565,8 @@ nb_kernel_ElecEwSw_VdwLJSw_GeomW4W4_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv33*velec*dsw;
 
             fscal            = felec;
 
index f6857014929d1d0741fb2f06e05062ac903193cc..e9064bdcb69fe308d5957aa4d14498c99154c3f5 100644 (file)
@@ -190,8 +190,9 @@ nb_kernel_ElecEwSw_VdwNone_GeomP1P1_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv00*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -295,7 +296,7 @@ nb_kernel_ElecEwSw_VdwNone_GeomP1P1_F_c
     charge           = mdatoms->chargeA;
 
     sh_ewald         = fr->ic->sh_ewald;
-    ewtab            = fr->ic->tabq_coul_F;
+    ewtab            = fr->ic->tabq_coul_FDV0;
     ewtabscale       = fr->ic->tabq_scale;
     ewtabhalfspace   = 0.5/ewtabscale;
 
@@ -402,7 +403,8 @@ nb_kernel_ElecEwSw_VdwNone_GeomP1P1_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv00*velec*dsw;
 
             fscal            = felec;
 
index 7f6e7b5544ea35e4409f75e7c35d986277ad6e2b..88c5b565aac7d909e36bfdcbbb43e7e5bccdd76a 100644 (file)
@@ -223,8 +223,9 @@ nb_kernel_ElecEwSw_VdwNone_GeomW3P1_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv00*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -276,8 +277,9 @@ nb_kernel_ElecEwSw_VdwNone_GeomW3P1_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv10*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -329,8 +331,9 @@ nb_kernel_ElecEwSw_VdwNone_GeomW3P1_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv20*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -452,7 +455,7 @@ nb_kernel_ElecEwSw_VdwNone_GeomW3P1_F_c
     charge           = mdatoms->chargeA;
 
     sh_ewald         = fr->ic->sh_ewald;
-    ewtab            = fr->ic->tabq_coul_F;
+    ewtab            = fr->ic->tabq_coul_FDV0;
     ewtabscale       = fr->ic->tabq_scale;
     ewtabhalfspace   = 0.5/ewtabscale;
 
@@ -586,7 +589,8 @@ nb_kernel_ElecEwSw_VdwNone_GeomW3P1_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv00*velec*dsw;
 
             fscal            = felec;
 
@@ -635,7 +639,8 @@ nb_kernel_ElecEwSw_VdwNone_GeomW3P1_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv10*velec*dsw;
 
             fscal            = felec;
 
@@ -684,7 +689,8 @@ nb_kernel_ElecEwSw_VdwNone_GeomW3P1_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv20*velec*dsw;
 
             fscal            = felec;
 
index f6f017942d9c1b3b133d5def84ad18cea3a8a907..0ee3689742c262e1a08b359b0d7a8a1769ef0fc1 100644 (file)
@@ -283,8 +283,9 @@ nb_kernel_ElecEwSw_VdwNone_GeomW3W3_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv00*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -334,8 +335,9 @@ nb_kernel_ElecEwSw_VdwNone_GeomW3W3_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv01*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -385,8 +387,9 @@ nb_kernel_ElecEwSw_VdwNone_GeomW3W3_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv02*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -436,8 +439,9 @@ nb_kernel_ElecEwSw_VdwNone_GeomW3W3_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv10*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -487,8 +491,9 @@ nb_kernel_ElecEwSw_VdwNone_GeomW3W3_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv11*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -538,8 +543,9 @@ nb_kernel_ElecEwSw_VdwNone_GeomW3W3_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv12*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -589,8 +595,9 @@ nb_kernel_ElecEwSw_VdwNone_GeomW3W3_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv20*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -640,8 +647,9 @@ nb_kernel_ElecEwSw_VdwNone_GeomW3W3_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv21*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -691,8 +699,9 @@ nb_kernel_ElecEwSw_VdwNone_GeomW3W3_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv22*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -824,7 +833,7 @@ nb_kernel_ElecEwSw_VdwNone_GeomW3W3_F_c
     charge           = mdatoms->chargeA;
 
     sh_ewald         = fr->ic->sh_ewald;
-    ewtab            = fr->ic->tabq_coul_F;
+    ewtab            = fr->ic->tabq_coul_FDV0;
     ewtabscale       = fr->ic->tabq_scale;
     ewtabhalfspace   = 0.5/ewtabscale;
 
@@ -1008,7 +1017,8 @@ nb_kernel_ElecEwSw_VdwNone_GeomW3W3_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv00*velec*dsw;
 
             fscal            = felec;
 
@@ -1055,7 +1065,8 @@ nb_kernel_ElecEwSw_VdwNone_GeomW3W3_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv01*velec*dsw;
 
             fscal            = felec;
 
@@ -1102,7 +1113,8 @@ nb_kernel_ElecEwSw_VdwNone_GeomW3W3_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv02*velec*dsw;
 
             fscal            = felec;
 
@@ -1149,7 +1161,8 @@ nb_kernel_ElecEwSw_VdwNone_GeomW3W3_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv10*velec*dsw;
 
             fscal            = felec;
 
@@ -1196,7 +1209,8 @@ nb_kernel_ElecEwSw_VdwNone_GeomW3W3_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv11*velec*dsw;
 
             fscal            = felec;
 
@@ -1243,7 +1257,8 @@ nb_kernel_ElecEwSw_VdwNone_GeomW3W3_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv12*velec*dsw;
 
             fscal            = felec;
 
@@ -1290,7 +1305,8 @@ nb_kernel_ElecEwSw_VdwNone_GeomW3W3_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv20*velec*dsw;
 
             fscal            = felec;
 
@@ -1337,7 +1353,8 @@ nb_kernel_ElecEwSw_VdwNone_GeomW3W3_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv21*velec*dsw;
 
             fscal            = felec;
 
@@ -1384,7 +1401,8 @@ nb_kernel_ElecEwSw_VdwNone_GeomW3W3_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv22*velec*dsw;
 
             fscal            = felec;
 
index 48f7d369bb5dd0e464d95b1fe241c00869ff06ba..e366295f002a60bf8526841e31bf73f6f86f4522 100644 (file)
@@ -223,8 +223,9 @@ nb_kernel_ElecEwSw_VdwNone_GeomW4P1_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv10*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -276,8 +277,9 @@ nb_kernel_ElecEwSw_VdwNone_GeomW4P1_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv20*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -329,8 +331,9 @@ nb_kernel_ElecEwSw_VdwNone_GeomW4P1_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv30*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -452,7 +455,7 @@ nb_kernel_ElecEwSw_VdwNone_GeomW4P1_F_c
     charge           = mdatoms->chargeA;
 
     sh_ewald         = fr->ic->sh_ewald;
-    ewtab            = fr->ic->tabq_coul_F;
+    ewtab            = fr->ic->tabq_coul_FDV0;
     ewtabscale       = fr->ic->tabq_scale;
     ewtabhalfspace   = 0.5/ewtabscale;
 
@@ -586,7 +589,8 @@ nb_kernel_ElecEwSw_VdwNone_GeomW4P1_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv10*velec*dsw;
 
             fscal            = felec;
 
@@ -635,7 +639,8 @@ nb_kernel_ElecEwSw_VdwNone_GeomW4P1_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv20*velec*dsw;
 
             fscal            = felec;
 
@@ -684,7 +689,8 @@ nb_kernel_ElecEwSw_VdwNone_GeomW4P1_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv30*velec*dsw;
 
             fscal            = felec;
 
index 6039b2edcbe59c39232f055503de52328062e6a1..9aaf4b804f11ede742daa275c6406c941bc6905d 100644 (file)
@@ -283,8 +283,9 @@ nb_kernel_ElecEwSw_VdwNone_GeomW4W4_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv11*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -334,8 +335,9 @@ nb_kernel_ElecEwSw_VdwNone_GeomW4W4_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv12*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -385,8 +387,9 @@ nb_kernel_ElecEwSw_VdwNone_GeomW4W4_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv13*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -436,8 +439,9 @@ nb_kernel_ElecEwSw_VdwNone_GeomW4W4_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv21*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -487,8 +491,9 @@ nb_kernel_ElecEwSw_VdwNone_GeomW4W4_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv22*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -538,8 +543,9 @@ nb_kernel_ElecEwSw_VdwNone_GeomW4W4_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv23*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -589,8 +595,9 @@ nb_kernel_ElecEwSw_VdwNone_GeomW4W4_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv31*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -640,8 +647,9 @@ nb_kernel_ElecEwSw_VdwNone_GeomW4W4_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv32*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -691,8 +699,9 @@ nb_kernel_ElecEwSw_VdwNone_GeomW4W4_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv33*velec*dsw;
             velec           *= sw;
-            felec            = felec*sw + velec*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -824,7 +833,7 @@ nb_kernel_ElecEwSw_VdwNone_GeomW4W4_F_c
     charge           = mdatoms->chargeA;
 
     sh_ewald         = fr->ic->sh_ewald;
-    ewtab            = fr->ic->tabq_coul_F;
+    ewtab            = fr->ic->tabq_coul_FDV0;
     ewtabscale       = fr->ic->tabq_scale;
     ewtabhalfspace   = 0.5/ewtabscale;
 
@@ -1008,7 +1017,8 @@ nb_kernel_ElecEwSw_VdwNone_GeomW4W4_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv11*velec*dsw;
 
             fscal            = felec;
 
@@ -1055,7 +1065,8 @@ nb_kernel_ElecEwSw_VdwNone_GeomW4W4_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv12*velec*dsw;
 
             fscal            = felec;
 
@@ -1102,7 +1113,8 @@ nb_kernel_ElecEwSw_VdwNone_GeomW4W4_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv13*velec*dsw;
 
             fscal            = felec;
 
@@ -1149,7 +1161,8 @@ nb_kernel_ElecEwSw_VdwNone_GeomW4W4_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv21*velec*dsw;
 
             fscal            = felec;
 
@@ -1196,7 +1209,8 @@ nb_kernel_ElecEwSw_VdwNone_GeomW4W4_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv22*velec*dsw;
 
             fscal            = felec;
 
@@ -1243,7 +1257,8 @@ nb_kernel_ElecEwSw_VdwNone_GeomW4W4_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv23*velec*dsw;
 
             fscal            = felec;
 
@@ -1290,7 +1305,8 @@ nb_kernel_ElecEwSw_VdwNone_GeomW4W4_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv31*velec*dsw;
 
             fscal            = felec;
 
@@ -1337,7 +1353,8 @@ nb_kernel_ElecEwSw_VdwNone_GeomW4W4_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv32*velec*dsw;
 
             fscal            = felec;
 
@@ -1384,7 +1401,8 @@ nb_kernel_ElecEwSw_VdwNone_GeomW4W4_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            felec            = felec*sw + velec*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            felec            = felec*sw - rinv33*velec*dsw;
 
             fscal            = felec;
 
index d5c66d2000a90257dc60b555a8b16227f1bf6222..e3c51cf0a01d677a47b0f0597a569b7f35762729 100644 (file)
@@ -183,8 +183,9 @@ nb_kernel_ElecNone_VdwBhamSw_GeomP1P1_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            fvdw             = fvdw*sw - rinv00*vvdw*dsw;
             vvdw            *= sw;
-            fvdw             = fvdw*sw + vvdw*dsw;
 
             /* Update potential sums from outer loop */
             vvdwsum         += vvdw;
@@ -388,7 +389,8 @@ nb_kernel_ElecNone_VdwBhamSw_GeomP1P1_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            fvdw             = fvdw*sw + vvdw*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            fvdw             = fvdw*sw - rinv00*vvdw*dsw;
 
             fscal            = fvdw;
 
index 0fc2732055e09da9d2b08f8b79d990d1bd059e8e..752e34d113495daa3ee454044e5214354f1d589c 100644 (file)
@@ -182,8 +182,9 @@ nb_kernel_ElecNone_VdwLJSw_GeomP1P1_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            fvdw             = fvdw*sw - rinv00*vvdw*dsw;
             vvdw            *= sw;
-            fvdw             = fvdw*sw + vvdw*dsw;
 
             /* Update potential sums from outer loop */
             vvdwsum         += vvdw;
@@ -386,7 +387,8 @@ nb_kernel_ElecNone_VdwLJSw_GeomP1P1_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            fvdw             = fvdw*sw + vvdw*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            fvdw             = fvdw*sw - rinv00*vvdw*dsw;
 
             fscal            = fvdw;
 
index d0f70706f1fce2b7dcd27786a3fb18a413388270..f2e61892c74550ae30e8746d7fdf05b1266c7686 100644 (file)
@@ -199,8 +199,9 @@ nb_kernel_ElecRFCut_VdwBhamSw_GeomP1P1_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            fvdw             = fvdw*sw - rinv00*vvdw*dsw;
             vvdw            *= sw;
-            fvdw             = fvdw*sw + vvdw*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -420,7 +421,8 @@ nb_kernel_ElecRFCut_VdwBhamSw_GeomP1P1_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            fvdw             = fvdw*sw + vvdw*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            fvdw             = fvdw*sw - rinv00*vvdw*dsw;
 
             fscal            = felec+fvdw;
 
index d8180061bc3e5175a559b4214650fcef5fdb50ca..dc0fddcfa5e900b46c46b0adef18226f66cb53dc 100644 (file)
@@ -232,8 +232,9 @@ nb_kernel_ElecRFCut_VdwBhamSw_GeomW3P1_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            fvdw             = fvdw*sw - rinv00*vvdw*dsw;
             vvdw            *= sw;
-            fvdw             = fvdw*sw + vvdw*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -564,7 +565,8 @@ nb_kernel_ElecRFCut_VdwBhamSw_GeomW3P1_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            fvdw             = fvdw*sw + vvdw*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            fvdw             = fvdw*sw - rinv00*vvdw*dsw;
 
             fscal            = felec+fvdw;
 
index 891995b009fee4646caf3b197e6d964c6be791e8..eb8408153bf987521778c14b573bc2d19df201e6 100644 (file)
@@ -292,8 +292,9 @@ nb_kernel_ElecRFCut_VdwBhamSw_GeomW3W3_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            fvdw             = fvdw*sw - rinv00*vvdw*dsw;
             vvdw            *= sw;
-            fvdw             = fvdw*sw + vvdw*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -866,7 +867,8 @@ nb_kernel_ElecRFCut_VdwBhamSw_GeomW3W3_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            fvdw             = fvdw*sw + vvdw*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            fvdw             = fvdw*sw - rinv00*vvdw*dsw;
 
             fscal            = felec+fvdw;
 
index bee93e5054f78e383daf67e37635fef9eb7e8002..6857a6d5988ad910ce5d21fc19663c092c9240e1 100644 (file)
@@ -242,8 +242,9 @@ nb_kernel_ElecRFCut_VdwBhamSw_GeomW4P1_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            fvdw             = fvdw*sw - rinv00*vvdw*dsw;
             vvdw            *= sw;
-            fvdw             = fvdw*sw + vvdw*dsw;
 
             /* Update potential sums from outer loop */
             vvdwsum         += vvdw;
@@ -623,7 +624,8 @@ nb_kernel_ElecRFCut_VdwBhamSw_GeomW4P1_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            fvdw             = fvdw*sw + vvdw*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            fvdw             = fvdw*sw - rinv00*vvdw*dsw;
 
             fscal            = fvdw;
 
index a5d8511e02eb14873eeb99a69b17bb1578bc15d5..f96242365720731cfa052a463221a74ec84716e2 100644 (file)
@@ -308,8 +308,9 @@ nb_kernel_ElecRFCut_VdwBhamSw_GeomW4W4_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            fvdw             = fvdw*sw - rinv00*vvdw*dsw;
             vvdw            *= sw;
-            fvdw             = fvdw*sw + vvdw*dsw;
 
             /* Update potential sums from outer loop */
             vvdwsum         += vvdw;
@@ -935,7 +936,8 @@ nb_kernel_ElecRFCut_VdwBhamSw_GeomW4W4_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            fvdw             = fvdw*sw + vvdw*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            fvdw             = fvdw*sw - rinv00*vvdw*dsw;
 
             fscal            = fvdw;
 
index fbbf0bf9d302e93d0eebb5fac062e4f8af9bb4e2..23d17b41ada0562b6500b150d1e3989d18693c1f 100644 (file)
@@ -198,8 +198,9 @@ nb_kernel_ElecRFCut_VdwLJSw_GeomP1P1_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            fvdw             = fvdw*sw - rinv00*vvdw*dsw;
             vvdw            *= sw;
-            fvdw             = fvdw*sw + vvdw*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -418,7 +419,8 @@ nb_kernel_ElecRFCut_VdwLJSw_GeomP1P1_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            fvdw             = fvdw*sw + vvdw*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            fvdw             = fvdw*sw - rinv00*vvdw*dsw;
 
             fscal            = felec+fvdw;
 
index 653589ae219b7cd8fd733c01860ea56c05bb3b69..ba5456d9e07c815917c34c7c92d362af87a7aeed 100644 (file)
@@ -231,8 +231,9 @@ nb_kernel_ElecRFCut_VdwLJSw_GeomW3P1_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            fvdw             = fvdw*sw - rinv00*vvdw*dsw;
             vvdw            *= sw;
-            fvdw             = fvdw*sw + vvdw*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -562,7 +563,8 @@ nb_kernel_ElecRFCut_VdwLJSw_GeomW3P1_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            fvdw             = fvdw*sw + vvdw*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            fvdw             = fvdw*sw - rinv00*vvdw*dsw;
 
             fscal            = felec+fvdw;
 
index 09f9e6e273e09e4ef9b14c28c30e4149de5b1001..8900cbc2b71718c158deba94a92feb0e3402ca86 100644 (file)
@@ -291,8 +291,9 @@ nb_kernel_ElecRFCut_VdwLJSw_GeomW3W3_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            fvdw             = fvdw*sw - rinv00*vvdw*dsw;
             vvdw            *= sw;
-            fvdw             = fvdw*sw + vvdw*dsw;
 
             /* Update potential sums from outer loop */
             velecsum        += velec;
@@ -864,7 +865,8 @@ nb_kernel_ElecRFCut_VdwLJSw_GeomW3W3_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            fvdw             = fvdw*sw + vvdw*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            fvdw             = fvdw*sw - rinv00*vvdw*dsw;
 
             fscal            = felec+fvdw;
 
index ad6d1b64a266dd2ae18f6cfbd0df20a070e198cb..c8d861e7d8267e31ad25f3a087987de9c80c0af5 100644 (file)
@@ -241,8 +241,9 @@ nb_kernel_ElecRFCut_VdwLJSw_GeomW4P1_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            fvdw             = fvdw*sw - rinv00*vvdw*dsw;
             vvdw            *= sw;
-            fvdw             = fvdw*sw + vvdw*dsw;
 
             /* Update potential sums from outer loop */
             vvdwsum         += vvdw;
@@ -621,7 +622,8 @@ nb_kernel_ElecRFCut_VdwLJSw_GeomW4P1_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            fvdw             = fvdw*sw + vvdw*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            fvdw             = fvdw*sw - rinv00*vvdw*dsw;
 
             fscal            = fvdw;
 
index 3262295c014a1f00a1581436006628448c3af525..8aed7696310e20333a8ba199dd86fe47cbbc2df3 100644 (file)
@@ -307,8 +307,9 @@ nb_kernel_ElecRFCut_VdwLJSw_GeomW4W4_VF_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            fvdw             = fvdw*sw - rinv00*vvdw*dsw;
             vvdw            *= sw;
-            fvdw             = fvdw*sw + vvdw*dsw;
 
             /* Update potential sums from outer loop */
             vvdwsum         += vvdw;
@@ -933,7 +934,8 @@ nb_kernel_ElecRFCut_VdwLJSw_GeomW4W4_F_c
             dsw              = d2*(swF2+d*(swF3+d*swF4));
 
             /* Evaluate switch function */
-            fvdw             = fvdw*sw + vvdw*dsw;
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
+            fvdw             = fvdw*sw - rinv00*vvdw*dsw;
 
             fscal            = fvdw;
 
index 275d0e6837c3bc256c433cadf74ea2aff33d6c52..b7cf50763db6e7ffb6b7745d0cbf70585d932cc3 100644 (file)
@@ -175,7 +175,7 @@ void
 
     /* #if 'Ewald' in KERNEL_ELEC */
     sh_ewald         = fr->ic->sh_ewald;
-    /*     #if KERNEL_VF=='Force'  */
+    /*     #if KERNEL_VF=='Force' and KERNEL_MOD_ELEC!='PotentialSwitch' */
     ewtab            = fr->ic->tabq_coul_F;
     ewtabscale       = fr->ic->tabq_scale;
     ewtabhalfspace   = 0.5/ewtabscale;
@@ -682,24 +682,25 @@ void
             /*         #endif */
 
             /* Evaluate switch function */
-            /*         #if 'Potential' in KERNEL_VF */
+            /*         #if 'Force' in KERNEL_VF */
+            /* fscal'=f'/r=-(v*sw)'/r=-(v'*sw+v*dsw)/r=-v'*sw/r-v*dsw/r=fscal*sw-v*dsw/r */
             /*             #if 'electrostatics' in INTERACTION_FLAGS[I][J] and KERNEL_MOD_ELEC=='PotentialSwitch' */
-            velec           *= sw;
-            /*                 #define INNERFLOPS INNERFLOPS+1 */
+            felec            = felec*sw - rinv{I}{J}*velec*dsw;
+            /*                 #define INNERFLOPS INNERFLOPS+3 */
             /*             #endif */
             /*             #if 'vdw' in INTERACTION_FLAGS[I][J] and KERNEL_MOD_VDW=='PotentialSwitch' */
-            vvdw            *= sw;
-            /*                 #define INNERFLOPS INNERFLOPS+1 */
+            fvdw             = fvdw*sw - rinv{I}{J}*vvdw*dsw;
+            /*                 #define INNERFLOPS INNERFLOPS+3 */
             /*             #endif */
             /*         #endif */
-            /*         #if 'Force' in KERNEL_VF */
+            /*         #if 'Potential' in KERNEL_VF */
             /*             #if 'electrostatics' in INTERACTION_FLAGS[I][J] and KERNEL_MOD_ELEC=='PotentialSwitch' */
-            felec            = felec*sw + velec*dsw;
-            /*                 #define INNERFLOPS INNERFLOPS+3 */
+            velec           *= sw;
+            /*                 #define INNERFLOPS INNERFLOPS+1 */
             /*             #endif */
             /*             #if 'vdw' in INTERACTION_FLAGS[I][J] and KERNEL_MOD_VDW=='PotentialSwitch' */
-            fvdw             = fvdw*sw + vvdw*dsw;
-            /*                 #define INNERFLOPS INNERFLOPS+3 */
+            vvdw            *= sw;
+            /*                 #define INNERFLOPS INNERFLOPS+1 */
             /*             #endif */
             /*         #endif */
             /*     #endif */