@@ -35,23 +35,29 @@ def search_indices_vertical_z(grid: Grid, gridindexingtype: GridIndexingType, z:
3535 # In case of CROCO, allow particles in last (uppermost) layer using depth[-1]
3636 if gridindexingtype in ["croco" ] and z < 0 :
3737 return (- 2 , 1 )
38- _raise_field_out_of_bound_error (z , 0 , 0 )
39- depth_indices = grid .depth <= z
38+ _raise_field_out_of_bound_error (z , None , None )
39+ depth_indices = grid .depth < z
4040 if z >= grid .depth [- 1 ]:
4141 zi = len (grid .depth ) - 2
4242 else :
43- zi = depth_indices .argmin () - 1 if z >= grid .depth [0 ] else 0
43+ zi = depth_indices .argmin () - 1 if z > grid .depth [0 ] else 0
4444 else :
4545 if z > grid .depth [0 ]:
4646 _raise_field_out_of_bound_surface_error (z , None , None )
4747 elif z < grid .depth [- 1 ]:
48- _raise_field_out_of_bound_error (z , 0 , 0 )
49- depth_indices = grid .depth >= z
48+ _raise_field_out_of_bound_error (z , None , None )
49+ depth_indices = grid .depth > z
5050 if z <= grid .depth [- 1 ]:
5151 zi = len (grid .depth ) - 2
5252 else :
53- zi = depth_indices .argmin () - 1 if z <= grid .depth [0 ] else 0
53+ zi = depth_indices .argmin () - 1 if z < grid .depth [0 ] else 0
5454 zeta = (z - grid .depth [zi ]) / (grid .depth [zi + 1 ] - grid .depth [zi ])
55+ while zeta > 1 :
56+ zi += 1
57+ zeta = (z - grid .depth [zi ]) / (grid .depth [zi + 1 ] - grid .depth [zi ])
58+ while zeta < 0 :
59+ zi -= 1
60+ zeta = (z - grid .depth [zi ]) / (grid .depth [zi + 1 ] - grid .depth [zi ])
5561 return (zi , zeta )
5662
5763
@@ -98,28 +104,35 @@ def search_indices_vertical_s(
98104 + xsi * eta * grid .depth [:, yi + 1 , xi + 1 ]
99105 + (1 - xsi ) * eta * grid .depth [:, yi + 1 , xi ]
100106 )
107+ z = np .float32 (z ) # type: ignore # TODO: remove type ignore once we migrate to float64
101108
102109 if depth_vector [- 1 ] > depth_vector [0 ]:
103- depth_indices = depth_vector <= z
110+ if z < depth_vector [0 ]:
111+ _raise_field_out_of_bound_error (z , None , None )
112+ elif z > depth_vector [- 1 ]:
113+ _raise_field_out_of_bound_error (z , None , None )
114+ depth_indices = depth_vector < z
104115 if z >= depth_vector [- 1 ]:
105116 zi = len (depth_vector ) - 2
106117 else :
107- zi = depth_indices .argmin () - 1 if z >= depth_vector [0 ] else 0
108- if z < depth_vector [zi ]:
109- _raise_field_out_of_bound_surface_error (z , None , None )
110- elif z > depth_vector [zi + 1 ]:
111- _raise_field_out_of_bound_error (z , y , x )
118+ zi = depth_indices .argmin () - 1 if z > depth_vector [0 ] else 0
112119 else :
113- depth_indices = depth_vector >= z
120+ if z > depth_vector [0 ]:
121+ _raise_field_out_of_bound_error (z , None , None )
122+ elif z < depth_vector [- 1 ]:
123+ _raise_field_out_of_bound_error (z , None , None )
124+ depth_indices = depth_vector > z
114125 if z <= depth_vector [- 1 ]:
115126 zi = len (depth_vector ) - 2
116127 else :
117- zi = depth_indices .argmin () - 1 if z <= depth_vector [0 ] else 0
118- if z > depth_vector [zi ]:
119- _raise_field_out_of_bound_surface_error (z , None , None )
120- elif z < depth_vector [zi + 1 ]:
121- _raise_field_out_of_bound_error (z , y , x )
128+ zi = depth_indices .argmin () - 1 if z < depth_vector [0 ] else 0
122129 zeta = (z - depth_vector [zi ]) / (depth_vector [zi + 1 ] - depth_vector [zi ])
130+ while zeta > 1 :
131+ zi += 1
132+ zeta = (z - depth_vector [zi ]) / (depth_vector [zi + 1 ] - depth_vector [zi ])
133+ while zeta < 0 :
134+ zi -= 1
135+ zeta = (z - depth_vector [zi ]) / (depth_vector [zi + 1 ] - depth_vector [zi ])
123136 return (zi , zeta )
124137
125138
0 commit comments