D3D updates#428
Conversation
|
Hey @akeeste I added the updates for the updated variable names in the Delft3D 2025 version. I was thinking about updating the code to also accept xarry in addition to netCDF. |
|
Hey @akeeste pending all the checks pass, this is ready for review. |
|
Thanks @browniea I'll look for some time to review next week |
| if not isinstance(data, netCDF4.Dataset): | ||
| raise TypeError("data must be a NetCDF4 object") | ||
| if not isinstance(data, (netCDF4.Dataset, xr.Dataset)): | ||
| raise TypeError("data must be a NetCDF4 object or xarray Dataset") |
There was a problem hiding this comment.
Add a test for xarray input
|
@akeeste The xarry input is a little more complicate than I initially thought. It might be worth adding an example. I'll plan to have a few functions converted for you to look at our next meeting. The rest of the changes are done. |
|
@browniea I checked your recent changes and pulled in dev. This looks good so far. The last remaining item is to add a test for d3d.py that uses xarray input. I don't think we need a full example--perhaps just duplicating an existing test that uses netcdf and inputting an xarray Dataset instead |
|
I also pulled develop into this branch. Might have to do so again when #435 is merged |
|
Making a note here that currently there is some redundancy processing both xarray and netCDF file formats. For now, I'm leaving the redundancy but, in the future, we could convert the input format instead of processing both. D3D outputs netCDF files although xarray has some advantages tabulating the data. |
|
Final few checks
|
|
Hey @akeeste This is ready to review. I did get an error from the test_io_d3d.py gave me an error I think coming from the hindcast. The error was it couldn't find the |
| def test_calculate_grid_convergence_index(self): | ||
| fine_grid = np.array([1.0, 2.0, 3.0]) | ||
| coarse_grid = np.array([0.5, 1.5, 2.5]) | ||
| refinement_ratio = 2.0 | ||
| gci = river.io.d3d.calculate_grid_convergence_index( | ||
| fine_grid, coarse_grid, refinement_ratio | ||
| ) | ||
| assert_array_almost_equal(gci, np.array([0.2083, 0.1042, 0.0694]), decimal=3) | ||
|
|
There was a problem hiding this comment.
this test is failing, but I'm pretty sure it's an issue with the install that #436 should address
|
@browniea, I added the latest changes from the develop branch into your PR: I see one failing test https://github.com/MHKiT-Software/MHKiT-Python/actions/runs/24349977070/job/71168836922#step:10:255: And some linting errors https://github.com/MHKiT-Software/MHKiT-Python/actions/runs/24349977059/job/71101336823: Let us know if you have questions on how to fix the failing test or |
|
Hey @akeeste I'm getting some errors with the 'test_get_buoy_metadata' function. Have you seen this anywhere else? |
@akeeste I skipped the last pylint error. If that's of with you this is ready to merge. |
|
Thanks @browniea ! Merging |
# MHKiT-Python v1.1.0 ## Additions * Acoustics: Add millicdecade and WISPR instrument support * Added millidecade spectral conversion * Added a WISPR hydrophone reader * Added a voltage-based `export_audio` resampling option * Refactored band-averaging to avoid losing information at frequency-band boundaries * #447 * Author: @jmcvey3 * Reviewer: @simmsa * DOLfYN: Add [Nortek Aquadopp](https://www.nortekgroup.com/oceanography/aquadopp-series) ADCP support * Added DOLfYN support for reading Aquadopp instruments * Cleaned Nortek parsing code * Simplified handling of the non-cabled ADV orientation flag * #434 * Author: @jmcvey3 * Reviewer: @akeeste * Examples: Add ADCP waves example: `example/adcp_waves_example.ipynb` * Added an example notebook showing how to ingest and analyze wave measurements from a dual-profile Nortek Signature 250 deployment at PacWave. * #430 * Author: @jmcvey3 * Reviewer: @akeeste ## Improvements ### Acoustics - Improved flexibility and robustness of the Acoustics module - Added a configurable FFT length for sound pressure PSDs - Renamed bin/windowing attributes for clarity - Fixed an incorrectly signed gain correction - #433 - Author: @jmcvey3 - Reviewer: @akeeste ### DOLfYN - Refactored PSD calculations to use `scipy.signal.welch` - Replaced DOLfYN's custom Welch-like PSD implementation (built each segment from bin slices, could not overlap FFT segments) with `scipy.signal.welch` - Removed the bin-based segment structure and added a `step` argument to control overlap - Dropped float32 casts in some functions in favor of float64 - Removed `fft.py` and renamed `tools/misc.py` to `tools.py` - Breaking Changes: - NaNs are no longer tolerated in PSD calculations - DOLfYN defaults to 0% overlap to preserve existing array shapes - Acoustics defaults to 50% overlap - PSD output time dimension renamed to `time_psd` - #452 - Author: @jmcvey3 - Reviewer: @akeeste, @simmsa - Improved handling of "averaged" profiles - Fixed handling of Nortek Signature dual-profile ADCP data by defaulting to "_avg" velocity variables when untagged ones are absent. - #430 - Author: @jmcvey3 - Reviewer: @akeeste - Critical PSD bugfix - Fixed a bug where individual FFTs received a 50% overlap twice, which corrupted the first and last spectrum of a timeseries. - #430 - Author: @jmcvey3 - Reviewer: @akeeste ### Examples - Added histograms to ADCP example - #448 - Author: @browniea - Reviewer: @akeeste ### River/IO - Fixed Qhull interpolation and D3D coordinate-system errors - #448 - Author: @browniea - Reviewer: @akeeste - Fixes: #442, #444 - Delft3D module updates - Added new Delft3D coordinate names - Added a new grid-convergence-index calculation function - Added support for xarray/netCDF4 input in the D3D module - #428 - Author: @browniea - Reviewer: @akeeste ### Wave - NDBC Directional Wave Units - Fixed NDBC directional wave spectrum output to return degrees instead of radians - Updated polar plots so 0 deg is at the top and increases clockwise - #437 - Author: @jmcvey3 - Reviewer: @akeeste - Fixes: #427 ### Wave/Hindcast - Added a `hindcast_guard` exception-handling decorator (`hindcast_exceptions.py`) that surfaces a clear error on HSDS request failures, distinguishing the known NLR HSDS outage (#450) from other failures - #449 - Author: @simmsa - Reviewer: @akeeste ## Maintenance - Added Python 3.13 support - #445 - Author: @simmsa - Reviewer: @akeeste - Fixes: #441 - Added [pandas 3](https://pandas.pydata.org/community/blog/pandas-3.0.html) Support - Updated the pandas dependency to allow pandas 3.x - Added a compatibility shim for NDBC missing-value handling related to pandas 3 object to String dtype api changes - Fixed a deprecated period alias in tests - #443 - Author: @simmsa - Reviewer: @akeeste - Fixes: #440 - Updated GitHub Actions CI, expanded installation/developer documentation, refreshed dev environment, and trimmed dependencies - Refactored optional dependencies - Standardized conda/conda-forge environment builds - Scoped black linting to changed files - #436 - Author: @simmsa - Reviewer: @akeeste - Update `rex` dependency to target pypi package to [`NLR-rex[hsds]>=0.5.0`](https://pypi.org/project/NLR-rex/) - #449 - Author: @simmsa - Reviewer: @akeeste
Updates to
io/d3d.pycodecalculate_grid_convergence_indexfunction to calculate the grid convergence index between two grid's results basted on the equation GCI