From 9e0e646ea45c3404d6c3b115293288a66b5578ca Mon Sep 17 00:00:00 2001
From: tomrink <rink@ssec.wisc.edu>
Date: Thu, 23 May 2024 11:40:38 -0500
Subject: [PATCH] snapshot...

---
 modules/util/gfs_reader.py | 43 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 43 insertions(+)

diff --git a/modules/util/gfs_reader.py b/modules/util/gfs_reader.py
index 3dd5a8e6..06b5386a 100644
--- a/modules/util/gfs_reader.py
+++ b/modules/util/gfs_reader.py
@@ -442,3 +442,46 @@ def get_voxel_s(xr_dataset, fld_name_s, lon, lat, press, x_width=3, y_width=3, z
                                     fakeDim1=lat_coords[y_start:y_stop], fakeDim0=plevs[z_start:z_stop])
 
     return sub_fld
+
+
+def get_volume(xr_dataset, fld_name, press_range=None, lon_range=None, lat_range=None):
+    # p_idx = value_to_index(plevs, press)
+    fld = xr_dataset[fld_name]
+
+    x_lo = 0
+    x_hi = NX
+    y_lo = 0
+    y_hi = NY
+    z_lo = 0
+    z_hi = NZ
+
+    if lon_range is not None:
+        lon_lo = lon_range[0]
+        lon_hi = lon_range[1]
+
+        if lon360:
+            if lon_lo < 0:
+                lon_lo += 360
+            if lon_hi < 0:
+                lon_hi += 360
+
+        x_lo = value_to_index(lon_coords, lon_lo)
+        x_hi = value_to_index(lon_coords, lon_hi)
+
+    if lat_range is not None:
+        lat_lo = lat_range[0]
+        lat_hi = lat_range[1]
+
+        y_lo = value_to_index(lat_coords, lat_lo)
+        y_hi = value_to_index(lat_coords, lat_hi)
+
+    if press_range is not None:
+        z_lo = value_to_index(plevs, press_range[0])
+        z_hi = value_to_index(plevs, press_range[1])
+
+    sub_fld = fld[y_lo:y_hi, x_lo:x_hi, z_lo:z_hi]
+    sub_fld = sub_fld.expand_dims('channel')
+
+    sub_fld = sub_fld.assign_coords(channel=[fld_name], fakeDim2=lon_coords[x_lo:x_hi], fakeDim1=lat_coords[y_lo:y_hi], fakeDim0=plevs[z_lo:z_hi])
+
+    return sub_fld
-- 
GitLab