@@ -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