From 8ce9ad6c48bbfe810250335a72110463e5d381c9 Mon Sep 17 00:00:00 2001
From: sbiri <sbiri@noc.ac.uk>
Date: Tue, 25 Aug 2020 08:17:38 +0100
Subject: [PATCH] Update get_init.py, flux_subs.py, AirSeaFluxCode.py files

---
 AirSeaFluxCode.py |  2 +-
 flux_subs.py      | 11 ++++++-----
 get_init.py       | 12 +++++++++---
 3 files changed, 16 insertions(+), 9 deletions(-)

diff --git a/AirSeaFluxCode.py b/AirSeaFluxCode.py
index 038ed20..bcc7e39 100644
--- a/AirSeaFluxCode.py
+++ b/AirSeaFluxCode.py
@@ -304,7 +304,7 @@ def AirSeaFluxCode(spd, T, SST, lat=None, hum=None, P=None,
             ii = False
         else:
             ii = True
-    itera = np.where(itera > n, -1, itera)
+    itera[ind] = -1
     logging.info('method %s | # of iterations:%s', meth, it)
     logging.info('method %s | # of points that did not converge :%s', meth,
                   ind[0].size)
diff --git a/flux_subs.py b/flux_subs.py
index 8e1c57c..d69ec4b 100755
--- a/flux_subs.py
+++ b/flux_subs.py
@@ -42,7 +42,8 @@ def cdn_calc(u10n, Ta, Tp, lat, meth="S80"):
                        (0.60 + 0.070*u10n)*0.001, (0.61+0.567/u10n)*0.001))
     elif (meth == "LY04"):
         cdn = np.where(u10n >= 0.5,
-                       (0.142+(2.7/u10n)+(u10n/13.09))*0.001, np.nan)
+                       (0.142+(2.7/u10n)+(u10n/13.09))*0.001,
+                       (0.142+(2.7/0.5)+(0.5/13.09))*0.001)
     else:
         print("unknown method cdn: "+meth)
     return cdn
@@ -86,7 +87,7 @@ def cdn_from_roughness(u10n, Ta, Tp, lat, meth="S88"):
             zo = 0.013*np.power(usr, 2)/g+0.11*visc_air(Ta)/usr
         elif (meth == "C30"):
             a = 0.011*np.ones(Ta.shape)
-            a = np.where(u10n > 10, 0.011+(u10n-10)/(18-10)*(0.018-0.011),
+            a = np.where(u10n > 10, 0.011+(u10n-10)*(0.018-0.011)/(18-10),
                          np.where(u10n > 18, 0.018, a))
             zo = a*np.power(usr, 2)/g+0.11*visc_air(Ta)/usr
         elif (meth == "C35"):
@@ -688,8 +689,8 @@ def get_L(L, lat, usr, tsr, qsr, t10n, tv10n, qair, h_in, T, Ta, th, tv, sst,
     monob : float
         Monin-Obukhov length from previous iteration step (m)
     meth : str
-        bulk parameterisation method option: "S80", "S88", "LP82", "YT96", "UA",
-        "LY04", "C30", "C35", "C40", "ERA5"
+        bulk parameterisation method option: "S80", "S88", "LP82", "YT96",
+        "UA", "LY04", "C30", "C35", "C40", "ERA5"
 
     Returns
     -------
@@ -704,7 +705,7 @@ def get_L(L, lat, usr, tsr, qsr, t10n, tv10n, qair, h_in, T, Ta, th, tv, sst,
         tsrv = tsr+0.61*t10n*qsr
         monob = ((tv10n*np.power(usr, 2))/(g*kappa*tsrv))
         monob = np.where(np.fabs(monob) < 1, np.where(monob < 0, -1, 1), monob)
-     elif (L == "ERA5"):
+    elif (L == "ERA5"):
         tsrv = tsr+0.61*t10n*qsr
         Rb = ((g*h_in[0]*((2*dt)/(Ta+sst-g*h_in[0])+0.61*dq)) /
               np.power(wind, 2))
diff --git a/get_init.py b/get_init.py
index 5d1aefa..c5a346d 100644
--- a/get_init.py
+++ b/get_init.py
@@ -76,6 +76,10 @@ def get_init(spd, T, SST, lat, P, Rl, Rs, cskin, gust, L, tol, meth, qmeth):
     if ((type(spd) != np.ndarray) or (type(T) != np.ndarray) or
          (type(SST) != np.ndarray)):
         sys.exit("input type of spd, T and SST should be numpy.ndarray")
+    elif ((spd.dtype not in ['float64', 'float32']) or
+          (T.dtype not in ['float64', 'float32']) or
+          (SST.dtype not in ['float64', 'float32'])):
+        sys.exit("input dtype of spd, T and SST should be float")
     # if input values are nan break
     if meth not in ["S80", "S88", "LP82", "YT96", "UA", "LY04", "C30", "C35",
                     "C40","ERA5"]:
@@ -111,14 +115,16 @@ def get_init(spd, T, SST, lat, P, Rl, Rs, cskin, gust, L, tol, meth, qmeth):
         gust = [1, 1, 1000]
     elif np.all(gust == None):
         gust = [1, 1.2, 800]
+    elif ((np.size(gust) < 3) and (gust == 0)):
+        gust = [0, 0, 0]
     elif (np.size(gust) < 3):
         sys.exit("gust input must be a 3x1 array")
     if (L not in [None, "S80", "ERA5"]):
         sys.exit("L input must be either None, 0, 1, 2 or 3")
     if ((L == None) and (meth == "S80" or meth == "S88" or meth == "LP82"
-                              or meth == "YT96" or meth == "LY04" or
-                              meth == "UA" or meth == "C30" or meth == "C35"
-                              or meth == "C40")):
+                         or meth == "YT96" or meth == "LY04" or
+                         meth == "UA" or meth == "C30" or meth == "C35"
+                         or meth == "C40")):
         L = "S80"
     elif ((L == None) and (meth == "ERA5")):
         L = "ERA5"
-- 
GitLab