From 92334bf93a72555290a9439549d0336b9160d2a7 Mon Sep 17 00:00:00 2001 From: Ivana Escobar Date: Tue, 3 Aug 2021 14:49:32 -0500 Subject: [PATCH 01/14] llc regional grid binary writing --- xmitgcm/utils.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/xmitgcm/utils.py b/xmitgcm/utils.py index 21bde2a6..528971dd 100644 --- a/xmitgcm/utils.py +++ b/xmitgcm/utils.py @@ -1559,7 +1559,8 @@ def find_concat_dim_facet(da, facet, extra_metadata): # we also need to other horizontal dimension for vector indexing all_dims = list(da.dims) # discard face - all_dims.remove('face') + if 'face' in all_dims: + all_dims.remove('face') # remove the concat_dim to find horizontal non_concat dimension all_dims.remove(concat_dim) non_concat_dim = all_dims[0] @@ -1624,10 +1625,10 @@ def rebuild_llc_facets(da, extra_metadata): if extra_metadata['face_facets'][kface] == kfacet: if extra_metadata['face_offsets'][kface] == 0: # first face of facet - tmp = da.sel(face=kface) + tmp = da.isel(face=kface) else: # any other face needs to be concatenated - newface = da.sel(face=kface) + newface = da.isel(face=kface) tmp = xr.concat([facets['facet' + str(kfacet)], newface], dim=concat_dim) @@ -1635,7 +1636,6 @@ def rebuild_llc_facets(da, extra_metadata): # if present, remove padding from facets for kfacet in range(nfacets): - concat_dim, non_concat_dim = find_concat_dim_facet( da, kfacet, extra_metadata) From db9b04c7840db7d4fb557799c33690d56ca627c2 Mon Sep 17 00:00:00 2001 From: Ivana Escobar Date: Mon, 9 Aug 2021 11:24:22 -0500 Subject: [PATCH 02/14] pioneer metadata --- xmitgcm/utils.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/xmitgcm/utils.py b/xmitgcm/utils.py index 528971dd..25c4da47 100644 --- a/xmitgcm/utils.py +++ b/xmitgcm/utils.py @@ -1289,6 +1289,16 @@ def get_extra_metadata(domain='llc', nx=90): 'transpose_face': [False, False, False, True, True, True]} + pioneer = {'has_faces': True, + 'ny': 270, 'nx': 270, + 'ny_facets': [270], + 'pad_before_y': [0, 0, 0, 0, 0], + 'pad_after_y': [0, 0, 0, 0, 0], + 'face_facets': [4], + 'facet_orders': ['C', 'C', 'C', 'F', 'F'], + 'face_offsets': [0], + 'transpose_face': [True]} + cs = {'has_faces': True, 'ny': nx, 'nx': nx, 'ny_facets': [nx, nx, nx, nx, nx, nx], 'face_facets': [0, 1, 2, 3, 4, 5], @@ -1301,6 +1311,8 @@ def get_extra_metadata(domain='llc', nx=90): extra_metadata = llc elif domain == 'aste': extra_metadata = aste + elif domain =='pioneer': + extra_metadata = pioneer elif domain == 'cs': extra_metadata = cs From aaf3edda0010820201a453e64d75885957cef8d7 Mon Sep 17 00:00:00 2001 From: Ivana Escobar Date: Wed, 11 Aug 2021 10:19:17 -0500 Subject: [PATCH 03/14] nesba domain --- xmitgcm/utils.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/xmitgcm/utils.py b/xmitgcm/utils.py index 25c4da47..4f04c3a2 100644 --- a/xmitgcm/utils.py +++ b/xmitgcm/utils.py @@ -1289,7 +1289,7 @@ def get_extra_metadata(domain='llc', nx=90): 'transpose_face': [False, False, False, True, True, True]} - pioneer = {'has_faces': True, + nesba = {'has_faces': True, 'ny': 270, 'nx': 270, 'ny_facets': [270], 'pad_before_y': [0, 0, 0, 0, 0], @@ -1311,8 +1311,8 @@ def get_extra_metadata(domain='llc', nx=90): extra_metadata = llc elif domain == 'aste': extra_metadata = aste - elif domain =='pioneer': - extra_metadata = pioneer + elif domain =='nesba': + extra_metadata = nesba elif domain == 'cs': extra_metadata = cs From 347c8f61297a4393187950d1d0081691d5ecb694 Mon Sep 17 00:00:00 2001 From: Ivana Escobar Date: Wed, 11 Aug 2021 13:02:43 -0500 Subject: [PATCH 04/14] nesba meta --- xmitgcm/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xmitgcm/utils.py b/xmitgcm/utils.py index 4f04c3a2..b2121e11 100644 --- a/xmitgcm/utils.py +++ b/xmitgcm/utils.py @@ -1264,7 +1264,7 @@ def get_extra_metadata(domain='llc', nx=90): all extra_metadata to handle multi-faceted grids """ - available_domains = ['llc', 'aste', 'cs'] + available_domains = ['llc', 'aste', 'nesba', 'cs'] if domain not in available_domains: raise ValueError('not an available domain') From dbe23b8f7d5c017986e87d4387086fef9b8b7dcb Mon Sep 17 00:00:00 2001 From: Ivana Escobar Date: Mon, 15 Aug 2022 12:23:16 -0500 Subject: [PATCH 05/14] single mitgcm face --- xmitgcm/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xmitgcm/utils.py b/xmitgcm/utils.py index b2121e11..dea24a13 100644 --- a/xmitgcm/utils.py +++ b/xmitgcm/utils.py @@ -1705,7 +1705,7 @@ def llc_facets_3d_spatial_to_compact(facets, dimname, extra_metadata): all the data in vector form """ - nz = len(facets['facet0'][dimname]) + nz = len(facets['facet4'][dimname]) nfacets = len(facets) flatdata = np.array([]) From 33e99c13a1168c7b7ac06b929676a8f102950b0b Mon Sep 17 00:00:00 2001 From: Ivana Escobar Date: Mon, 15 Aug 2022 14:27:28 -0500 Subject: [PATCH 06/14] aste1080 metadata; doesnt match aste metadata --- xmitgcm/utils.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/xmitgcm/utils.py b/xmitgcm/utils.py index 02d88d1f..ee818189 100644 --- a/xmitgcm/utils.py +++ b/xmitgcm/utils.py @@ -1267,7 +1267,7 @@ def get_extra_metadata(domain='llc', nx=90): all extra_metadata to handle multi-faceted grids """ - available_domains = ['llc', 'aste', 'nesba', 'cs'] + available_domains = ['llc', 'aste', 'nesba', 'aste1080', 'cs'] if domain not in available_domains: raise ValueError('not an available domain') @@ -1302,6 +1302,17 @@ def get_extra_metadata(domain='llc', nx=90): 'face_offsets': [0], 'transpose_face': [True]} + aste1080 = {'has_faces': True, 'ny': int(23*nx/6.), 'nx': nx, + 'ny_facets': [int(7*nx/6.), 0, nx, + int(nx/2.), int(7*nx/6.)], + 'pad_before_y': [int(15*nx/18.), 0, 0, 0, 0], + 'pad_after_y': [0, 0, 0, int(nx/2.), int(15*nx/18.)], + 'face_facets': [0, 0, 2, 3, 4, 4], + 'facet_orders': ['C', 'C', 'C', 'F', 'F'], + 'face_offsets': [0, 1, 0, 0, 0, 1], + 'transpose_face': [False, False, False, + True, True, True]} + cs = {'has_faces': True, 'ny': nx, 'nx': nx, 'ny_facets': [nx, nx, nx, nx, nx, nx], 'face_facets': [0, 1, 2, 3, 4, 5], @@ -1316,6 +1327,8 @@ def get_extra_metadata(domain='llc', nx=90): extra_metadata = aste elif domain =='nesba': extra_metadata = nesba + elif domain == 'aste1080': + extra_metadata = aste1080 elif domain == 'cs': extra_metadata = cs @@ -1676,6 +1689,7 @@ def rebuild_llc_facets(da, extra_metadata): # if present, remove padding from facets for kfacet in range(nfacets): + concat_dim, non_concat_dim = find_concat_dim_facet( da, kfacet, extra_metadata) From 57b5681583eca25d83e8f38ff66240ec53565730 Mon Sep 17 00:00:00 2001 From: Ivana Escobar Date: Tue, 7 Feb 2023 12:05:42 -0600 Subject: [PATCH 07/14] reduced nesb domain --- xmitgcm/utils.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/xmitgcm/utils.py b/xmitgcm/utils.py index ee818189..b2ce0027 100644 --- a/xmitgcm/utils.py +++ b/xmitgcm/utils.py @@ -1267,7 +1267,7 @@ def get_extra_metadata(domain='llc', nx=90): all extra_metadata to handle multi-faceted grids """ - available_domains = ['llc', 'aste', 'nesba', 'aste1080', 'cs'] + available_domains = ['llc', 'aste', 'nesb', 'aste1080', 'cs'] if domain not in available_domains: raise ValueError('not an available domain') @@ -1292,9 +1292,9 @@ def get_extra_metadata(domain='llc', nx=90): 'transpose_face': [False, False, False, True, True, True]} - nesba = {'has_faces': True, - 'ny': 270, 'nx': 270, - 'ny_facets': [270], + nesb = {'has_faces': True, + 'ny': 170, 'nx': 220, + 'ny_facets': [170], 'pad_before_y': [0, 0, 0, 0, 0], 'pad_after_y': [0, 0, 0, 0, 0], 'face_facets': [4], @@ -1325,8 +1325,8 @@ def get_extra_metadata(domain='llc', nx=90): extra_metadata = llc elif domain == 'aste': extra_metadata = aste - elif domain =='nesba': - extra_metadata = nesba + elif domain =='nesb': + extra_metadata = nesb elif domain == 'aste1080': extra_metadata = aste1080 elif domain == 'cs': From 8cd2da2454b0044a34f2d308880a3aa4c98b6102 Mon Sep 17 00:00:00 2001 From: Ivana Escobar Date: Fri, 10 Feb 2023 16:13:00 -0600 Subject: [PATCH 08/14] update nesb meta --- xmitgcm/utils.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/xmitgcm/utils.py b/xmitgcm/utils.py index b2ce0027..f8e3fbfc 100644 --- a/xmitgcm/utils.py +++ b/xmitgcm/utils.py @@ -1294,9 +1294,9 @@ def get_extra_metadata(domain='llc', nx=90): nesb = {'has_faces': True, 'ny': 170, 'nx': 220, - 'ny_facets': [170], - 'pad_before_y': [0, 0, 0, 0, 0], - 'pad_after_y': [0, 0, 0, 0, 0], + 'ny_facets': [0,0,0,0,170], + 'pad_before_y': [0, 0, 0, 0, 2644], + 'pad_after_y': [0, 0, 0, 0, 1506], 'face_facets': [4], 'facet_orders': ['C', 'C', 'C', 'F', 'F'], 'face_offsets': [0], From b978dd327156b972e2062aa4376a4f1bb9c48999 Mon Sep 17 00:00:00 2001 From: Ivana Escobar Date: Tue, 28 Feb 2023 14:55:38 -0600 Subject: [PATCH 09/14] check for single element length vars --- xmitgcm/utils.py | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/xmitgcm/utils.py b/xmitgcm/utils.py index f8e3fbfc..90302aa6 100644 --- a/xmitgcm/utils.py +++ b/xmitgcm/utils.py @@ -1105,17 +1105,27 @@ def _read_xy_chunk(variable, file_metadata, rec=0, lev=0, face=0, # 1. compute offset_variable, init to zero offset_vars = 0 - # loop on variables before the one to read - for jvar in np.arange(idx_var): - # inspect its dimensions - dims = file_metadata['dims_vars'][jvar] - # compute the byte size of this variable + # if var list is a single element + if idx_var == 0: + dims = file_metadata['dims_vars'] nbytes_thisvar = 1*nbytes for dim in dims: nbytes_thisvar = nbytes_thisvar*file_metadata[dim] # update offset from previous variables offset_vars = offset_vars+nbytes_thisvar + # loop on variables before the one to read + else: + for jvar in np.arange(idx_var): + # inspect its dimensions + dims = file_metadata['dims_vars'][jvar] + # compute the byte size of this variable + nbytes_thisvar = 1*nbytes + for dim in dims: + nbytes_thisvar = nbytes_thisvar*file_metadata[dim] + # update offset from previous variables + offset_vars = offset_vars+nbytes_thisvar + # 2. get dimensions of desired variable dims = file_metadata['dims_vars'][idx_var] # inquire for values of dimensions, else return 1 @@ -1292,7 +1302,7 @@ def get_extra_metadata(domain='llc', nx=90): 'transpose_face': [False, False, False, True, True, True]} - nesb = {'has_faces': True, + nesb = {'has_faces': False, 'ny': 170, 'nx': 220, 'ny_facets': [0,0,0,0,170], 'pad_before_y': [0, 0, 0, 0, 2644], From f3fb97a18ac9114600f6ec25d0f64baec9ef1646 Mon Sep 17 00:00:00 2001 From: Ivana Escobar Date: Fri, 19 Jan 2024 15:12:44 -0600 Subject: [PATCH 10/14] rm custom domain metas --- xmitgcm/utils.py | 27 +-------------------------- 1 file changed, 1 insertion(+), 26 deletions(-) diff --git a/xmitgcm/utils.py b/xmitgcm/utils.py index 90302aa6..3760765b 100644 --- a/xmitgcm/utils.py +++ b/xmitgcm/utils.py @@ -1277,7 +1277,7 @@ def get_extra_metadata(domain='llc', nx=90): all extra_metadata to handle multi-faceted grids """ - available_domains = ['llc', 'aste', 'nesb', 'aste1080', 'cs'] + available_domains = ['llc', 'aste', 'cs'] if domain not in available_domains: raise ValueError('not an available domain') @@ -1302,27 +1302,6 @@ def get_extra_metadata(domain='llc', nx=90): 'transpose_face': [False, False, False, True, True, True]} - nesb = {'has_faces': False, - 'ny': 170, 'nx': 220, - 'ny_facets': [0,0,0,0,170], - 'pad_before_y': [0, 0, 0, 0, 2644], - 'pad_after_y': [0, 0, 0, 0, 1506], - 'face_facets': [4], - 'facet_orders': ['C', 'C', 'C', 'F', 'F'], - 'face_offsets': [0], - 'transpose_face': [True]} - - aste1080 = {'has_faces': True, 'ny': int(23*nx/6.), 'nx': nx, - 'ny_facets': [int(7*nx/6.), 0, nx, - int(nx/2.), int(7*nx/6.)], - 'pad_before_y': [int(15*nx/18.), 0, 0, 0, 0], - 'pad_after_y': [0, 0, 0, int(nx/2.), int(15*nx/18.)], - 'face_facets': [0, 0, 2, 3, 4, 4], - 'facet_orders': ['C', 'C', 'C', 'F', 'F'], - 'face_offsets': [0, 1, 0, 0, 0, 1], - 'transpose_face': [False, False, False, - True, True, True]} - cs = {'has_faces': True, 'ny': nx, 'nx': nx, 'ny_facets': [nx, nx, nx, nx, nx, nx], 'face_facets': [0, 1, 2, 3, 4, 5], @@ -1335,10 +1314,6 @@ def get_extra_metadata(domain='llc', nx=90): extra_metadata = llc elif domain == 'aste': extra_metadata = aste - elif domain =='nesb': - extra_metadata = nesb - elif domain == 'aste1080': - extra_metadata = aste1080 elif domain == 'cs': extra_metadata = cs From 3df9aef9804e5b86b3d70c7a3b5741f4a33f614e Mon Sep 17 00:00:00 2001 From: Ivana Escobar Date: Thu, 24 Apr 2025 10:20:19 -0500 Subject: [PATCH 11/14] fix typos --- xmitgcm/mds_store.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/xmitgcm/mds_store.py b/xmitgcm/mds_store.py index ea3730f4..3e00099b 100644 --- a/xmitgcm/mds_store.py +++ b/xmitgcm/mds_store.py @@ -636,9 +636,9 @@ def load_from_prefix(self, prefix, iternum=None, extra_metadata=None): Parameters ---------- - name : string + prefix : string The name of the grid variable. - iternume : int (optional) + iternum : int (optional) MITgcm iteration number Yields @@ -711,7 +711,7 @@ def load_from_prefix(self, prefix, iternum=None, extra_metadata=None): # we didn't find any metadata, so we just skip this var continue else: - raise KeyError("Couln't find metadata for variable %s " + raise KeyError("Couldn't find metadata for variable %s " "and `ignore_unknown_vars`==False." % vname) # maybe slice and squeeze the data From 5e2cbc54c03218055f4d190a8bb73cc1d679713c Mon Sep 17 00:00:00 2001 From: Ivana Escobar Date: Thu, 24 Apr 2025 10:25:02 -0500 Subject: [PATCH 12/14] revert to `master` `utils.py` --- xmitgcm/utils.py | 29 +++++++++-------------------- 1 file changed, 9 insertions(+), 20 deletions(-) diff --git a/xmitgcm/utils.py b/xmitgcm/utils.py index 3760765b..b6b109cb 100644 --- a/xmitgcm/utils.py +++ b/xmitgcm/utils.py @@ -1105,27 +1105,17 @@ def _read_xy_chunk(variable, file_metadata, rec=0, lev=0, face=0, # 1. compute offset_variable, init to zero offset_vars = 0 - # if var list is a single element - if idx_var == 0: - dims = file_metadata['dims_vars'] + # loop on variables before the one to read + for jvar in np.arange(idx_var): + # inspect its dimensions + dims = file_metadata['dims_vars'][jvar] + # compute the byte size of this variable nbytes_thisvar = 1*nbytes for dim in dims: nbytes_thisvar = nbytes_thisvar*file_metadata[dim] # update offset from previous variables offset_vars = offset_vars+nbytes_thisvar - # loop on variables before the one to read - else: - for jvar in np.arange(idx_var): - # inspect its dimensions - dims = file_metadata['dims_vars'][jvar] - # compute the byte size of this variable - nbytes_thisvar = 1*nbytes - for dim in dims: - nbytes_thisvar = nbytes_thisvar*file_metadata[dim] - # update offset from previous variables - offset_vars = offset_vars+nbytes_thisvar - # 2. get dimensions of desired variable dims = file_metadata['dims_vars'][idx_var] # inquire for values of dimensions, else return 1 @@ -1597,8 +1587,7 @@ def find_concat_dim_facet(da, facet, extra_metadata): # we also need to other horizontal dimension for vector indexing all_dims = list(da.dims) # discard face - if 'face' in all_dims: - all_dims.remove('face') + all_dims.remove('face') # remove the concat_dim to find horizontal non_concat dimension all_dims.remove(concat_dim) non_concat_dim = all_dims[0] @@ -1663,10 +1652,10 @@ def rebuild_llc_facets(da, extra_metadata): if extra_metadata['face_facets'][kface] == kfacet: if extra_metadata['face_offsets'][kface] == 0: # first face of facet - tmp = da.isel(face=kface) + tmp = da.sel(face=kface) else: # any other face needs to be concatenated - newface = da.isel(face=kface) + newface = da.sel(face=kface) tmp = xr.concat([facets['facet' + str(kfacet)], newface], dim=concat_dim) @@ -1732,7 +1721,7 @@ def llc_facets_3d_spatial_to_compact(facets, dimname, extra_metadata): all the data in vector form """ - nz = len(facets['facet4'][dimname]) + nz = len(facets['facet0'][dimname]) nfacets = len(facets) flatdata = np.array([]) From 15b36f39cc5290ab73d6563a30aa3b83a386b4e2 Mon Sep 17 00:00:00 2001 From: Ivana Escobar Date: Thu, 24 Apr 2025 10:28:26 -0500 Subject: [PATCH 13/14] generalize for regions within a single llc face --- xmitgcm/utils.py | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/xmitgcm/utils.py b/xmitgcm/utils.py index b6b109cb..3760765b 100644 --- a/xmitgcm/utils.py +++ b/xmitgcm/utils.py @@ -1105,17 +1105,27 @@ def _read_xy_chunk(variable, file_metadata, rec=0, lev=0, face=0, # 1. compute offset_variable, init to zero offset_vars = 0 - # loop on variables before the one to read - for jvar in np.arange(idx_var): - # inspect its dimensions - dims = file_metadata['dims_vars'][jvar] - # compute the byte size of this variable + # if var list is a single element + if idx_var == 0: + dims = file_metadata['dims_vars'] nbytes_thisvar = 1*nbytes for dim in dims: nbytes_thisvar = nbytes_thisvar*file_metadata[dim] # update offset from previous variables offset_vars = offset_vars+nbytes_thisvar + # loop on variables before the one to read + else: + for jvar in np.arange(idx_var): + # inspect its dimensions + dims = file_metadata['dims_vars'][jvar] + # compute the byte size of this variable + nbytes_thisvar = 1*nbytes + for dim in dims: + nbytes_thisvar = nbytes_thisvar*file_metadata[dim] + # update offset from previous variables + offset_vars = offset_vars+nbytes_thisvar + # 2. get dimensions of desired variable dims = file_metadata['dims_vars'][idx_var] # inquire for values of dimensions, else return 1 @@ -1587,7 +1597,8 @@ def find_concat_dim_facet(da, facet, extra_metadata): # we also need to other horizontal dimension for vector indexing all_dims = list(da.dims) # discard face - all_dims.remove('face') + if 'face' in all_dims: + all_dims.remove('face') # remove the concat_dim to find horizontal non_concat dimension all_dims.remove(concat_dim) non_concat_dim = all_dims[0] @@ -1652,10 +1663,10 @@ def rebuild_llc_facets(da, extra_metadata): if extra_metadata['face_facets'][kface] == kfacet: if extra_metadata['face_offsets'][kface] == 0: # first face of facet - tmp = da.sel(face=kface) + tmp = da.isel(face=kface) else: # any other face needs to be concatenated - newface = da.sel(face=kface) + newface = da.isel(face=kface) tmp = xr.concat([facets['facet' + str(kfacet)], newface], dim=concat_dim) @@ -1721,7 +1732,7 @@ def llc_facets_3d_spatial_to_compact(facets, dimname, extra_metadata): all the data in vector form """ - nz = len(facets['facet0'][dimname]) + nz = len(facets['facet4'][dimname]) nfacets = len(facets) flatdata = np.array([]) From 422f5b0f4544bc09d90c4baec559811bbccdd549 Mon Sep 17 00:00:00 2001 From: Ivana Escobar Date: Thu, 24 Apr 2025 10:35:01 -0500 Subject: [PATCH 14/14] detangle PR #347 from this PR --- xmitgcm/mds_store.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/xmitgcm/mds_store.py b/xmitgcm/mds_store.py index 3e00099b..ea3730f4 100644 --- a/xmitgcm/mds_store.py +++ b/xmitgcm/mds_store.py @@ -636,9 +636,9 @@ def load_from_prefix(self, prefix, iternum=None, extra_metadata=None): Parameters ---------- - prefix : string + name : string The name of the grid variable. - iternum : int (optional) + iternume : int (optional) MITgcm iteration number Yields @@ -711,7 +711,7 @@ def load_from_prefix(self, prefix, iternum=None, extra_metadata=None): # we didn't find any metadata, so we just skip this var continue else: - raise KeyError("Couldn't find metadata for variable %s " + raise KeyError("Couln't find metadata for variable %s " "and `ignore_unknown_vars`==False." % vname) # maybe slice and squeeze the data