Skip to content
Snippets Groups Projects
Commit 94b51a63 authored by Mads M. Pedersen's avatar Mads M. Pedersen
Browse files

update ChangeLog.ipynb for v2.4.1

parent 5ecd616e
No related branches found
No related tags found
No related merge requests found
%% Cell type:markdown id: tags:
# Change log
%% Cell type:markdown id: tags:
## PyWake 2.4.1 (July 7, 2022)
- Fix a bug `WindFarmModel.aep` that ignored the `n_cpu`, `wd_chunks` and `ws_chunks` arguments and always computed on only one CPU
%% Cell type:markdown id: tags:
## PyWake 2.4 (July 6, 2022)
### New features and API changes
- Before the `Mirror` ground model used linear superposition of the above- and below-ground wind turbines while `MirrorSquaredSum` used squared sum. In this version the `MirrorSquaredSum` has been removed and `Mirror` is now using the superposition model of the wind farm model to calculate the sum. I.e. `Mirror` behave as before if the superposition model is `LinearSum` and as the previuos `MirrorSquaredSum` if the superposition model is `SquaredSum`
- Easy chunkification and parallelization via the arguments `n_cpu`, `wd_chunks` and `ws_chunks`, see https://topfarm.pages.windenergy.dtu.dk/PyWake/notebooks/RunWindFarmSimulation.html#Chunkification-and-parallelization and https://topfarm.pages.windenergy.dtu.dk/PyWake/notebooks/Optimization.html#Chunkify-and-Parallelization
- Change dAEPdxy to automatically compute gradients of aep wrt. the concatenated list of x,y which is faster than computing first wrt. x then y
- `py_wake.utils.layouts` contains functions to create rectangular and square wind turbine layouts
- New approach to switch numpy backend (used when switching to `autograd.numpy`, `Numpy32` (see below, etc.). The new approach requires all modules to import np from py_wake, i.e. `from py_wake import np`
- Easy way to switch between double presicion (standard numpy) and single precision (`Numpy32`), see https://topfarm.pages.windenergy.dtu.dk/PyWake/notebooks/Optimization.html?#Precision
- New function `floris_yaml_to_pywake_turbine` (see https://gitlab.windenergy.dtu.dk/TOPFARM/PyWake/-/blob/master/py_wake/utils/floris_wrapper.py). This function creates a PyWake WindTurbine object from a Floris wind turbine yaml file and allows more direct comparison.
- Previuosly, `LocalWind` (returned by `site.localWind`) was an xarray `Dataset` subclass. Due to issues with autograd and cupy, this has been changed such that `LocalWind` is now a `dict` subclass with numpy arrays, `{'WS_ilk': np.array([...])}`. Xarray DataArrays are created by `LocalWind` when requesting attributes without `_ilk`, e.g. `localWind.WS`
- Long list of bug and issue fixes
### New models
- RotorAvgModels
- New WSPowerRotorAvg, which computes the rotor average deficit by, $deficit = WS - \sqrt[\alpha]{\frac{1}{N} \sum_{i}{\left(WS - deficit_i\right)}^\alpha}$. Note that `WS` is the rotor center wind speed and thus shear and terrain-dependent inflow variation are not taken into account when computing the rotor average deficit.
- Power/Ct functions
- New `DensityCompensation` which scales the wind speed wrt. air density. In most cases this model is more realistic than the existing alternative model, `DensityScale`, which scales the power and ct wrt. air density.
%% Cell type:markdown id: tags:
## PyWake 2.3 (March 18, 2022)
### New features and API changes
- `GroundModel` is now an input to `DeficitModel` instead of `WindFarmModel`. This means that a ground model can be applied to the blockage or wake, only.
- PyWake can now compute gradients via finite differnece, complex step and automatic differentiation, see https://topfarm.pages.windenergy.dtu.dk/PyWake/notebooks/Optimization.html?highlight=gradients#Gradients. Most models supports all three methods, while a few does not work yet.
- Flow maps can be computed in both the vertical downwind and crosswind plane
### New models
- WakeDeficitModels
- CarbajofuertesGaussianDeficit
- TurboNOJDeficit
- TurboGaussianDeficit
- BlockageDeficitModels
- RathmannScaled
- DeflectionModels
- GCLHillDeflection
- JimenezWakeDeflection (extended with vertical deflection due to rotor tilt)
- WeightModels (to be used with the STF2005 and STF2017 TurbulenceModels)
- FrandsenWeight (the previous implementation)
- IECWeight (weight as specified in the IEC standard)
- SiteModels
- GlobalWindAtlasSite (site with data from online global wind atlas)
- DistanceModels
- JITStreamlineDistance (compute distances between wind turbines along streamlines)
- ShearModels
- LogShear
%% Cell type:markdown id: tags:
## PyWake 2.2 (March 26, 2021)
### New features and API changes
- All DeficitModels should inherrit either `WakeDeficitModel` or `BlockageDeficitModel`
- All Sites are now subclasses of XRSite
- WeightedSum SuperpositionModel reimplemented to be more efficient
- TurbulenceModels now take a RotorAvgModel as optional input. This allow PyWake to use different RotorAvgModels for wake and turbulence.
- Validation feature updated, see [here](https://topfarm.pages.windenergy.dtu.dk/PyWake/notebooks/exercises/Validation.html)
- The Power/Ct curve functionality of `WindTurbines` has been updated to support multidimensional Power and Ct curves, e.g. curves depending on turbulence intensity, air density, yaw misalignment, operational mode etc. This means that instantiating `WindTurbines` and `OneTypeWindTurbines` with the old set of arguments, i.e. `name, diameter, hub_height, ct_func, power_func, power_unit`, is deprecated. Use the the new `WindTurbine` and `Windturbines` classes with the arguments `name, diameter, hub_height, powerCtFunction` instead, see [here](https://topfarm.pages.windenergy.dtu.dk/PyWake/notebooks/WindTurbines.html). Backward compatibility is ensured (with runtime warning) for most use cases.
The `powerCtFunction` can be one of the classes from py_wake.wind_turbines.power_ct_functions, i.e.
- `PowerCtFunction`
- `PowerCtTabular`
- `PowerCtFunctionList`
- `PowerCtNDTabular`
- `PowerCtXr`
- `CubePowerSimpleCt`
- Support for time series of wd and ws, see [here](https://topfarm.pages.windenergy.dtu.dk/PyWake/notebooks/RunWindFarmSimulation.html#Time-series). Possible use cases:
- Time-dependent inflow, e.g. measurements of wd, ws, ti, shear, density, etc.
- Time-dependent operation, e.g. periods of failure or maintaince of a wind turbine
- Added support for load surrogates to predict wind turbine loads
### New models
- BlockageDeficitModels (see [here](https://topfarm.pages.windenergy.dtu.dk/PyWake/notebooks/EngineeringWindFarmModels.html#Blockage-deficit-models)
- SelfSimilarityDeficit2020
- HybridInduction
- RankineHalfBody
- VortexCylinder
- VortexDipole
- Rathmann
- DeflectionModels
- FugaDeflection (requires Fuga look-up tables, `UL`, `UT`, `VL`, `VT`)
- GroundModels
- Mirror
- MirrorSquaredSum
%% Cell type:markdown id: tags:
## PyWake 2.1 (September 14, 2020)
### New features and API changes
- New xarray data structure
- LocalWind, SimulationResult and FlowMap are now `xarray.Dataset`-objects with some additional methods and attributes
- `simulationResult.aep()` now returns a `xarray.DataArray` with aep for all wind turbines, wind directions and wind speeds. To get the total AEP as before, use `simulationResult.aep().sum()`
- New general XRSite where the site is defined as an xarray with the following structure:
- Required data variables:
- P(probability) or f(sector frequency), A(Weibull scale), k(Weibull shape)
- Optional data variables:
- WS(defaults to reference wind speed, ws), TI(turbulence intensity), SpeedUp, Turning
- All data variables may be constant or dependent on any of:
- ws (reference wind speed)
- wd (reference wind direction)
- position in terms of
- gridded 2D position, (x,y)
- gridded 3D position, (x,y,z)
- wt position, (i)
- [Include effects of neighbouring wind farms](Optimization.ipynb#Pregenerated-site-with-wake-effects-from-neighbouring-wind-farms) in site (wind resource) to speed up optimization of a wind farm with neighbouring farms
![image-2.png](attachment:image-2.png)
- Vertical flow map via the [YZGrid](RunWindFarmSimulation.ipynb#YZGrid)
![image.png](attachment:image.png)
### New models
- New `RotorAverageModel`, see [here](EngineeringWindFarmModels.ipynb#Rotor-average-models). The default model, `RotorCenter`, behaves as before as it estimates the rotor-average wind speed from the wind speed at the rotor center. Other models, however, provides a more accurate estimate based on multiple points on the cost of computation. The `CGIRotorAvg(4)` and `CGIRotorAvg(7)` with 4 and 7 points, respectively, provides good compromises between accuracy and computational cost.
- Deficit model:
- [GCLDeficit](EngineeringWindFarmModels.ipynb#GCLDeficit): The Gunner Larsen semi-analytical wake model
- Superposition model:
- WeightedSum A weighted sum approach taking wake convection velocity into account. The model is so far only applicable to the gaussian models. The model is based on "A momentum-conserving wake superposition method for wind farm power prediction" by Haohua Zong and Fernando Porté-Agel, J. Fluid Mech. (2020), vol. 889, A8; doi:10.1017/jfm.2020.77
%% Cell type:markdown id: tags:
## PyWake 2.0 (April 15, 2020)
- New structure
- Purpose:
- Easier combination of different models for flow propagation, wake and blockage deficit, superposition, wake deflection and turbulence
- More consistent interface to and support for engineering models and PyWake-Rans
- Changes
- `WakeModel` class refactored mainly into the `WindFarmModel`s `EngineeringWindFarmModel` and `PropagateDownwind`
- `WindFarmModel`s, e.g. `NOJ`, `Fuga`, `BastankhahGaussian` returns a `SimulationResult` containing the results as well as an AEP and a flow_map method. See the QuickStart tutorial
- and many more
- Backward compatibility
- AEP Calculator works as before, but is now deprecated
- Lower level interfaces and implementations has changed
- New documentation matching the new structure
- Optional blockage deficit models and implementation of the SelfSimilarity model
- Optional wake deflection models and implementation of a model by Jimenez
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment