From ae6c8ee498c081aa7372c2f6ec77a770ed5cf08a Mon Sep 17 00:00:00 2001
From: Massimiliano Bonomi <massimiliano.bonomi@gmail.com>
Date: Sun, 18 Mar 2018 14:17:25 +0100
Subject: [PATCH] fix Q switch function derivatives for large distances

---
 src/tools/SwitchingFunction.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/tools/SwitchingFunction.cpp b/src/tools/SwitchingFunction.cpp
index 3704e7acd..0428be4f2 100644
--- a/src/tools/SwitchingFunction.cpp
+++ b/src/tools/SwitchingFunction.cpp
@@ -381,8 +381,9 @@ double SwitchingFunction::calculate(double distance,double&dfunc)const {
     } else if(type==nativeq) {
       double rdist2 = beta*(distance - lambda * ref);
       double exprdist=exp(rdist2);
+      double exprmdist=1.0/exprdist;
       result=1./(1.+exprdist);
-      dfunc=-exprdist/(1.+exprdist)/(1.+exprdist);
+      dfunc=-1.0/(exprmdist+1.0)/(1.+exprdist);
     } else if(type==gaussian) {
       result=exp(-0.5*rdist*rdist);
       dfunc=-rdist*result;
-- 
GitLab