Release Notes

MHKiT-Python v0.9.0

MHKiT v0.9.0 includes significant new features, enhancements, bug fixes, and updates to improve the functionality, performance, and compatibility of MHKiT: New features:

  • Acoustics Module
    • Introduced a new Acoustics module to MHKiT, providing comprehensive tools for processing and analyzing passive acoustic data from hydrophone recordings.

    • Designed to facilitate compliance with the IEC-TS 62600-40 standard

    • Supports hydrophone models such as SoundTrap and icListen, with functionality to read, calibrate, and process hydrophone data into acoustic metrics.

    • Includes functionalities for: - Reading hydrophone data. - Performing spectral analyses.

      • spectral density (SPSD)

      • spectral density levels (SPSDL)

      • Fractional octave bands (e.g., third-octave, decidecade)

      • Sound Pressure Level (SPL)

      • Applying calibrations.

      • Calculating sound pressure levels.

      • Visualizing results.

      • Audio export
        • To support users, an example notebook demonstrates the application of this module with workflows.

  • Strain Processing Example
    • The Strain Processing example introduces a workflow for analyzing strain gauge data, particularly from tidal turbine blade testing. While the functions are not included as a formal MHKiT module due to the variability of test setups, this example notebook provides a detailed and practical framework for processing such data.

    • Illustrates the calibration and processing of strain gauge data, showcasing a real-world application in tidal turbine testing.

    • Designed to accommodate the variability in strain gauge testing setups, enabling users to adapt the workflow to their specific needs.

    • Includes figures and explanations to contextualize the analysis and support data interpretation.

    • Reference:
      • Gunawan, B., Haulenbeek, K., Abdellatef, M., Streit, R., Lynn, E., Willis, M., Pendley, D., Gallegos-Patterson, D., Neary, V., Wosnik, M. (2024). Calibration Of Fiber Optic Rosette Sensors For Measuring Bending Moment On Tidal Turbine Blades. International Conference on Ocean Energy, Melbourne, Australia, September 17–19, 2024.

Enhancements:

  • Wave Resource Module Performance
    • Optimizes the wave.resource module to improve performance and resolve issue #331 by transitioning from xarray.Dataset to xarray.DataArray for core functions. Handling edge cases robustly in pure numpy proved challenging, so the adoption of DataArray strikes a balance between performance and usability.
      • Transitioning to DataArray provides a significant speed-up—up to 1000x faster for very large datasets compared to the previous Dataset implementation.

      • While pure numpy would offer an additional 5-10x speed-up, DataArray ensures better usability and flexibility for both developers and users.

      • Restores the speed of MHKiT’s wave resource functions to their previous state, making the module more efficient for users working with large datasets.

      • Simplified input handling for elevation_spectrum and surface_elevation functions.

  • Surface Elevation Method Selection
    • Enhanced surface_elevation function to handle spectra without a zero frequency index.

    • Introduced an auto method for surface elevation calculations that selects the most suitable computation method based on the input spectrum:
      • Automatically switches to sum_of_sines method when Inverse Fast Fourier Transform (IFFT) is not computable.

    • Added warnings to inform users of method changes.

    • Added an optional frequency_dimension parameter across all necessary wave.resource functions for better flexibility.

  • DOLfYN Cleaning Functions Update
    • Renamed and enhanced water depth calculation and surface interference removal functions for improved robustness.

    • Added an optional frequency_dimension parameter to relevant wave.resource functions, including significant_wave_height and others, to improve compatibility with xarray formats and enhance input flexibility.

    • Fixed issues identified in Issue #308

  • Reynolds Stress ADCP Estimation Notebook Improvements
    • Removed the total_tke function due to limitations of ADCP measurements in accurately estimating smaller turbulent scales and components of TKE.

    • Clarified the assumptions required for ADCP measurements:
      • Assumption of Homogeneity: Minimal vertical motion between beam measurements.

      • Spatial Resolution: Turbulent scales smaller than the beam distance cannot be resolved.

    • Expanded explanations of TKE shear production, emphasizing the limitations of ADCP-derived Reynolds stress and TKE estimations compared to point measurements from ADV and shear probes.

    • Corrected heading rotation logic to prevent rotation beyond 360 degrees.

    • Expanded the ADV notebook to cover all relevant functions, emphasizing the accuracy and reliability of ADV measurements for TKE components and Reynolds stress.

  • Type Handling Improvements
    • Fixed a bug in wave performance Mean Annual Energy Production (MAEP) matrix calculation (Issue #339).

    • Improved type handling between Datasets and DataArrays, enhancing function robustness.

  • NOAA Request Function Update
    • Fixed imprecise error handling in mhkit.tidal.io.noaa.request_noaa_data to ensure meaningful and actionable error messages.

    • Enhanced functionality to support additional NOAA data request parameters (e.g., datum) for variables such as water level, water temperature, and salinity.

    • Fixed Issue #223.

Bug fixes:

  • Numpy 2.0 Compatibility

  • Flow Duration Curve Plot Bug Fix
    • Fixed a bug in the flow duration curve plotting function related to matplotlib >= 3.8.

    • Corrected the sortby assignment to use the correct value.

  • Matplotlib Version Compatibility
    • Removed the matplotlib version check previously required for versions < 3.8.0.

    • Ensured compatibility with matplotlib >= 3.8.

  • Python 3.12 Support
    • Added support for Python 3.12.

  • Documentation Build Warnings Fix
    • Fixed minor spacing and formatting issues in the documentation that were causing warnings during the build process.

Testing and Continuous Integration Updates:

  • GitHub Actions Enhancements
    • Notebook Testing: Added a GitHub Action to test example notebooks as part of the Continuous Deployment (CD) pipeline.

    • Implemented a timeout feature to fail notebooks that exceed a specified execution time.

    • PyLint Enforcement: Made the utils module PyLint compatible and enforced this compatibility via GitHub Actions.

    • Testing Environment Consistency: Updated the GitHub Actions testing environment to use the conda environment.yml file for consistency.

    • Pylint Settings Update: Updated Pylint settings and disabled specific warnings as necessary.

  • Wind Toolkit Tests Optimization
    • Optimized the Wind Toolkit tests, reducing test runtime from over 3.5 hours to approximately 2 hours by modifying the test data and aligning it with cached data used in the notebooks.

    • Replaced test data with smaller, representative datasets, improving efficiency without sacrificing robustness.

    • Ensured consistent use of cached data between hindcast tests and notebooks to minimize redundant API requests and reduce reliance on live NREL server calls.

  • MacOS Tests Fix
    • Adjusted test tolerances to fix failing tests on MacOS systems.

  • Updated Examples and Notebooks
    • Updated Jupyter notebooks for the new Acoustics module.

    • Fixed typos and updated examples in notebooks, including the Pacwave and CDIP examples.

    • Enhanced strain processing example with additional figures and context.

Other Changes:

  • Updated the README to include conda-forge in the conda install command for easier installation.

  • Updated folium map calls in the Pacwave example to align with the latest folium API changes.

  • Use main as the MHKiT default branch
    • Many modern projects use main as the default branch, aligning with the GitHub recommendation and broader conventions.

    • There is some non-linear history in the previous rebase causing issues between develop & master

    • main was created from the current develop branch creating a 1-to-1 liner history between develop and the new main branch

MHKiT-Python v0.8.2

MHKiT-Python v0.8.2 adds the following capabilities, bug fixes, and maintenance to MHKiT-Python:

  • Fixes MHKIT v0.8.1 runtime issues requiring matplotlib >3.8.0.

  • Adds ipython notebook tests

  • Drops support for python < 3.10

  • Improves the wind toolkit tests by decreasing the testing time from > 4 hours to roughly 2 hours

  • Improved ADCP TKE example notebook discussion & removal of ADCP TKE function

  • Updated the surface_elevation calculation method to default to sum_of_sines when zero frequency is absent

  • Improved NOAA requests function issue

MHKiT-MATLAB v0.5.0

MHKiT-MATLAB v0.5.0 adds the following capabilities, bug fixes, and maintenance to MHKiT-MATLAB:

New Features:

  • Addition of the WEC Design Response Toolbox within the wave module #127 - Estimate extreme sea states based on short term data

  • Addition of the Delft3D input and analysis within the tidal module #124 - Analyze modeled river/tidal flow data using same tools as ADCP and resource data

Improvements:

Fixes:

  • Allow user to specific surface elevation generation method

  • Properly map the gamma parameter in the jonswap function

MHKiT-Python v0.8.1

MHKiT-Python v0.8.1 adds the following bug fixes maintenance to MHKiT-Python:
  • Bug fixes in the example notebooks

  • Fixes the dependencies prior to supporting Numpy 2.0.0.

MHKiT-Python v0.8.0

MHKiT-Python v0.8.0 adds the following modules and capabilities to MHKiT-Python:

  • Support for python 3.10 and 3.11

  • Support for xarray input and output across all MHKiT functions

  • Wave module enhancements:
    • Automatic Threshold Calculation for Peaks-Over-Threshold

    • Wave Heights Analysis

    • Enhanced Zero Crossing Analysis

  • DOLfYN enhancements:
    • Altimeter Support

    • Data Handling Improvements

    • Instrument Noise Subtraction

    • Improved File Handling

  • River and Tidal - D3D:
    • Added limits to variable_interpolation and added 3 array input capability to create_points

  • Developer Experience:
    • Black formatting

    • Linting and type hints

    • CI/CD improvements

  • General upkeep and compatibility maintenance

  • General Bug Fixes

MHKiT-Python v0.7.0

MHKiT-Python v0.7.0 adds the following modules and capabilities to MHKiT-Python:

  • Mooring Module: We are pleased to introduce the new mooring module. This addition primarily supports outputs from MoorDyn. Within this module, users can:
    • Import data

    • Calculate lay length

    • Visualize mooring line movements in 2D and 3D with graphical animations.

    • Accompanying this module is an example notebook to guide users on its functionalities.

  • Dolfyn Module Revamp: The Dolfyn module has been overhauled. Enhancements include:
    • Turbulence calculation capability

    • Performance measures for tidal power as outlined in IEC/TS 6200-200.

  • New Contributions: A big shoutout to our community member, @mbruggs, for adding the ability to compute surface elevation using IFFT.

  • NDBC Buoy Metadata: Users can now fetch NDBC buoy metadata directly through MHKiT.

  • Delft3D Module Update: Stay up to date with support for the latest Delft3D NetCDF format.

  • Provide a function to convert from Te to Tp using ITTC approximation

  • General upkeep and compatibility maintenance

  • General Bug Fixes

MHKiT-Python v0.6.0

MHKiT-Python v0.6.0 adds the following modules and capabilities to MHKiT-Python:

  • Test Suite Restructure: improved the ability to run and edit tests by breaking them out from single files into folders containing tests for specific parts of each submodule

  • Added a metocean module which can pull data from the wind_toolkit with 4 regions and 1-hr or 5-min data

  • Two DOLfYN updates address bug fixes, clean up, and some feature expansion:
    • ADV skipped timesteps, max gap, and attributes

    • error in integral length scale calculation

    • error in despiking function

    • move Reynolds stress and cross-spectral density calculations to ADV folder

    • prevent inaccurate TKE calculation from ADCP velocity input

  • Delft3D z-calculation, timestep, and new example notebook comparing ADV, and D3D river transect data

  • WEC-Sim v5.0 support

  • Return period added for contours

  • Provide a function to convert from Te to Tp using ITTC approximation

  • General upkeep and compatibility maintenance

  • General Bug Fixes

MHKiT-Python v0.5.0 & MHKiT-Matlab v0.4.0

MHKiT-Python v0.5.0 adds the following modules and capabilities to MHKiT-Python:

  • Organization: grouped io specific functions in wave, tidal, and river into io folder

  • Updated Jonswap spectrum to match IEC guidance

  • dolfyn Added DOLfYN module to analyze and process ADV and ADCP data

  • wave.contours Incorporated the remaining WDRT functionality

  • river.io.d3d Added Delft3D case post-processing in the river/ tidal models

  • Fixed a bug in the wave elevation function

  • Include the last day in CDIP requests and file timezone issues with CDIP

  • Upgrades to processing numpy and pandas version to maintain compatability

MHKiT-Matlab v0.4.0 adds the following modules and capabilities to MHKiT-MATLAB:

  • Updated Jonswap spectrum to match IEC guidance

  • cdip Module: functions for downloading and converting CDiP data into MHKIT formats.

  • WPTO hindcast Module: functions for downloading and converting WPTO Hindcast data into MHKIT formats

  • Fixed a bug in the wave elevation function

MHKiT v0.4.0

MHKiT v0.4.0 adds the following modules and capabilities to MHKiT:

  • wave.io.cdip Module: functions for downloading and converting CDiP data into MHKIT formats (MHKiT-Python Only).

  • wave.io.hindcast Module: functions for downloading and converting WPTO Hindcast data into MHKIT formats (MHKiT-Python Only).

  • wave.io.swan Module: functions for importing and converting SWAN data into MHKIT formats.

  • wave.resource Module: Deep water approximations for wave resource characterization (MHKiT-Python Only).

  • utils Module: Vector averaging capabilities in statistics calculations.

  • wave.performance Module: Wave power performance workflow functions.

MHKiT v0.3.1

  • Ensures compatibility with dependency PECOS v0.1.9

MHKiT v0.3.0

MHKiT v0.3.0 adds the following modules to MHKiT:

Refer to the following GitHub repositories to access the MHKiT v0.3.0 tagged release:

MHKiT-Python v0.3.0

MHKiT-MATLAB v0.3.0

MHKiT v0.2.0

MHKiT v0.2.0 adds the following modules to MHKiT:

  • Power Module: Calculate quantities of interest for power production and power quality

  • Loads Module: Calculate quantities of interest for mechanical loads assessments

This release also includes minor updates to the wave module to improve the versatility of the module. Refer to the following GitHub repositories to access the MHKiT v0.2.0 tagged release:

MHKiT-Python v0.2.0

MHKiT-MATLAB v0.2.0

MHKiT v0.1.0

The first official release of MHKiT, developed in Python and MATLAB, includes the following modules:

  • QC Module: Perform quality control analysis

  • Wave Module: Calculate quantities of interest for wave energy converters (WEC)

  • River Module: Calculate quantities of interest for river energy converters (REC)

  • Tidal Module: Calculate quantities of interest for tidal energy converters (TEC)

  • Utils Module: Includes helper functions

The v0.1.0 release includes methods for resource assessment, device performance, graphics, io and quality control. Refer to the following GitHub repositories to access the MHKiT v0.1.0 tagged release:

MHKiT-Python v0.1.0

MHKiT-MATLAB v0.1.0