|
| 1 | +<!DOCTYPE html> |
| 2 | +<html> |
| 3 | +<head> |
| 4 | +<meta charset="utf-8" /> |
| 5 | +<title>UXarray: Xarray extensions for unstructured grids</title> |
| 6 | +<style> |
| 7 | + body { font-family: Georgia, serif; line-height: 1.45; margin: 2rem; } |
| 8 | + h1, h2, h3 { font-family: Helvetica, Arial, sans-serif; } |
| 9 | + code, pre { font-family: Menlo, Consolas, monospace; background: #f6f8fa; padding: 2px 4px; } |
| 10 | + figure { margin: 1rem 0; } |
| 11 | + figcaption { font-size: 0.9rem; color: #666; } |
| 12 | +</style> |
| 13 | +</head> |
| 14 | +<body> |
| 15 | +<h1>UXarray: Xarray extensions for unstructured grids</h1> |
| 16 | + |
| 17 | +<h2>(1) Overview</h2> |
| 18 | + |
| 19 | +<h3>Title</h3> |
| 20 | +<p>UXarray: Xarray extensions for unstructured climate and weather data</p> |
| 21 | + |
| 22 | +<h3>Paper Authors</h3> |
| 23 | +<ul> |
| 24 | + <li><strong>Rajeev Jain</strong> (Lead Author), University/Institution TBD, ORCID: TBD</li> |
| 25 | + <li>Aaron Zedwick, Affiliation TBD</li> |
| 26 | + <li>David Ahijevych, NCAR (TBD)</li> |
| 27 | + <li>Anissa Zacharias, UCAR (TBD)</li> |
| 28 | + <li>David Galicia, Affiliation TBD</li> |
| 29 | + <li>Orhan Eroglu, Affiliation TBD</li> |
| 30 | + <li>Paul Ullrich, UC Davis (TBD)</li> |
| 31 | + <li>Philip Chmielowiec, Affiliation TBD</li> |
| 32 | + <li>Hongyu Chen, UC Davis (TBD)</li> |
| 33 | + <li>Kristen Thyng, Affiliation TBD</li> |
| 34 | + <li>Mario A. Rodriguez, NCAR (TBD)</li> |
| 35 | + <li>Maxime Liquet, Affiliation TBD</li> |
| 36 | + <li>Michaela Sizemore, Affiliation TBD</li> |
| 37 | + <li>Katelyn FitzGerald, Affiliation TBD</li> |
| 38 | + <li>Filipe Fernandes, Affiliation TBD</li> |
| 39 | + <li>... (additional contributors from git history)</li> |
| 40 | +</ul> |
| 41 | + |
| 42 | +<h3>Abstract</h3> |
| 43 | +<p> |
| 44 | +UXarray provides an Xarray-compatible interface for loading, analyzing, and |
| 45 | +visualizing data on unstructured grids. It standardizes access to common grid |
| 46 | +representations (UGRID, MPAS, Exodus, ICON, SCRIP, ESMF, FESOM, HEALPix) and |
| 47 | +exposes familiar DataArray/Dataset accessors for grid-aware operations, such as |
| 48 | +subset, remap, cross-section extraction, and zonal statistics. |
| 49 | +</p> |
| 50 | + |
| 51 | +<h3>Keywords</h3> |
| 52 | +<p>unstructured grids; xarray; UGRID; MPAS; Exodus; ICON; climate; geoscience; visualization</p> |
| 53 | + |
| 54 | +<h3>Introduction</h3> |
| 55 | +<p> |
| 56 | +Many next-generation climate and weather models produce data on unstructured |
| 57 | +meshes. While Xarray provides a robust interface for labeled N-dimensional |
| 58 | +arrays, it does not natively understand unstructured grid topology. UXarray |
| 59 | +bridges this gap by pairing Xarray objects with a Grid, enforcing UGRID-style |
| 60 | +conventions, and providing operations that respect mesh geometry and |
| 61 | +connectivity. |
| 62 | +</p> |
| 63 | + |
| 64 | +<h3>Implementation and Architecture</h3> |
| 65 | +<p> |
| 66 | +UXarray adds grid-aware accessors to UxDataArray and Grid, with core modules for |
| 67 | +I/O, subsetting, remapping, plotting, and cross-sections. Figure 1 outlines the |
| 68 | +major components. |
| 69 | +</p> |
| 70 | +<figure> |
| 71 | + <img src="images/fig1.svg" alt="Overview diagram" width="640" /> |
| 72 | + <figcaption>Figure 1: UXarray components and data flow.</figcaption> |
| 73 | +</figure> |
| 74 | +<pre><code> |
| 75 | +import uxarray as ux |
| 76 | +uxgrid = ux.open_grid("grid.ug") |
| 77 | +uxds = ux.open_dataset("grid.ug", "psi.nc") |
| 78 | + |
| 79 | +# Cross-section along a geodesic |
| 80 | +cs = uxds["psi"].cross_section(start=(-45, -45), end=(45, 45), steps=200) |
| 81 | +</code></pre> |
| 82 | + |
| 83 | +<h3>Case Studies / Example Applications</h3> |
| 84 | +<p> |
| 85 | +We demonstrate: (1) cross-section sampling along geodesics and constant |
| 86 | +parallels/meridians; (2) zonal means; (3) remapping workflows. Figure 2 shows a |
| 87 | +schematic cross-section sampling trajectory. |
| 88 | +</p> |
| 89 | +<figure> |
| 90 | + <img src="images/fig2.svg" alt="Cross-section sampling" width="640" /> |
| 91 | + <figcaption>Figure 2: Sampling a field along a geodesic arc (steps shown along the path).</figcaption> |
| 92 | +</figure> |
| 93 | + |
| 94 | +<h3>Conclusions</h3> |
| 95 | +<p> |
| 96 | +UXarray brings consistent, grid-aware operations to Xarray, enabling reusable |
| 97 | +analysis patterns across diverse unstructured formats. It unifies I/O and |
| 98 | +computation through a minimal, UGRID-consistent contract, supporting common |
| 99 | +geoscience analyses. |
| 100 | +</p> |
| 101 | + |
| 102 | +<h3>Quality Control</h3> |
| 103 | +<p> |
| 104 | +UXarray includes unit tests, continuous integration, pre-commit hooks and style |
| 105 | +checks. It runs on Linux (and macOS/Windows via CI) and targets Python 3.10+. |
| 106 | +</p> |
| 107 | + |
| 108 | +<h2>(2) Availability</h2> |
| 109 | + |
| 110 | +<h3>Operating System(s)</h3> |
| 111 | +<p>Linux, macOS, Windows (CI tested)</p> |
| 112 | + |
| 113 | +<h3>Programming Language</h3> |
| 114 | +<p>Python 3.10+</p> |
| 115 | + |
| 116 | +<h3>Dependencies</h3> |
| 117 | +<p>Key runtime dependencies include: antimeridian, cartopy, dask, datashader, |
| 118 | +geoviews, holoviews, matplotlib, netcdf4, numba, numpy (<2.3), pandas, |
| 119 | +pyarrow, requests, scikit-learn, scipy, shapely, spatialpandas, geopandas, |
| 120 | +xarray, hvplot, healpix, polars, pyproj.</p> |
| 121 | + |
| 122 | +<h3>List of Contributors</h3> |
| 123 | +<p>See the Git commit history for a full list of contributors. We acknowledge |
| 124 | +all listed authors above as core contributors.</p> |
| 125 | + |
| 126 | +<h3>Software Location</h3> |
| 127 | +<ul> |
| 128 | + <li><strong>Archive</strong>: TBD (e.g., Zenodo DOI)</li> |
| 129 | + <li><strong>Code Repository</strong>: <a href="https://github.com/UXARRAY/uxarray">https://github.com/UXARRAY/uxarray</a></li> |
| 130 | +</ul> |
| 131 | + |
| 132 | +<h2>(3) Reuse Potential</h2> |
| 133 | + |
| 134 | +<h3>General Applicability</h3> |
| 135 | +<p> |
| 136 | +UXarray is broadly applicable to global geoscience, oceanography, and weather |
| 137 | +model output on unstructured meshes. It is licensed under the BSD-3 license, |
| 138 | +with active issue tracking, contribution guidelines, and documentation. |
| 139 | +</p> |
| 140 | + |
| 141 | +<h3>Acknowledgements</h3> |
| 142 | +<ul> |
| 143 | + <li><strong>Funding Statement</strong>: TBD</li> |
| 144 | + <li><strong>Competing Interests</strong>: The authors declare no competing interests.</li> |
| 145 | +</ul> |
| 146 | + |
| 147 | +<h3>References</h3> |
| 148 | +<ol> |
| 149 | + <li>UGRID conventions and related resources.</li> |
| 150 | + <li>Xarray documentation and APIs.</li> |
| 151 | + <li>Model and format references (MPAS, Exodus, ICON, ESMF, FESOM, HEALPix).</li> |
| 152 | +</ol> |
| 153 | +</body> |
| 154 | +</html> |
0 commit comments