From 3ab4089e5b71622367bda18c298ccb7c2bc5e689 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Nils=20Br=C3=BCggemann?= <nils.brueggemann@mpimet.mpg.de>
Date: Mon, 17 Feb 2025 09:33:36 +0100
Subject: [PATCH] pyicon_tb.py and config_ckdtree_r2b11_oce_r0005.py: Added new
 R2B11 grid.

---
 .../config_ckdtree_r2b11_oce_r0005.py         | 180 ++++++++++++++++++
 pyicon/pyicon_tb.py                           |   9 +
 2 files changed, 189 insertions(+)
 create mode 100644 config_ckdtree/config_ckdtree_r2b11_oce_r0005.py

diff --git a/config_ckdtree/config_ckdtree_r2b11_oce_r0005.py b/config_ckdtree/config_ckdtree_r2b11_oce_r0005.py
new file mode 100644
index 0000000..708395e
--- /dev/null
+++ b/config_ckdtree/config_ckdtree_r2b11_oce_r0005.py
@@ -0,0 +1,180 @@
+import numpy as np
+from netCDF4 import Dataset
+import sys, os
+import matplotlib
+if len(sys.argv)>=2:
+  matplotlib.use('Agg')
+import pyicon as pyic
+print('Hey there!')
+
+print(sys.argv)
+#grid_target = sys.argv[2]
+
+ts = pyic.timing([0], 'start')
+
+tgname        = f'r2b11_oce_r0005'
+gname         = f'OceanOnly_Global_IcosSymmetric_1233m_rotatedZ37d_GEBCO_2023'
+path_tgrid    = f'/pool/data/ICON/oes/grids/OceanOnly/'
+fname_tgrid   = f'{gname}.nc'
+path_ckdtree  = f'/work/mh0033/m300602/icon/grids/{tgname}/ckdtree/'
+path_rgrid    = path_ckdtree + 'rectgrids/' 
+path_sections = path_ckdtree + 'sections/' 
+
+all_grids = [
+  'global_1.0',
+  'global_0.3',
+  'global_0.1',
+  'global_0.02',
+  'global_0.01',
+            ]
+#all_grids = [grid_target]
+
+all_secs = [
+#  '30W_200pts',
+#  '170W_200pts',
+#  '30W_300pts',
+#  '170W_300pts',
+            ]
+
+load_cgrid=True,
+load_egrid=True,
+load_vgrid=True,
+
+if not os.path.exists(path_rgrid): 
+  os.makedirs(path_rgrid)
+if not os.path.exists(path_sections): 
+  os.makedirs(path_sections)
+fpath = f'{path_ckdtree}/../{tgname}_tgrid.nc'
+if not os.path.exists(fpath):
+  os.symlink(path_tgrid+fname_tgrid, fpath)
+
+gnames = [gname]
+print(gnames)
+for gname in gnames:
+  ts = pyic.timing(ts, gname)
+  print(gname)
+
+  # --- grids
+  sname = 'global_1.0'
+  if sname in all_grids:
+    pyic.ckdtree_hgrid(lon_reg=[-180.,180.], lat_reg=[-90.,90.], res=1.0,
+                      fname_tgrid  = fname_tgrid,
+                      path_tgrid   = path_tgrid,
+                      path_ckdtree = path_rgrid,
+                      sname = sname,
+                      gname = gname,
+                      tgname = tgname,
+                      load_cgrid=load_cgrid,
+                      load_egrid=load_egrid,
+                      load_vgrid=load_vgrid,
+                      save_as='both',
+                      )
+  
+  sname = 'global_0.3'
+  if sname in all_grids:
+    pyic.ckdtree_hgrid(lon_reg=[-180.,180.], lat_reg=[-90.,90.], res=0.3,
+                      fname_tgrid  = fname_tgrid,
+                      path_tgrid   = path_tgrid,
+                      path_ckdtree = path_rgrid,
+                      sname = sname,
+                      gname = gname,
+                      tgname = tgname,
+                      load_cgrid=load_cgrid,
+                      load_egrid=load_egrid,
+                      load_vgrid=load_vgrid,
+                      save_as='both',
+                      )
+  
+  sname = 'global_0.1'
+  if sname in all_grids:
+    pyic.ckdtree_hgrid(lon_reg=[-180.,180.], lat_reg=[-90.,90.], res=0.1,
+                      fname_tgrid  = fname_tgrid,
+                      path_tgrid   = path_tgrid,
+                      path_ckdtree = path_rgrid,
+                      sname = sname,
+                      gname = gname,
+                      tgname = tgname,
+                      load_cgrid=load_cgrid,
+                      load_egrid=load_egrid,
+                      load_vgrid=load_vgrid,
+                      save_as='both',
+                      )
+
+  sname = 'global_0.02'
+  if sname in all_grids:
+    pyic.ckdtree_hgrid(lon_reg=[-180.,180.], lat_reg=[-90.,90.], res=0.02,
+                      fname_tgrid  = fname_tgrid,
+                      path_tgrid   = path_tgrid,
+                      path_ckdtree = path_rgrid,
+                      sname = sname,
+                      gname = gname,
+                      tgname = tgname,
+                      load_cgrid=load_cgrid,
+                      load_egrid=load_egrid,
+                      load_vgrid=load_vgrid,
+                      save_as='both',
+                      )
+
+  sname = 'global_0.01'
+  if sname in all_grids:
+    pyic.ckdtree_hgrid(lon_reg=[-180.,180.], lat_reg=[-90.,90.], res=0.01,
+                      fname_tgrid  = fname_tgrid,
+                      path_tgrid   = path_tgrid,
+                      path_ckdtree = path_rgrid,
+                      sname = sname,
+                      gname = gname,
+                      tgname = tgname,
+                      load_cgrid=load_cgrid,
+                      load_egrid=load_egrid,
+                      load_vgrid=load_vgrid,
+                      save_as='both',
+                      )
+  
+
+  # --- sections
+  sname = '30W_200pts'
+  if sname in all_secs:
+    dckdtree, ickdtree, lon_sec, lat_sec, dist_sec = pyic.ckdtree_section(p1=[-30,-80], p2=[-30,80], npoints=200,
+                      fname_tgrid  = fname_tgrid,
+                      path_tgrid   = path_tgrid,
+                      path_ckdtree = path_sections,
+                      sname = sname,
+                      gname = gname,
+                      tgname = tgname,
+                      )
+    
+  sname = '170W_200pts'
+  if sname in all_secs:
+    dckdtree, ickdtree, lon_sec, lat_sec, dist_sec = pyic.ckdtree_section(p1=[-170,-80], p2=[-170,80], npoints=200,
+                      fname_tgrid  = fname_tgrid,
+                      path_tgrid   = path_tgrid,
+                      path_ckdtree = path_sections,
+                      sname = sname,
+                      gname = gname,
+                      tgname = tgname,
+                      )
+
+  sname = '30W_300pts'
+  if sname in all_secs:
+    dckdtree, ickdtree, lon_sec, lat_sec, dist_sec = pyic.ckdtree_section(p1=[-30,-80], p2=[-30,80], npoints=300,
+                      fname_tgrid  = fname_tgrid,
+                      path_tgrid   = path_tgrid,
+                      path_ckdtree = path_sections,
+                      sname = sname,
+                      gname = gname,
+                      tgname = tgname,
+                      )
+    
+  sname = '170W_300pts'
+  if sname in all_secs:
+    dckdtree, ickdtree, lon_sec, lat_sec, dist_sec = pyic.ckdtree_section(p1=[-170,-80], p2=[-170,80], npoints=300,
+                      fname_tgrid  = fname_tgrid,
+                      path_tgrid   = path_tgrid,
+                      path_ckdtree = path_sections,
+                      sname = sname,
+                      gname = gname,
+                      tgname = tgname,
+                      )
+
+print('make_ckdtree.py: All done!')
+ts = pyic.timing(ts, 'All done!')
diff --git a/pyicon/pyicon_tb.py b/pyicon/pyicon_tb.py
index f3891ad..2eaac08 100644
--- a/pyicon/pyicon_tb.py
+++ b/pyicon/pyicon_tb.py
@@ -1685,6 +1685,15 @@ def identify_grid(fpath_data, path_grid='none', uuidOfHGrid='none'):
   Dgrid_list[grid_name]['uuidOfHGrid'] = 'b5bf1496-4493-11ed-9238-f9d43538dbe9'
   Dgrid_list[grid_name]['fpath_grid'] = f'{path_grid}/{grid_name}/{grid_name}_tgrid.nc'
 
+  grid_name = 'r2b11_oce_r0005'; Dgrid_list[grid_name] = dict()
+  Dgrid_list[grid_name]['name'] = grid_name
+  Dgrid_list[grid_name]['res'] = '1.25km'
+  Dgrid_list[grid_name]['long_name'] = 'OceanOnly_Global_IcosSymmetric_1233m_rotatedZ37d_GEBCO_2023'
+  Dgrid_list[grid_name]['size'] = 237416516
+  #Dgrid_list[grid_name]['fpath_grid'] = path_grid + Dgrid_list[grid_name]['long_name'] + '/' + Dgrid_list[grid_name]['long_name'] + '.nc'
+  Dgrid_list[grid_name]['uuidOfHGrid'] = '2e7f2328-8a0f-11ee-8312-e7a9d15ccefa'
+  Dgrid_list[grid_name]['fpath_grid'] = f'{path_grid}/{grid_name}/{grid_name}_tgrid.nc'
+
   grid_name = 'r2b11_atm_r0037'; Dgrid_list[grid_name] = dict()
   Dgrid_list[grid_name]['name'] = grid_name
   Dgrid_list[grid_name]['res'] = '1.25km'
-- 
GitLab