Foxes

Latest version: v1.3

Safety actively analyzes 723177 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

Page 4 of 11

0.7

- Python versions:
- Now supporting Python 3.12
- Documentation:
- New page `Models`, summarizing and explaining the *foxes* model choices.
- Core:
- Speed-up in comparison with version 0.6.x, by internally handling all turbine data in downwind order, and then translating it back to farm order once computations are complete.
- Internally, all point evaluation data is now translated into so called "target" data, where each target is understood as being composed of a certain number of target points. During wake computations, these are the points per rotor (as defined by partial wakes models). For computations at user given points, the points are interpreted as targets with a single target point each. Final point output data is then given to the user again with point index coodinates, i.e., in the same format as in previous versions.
- New data classes: `MData`, `FData`, `TData`, all derived from the foxes `Data` class. These specialize model, farm and target data, respectively, during model calculations.
- Algorithms:
- All algorithm constructors now take `farm, states, wake_models` as the first three arguments. If no model book is given, the default `ModelBook()` will be used.
- Partial wakes are now chosen either
- by a dictionary, which maps wake model names to model choices (or default choices, if not found),
- or by a list, where the mapping to the wake models is in order of appearance,
- or by a string, in which case all models are either mapped to the given model, or, if that fails with `TypeError`, to their defaults,
- or by `None`, which means all models are mapped to the default choice.
- Partial wakes:
- New `PartialSegregated` abstract model, from which the `PartialGrid` model is derived. Segregated models now average background results and wake deltas separatly, and then add the results. Notice that with the choice of `RotorPoints` partial wakes, the mathematically correct average over a discretized rotor is calculated. This is more accurate, but it may be slower than some models (e.g. for `PartialAxiWake` models) or not applicable for some rotor choices (e.g. the `LevelRotor`, where a wake average makes no sense).
- Outputs:
- New output `RotorPointPlot`, creating rotor point plots.
- Notebooks:
- New notebook `rotor_models.ipynb`, visualizing rotor points.
- New notebook `partial_wakes.ipynb`, verifying partial wakes models.
- Bug fixes:
- Various fixes here and there.

**Full Changelog**: [https://github.com/FraunhoferIWES/foxes/commits/v0.7](https://github.com/FraunhoferIWES/foxes/commits/v0.7)

0.6.2

- Models:
- New partial wakes model: `PartialCentre`, evaluating wake deltas at the rotor centre point only
- Inputs:
- New farm layout input: `add_random`, adds turbines at random positions, respecting a minimal distance
- New states creation: `random_timseries_data`, creates uniform random timeseries data
- Utils:
- New function `random_xy_square`, generates random xy positions with minimal distance
- Examples:
- New example: `random_timeseries`, computes a random farm in a random timeseries. Both sizes are defined by user input
- Bug fixes:
- Fix for bug in `gen_states_fig_xz` and `gen_states_fig_xz` with parameter `x_direction`, which had no effect on the image

**Full Changelog**: [https://github.com/FraunhoferIWES/foxes/commits/v0.6.2](https://github.com/FraunhoferIWES/foxes/commits/v0.6.2)

0.6.1

- Input:
- New ambient states: `TabStates`, single tab-file input
- Data
- New static data: `winds100.tab`, an example tab file
- Examples:
- New example: `tab_file`, demonstrating the usage of the `TabStates`
- Bug fixes:
- Bug fixed for `RankineHalfBody` turbine induction model that produced wrong results for wind directions unequal 270 degrees

**Full Changelog**: [https://github.com/FraunhoferIWES/foxes/commits/v0.6.1](https://github.com/FraunhoferIWES/foxes/commits/v0.6.1)

0.6

- Dependencies:
- Replacing dependency on `plotly` by dependency on `windrose`, since the latter is lighter
- Core:
- This version introduces `AxialInductionModel` classes, computing the axial induction factor `a(ct)`
- Wake models:
- Reformulating `beta` in terms of induction in `Bastankhah2014` and `CrespoHernandez`
- New default: `Bastankhah2014`, `Bastankhah2016`, `TurbOPark` and `TurbOParkIX` now with default axial induction model `Madsen`
- New induction wake models: `Rathmann`, `SelfSimilar` and `SelfSimilar2020`, for blockage modelling
- Introducing `WakeMirror` wrapper around wake models, modelling wake reflection from ground or horizontal plane via virtual mirrored turbines
- Wake frames:
- Renaming `Streamlines` to `Streamlines2D`, no changes in model book names
- Axial induction models:
- New induction model: `BetzAxialInduction`, the classic `a = 0.5(1 - sqrt(1-ct))` relation. In the model book this is called `Betz`.
- New induction model: `MadsenAxialInduction`, a third-order polynomial approximation of `a(ct)`. In the model book this is called `Madsen`.
- Output:
- Improved: `FlowPlots2D` now includes an option for indicating the rotor disk by a colored line
- Improved: `RosePlotOutput` no longer depends on `plotly`, but on the new utility `TabWindroseAxes`
- Utils:
- New: `TabWindroseAxes`, a derivative of `windrose.WindroseAxes` for input data that is based on bins with weights (and not timeseries)
- Notebooks:
- New: `blockage_comparison.ipynb`, comparing four turbine induction models
- Bug fixes:
- Fix for bug in `Streamlines2D` when used in combination with `WakeMirror`
- Tests:
- Fresh `flappy` v0.6.2 test data for all Bastankhah and CrespoHernandez wakes, also without the `sbeta` limitation

**Full Changelog**: [https://github.com/FraunhoferIWES/foxes/commits/v0.6](https://github.com/FraunhoferIWES/foxes/commits/v0.6)

0.5.2.1

- Bug fixes:
- Bugs fixed that messed up the colorbar and the title in animations
- Notebooks:
- Improved animations in `timelines.ipynb` and `sequential.ipynb`

**Full Changelog**: [https://github.com/FraunhoferIWES/foxes/commits/v0.5.2.1](https://github.com/FraunhoferIWES/foxes/commits/v0.5.2.1)

0.5.2

- Algorithms:
- Improved `Downwind`: Now optional arguments that allow calculation of subsets in calc_farm and calc_points, e.g. a selection of states
- Output:
- New output: `PointCalculator`, a wrapper for the calc_points function of the algorithm
- New output: `SliceData`, creating arrays, DataFrames or Datasets from 2D slices
- Improved `FlowPlots2D`: Completely refactored, data based on `SliceData`. New option for creating figures for subsets of states only.
- Vertical profiles:
- Now optional support for `ustar` input data instead of reference data
- Turbine types:
- Fix for `Cp`-based models with interpolation within sparse input data
- Wake models:
- Renaming: `BastankhahWake` class now called `Bastankhah2014`. Models in the model book are also renamed from `Bastankhah` to `Bastankhah2014`
- Renaming: `PorteAgelWake` class now called `Bastankhah2016`. Models in the model book are also renamed from `PorteAgel` to `Bastankhah2016`
- Renaming: `RHB` class now called `RankineHalfBody`
- Fix: `RankineHalfBody` no longer shows a jump at the rotor disc, but a small region of constant deficit instead
- New default values: `Bastankhah2014` now has default value `sbeta_factor=0.2` (previously 0.25). Models with the previous value are available in the model book as `Bastankhah025` etc.
- Wake superpositions:
- Restructured: Now simplified classes for WS or TI superposition only (less general but simpler), e.g. `WSLinear` or `TIQuadratic`, etc. Also in the model book the models are now called `ws_linear` or `ti_quadratic`, etc.

**Full Changelog**: [https://github.com/FraunhoferIWES/foxes/commits/v0.5.2](https://github.com/FraunhoferIWES/foxes/commits/v0.5.2)

Page 4 of 11

© 2025 Safety CLI Cybersecurity Inc. All Rights Reserved.