From 2f0dcd3a0d932da3130a5e7a5817cd38f14a772a Mon Sep 17 00:00:00 2001
From: Delaigue Olivier <olivier.delaigue@irstea.priv>
Date: Mon, 2 Dec 2019 15:46:14 +0100
Subject: [PATCH] v1.3.2.67 SPEED: hyperbolic tangent function definition
 modified in frun_GR* Fortran codes #21

---
 DESCRIPTION     | 2 +-
 NEWS.md         | 2 +-
 src/frun_GR2M.f | 8 +++++---
 src/frun_GR4H.f | 8 +++++---
 src/frun_GR4J.f | 8 +++++---
 src/frun_GR5J.f | 8 +++++---
 src/frun_GR6J.f | 8 +++++---
 7 files changed, 27 insertions(+), 17 deletions(-)

diff --git a/DESCRIPTION b/DESCRIPTION
index 90365e6e..b5589b4e 100644
--- a/DESCRIPTION
+++ b/DESCRIPTION
@@ -1,7 +1,7 @@
 Package: airGR
 Type: Package
 Title: Suite of GR Hydrological Models for Precipitation-Runoff Modelling
-Version: 1.3.2.66
+Version: 1.3.2.67
 Date: 2019-12-02
 Authors@R: c(
   person("Laurent", "Coron", role = c("aut", "trl"), comment = c(ORCID = "0000-0002-1503-6204")),
diff --git a/NEWS.md b/NEWS.md
index cf115c16..e9575728 100644
--- a/NEWS.md
+++ b/NEWS.md
@@ -2,7 +2,7 @@
 
 
 
-### 1.3.2.66 Release Notes (2019-12-02)
+### 7 Release Notes (2019-12-02)
 
 
 #### New features
diff --git a/src/frun_GR2M.f b/src/frun_GR2M.f
index c3229b59..e2317c9f 100644
--- a/src/frun_GR2M.f
+++ b/src/frun_GR2M.f
@@ -147,7 +147,7 @@
       integer, parameter :: NParam=2,NMISC=30
       doubleprecision :: WS,tanHyp,S1,S2
       doubleprecision :: P1,P2,P3,R1,R2,AE,EXCH
-      doubleprecision :: TWS, Sr ! speed-up
+      doubleprecision :: expWS, TWS, Sr ! speed-up
 
       !! dummies
       ! in
@@ -164,7 +164,8 @@
       IF(WS.GT.13.) WS=13.
 
       ! speed-up
-      TWS = tanHyp(WS)
+      expWS = exp(2.*WS)
+      TWS = (expWS - 1.)/(expWS + 1.)
       S1=(St(1)+Param(1)*TWS)/(1.+St(1)/Param(1)*TWS)                 
       ! S1=(X(1)+Param(1)*tanHyp(WS))/(1.+X(1)/Param(1)*tanHyp(WS))                 
       ! end speed-up
@@ -174,7 +175,8 @@
       IF(WS.GT.13.) WS=13.
 
       ! speed-up
-      TWS = tanHyp(WS)
+      expWS = exp(2.*WS)
+      TWS = (expWS - 1.)/(expWS + 1.)
       S2=S1*(1.-TWS)/(1.+(1.-S1/Param(1))*TWS)  
       ! S2=S1*(1.-tanHyp(WS))/(1.+(1.-S1/Param(1))*tanHyp(WS))  
       ! end speed-up
diff --git a/src/frun_GR4H.f b/src/frun_GR4H.f
index 68fdf04c..e4cf854c 100644
--- a/src/frun_GR4H.f
+++ b/src/frun_GR4H.f
@@ -180,7 +180,7 @@
       integer :: K
       doubleprecision, parameter :: B=0.9
       doubleprecision, parameter :: stored_val=759.69140625
-      doubleprecision :: TWS, Sr, Rr ! speed-up
+      doubleprecision :: expWS, TWS, Sr, Rr ! speed-up
 
       !! dummies
       ! in
@@ -207,7 +207,8 @@
         IF(WS.GT.13.) WS=13.
       
       ! speed-up
-        TWS = tanHyp(WS)
+        expWS = exp(2.*WS)
+        TWS = (expWS - 1.)/(expWS + 1.)
         Sr = St(1)/A
         ER=St(1)*(2.-Sr)*TWS/(1.+(1.-Sr)*TWS)
       ! ER=X(2)*(2.-X(2)/A)*tanHyp(WS)/(1.+(1.-X(2)/A)*tanHyp(WS))
@@ -224,7 +225,8 @@
         IF(WS.GT.13.)WS=13.
       
       ! speed-up
-        TWS = tanHyp(WS)
+        expWS = exp(2.*WS)
+        TWS = (expWS - 1.)/(expWS + 1.)
         Sr = St(1)/A
         PS=A*(1.-Sr*Sr)*TWS/(1.+Sr*TWS)
       ! PS=A*(1.-(X(2)/A)**2.)*tanHyp(WS)/(1.+X(2)/A*tanHyp(WS))
diff --git a/src/frun_GR4J.f b/src/frun_GR4J.f
index 94d22413..f4484dba 100644
--- a/src/frun_GR4J.f
+++ b/src/frun_GR4J.f
@@ -180,7 +180,7 @@
       integer :: K
       doubleprecision, parameter :: B=0.9
       doubleprecision, parameter :: stored_val=25.62890625
-      doubleprecision :: TWS, Sr, Rr ! speed-up
+      doubleprecision :: expWS, TWS, Sr, Rr ! speed-up
 
       !! dummies
       ! in
@@ -206,7 +206,8 @@
         WS=EN/A
         IF(WS.GT.13.) WS=13.
         ! speed-up
-        TWS = tanHyp(WS)
+        expWS = exp(2.*WS)
+        TWS = (expWS - 1.)/(expWS + 1.)
         Sr = St(1)/A
         ER=St(1)*(2.-Sr)*TWS/(1.+(1.-Sr)*TWS)
         ! ER=X(2)*(2.-X(2)/A)*tanHyp(WS)/(1.+(1.-X(2)/A)*tanHyp(WS))
@@ -222,7 +223,8 @@
         WS=PN/A
         IF(WS.GT.13.) WS=13.
         ! speed-up
-        TWS = tanHyp(WS)
+        expWS = exp(2.*WS)
+        TWS = (expWS - 1.)/(expWS + 1.)
         Sr = St(1)/A
         PS=A*(1.-Sr*Sr)*TWS/(1.+Sr*TWS)
         ! PS=A*(1.-(X(2)/A)**2.)*tanHyp(WS)/(1.+X(2)/A*tanHyp(WS))
diff --git a/src/frun_GR5J.f b/src/frun_GR5J.f
index 551f730e..ecb8f7fd 100644
--- a/src/frun_GR5J.f
+++ b/src/frun_GR5J.f
@@ -174,7 +174,7 @@
       integer :: K
       doubleprecision, parameter :: B=0.9
       doubleprecision, parameter :: stored_val=25.62890625
-      doubleprecision :: TWS, Sr, Rr ! speed-up
+      doubleprecision :: expWS, TWS, Sr, Rr ! speed-up
 
       !! dummies
       ! in
@@ -198,7 +198,8 @@
         WS=EN/A
         IF(WS.GT.13.) WS=13.
         ! speed-up
-        TWS = tanHyp(WS)
+        expWS = exp(2.*WS)
+        TWS = (expWS - 1.)/(expWS + 1.)
         Sr = St(1)/A
         ER=St(1)*(2.-Sr)*TWS/(1.+(1.-Sr)*TWS)
         ! ER=X(2)*(2.-X(2)/A)*tanHyp(WS)/(1.+(1.-X(2)/A)*tanHyp(WS))
@@ -214,7 +215,8 @@
         WS=PN/A
         IF(WS.GT.13.) WS=13.
         ! speed-up
-        TWS = tanHyp(WS)
+        expWS = exp(2.*WS)
+        TWS = (expWS - 1.)/(expWS + 1.)
         Sr = St(1)/A
         PS=A*(1.-Sr*Sr)*TWS/(1.+Sr*TWS)
         ! PS=A*(1.-(X(2)/A)**2.)*tanHyp(WS)/(1.+X(2)/A*tanHyp(WS))
diff --git a/src/frun_GR6J.f b/src/frun_GR6J.f
index 884afccc..5d3600ac 100644
--- a/src/frun_GR6J.f
+++ b/src/frun_GR6J.f
@@ -185,7 +185,7 @@
       integer :: K
       doubleprecision, parameter :: B=0.9, C=0.4
       doubleprecision, parameter :: stored_val=25.62890625
-      doubleprecision :: TWS, Sr, Rr ! speed-up
+      doubleprecision :: expWS, TWS, Sr, Rr ! speed-up
 
       !! dummies
       ! in
@@ -212,7 +212,8 @@
         IF(WS.GT.13) WS=13.
         
         ! speed-up
-        TWS = tanHyp(WS)
+        expWS = exp(2.*WS)
+        TWS = (expWS - 1.)/(expWS + 1.)
         Sr = St(1)/A
         ER=St(1)*(2.-Sr)*TWS/(1.+(1.-Sr)*TWS)
         ! ER=X(2)*(2.-X(2)/A)*tanHyp(WS)/(1.+(1.-X(2)/A)*tanHyp(WS))
@@ -230,7 +231,8 @@
         IF(WS.GT.13) WS=13.
         
         ! speed-up
-        TWS = tanHyp(WS)
+        expWS = exp(2.*WS)
+        TWS = (expWS - 1.)/(expWS + 1.)
         Sr = St(1)/A
         PS=A*(1.-Sr*Sr)*TWS/(1.+Sr*TWS)
         ! PS=A*(1.-(X(2)/A)**2.)*tanHyp(WS)/(1.+X(2)/A*tanHyp(WS))
-- 
GitLab