From b42bad8904c6190a8adf13aa7c086d47414fb50a Mon Sep 17 00:00:00 2001
From: Anthony <anthony.schrapffer@polytechnique.fr>
Date: Thu, 4 Jun 2020 15:32:02 +0200
Subject: [PATCH] Improving and organizing diagnostic tools

---
 .../{ => Test_and_correction}/HTUs_test_and_corr.pbs |  0
 Diags/{ => Test_and_correction}/Makefile             |  0
 .../Routing_Test_and_Correction.py                   | 12 +++++++-----
 Diags/{ => Test_and_correction}/hydrosuper.f90       | 12 ++++++------
 4 files changed, 13 insertions(+), 11 deletions(-)
 rename Diags/{ => Test_and_correction}/HTUs_test_and_corr.pbs (100%)
 rename Diags/{ => Test_and_correction}/Makefile (100%)
 rename Diags/{ => Test_and_correction}/Routing_Test_and_Correction.py (95%)
 rename Diags/{ => Test_and_correction}/hydrosuper.f90 (96%)

diff --git a/Diags/HTUs_test_and_corr.pbs b/Diags/Test_and_correction/HTUs_test_and_corr.pbs
similarity index 100%
rename from Diags/HTUs_test_and_corr.pbs
rename to Diags/Test_and_correction/HTUs_test_and_corr.pbs
diff --git a/Diags/Makefile b/Diags/Test_and_correction/Makefile
similarity index 100%
rename from Diags/Makefile
rename to Diags/Test_and_correction/Makefile
diff --git a/Diags/Routing_Test_and_Correction.py b/Diags/Test_and_correction/Routing_Test_and_Correction.py
similarity index 95%
rename from Diags/Routing_Test_and_Correction.py
rename to Diags/Test_and_correction/Routing_Test_and_Correction.py
index 29c527e..b24cd10 100644
--- a/Diags/Routing_Test_and_Correction.py
+++ b/Diags/Test_and_correction/Routing_Test_and_Correction.py
@@ -3,6 +3,7 @@
 import sys
 sys.path.append("/home/anthony/Documents/LOCAL/RoutingPP/ROUTING_Analysis_tools/Programs")
 import numpy as np
+import numpy.ma as ma
 from netCDF4 import Dataset as NetCDFFile
 from hydrosuper import check_fetch_order, check_inflows_in_outflow, check_outflow_in_inflows, test_outflow, compute_fetch, compute_inflows
 #
@@ -34,7 +35,8 @@ class routing_test:
       self.nbpt_glo = self.nc.variables["nbpt_glo"][:]
 
       self.num_pt = int(np.nanmax(self.nbpt_glo))
-      self.conv_land_ji = [[np.where(self.nbpt_glo == i)[0][0], np.where(self.nbpt_glo == i)[1][0]] for i in range(1, self.num_pt+1)]
+      a = np.unravel_index(ma.argsort(self.nbpt_glo, axis = None)[:self.num_pt], self.nbpt_glo.shape)
+      self.conv_land_ji = [[a[0][i], a[1][i]] for i in range(a[0].shape[0])]
 
       self.basin_count_land = self.var1d("routenbintobas")
       self.max_bas_count = int(np.max(self.basin_count_land))
@@ -51,17 +53,17 @@ class routing_test:
 
    def var1d(self, varn):
        var = self.nc.variables[varn][:]
-       output = np.array([var[j,i] for j,i in self.conv_land_ji])
+       output = np.array([var[j,i] for j,i in self.conv_land_ji], order = 'F')
        return output
 
    def var2d(self, varn):
        var = self.nc.variables[varn][:]
-       output = np.array([var[:self.max_bas_count,j,i] for j,i in self.conv_land_ji])
+       output = np.array([var[:self.max_bas_count,j,i] for j,i in self.conv_land_ji], order = 'F')
        return output
 
    def var3d(self, varn):
        var = self.nc.variables[varn][:]
-       output = np.zeros((self.num_pt,self.max_bas_count, self.max_innum))
+       output = np.zeros((self.num_pt,self.max_bas_count, self.max_innum), order = 'F')
        for l, ji in enumerate(self.conv_land_ji):
            j,i = ji
            output[l,:,:] = np.transpose(var[:self.max_innum,:self.max_bas_count,j,i])
@@ -103,7 +105,7 @@ class routing_test:
    ####
    def get_var_corr(self, X):
        if X.ndim == 2:
-           A = np.zeros(self.nc.variables["fetch"][:].shape)
+           A = np.zeros(self.nc.variables["fetch"][:].shape, order = 'F')
            for k,ji in enumerate(self.conv_land_ji):
                j,i = ji 
                A[:self.max_bas_count,j,i] = X[k,:]
diff --git a/Diags/hydrosuper.f90 b/Diags/Test_and_correction/hydrosuper.f90
similarity index 96%
rename from Diags/hydrosuper.f90
rename to Diags/Test_and_correction/hydrosuper.f90
index 79453d7..6db2615 100644
--- a/Diags/hydrosuper.f90
+++ b/Diags/Test_and_correction/hydrosuper.f90
@@ -17,7 +17,7 @@ SUBROUTINE check_fetch_order(nbpt, nbbas, fetch, outgrid, outbas, basin_count)
   DO ig=1,nbpt
     ibmx = basin_count(ig)
     DO ib=1,ibmx
-      IF (outbas(ig,ib) .LE. 35) THEN
+      IF (outbas(ig,ib) .LE. nbbas) THEN
         f1 = fetch(ig,ib)
         f2 = fetch(outgrid(ig,ib), outbas(ig,ib))
         IF (f1 .GT. f2) THEN 
@@ -54,7 +54,7 @@ SUBROUTINE check_inflows_in_outflow(nbpt, nbbas, nbin, outgrid, outbas, basin_co
     DO ib=1,ibmx
       og = outgrid(ig,ib)
       ob = outbas(ig,ib)
-      IF ( ob .LE. 35) THEN
+      IF ( ob .LE. nbbas) THEN
         iinmx = innum(og,ob)
         test = 0
         ! Look through the inflows
@@ -150,12 +150,12 @@ SUBROUTINE test_outflow(nbpt, nbbas, outgrid, outbas, basin_count)
       ind = 0
       og = outgrid(ig,ib)
       ob = outbas(ig,ib)
-      DO WHILE (ob .LE. 35)
+      DO WHILE (ob .LE. nbbas)
         it = outgrid(og,ob)
         ob = outbas(og,ob)
         og = it
         ind = ind+1
-        IF (ind .GE. 5000) THEN
+        IF (ind .GE. nbbas*nbpt) THEN
           og = 0
           WRITE(*,*) "ERROR", ig, ib
         END IF
@@ -202,7 +202,7 @@ SUBROUTINE compute_fetch(nbpt, nbbas, outgrid, outbas, basin_count, basin_area,
 
       og = outgrid(ig,ib)
       ob = outbas(ig,ib)
-      DO WHILE (ob .LE. 35)
+      DO WHILE (ob .LE. nbbas)
         fetch_new(og,ob) = fetch_new(og,ob) + area
         it = outgrid(og,ob)
         ob = outbas(og,ob)
@@ -243,7 +243,7 @@ SUBROUTINE compute_inflows(nbpt, nbbas, nbin, outgrid, outbas, basin_count, ingr
     DO ib=1,ibmx
       og = outgrid(ig,ib)
       ob = outbas(ig,ib)
-      IF ( ob .LE. 35) THEN
+      IF ( ob .LE. nbbas) THEN
         innum_new(og,ob) = innum_new(og,ob) +1
         iin = innum_new(og,ob)
         ingrid_new(og,ob,iin) = ig
-- 
GitLab