@@ -65,6 +65,22 @@ def _get_var_metadata(extra_variables=None):
6565 return var_metadata
6666
6767
68+ def _get_variable_point (vname , dims , mask_override ):
69+ # fix for https://github.com/MITgcm/xmitgcm/issues/191
70+ if vname in mask_override :
71+ return mask_override [vname ]
72+ if 'i' in dims and 'j' in dims :
73+ point = 'c'
74+ elif 'i_g' in dims and 'j' in dims :
75+ point = 'w'
76+ elif 'i' in dims and 'j_g' in dims :
77+ point = 's'
78+ elif 'i_g' in dims and 'j_g' in dims :
79+ raise ValueError ("Don't have masks for corner points!" )
80+ else :
81+ raise ValueError ("Variable `%s` is not a horizontal variable." % vname )
82+ return point
83+
6884
6985def _decompress (data , mask , dtype ):
7086 data_blank = np .full_like (mask , np .nan , dtype = dtype )
@@ -405,7 +421,7 @@ def _chunks(l, n):
405421
406422
407423def _get_facet_chunk (store , varname , iternum , nfacet , klevels , nx , nz , nfaces ,
408- dtype , mask_override , domain , pad_before , pad_after ):
424+ dtype , mask_override , domain , pad_before , pad_after , dims ):
409425
410426 fs , path = store .get_fs_and_full_path (varname , iternum )
411427
@@ -423,7 +439,7 @@ def _get_facet_chunk(store, varname, iternum, nfacet, klevels, nx, nz, nfaces,
423439 if (store .shrunk and iternum is not None ) or \
424440 (store .shrunk_grid and iternum is None ):
425441 # the store tells us whether we need a mask or not
426- point = _get_variable_point (varname , mask_override )
442+ point = _get_variable_point (varname , dims , mask_override )
427443 mykey = nx if domain == 'global' else f'{ domain } _{ nx } '
428444 index = all_index_data [mykey ][point ]
429445 zgroup = store .open_mask_group ()
@@ -593,22 +609,6 @@ def _is_vgrid(self, vname):
593609 dims = self .var_metadata [vname ]['dims' ]
594610 return len (dims )== 1 and dims [0 ][0 ]== 'k'
595611
596- def _get_variable_point (self , vname , mask_override ):
597- # fix for https://github.com/MITgcm/xmitgcm/issues/191
598- if vname in mask_override :
599- return mask_override [vname ]
600- dims = self .var_metadata [vname ]['dims' ]
601- if 'i' in dims and 'j' in dims :
602- point = 'c'
603- elif 'i_g' in dims and 'j' in dims :
604- point = 'w'
605- elif 'i' in dims and 'j_g' in dims :
606- point = 's'
607- elif 'i_g' in dims and 'j_g' in dims :
608- raise ValueError ("Don't have masks for corner points!" )
609- else :
610- raise ValueError ("Variable `%s` is not a horizontal variable." % vname )
611- return point
612612
613613 def _get_scalars_and_vectors (self , varnames , type ):
614614
@@ -701,10 +701,11 @@ def _key_and_task(n_k, these_klevels, n_iter=None, iternum=None):
701701 key = name , n_k , 0 , 0 , 0
702702 else :
703703 key = name , n_iter , n_k , 0 , 0 , 0
704+ dims = self .var_metadata [varname ]['dims' ]
704705 task = (_get_facet_chunk , self .store , varname , iternum ,
705706 nfacet , these_klevels , self .nx , self .nz , self .nface ,
706707 dtype , self .mask_override , self .domain ,
707- self .pad_before , self .pad_after )
708+ self .pad_before , self .pad_after , dims )
708709 return key , task
709710
710711 if iters is not None :
0 commit comments