From 12e9ea41a9cee3fe2ea844044d1d47bb30759b97 Mon Sep 17 00:00:00 2001 From: Berk Hess Date: Thu, 14 Sep 2017 16:34:35 +0200 Subject: [PATCH] Fix nbnxn SIMD 2xNN PME tabulated kernel This kernel produced completety incorrect forces and slightly incorrect energies. This kernel was not (yet) selected by default in a 2016 release. Fixes #2247 Change-Id: I297ad257932eaabe6cf84b17f34ad555921f48b0 --- .../nbnxn_kernels/simd_2xnn/nbnxn_kernel_simd_2xnn_inner.h | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/gromacs/mdlib/nbnxn_kernels/simd_2xnn/nbnxn_kernel_simd_2xnn_inner.h b/src/gromacs/mdlib/nbnxn_kernels/simd_2xnn/nbnxn_kernel_simd_2xnn_inner.h index ac30b0b0ef..a680aff199 100644 --- a/src/gromacs/mdlib/nbnxn_kernels/simd_2xnn/nbnxn_kernel_simd_2xnn_inner.h +++ b/src/gromacs/mdlib/nbnxn_kernels/simd_2xnn/nbnxn_kernel_simd_2xnn_inner.h @@ -430,6 +430,8 @@ #else gatherLoadUBySimdIntTranspose<1>(tab_coul_F, ti_S0, &ctab0_S0, &ctab1_S0); gatherLoadUBySimdIntTranspose<1>(tab_coul_F, ti_S2, &ctab0_S2, &ctab1_S2); + ctab1_S0 = ctab1_S0 - ctab0_S0; + ctab1_S2 = ctab1_S2 - ctab0_S2; #endif #else #ifdef TAB_FDV0 @@ -446,12 +448,12 @@ #endif fsub_S0 = fma(frac_S0, ctab1_S0, ctab0_S0); fsub_S2 = fma(frac_S2, ctab1_S2, ctab0_S2); - frcoul_S0 = qq_S0, fnma(fsub_S0, r_S0, rinv_ex_S0); - frcoul_S2 = qq_S2, fnma(fsub_S2, r_S2, rinv_ex_S2); + frcoul_S0 = qq_S0 * fnma(fsub_S0, r_S0, rinv_ex_S0); + frcoul_S2 = qq_S2 * fnma(fsub_S2, r_S2, rinv_ex_S2); #ifdef CALC_ENERGIES - vc_sub_S0 = ctabv_S0 + (mhalfsp_S * frac_S0 * (ctab0_S0 + fsub_S0)); - vc_sub_S2 = ctabv_S2 + (mhalfsp_S * frac_S2 * (ctab0_S2 + fsub_S2)); + vc_sub_S0 = fma((mhalfsp_S * frac_S0), (ctab0_S0 + fsub_S0), ctabv_S0); + vc_sub_S2 = fma((mhalfsp_S * frac_S2), (ctab0_S2 + fsub_S2), ctabv_S2); #endif #endif /* CALC_COUL_TAB */ @@ -469,6 +471,7 @@ vcoul_S0 = qq_S0 * (rinv_ex_S0 - vc_sub_S0); vcoul_S2 = qq_S2 * (rinv_ex_S2 - vc_sub_S2); + #endif #ifdef CALC_ENERGIES -- 2.11.4.GIT