Skip to content

Commit 94aa3cf

Browse files
authored
Optimize Bounds Construction (#1205)
* optimize bounds and face edge node construction * add parallel norms * use xarray * update norm * parallel norm * coordinate optimization * remove comment * add array types to norm signature * Use xarray ufuncs to normalize coordinates, set min xarray version * correct pyproject.toml * docstring cleanup * re-add numba cache check * remove space after version pin * pre-commit * update function names * docstrings, update function names, unpin xarray * clean notebook, update util name * use regular abs, update numba cache check
1 parent 4fe0c69 commit 94aa3cf

File tree

12 files changed

+794
-754
lines changed

12 files changed

+794
-754
lines changed

docs/examples/visualization/mpas_topology.ipynb

Lines changed: 20 additions & 44 deletions
Large diffs are not rendered by default.

test/test_geometry.py

Lines changed: 50 additions & 48 deletions
Large diffs are not rendered by default.

test/test_helpers.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
from uxarray.constants import INT_DTYPE, INT_FILL_VALUE
1212
from uxarray.grid.coordinates import _lonlat_rad_to_xyz, _normalize_xyz, _xyz_to_lonlat_rad
1313
from uxarray.grid.arcs import point_within_gca, _angle_of_2_vectors, in_between
14-
from uxarray.grid.utils import _get_cartesian_face_edge_nodes, _get_lonlat_rad_face_edge_nodes
14+
from uxarray.grid.utils import _get_cartesian_face_edge_nodes_array, _get_lonlat_rad_face_edge_nodes_array
1515
from uxarray.grid.geometry import pole_point_inside_polygon, _pole_point_inside_polygon_cartesian
1616

1717
try:
@@ -273,7 +273,7 @@ def test_get_cartesian_face_edge_nodes_pipeline():
273273
node_y = grid.node_y.values
274274
node_z = grid.node_z.values
275275

276-
face_edges_connectivity_cartesian = _get_cartesian_face_edge_nodes(
276+
face_edges_connectivity_cartesian = _get_cartesian_face_edge_nodes_array(
277277
face_node_conn, n_face, n_max_face_edges, node_x, node_y, node_z
278278
)
279279

@@ -298,7 +298,7 @@ def test_get_cartesian_face_edge_nodes_filled_value():
298298
node_y = grid.node_y.values
299299
node_z = grid.node_z.values
300300

301-
face_edges_connectivity_cartesian = _get_cartesian_face_edge_nodes(
301+
face_edges_connectivity_cartesian = _get_cartesian_face_edge_nodes_array(
302302
face_node_conn, n_face, n_max_face_edges, node_x, node_y, node_z
303303
)
304304

@@ -335,7 +335,7 @@ def test_get_cartesian_face_edge_nodes_filled_value2():
335335
node_y = np.array([v0_cart[1],v1_cart[1],v2_cart[1],v3_cart[1],v4_cart[1]])
336336
node_z = np.array([v0_cart[2],v1_cart[2],v2_cart[2],v3_cart[2],v4_cart[2]])
337337

338-
face_edges_connectivity_cartesian = _get_cartesian_face_edge_nodes(
338+
face_edges_connectivity_cartesian = _get_cartesian_face_edge_nodes_array(
339339
face_node_conn, n_face, n_max_face_edges, node_x, node_y, node_z
340340
)
341341

@@ -368,7 +368,7 @@ def test_get_lonlat_face_edge_nodes_pipeline():
368368
node_lon = grid.node_lon.values
369369
node_lat = grid.node_lat.values
370370

371-
face_edges_connectivity_lonlat = _get_lonlat_rad_face_edge_nodes(
371+
face_edges_connectivity_lonlat = _get_lonlat_rad_face_edge_nodes_array(
372372
face_node_conn, n_face, n_max_face_edges, node_lon, node_lat
373373
)
374374

@@ -398,7 +398,7 @@ def test_get_lonlat_face_edge_nodes_filled_value():
398398
node_lon = grid.node_lon.values
399399
node_lat = grid.node_lat.values
400400

401-
face_edges_connectivity_lonlat = _get_lonlat_rad_face_edge_nodes(
401+
face_edges_connectivity_lonlat = _get_lonlat_rad_face_edge_nodes_array(
402402
face_node_conn, n_face, n_max_face_edges, node_lon, node_lat
403403
)
404404

@@ -434,7 +434,7 @@ def test_get_lonlat_face_edge_nodes_filled_value2():
434434
node_lon = np.array([v0_rad[0],v1_rad[0],v2_rad[0],v3_rad[0],v4_rad[0]])
435435
node_lat = np.array([v0_rad[1],v1_rad[1],v2_rad[1],v3_rad[1],v4_rad[1]])
436436

437-
face_edges_connectivity_lonlat = _get_lonlat_rad_face_edge_nodes(
437+
face_edges_connectivity_lonlat = _get_lonlat_rad_face_edge_nodes_array(
438438
face_node_conn, n_face, n_max_face_edges, node_lon, node_lat
439439
)
440440

test/test_integrate.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
_get_faces_constLat_intersection_info, _zonal_face_weights, \
2020
_zonal_face_weights_robust
2121

22-
from uxarray.grid.utils import _get_cartesian_face_edge_nodes
22+
from uxarray.grid.utils import _get_cartesian_face_edge_nodes_array
2323

2424
current_path = Path(os.path.dirname(os.path.realpath(__file__)))
2525

@@ -1037,7 +1037,7 @@ def test_compare_zonal_weights():
10371037
for gridfile in gridfiles:
10381038
uxgrid = ux.open_grid(gridfile)
10391039
n_nodes_per_face = uxgrid.n_nodes_per_face.values
1040-
face_edge_nodes_xyz = _get_cartesian_face_edge_nodes(
1040+
face_edge_nodes_xyz = _get_cartesian_face_edge_nodes_array(
10411041
uxgrid.face_node_connectivity.values,
10421042
uxgrid.n_face,
10431043
uxgrid.n_max_face_edges,

test/test_intersections.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -161,14 +161,14 @@ def test_GCA_GCA_north_pole_angled():
161161

162162
def test_GCA_edge_intersection_count():
163163

164-
from uxarray.grid.utils import _get_cartesian_face_edge_nodes
164+
from uxarray.grid.utils import _get_cartesian_face_edge_nodes_array
165165

166166
# Generate a normal face that is not crossing the antimeridian or the poles
167167
vertices_lonlat = [[29.5, 11.0], [29.5, 10.0], [30.5, 10.0], [30.5, 11.0]]
168168
vertices_lonlat = np.array(vertices_lonlat)
169169

170170
grid = ux.Grid.from_face_vertices(vertices_lonlat, latlon=True)
171-
face_edge_nodes_cartesian = _get_cartesian_face_edge_nodes(
171+
face_edge_nodes_cartesian = _get_cartesian_face_edge_nodes_array(
172172
grid.face_node_connectivity.values,
173173
grid.n_face,
174174
grid.n_max_face_edges,

uxarray/core/zonal.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import numpy as np
33

44
from uxarray.grid.integrate import _zonal_face_weights, _zonal_face_weights_robust
5-
from uxarray.grid.utils import _get_cartesian_face_edge_nodes
5+
from uxarray.grid.utils import _get_cartesian_face_edge_nodes_array
66

77

88
def _compute_non_conservative_zonal_mean(uxda, latitudes, use_robust_weights=False):
@@ -17,7 +17,7 @@ def _compute_non_conservative_zonal_mean(uxda, latitudes, use_robust_weights=Fal
1717
# Create a NumPy array for storing results
1818
result = np.zeros(shape, dtype=uxda.dtype)
1919

20-
faces_edge_nodes_xyz = _get_cartesian_face_edge_nodes(
20+
faces_edge_nodes_xyz = _get_cartesian_face_edge_nodes_array(
2121
uxgrid.face_node_connectivity.values,
2222
uxgrid.n_face,
2323
uxgrid.n_max_face_nodes,

0 commit comments

Comments
 (0)