@@ -403,9 +403,13 @@ def search_indices_rectilinear(self, x, y, z, ti=-1, time=-1, search2D=False):
403403 grid = self .grid
404404 xi = yi = - 1
405405
406- if grid . mesh is not 'spherical' :
407- if x < grid .lon [0 ] or x > grid .lon [ - 1 ]:
406+ if not grid . zonal_periodic :
407+ if x < grid .lonlat_minmax [0 ] or x > grid .lonlat_minmax [ 1 ]:
408408 raise FieldSamplingError (x , y , z , field = self )
409+ if y < grid .lonlat_minmax [2 ] or y > grid .lonlat_minmax [3 ]:
410+ raise FieldSamplingError (x , y , z , field = self )
411+
412+ if grid .mesh is not 'spherical' :
409413 lon_index = grid .lon < x
410414 if lon_index .all ():
411415 xi = len (grid .lon ) - 2
@@ -425,11 +429,6 @@ def search_indices_rectilinear(self, x, y, z, ti=-1, time=-1, search2D=False):
425429 lon_fixed [indices .argmin ():] += 360
426430 if x < lon_fixed [0 ]:
427431 lon_fixed -= 360
428- if not grid .zonal_periodic :
429- if (grid .lon [0 ] < grid .lon [- 1 ]) and (x < grid .lon [0 ] or x > grid .lon [- 1 ]):
430- raise FieldSamplingError (x , y , z , field = self )
431- elif (grid .lon [0 ] >= grid .lon [- 1 ]) and (x < grid .lon [0 ] and x > grid .lon [- 1 ]):
432- raise FieldSamplingError (x , y , z , field = self )
433432
434433 lon_index = lon_fixed < x
435434 if lon_index .all ():
@@ -444,8 +443,6 @@ def search_indices_rectilinear(self, x, y, z, ti=-1, time=-1, search2D=False):
444443 xi += 1
445444 xsi = (x - lon_fixed [xi ]) / (lon_fixed [xi + 1 ]- lon_fixed [xi ])
446445
447- if y < grid .lat [0 ] or y > grid .lat [- 1 ]:
448- raise FieldSamplingError (x , y , z , field = self )
449446 lat_index = grid .lat < y
450447 if lat_index .all ():
451448 yi = len (grid .lat ) - 2
@@ -485,12 +482,13 @@ def search_indices_curvilinear(self, x, y, z, xi, yi, ti=-1, time=-1, search2D=F
485482 [1 , - 1 , 1 , - 1 ]])
486483 maxIterSearch = 1e6
487484 it = 0
488- if (not grid .zonal_periodic ) or grid .mesh == 'flat' :
489- if (grid .lon [0 , 0 ] < grid .lon [0 , - 1 ]) and (x < grid .lon [0 , 0 ] or x > grid .lon [0 , - 1 ]):
490- raise FieldSamplingError (x , y , z , field = self )
491- elif (grid .lon [0 , 0 ] >= grid .lon [0 , - 1 ]) and (x < grid .lon [0 , 0 ] and x > grid .lon [0 , - 1 ]):
492- raise FieldSamplingError (x , y , z , field = self )
493- if y < np .min (grid .lat ) or y > np .max (grid .lat ):
485+ if not grid .zonal_periodic :
486+ if x < grid .lonlat_minmax [0 ] or x > grid .lonlat_minmax [1 ]:
487+ if grid .lon [0 , 0 ] < grid .lon [0 , - 1 ]:
488+ raise FieldSamplingError (x , y , z , field = self )
489+ elif x < grid .lon [0 , 0 ] and x > grid .lon [0 , - 1 ]: # This prevents from crashing in [160, -160]
490+ raise FieldSamplingError (x , y , z , field = self )
491+ if y < grid .lonlat_minmax [2 ] or y > grid .lonlat_minmax [3 ]:
494492 raise FieldSamplingError (x , y , z , field = self )
495493
496494 while xsi < 0 or xsi > 1 or eta < 0 or eta > 1 :
0 commit comments