1+ import math
12
2- import uxarray as ux
33import numpy as np
44import pandas as pd
5+ import uxarray as ux
56
6- import math
7-
8- __all__ = ["datasets" , "Nx" ]
7+ __all__ = ["Nx" , "datasets" ]
98
109Nx = 20
1110vmax = 1.0
1211delta = 0.1
1312
13+
1414def _stommel_gyre_delaunay ():
15- lon , lat = np .meshgrid (np .linspace (0 , 60.0 , Nx , dtype = np .float32 ),
16- np .linspace (0 , 60.0 , Nx , dtype = np .float32 ))
15+ lon , lat = np .meshgrid (np .linspace (0 , 60.0 , Nx , dtype = np .float32 ), np .linspace (0 , 60.0 , Nx , dtype = np .float32 ))
1716 lon_flat = lon .ravel ()
1817 lat_flat = lat .ravel ()
1918
2019 # mask any point on one of the boundaries
2120 mask = (
22- np .isclose (lon_flat , 0.0 ) |
23- np .isclose (lon_flat , 60.0 ) |
24- np .isclose (lat_flat , 0.0 ) |
25- np .isclose (lat_flat , 60.0 )
21+ np .isclose (lon_flat , 0.0 ) | np .isclose (lon_flat , 60.0 ) | np .isclose (lat_flat , 0.0 ) | np .isclose (lat_flat , 60.0 )
2622 )
2723
2824 boundary_points = np .flatnonzero (mask )
@@ -32,33 +28,19 @@ def _stommel_gyre_delaunay():
3228 method = "regional_delaunay" ,
3329 boundary_points = boundary_points ,
3430 )
35-
31+
3632 # Define arrays U (zonal), V (meridional) and P (sea surface height)
3733 U = np .zeros ((1 , 1 , lat .size ), dtype = np .float64 )
3834 V = np .zeros ((1 , 1 , lat .size ), dtype = np .float64 )
3935 P = np .zeros ((1 , 1 , lat .size ), dtype = np .float64 )
4036
41- for i , (x , y ) in enumerate (zip (lon_flat , lat_flat )):
37+ for i , (x , y ) in enumerate (zip (lon_flat , lat_flat , strict = False )):
4238 xi = x / 60.0
4339 yi = y / 60.0
44-
45- P [0 , 0 , i ] = (
46- - vmax * delta
47- * (1 - xi )
48- * (math .exp (- xi / delta ) - 1 )
49- * np .sin (math .pi * yi )
50- )
51- U [0 , 0 , i ] = (
52- - vmax
53- * (1 - math .exp (- xi / delta ) - xi )
54- * np .cos (math .pi * yi )
55- )
56- V [0 , 0 , i ] = (
57- vmax
58- * ((2.0 - xi )* math .exp (- xi / delta ) - 1 )
59- * np .sin (math .pi * yi )
60- )
6140
41+ P [0 , 0 , i ] = - vmax * delta * (1 - xi ) * (math .exp (- xi / delta ) - 1 ) * np .sin (math .pi * yi )
42+ U [0 , 0 , i ] = - vmax * (1 - math .exp (- xi / delta ) - xi ) * np .cos (math .pi * yi )
43+ V [0 , 0 , i ] = vmax * ((2.0 - xi ) * math .exp (- xi / delta ) - 1 ) * np .sin (math .pi * yi )
6244
6345 u = ux .UxDataArray (
6446 data = U ,
@@ -70,11 +52,7 @@ def _stommel_gyre_delaunay():
7052 nz1 = (["nz1" ], [0 ]),
7153 ),
7254 attrs = dict (
73- description = "zonal velocity" ,
74- units = "m/s" ,
75- location = "node" ,
76- mesh = "delaunay" ,
77- Conventions = "UGRID-1.0"
55+ description = "zonal velocity" , units = "m/s" , location = "node" , mesh = "delaunay" , Conventions = "UGRID-1.0"
7856 ),
7957 )
8058 v = ux .UxDataArray (
@@ -87,11 +65,7 @@ def _stommel_gyre_delaunay():
8765 nz1 = (["nz1" ], [0 ]),
8866 ),
8967 attrs = dict (
90- description = "meridional velocity" ,
91- units = "m/s" ,
92- location = "node" ,
93- mesh = "delaunay" ,
94- Conventions = "UGRID-1.0"
68+ description = "meridional velocity" , units = "m/s" , location = "node" , mesh = "delaunay" , Conventions = "UGRID-1.0"
9569 ),
9670 )
9771 p = ux .UxDataArray (
@@ -103,18 +77,12 @@ def _stommel_gyre_delaunay():
10377 time = (["time" ], pd .to_datetime (["2000-01-01" ])),
10478 nz1 = (["nz1" ], [0 ]),
10579 ),
106- attrs = dict (
107- description = "pressure" ,
108- units = "N/m^2" ,
109- location = "node" ,
110- mesh = "delaunay" ,
111- Conventions = "UGRID-1.0"
112- ),
80+ attrs = dict (description = "pressure" , units = "N/m^2" , location = "node" , mesh = "delaunay" , Conventions = "UGRID-1.0" ),
11381 )
11482
11583 return ux .UxDataset ({"U" : u , "V" : v , "p" : p }, uxgrid = uxgrid )
11684
11785
11886datasets = {
11987 "stommel_gyre_delaunay" : _stommel_gyre_delaunay (),
120- }
88+ }
0 commit comments