@@ -65,6 +65,22 @@ def _get_var_metadata(extra_variables=None):
65
65
return var_metadata
66
66
67
67
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
+
68
84
69
85
def _decompress (data , mask , dtype ):
70
86
data_blank = np .full_like (mask , np .nan , dtype = dtype )
@@ -405,7 +421,7 @@ def _chunks(l, n):
405
421
406
422
407
423
def _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 ):
409
425
410
426
fs , path = store .get_fs_and_full_path (varname , iternum )
411
427
@@ -423,7 +439,7 @@ def _get_facet_chunk(store, varname, iternum, nfacet, klevels, nx, nz, nfaces,
423
439
if (store .shrunk and iternum is not None ) or \
424
440
(store .shrunk_grid and iternum is None ):
425
441
# 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 )
427
443
mykey = nx if domain == 'global' else f'{ domain } _{ nx } '
428
444
index = all_index_data [mykey ][point ]
429
445
zgroup = store .open_mask_group ()
@@ -593,22 +609,6 @@ def _is_vgrid(self, vname):
593
609
dims = self .var_metadata [vname ]['dims' ]
594
610
return len (dims )== 1 and dims [0 ][0 ]== 'k'
595
611
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
612
612
613
613
def _get_scalars_and_vectors (self , varnames , type ):
614
614
@@ -701,10 +701,11 @@ def _key_and_task(n_k, these_klevels, n_iter=None, iternum=None):
701
701
key = name , n_k , 0 , 0 , 0
702
702
else :
703
703
key = name , n_iter , n_k , 0 , 0 , 0
704
+ dims = self .var_metadata [varname ]['dims' ]
704
705
task = (_get_facet_chunk , self .store , varname , iternum ,
705
706
nfacet , these_klevels , self .nx , self .nz , self .nface ,
706
707
dtype , self .mask_override , self .domain ,
707
- self .pad_before , self .pad_after )
708
+ self .pad_before , self .pad_after , dims )
708
709
return key , task
709
710
710
711
if iters is not None :
0 commit comments