Release Notes

Changelog

All major changes are listed here.

Unreleased

0.7.0 (2024-06-04)

PyWAsP 0.7.0 is a major release with new features, improvements, and bug fixes.

Dependency updates

  • Following SPEC 0 this release supports python 3.10-3.12 and numpy 1.24-1.26.

  • Windkit =0.8.0 is required

  • PyWake is pinned to version 2.5.0 (commit 36da70b2335321e435194d277511c17d8f012571).

New features

New climate extrapolation functions

BWC resampling functions added

I/O added to TopographyMap and new CFD data-extraction method
  • New methods .save and .load added to pywasp.wasp.TopographyMap to save and load the topography map to/from a ZipFile Archieve.

  • pywasp.wasp.get_site_effects_cfd() also accepts a list of xr.datasets (read by the read_cfdres function in windkit) as input. It will extract the site effects in the order specified in the list.

Support for custom root CA certificates

  • In case of running pywasp under a proxy or another similar network setup, the filepath to a root CA certificate can be set on pywasp so it can connect to the licensing server.

Improvements

Deprecations

  • WaspVectorMap will be deprecated

  • windkit.WindTurbines deprecated for AEP functions. Use a dict of WTG xr.Dataset’s and a wind_turbine xr.Dataset instead.

Changes

  • pywasp.wasp.generalize() now uses pywasp.wasp.generalize_from_site_effects() instead of duplicating code

  • pywasp.wasp.interpolate_gwc() -> Can now also interpolate geostrophic wind climates. Code from windkit has been implemented in pywasp and can be used by using the argument engine="windkit".

  • pywasp.wasp.TopographyMap.get_site_effects() now reports an extra variable flow_sep_height, which can report the height where flow separation is expected based on slopes exceeding some given slope. The flow_sep_height is only active when using conf.terrain[64] == 1.

  • In all the downscale and generalize function an additional variable flow_sep_height can be used. This is added to the displacement height that is used for transformation of the wind climate. If this data array is not present on the site_effects dataset, it is added automatically.

  • Using a point dataset with multiple heights now gives a warning instead of a ValueError, because it is typically used in combination with pywasp.wasp.interpolate_gwc() and interp_method=”given” where it is fine to have more than one height.

Breaking changes

  • pywasp.wasp.get_wasp_down() renamed to pywasp.wasp.downscale_from_site_effects()

  • Changed order of arguments in pywasp.wasp.generalize_and_downscale() to bwc, topo_map, output_locs for consistency with generalize and downscale

  • pywasp.wasp.set_hgts() -> returns slightly more accurate generalized roughnesses when height_from and height_to are provided

  • pywasp.wasp.set_z0s() -> returns slightly more accurate generalized roughnesses when z0meso_from and z0meso_to are provided

  • pywasp.wasp.calc_temp_scale() the output of the dataset now returns the correct name ustar_over_pblh

  • pywasp.wasp.stability_histogram() now produces a dataset with the more correct names mean_pblh_scale_land and mean_pblh_scale_sea instead of mean_pblh_land and mean_pblh_sea. See for more details: https://link.springer.com/article/10.1007/s10546-023-00803-3

  • genwc_interp argument in downscale and generalize has been renamed to interp_method

  • pywasp.wasp.gross_aep(), pywasp.wasp.potential_aep(), and pywasp.wasp.wind_farm_flow_map() now uses a dict {"wtg_key1": wtg1, "wtg_key2": wtg2} and a turbines xarray.Dataset instead of a windkit.WindTurbines object. WTGs are mapped to turbines via the wtg_keys present in both the dict and the turbines dataset.

0.6.0 (2023-11-30)

Dependency updates

  • Following SPEC 0 this release supports python 3.10-3.12 and numpy 1.22-1.26. Due to build issues with numpy 1.26, neither it nor python 3.12 are supported on Windows.

  • Windkit =0.7.0 is required

  • PyWake is now pinned to version 2.5.0 (commit 36da70b2335321e435194d277511c17d8f012571).

New features

Support for WAsP CFD results

Breaking changes

  • pywasp.wasp.wind_farm_flow_map() now requires a wk.WindTurbines object, not separate wtg and locations arguments.

  • pywasp.wasp.wind_farm_flow_map() requires the new argument output_locs, which should be a “cuboid” xr.Dataset, which is where the flow map will be calculated. output_locs should be covered by the predicted wind climate object.

Changes

Improvements

  • Reduction of approximately 50% for calculations of wake-affected AEP.

Bug Fixes

  • PyWAsP on windows now can use the license.windenergy.dtu.dk licensing server.

  • Interpolation of mean_dgdz and mean_dgdz_dir are now carried out by interpolating the vector components, when a method other than "nearest" is used.

Deprecations

0.5.2 (2023-06-21)

Changes

  • Dependency updates: Python 3.8 & numpy 1.21 no longer supported following NEP 29. Windkit 0.6.3 is now required to support the regulation_type variable for wtg objects.

  • pywasp.wasp.TopographyMap.get_rou_rose() now allows to add displacements to the orographic grid, using the new elev_rose argument. If elev_rose is None, a dummy elevation rose is created.

  • pywasp.wasp.interpolate_gwc() now returns an interpolated generalized wind climate dataset with height coordinates.

  • Setting download_prompt=False and download_global_nc_files in the pywasp.cfg file, will not prevent any text from showing when importing PyWAsP. Previously it would print a message about how to get the files on each import. If you need the files, you will be prompted to download at that time. See the User Configuration Documentation to see all options of the config file.

Improvements

  • Update netCDF file with CFSR baroclinicity information. The data is the same but the data variable names are updated. It does not affect the behavior.

  • pywasp.wasp.interpolate_gwc() will issue a warning if it is used with datasets with geographical coordinates for “nearest” and “natural” methods.

Bug Fixes

  • pywasp.io.rastermap_to_vectormap() will only raises errors related with the parameter dz when the raster map type is elevation.

  • pywasp.wasp.aep.gross_aep() incorrectly assumed most wind turbines were stall regulated. This means that when using the interpolation=True option, that incorrect air density corrections were applied. This has been fixed by an update in WindKit that requires the control_system variable to be defined on a wind turbine generator. This value is now used to apply the correct air density correction to the power curves.

0.5.1 (2023-04-19)

New Features

Changes

  • pywasp.wasp.get_climate() arguments stab_source and baro_source now both allow for None to be set. This creates a dataset with 0-valued fields for the given source.

Improvements

  • Update netCDF file with CFSR baroclinicity information to version 3. The data is the same, but the data variable names are updated. This does not affect the behavior.

Bug Fixes

  • Fixed license check error for new version of DTU License server

  • Corrected import of combine_bwcs in pywasp.wasp.cross_predict().

  • pywasp.wasp.interpolate_gwc() now returns an interpolated generalized wind climate dataset with height coordinates. This makes it more robust to different spatial structures of generalized wind climates and output_locs, when used for downscaling.

Deprecations