33
44import numpy as np
55
6- from parcels ._typing import Mesh
6+ from parcels ._core . mesh import BaseMesh
77
88__all__ = []
99
@@ -61,12 +61,12 @@ def dphidxsi3D_lin(zeta: float, eta: float, xsi: float) -> tuple[list[float], li
6161
6262
6363def dxdxsi3D_lin (
64- hexa_z : list [float ], hexa_y : list [float ], hexa_x : list [float ], zeta : float , eta : float , xsi : float , mesh : Mesh
64+ hexa_z : list [float ], hexa_y : list [float ], hexa_x : list [float ], zeta : float , eta : float , xsi : float , mesh : BaseMesh ,
65+ deg2m : float = 1852 * 60.0
6566) -> tuple [float , float , float , float , float , float , float , float , float ]:
6667 dphidxsi , dphideta , dphidzet = dphidxsi3D_lin (zeta , eta , xsi )
6768
68- if mesh == 'spherical' :
69- deg2m = 1852 * 60.
69+ if mesh .is_spherical ():
7070 rad = np .pi / 180.
7171 lat = (1 - xsi ) * (1 - eta ) * hexa_y [0 ] + \
7272 xsi * (1 - eta ) * hexa_y [1 ] + \
@@ -92,9 +92,10 @@ def dxdxsi3D_lin(
9292
9393
9494def jacobian3D_lin (
95- hexa_z : list [float ], hexa_y : list [float ], hexa_x : list [float ], zeta : float , eta : float , xsi : float , mesh : Mesh
95+ hexa_z : list [float ], hexa_y : list [float ], hexa_x : list [float ], zeta : float , eta : float , xsi : float , mesh : BaseMesh ,
96+ deg2m : float = 1852 * 60.0
9697) -> float :
97- dxdxsi , dxdeta , dxdzet , dydxsi , dydeta , dydzet , dzdxsi , dzdeta , dzdzet = dxdxsi3D_lin (hexa_z , hexa_y , hexa_x , zeta , eta , xsi , mesh )
98+ dxdxsi , dxdeta , dxdzet , dydxsi , dydeta , dydzet , dzdxsi , dzdeta , dzdzet = dxdxsi3D_lin (hexa_z , hexa_y , hexa_x , zeta , eta , xsi , mesh , deg2m )
9899
99100 jac = (
100101 dxdxsi * (dydeta * dzdzet - dzdeta * dydzet )
@@ -112,7 +113,7 @@ def jacobian3D_lin_face(
112113 eta : float ,
113114 xsi : float ,
114115 orientation : Literal ["zonal" , "meridional" , "vertical" ],
115- mesh : Mesh ,
116+ mesh : BaseMesh ,
116117) -> float :
117118 dxdxsi , dxdeta , dxdzet , dydxsi , dydeta , dydzet , dzdxsi , dzdeta , dzdzet = dxdxsi3D_lin (hexa_z , hexa_y , hexa_x , zeta , eta , xsi , mesh )
118119
@@ -174,10 +175,11 @@ def interpolate(phi: Callable[[float], list[float]], f: list[float], xsi: float)
174175 return np .dot (phi (xsi ), f )
175176
176177
177- def _geodetic_distance (lat1 : float , lat2 : float , lon1 : float , lon2 : float , mesh : Mesh , lat : float ) -> float :
178- if mesh == "spherical" :
178+ def _geodetic_distance (
179+ lat1 : float , lat2 : float , lon1 : float , lon2 : float , mesh : BaseMesh , lat : float , deg2m : float = 1852 * 60.0
180+ ) -> float :
181+ if mesh .is_spherical ():
179182 rad = np .pi / 180.0
180- deg2m = 1852 * 60.0
181183 return np .sqrt (((lon2 - lon1 ) * deg2m * np .cos (rad * lat )) ** 2 + ((lat2 - lat1 ) * deg2m ) ** 2 )
182184 else :
183185 return np .sqrt ((lon2 - lon1 ) ** 2 + (lat2 - lat1 ) ** 2 )
0 commit comments