From 93dba70e116cb2b5dd1c60968ec82f04cfe1bb1b Mon Sep 17 00:00:00 2001
From: Lionel GUEZ <guez@lmd.ens.fr>
Date: Sat, 13 Mar 2021 00:36:58 +0100
Subject: [PATCH] New script to loop on `inst_eddies`

New script to loop on detection of instantaneous eddies.
---
 Inst_eddies/inst_eddies.py | 83 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 83 insertions(+)
 create mode 100755 Inst_eddies/inst_eddies.py

diff --git a/Inst_eddies/inst_eddies.py b/Inst_eddies/inst_eddies.py
new file mode 100755
index 00000000..d8d3090a
--- /dev/null
+++ b/Inst_eddies/inst_eddies.py
@@ -0,0 +1,83 @@
+#!/usr/bin/env python3
+
+import argparse
+import datetime
+import shutil
+import nco
+import os
+from os import path
+import subprocess
+import shapefile
+
+parser = argparse.ArgumentParser()
+parser.add_argument("first_file")
+parser.add_argument("-l", "--last_date", help = "%%Y-%%m-%%d")
+parser.add_argument("-b", "--bbox", nargs=4, type = float,
+                    metavar = ("xmin", "xmax", "ymin", "ymax"))
+args = parser.parse_args()
+
+if os.access("SHPC_all_dates", os.F_OK): shutil.rmtree("SHPC_all_dates")
+dirname, basename = path.split(args.first_file)
+my_date = datetime.datetime.strptime(basename,
+                                     "dt_global_allsat_phy_l4_%Y%m%d"
+                                     "_20190101.nc").date()
+nc_file = args.first_file
+nco_instance = nco.Nco()
+
+if args.last_date:
+    last_date = datetime.datetime.strptime(args.last_date, "%Y-%m-%d").date()
+else:
+    last_date = my_date
+
+while True:
+    if os.access(nc_file, os.F_OK):
+        if args.bbox:
+            xmin, xmax, ymin, ymax = args.bbox
+            nco_instance.ncks(nc_file, output = "cropped.nc",
+                              options = [f"--dimension=longitude,{xmin},{xmax}",
+                                         f"--dimension=latitude,{ymin},{ymax}"])
+            nc_file = "cropped.nc"
+            
+        nco_instance.ncpdq(nc_file, output = "unpacked.nc",
+                           options = ["--unpack"])
+        nc_file = "unpacked.nc"
+        os.symlink(nc_file, "h.nc")
+        os.symlink(nc_file, "uv.nc")
+        os.mkdir("SHP_triplet")
+        
+        with open("main_nml.txt") as nml_file:
+            subprocess.run("inst_eddies", stdin = nml_file, check = True)
+
+        os.remove("h.nc")
+        os.remove("uv.nc")
+    else:
+        print("Missing file:", nc_file)
+
+    if os.access("SHPC_all_dates", os.F_OK):
+        if os.access("SHP_triplet", os.F_OK):
+            for filename in ["extremum", "max_speed_contour",
+                             "outermost_contour"]:
+                from_file = path.join("SHP_triplet", filename)
+                to_file = path.join("SHPC_all_dates", filename)
+
+                for command in ["dbfcat", "shpcat"]:
+                    subprocess.run([command, from_file, to_file], check = True)
+        
+            shutil.rmtree("SHP_triplet")
+            
+        with open("SHPC_all_dates/ishape_last.txt", "a") as \
+             ishape_last, shapefile.Reader("SHPC_all_dates/extremum") \
+             as shpr:
+            n_shapes = len(shpr)
+            ishape_last.write(str(n_shapes - 1) + "\n")
+    else:
+        if os.access("SHP_triplet", os.F_OK):
+            os.rename("SHP_triplet", "SHPC_all_dates")
+
+    my_date += datetime.timedelta(1)
+    if my_date > last_date: break
+    basename = my_date.strftime("dt_global_allsat_phy_l4_%Y%m%d_20190101.nc")
+    nc_file = path.join(dirname, basename)
+
+os.remove("unpacked.nc")
+os.remove("cropped.nc")
-- 
GitLab