@@ -149,16 +149,24 @@ def CGrid_Velocity(
149149 py = np .array ([grid .lat [yi , xi ], grid .lat [yi , xi + 1 ], grid .lat [yi + 1 , xi + 1 ], grid .lat [yi + 1 , xi ]])
150150
151151 if vectorfield ._mesh_type == "spherical" :
152- px [0 ] = px [0 ] + 360 if px [0 ] < x - 225 else px [0 ]
153- px [0 ] = px [0 ] - 360 if px [0 ] > x + 225 else px [0 ]
152+ px [0 ] = np . where ( px [0 ] < x - 225 , px [0 ] + 360 , px [0 ])
153+ px [0 ] = np . where ( px [0 ] > x + 225 , px [0 ] - 360 , px [0 ])
154154 px [1 :] = np .where (px [1 :] - px [0 ] > 180 , px [1 :] - 360 , px [1 :])
155155 px [1 :] = np .where (- px [1 :] + px [0 ] > 180 , px [1 :] + 360 , px [1 :])
156156 xx = (1 - xsi ) * (1 - eta ) * px [0 ] + xsi * (1 - eta ) * px [1 ] + xsi * eta * px [2 ] + (1 - xsi ) * eta * px [3 ]
157157 np .testing .assert_allclose (xx , x , atol = 1e-4 )
158- c1 = i_u ._geodetic_distance (py [0 ], py [1 ], px [0 ], px [1 ], vectorfield ._mesh_type , np .dot (i_u .phi2D_lin (0.0 , xsi ), py ))
159- c2 = i_u ._geodetic_distance (py [1 ], py [2 ], px [1 ], px [2 ], vectorfield ._mesh_type , np .dot (i_u .phi2D_lin (eta , 1.0 ), py ))
160- c3 = i_u ._geodetic_distance (py [2 ], py [3 ], px [2 ], px [3 ], vectorfield ._mesh_type , np .dot (i_u .phi2D_lin (1.0 , xsi ), py ))
161- c4 = i_u ._geodetic_distance (py [3 ], py [0 ], px [3 ], px [0 ], vectorfield ._mesh_type , np .dot (i_u .phi2D_lin (eta , 0.0 ), py ))
158+ c1 = i_u ._geodetic_distance (
159+ py [0 ], py [1 ], px [0 ], px [1 ], vectorfield ._mesh_type , np .einsum ("ij,ji->i" , i_u .phi2D_lin (0.0 , xsi ), py )
160+ )
161+ c2 = i_u ._geodetic_distance (
162+ py [1 ], py [2 ], px [1 ], px [2 ], vectorfield ._mesh_type , np .einsum ("ij,ji->i" , i_u .phi2D_lin (eta , 1.0 ), py )
163+ )
164+ c3 = i_u ._geodetic_distance (
165+ py [2 ], py [3 ], px [2 ], px [3 ], vectorfield ._mesh_type , np .einsum ("ij,ji->i" , i_u .phi2D_lin (1.0 , xsi ), py )
166+ )
167+ c4 = i_u ._geodetic_distance (
168+ py [3 ], py [0 ], px [3 ], px [0 ], vectorfield ._mesh_type , np .einsum ("ij,ji->i" , i_u .phi2D_lin (eta , 0.0 ), py )
169+ )
162170
163171 lenT = 2 if np .any (tau > 0 ) else 1
164172 lenZ = 2 if np .any (zeta > 0 ) else 1
0 commit comments