Changelog¶
v0.1.0-alpha¶
This is the initial release of foxes - ready for testing.
So far not many models have been transferred from the Fraunhofer IWES in-house predecessor flappy, they will be added in the following versions. Also optimization is not yet included. We are just getting started here!
Enjoy - we are awaiting comments and issues, thanks for testing.
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v0.1.0
v0.1.1-alpha¶
New code style, created by black
Small fixes, discovered by flake8
Tests now via pytest instead of unittest
Introducing github workflow for automatic testing
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v0.1.1
v0.1.2-alpha¶
Adding support for Python 3.9, 3.10
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v0.1.2
v0.1.3-alpha¶
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v0.1.3
v0.1.4-alpha¶
Fixes
Static data: Adding missing data
wind_rotation.nc
to manifest
Models
New wake model added:
TurbOParkWake
from OrstedNew turbine type added:
PCtSingleFiles
, reads power and thrust curves from two separate filesNew turbulence intensity wake model added:
IECTI2019
/Frandsen
andIECTI2005
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v0.1.4
v0.2.0-alpha¶
Core
Introducing the concept of runners
Opt
New sub package:
foxes.opt
, install bypip install foxes[opt]
. This introduces the capability to run wind farm optimizations. As examples layout optimization for simple cases are given, see below.
Models
New turbine model:
Thrust2Ct
, calculates ct from thrust valuesNew turbine type:
NullType
, a turbine type with only rotor diameter and hub height dataRenamed
PCtSingleFiles
intoPCtTwoFiles
Output
New output:
WindRoseOutput
, providing a plotly figure that shows a rose-type histogramNew output:
AmbientWindRoseOutput
, providing rose-type plotly figures of ambient data (no wake calculation involved)
Algorithms
Improved
Downwind
: Now with option for ambient runs (no wakes)
Utils
New utility:
show_plotly_fig
, opens a window that shows a plotly figure (instead of browser)New runners:
DefaultRunner
,DaskRunner
. The latter features parallel runs via dask
Examples
Introducing two sub-folders of examples:
foxes
andfoxes.opt
New example:
wind_rose
, calculation of wind rose states dataNew example:
layout_single_state
, wind farm layout optimization for a single wind stateNew example:
layout_wind_rose
, wind farm layout optimization for wind rose states
Notebooks
New notebook:
layout_opt.ipynb
, demonstrating a simple layout optimization case
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v0.2.0
v0.2.1-alpha¶
Input:
New input:
MultiHeightStates
andMultiHeightTimeseries
, for input data at several height levels, e.g. WRF results at one point
Output:
New output:
FarmResultsEval
, calculates sum, mean, min, max over states or turbines for the whole wind farm. Also calculates capacity, efficiency, yield, P75, P90.New output:
ResultsWriter
, writes farm results or pandas data to csv fileRenaming:
AmbientRosePlotOutput
is now calledStatesRosePlotOutput
Notebooks:
New notebook:
multi_height.ipynb
, demonstrating the usage of multi-height wind input data
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v0.2.1
v0.2.2-alpha¶
Bug fixes
Bug fixed in
MultiHeightStates
for wind veer cases
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v0.2.2
v0.2.3-alpha¶
Input states
Improved:
SingleStateStates
now supports profiles
Turbine models
New model
PowerMask
: Derates or boosts a turbine
Examples
New:
power_mask
, demonstrates derating and boost
Utils
New:
cubic_roots
, solves a cubic equation
Output
New:
StateTurbineMap
, creates heat maps for state-turbine dataNew:
TurbineTypeCurves
, creates power and thrust curve plotsImproved:
FarmLayoutOutput
now supports scatter color by variable
Documentation
Adding forgotten
foxes.opt
to API
Notebooks:
Now including results as colored layout plots
New notebook:
wind_rose.ipynb
, demonstrating how to calculate wind rosesNew notebook:
power_mask.ipynb
, showing derating and boost via a power mask
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v0.2.3
v0.2.4-alpha¶
Bug fixes
Hotfix for bug in
TurbineTypeCurves
output
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v0.2.4
v0.2.5-alpha¶
Core:
New:
ExtendedStates
, allows for adding point data models to states
Input:
Improved:
FieldDataNC
, now with support for spatially uniform variables
Turbine types:
New:
WsRho2PCtTwoFiles
, air density dependent power and ct curves
Turbine models:
New:
SectorManagement
, sets variables by range rules on other variables
Point models:
New:
SetUniformData
, set uniform variables (optionally state dependent)
Examples:
New:
sector_management
, demonstrates how to model wind sector management
Notebooks:
New:
sector_man.ipynb
, demonstrates how to model wind sector managementNew:
data.ipynb
, lists and shows the static data
Bug fixes:
Fix for bug with option
col_models
in farm layout from csv
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v0.2.5
v0.2.6-alpha¶
Output:
Improved:
FarmResultsEval
can now handle NaN data in Einstein sumsImproved:
ResultsWriter
can now also write turbine names
Turbine models:
New:
TableFactors
, multiplies variables with data from a two dimensional tableNew:
YAW2YAWM
, calculates yaw deltas from absolute yaw and wind directionNew
YAWM2YAW
, calculates absolute yaw from yaw deltas and wind directionGeneralized:
kTI
, now includes optional offsetkb
Turbine types:
Changed: Now yaw correction of
P
andCT
switched on by default
Point models:
New:
TKE2TI
, calculates turbulence intensity from TKE
Wake models:
New:
PorteAgel
, calculates wakes based on the Bastankhah PorteAgel 2016 wake model
Wake frames:
New:
YawedWake
, bends wakes in yawed conditions
Wake superposition models:
Improved:
LinearSuperposition
, now includes options for lower/higher limits of total wake deltas
Examples:
New:
compare_wakes
, compares wake models along horizontal linesNew:
yawed_wake
, demonstrates wake bending by yawing a rotor
Notebooks:
New:
yawed_wake.ipynb
, demonstrates wake bending by yawing a rotor
Bug fixes:
Fix for bug with
ExtendedStates
, now it is actually workingFix for bug with wake width in
CrespoHernandezTIWake
Fix for bug with YAW and WD when using the
YAWM2YAW
turbine modelFix for bug in
TurbOPark
wake model, double counting constant offset in sigma
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v0.2.6
v0.3.0-alpha¶
Core:
Models now with simplified structure, reduces memory load during calculations
Algorithms:
New:
Iterative
, iterative wind farm calculation until convergence has been reached
Input:
Improved:
FieldDataNC
now accepts xarray Dataset or file pattern str as inputNew:
ShearedProfile
, Vertical WS profile can be determined with shear exponent
Output:
Improved:
FlowPlots2D
replacing horizontal/vertical –> xy, xz, yz, more intuitive
Wake models:
New:
TurbOParkIX
, integrates wake corrected TI along centreline for wake width sigma.
Wake frames:
Improved: All yawed wake frames now also support centreline data integration
Notebooks:
New:
overview.ipynb
, summarizes the setup steps
Bug fixes:
Fix for bug in
TurbOPark
wake model: Brackets in Eq. (4) were wrongFix for bug with long streamlines
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v0.3.0
v0.3.1-alpha¶
Input states:
Improved:
FieldDataNC
now supports states subset selection
Wake frames:
Improved:
Streamlines
now with maximal length option
Turbine models:
New:
Calculator
, simple variable calculation via user function
Opt:
Now two abstract problems in core:
FarmOptProblem
andFarmVarsProblem
, the latter invokes theSetFarmVars
turbine modelNew opt problem:
RegularLayoutOptProblem
, searches for a regular grid layoutNew opt problem:
GeomRegGrids
, finds regular grid layout by purely geometrical means (no wind farm calculation)New opt problem:
GeomLayout
, turbine positioning based on xy variables, also purely geometricalNew opt problem:
GeomLayoutGridded
, a purely geometrical optimization on a gridded background
Examples:
New in
foxes.opt
: Examplelayout_regular_grid
, demonstrates regular grid layout optimizationNew in
foxes.opt
: Examplegeom_reggrids
, purely geometrical regular layout optimization
Utils:
New functions for shape file handling:
read_shp
,shp2csv
,read_shp_polygons
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v0.3.1
v0.3.2-alpha¶
Bug fixes:
Fix for bug in
FarmResultsEval
that affected time range calculations under WindowsBug fixes for
FarmResultsEval
with time series data
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v0.3.2
v0.3.3-alpha¶
Utils:
Now
geopandas_helpers
can handle interior areas
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v0.3.3
v0.3.4-alpha¶
Installation:
foxes
now supports Python 3.11
Input:
New layout input option:
add_from_df
, adding turbines from a pandas DataFrameNew interface to windIO case yaml files
Turbine types:
New turbine type
CpCtFile
, reads CP and CT data from file or pandas DataFrameNew turbine type
CpCtFromTwo
, reads CP and CT data from two files or pandas DataFramesImproved: Turbine types now calculate
P_nominal
as maximum, if not explicitely given
Constants:
Introducing
P_UNITS
, used in turbine types and output evaluation
States:
Bug fixed in
FieldDataNC
with loading multiple files
Core:
Improved
DataCalcModel
: Now cleaner treatment of runs withprogress_bar=False
. Also now slimmer fordistributed
scheduler
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v0.3.4
v0.3.5-alpha¶
General:
Moving identifier-type entries from
foxes.variables
tofoxes.constants
Models:
New wake superposition model
ProductSuperposition
, computing factorized wake deltasNew turbine model:
RotorCentreCalc
, calculates data at rotor centre, irrespective of rotor model
Bug fixes:
Bug fixed that caused problems when restarting the
SectorManagement
turbine model, e.g. for flow plots
Documentation:
Completely new style, fixing issues with incomplete API entries
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v0.3.5
v0.4.0¶
Models:
Improved: New option to specify wake growth variable name, such that multiple
kTI
models could be used, resulting in differentk
‘s for different wake modelsNew turbine model:
LookupTable
, interpolates data based on a multi-dimensional lookup table
Utils:
Improved
DaskRunner
: Now supports clusters that run the Slurm queueing system
Examples:
New:
timeseries_slurm
, shows how to run foxes on a HPC with Slurm queueing system
Optimization:
Improved:
foxes.opt
is now able to optimize for flow variables (at selected points in space) in addition to turbine variables
Documentation:
Improved API docu, now based on
python-apigen
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v0.4.0
v0.4.1¶
Algorithms:
Improved:
Iterative
now iterates through outer loop instead of within chunk
Models:
New wake frame:
Timelines
, propagates wakes for spatially uniform time series
Tests:
New test:
consistency/iterative
, checks if iterative algorithm gives same result
Examples:
New example:
timelines
, demonstrates the usage of theTimelines
wake frameImproved: All examples were update for the correct usage of the
DaskRunner
Notebooks:
New notebook:
timelines.ipynb
, showing how to use theTimelines
wake frame in a notebook
Data:
New states data
timeseries_100.csv.gz
, a short timeseries with timestep 1 min, varying wind direction only
Output:
Improved:
FlowPlots2D
now has the optional argumentrunner
, for computing plots with the chosen parallelization settings
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v0.4.1
v0.4.2¶
Bug fixes:
Fix of bug that slowed down
TurbOParkIX
by considering all TI wakes instead of only source turbine wake during integrationFix of bug that prevented plotly wind roses to be shown in the documentation
Fix in docu that excluded the algorithm models from the API
Output:
New:
Animator
, creates animations based on generators that yield lists of artists
Examples:
Improved:
timelines
now includes turbine REWS signal in animations
Notebooks:
Improved:
timelines.ipynb
now includes turbine REWS signal in animations
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v0.4.2
v0.4.3¶
Output:
Improved:
RosePlotOutput
andStatesRosePlotOutput
now optionally return the binned data
Models:
New vertical profile:
DataProfile
, data based profile from file or pandas DataFrameImproved ti superposition: Now supporting n-th power superposition
Improved wake model
TurbOParkIX
: New option for consideration of all wakes in ti integral
Bug fixes:
Fixed bug with
windio
input that resulted in wrong wind rose weightsFixed bug with
FlowPlots2D
with value bounds in contour plots
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v0.4.3
v0.4.4¶
Testing automated publishing to PyPi via workflow
v0.4.5¶
Models:
New rotor model:
LevelRotor
, calculates the REWS from different height levelsNew turbine type:
WsTI2PCtFromTwo
, reads turbulence-dependent ct- and power curves
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v0.4.5
v0.5¶
Dependencies:
Dropping support for Python 3.7, due to
netcdf4
dependency
Core:
Simplified model initialization/finalization. Removing the
keep_models
idea, instead all models are now kept in the algorithm’s idata memory until finalization. Adding a new model now mostly requires that thesub_models
and theload_data
functions are overloaded, if applicable. Theinitialize
andfinalize
only need to be addressed explicitly in non-standard cases.
Algorithms:
New algorithm:
Sequential
, step wise evaluation of states for simulation environments that do not support chunkingImproved:
Iterative
now supports under-relaxation of parameters
Output:
New sub package:
output.flow_plots_2d
is now a package instead of a module
Models:
This version introduces induction models for modelling blockage effects.
New induction model:
RHB
, the classic Rankine-half-body model.
Examples:
New example:
sequential
, demonstrating the usage of the sequential algorithmNew example:
induction_RHB
, showing the Rankine-half-body model for blockage
Notebooks:
New notebook:
blockage.ipynb
, demonstrating how to apply the RHB induction model to a wind farm
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v0.5
v0.5.1¶
Dependencies:
The
windio
package is now an optional dependency, to be installed by hand if needed. This is due to windio being not available at conda-forge
Notebooks:
New notebook:
sequential.ipynb
, creating an animation showing state-by-state wake propagation
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v0.5.1
v0.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 algorithmNew output:
SliceData
, creating arrays, DataFrames or Datasets from 2D slicesImproved
FlowPlots2D
: Completely refactored, data based onSliceData
. 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 calledBastankhah2014
. Models in the model book are also renamed fromBastankhah
toBastankhah2014
Renaming:
PorteAgelWake
class now calledBastankhah2016
. Models in the model book are also renamed fromPorteAgel
toBastankhah2016
Renaming:
RHB
class now calledRankineHalfBody
Fix:
RankineHalfBody
no longer shows a jump at the rotor disc, but a small region of constant deficit insteadNew default values:
Bastankhah2014
now has default valuesbeta_factor=0.2
(previously 0.25). Models with the previous value are available in the model book asBastankhah025
etc.
Wake superpositions:
Restructured: Now simplified classes for WS or TI superposition only (less general but simpler), e.g.
WSLinear
orTIQuadratic
, etc. Also in the model book the models are now calledws_linear
orti_quadratic
, etc.
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v0.5.2
v0.5.2.1¶
Bug fixes:
Bugs fixed that messed up the colorbar and the title in animations
Notebooks:
Improved animations in
timelines.ipynb
andsequential.ipynb
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v0.5.2.1
v0.6¶
Dependencies:
Replacing dependency on
plotly
by dependency onwindrose
, since the latter is lighter
Core:
This version introduces
AxialInductionModel
classes, computing the axial induction factora(ct)
Wake models:
Reformulating
beta
in terms of induction inBastankhah2014
andCrespoHernandez
New default:
Bastankhah2014
,Bastankhah2016
,TurbOPark
andTurbOParkIX
now with default axial induction modelMadsen
New induction wake models:
Rathmann
,SelfSimilar
andSelfSimilar2020
, for blockage modellingIntroducing
WakeMirror
wrapper around wake models, modelling wake reflection from ground or horizontal plane via virtual mirrored turbines
Wake frames:
Renaming
Streamlines
toStreamlines2D
, no changes in model book names
Axial induction models:
New induction model:
BetzAxialInduction
, the classica = 0.5(1 - sqrt(1-ct))
relation. In the model book this is calledBetz
.New induction model:
MadsenAxialInduction
, a third-order polynomial approximation ofa(ct)
. In the model book this is calledMadsen
.
Output:
Improved:
FlowPlots2D
now includes an option for indicating the rotor disk by a colored lineImproved:
RosePlotOutput
no longer depends onplotly
, but on the new utilityTabWindroseAxes
Utils:
New:
TabWindroseAxes
, a derivative ofwindrose.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 withWakeMirror
Tests:
Fresh
flappy
v0.6.2 test data for all Bastankhah and CrespoHernandez wakes, also without thesbeta
limitation
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v0.6
v0.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 theTabStates
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
v0.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 distanceNew 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
andgen_states_fig_xz
with parameterx_direction
, which had no effect on the image
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v0.6.2
v0.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 foxesData
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 defaultModelBook()
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 thePartialGrid
model is derived. Segregated models now average background results and wake deltas separatly, and then add the results. Notice that with the choice ofRotorPoints
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. forPartialAxiWake
models) or not applicable for some rotor choices (e.g. theLevelRotor
, 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
v0.7.1¶
Models:
Improved
ModelBook
, adding some smartness thanks to model factories. Parameters are parsed from model name strings that follow given patterns. E.g.,Jensen_<superposition>_k<k>
represents allJensenWake
models with any superposition model choice and and choice of k, andJensen_linear_k0075
would be an accepted name choice by the user.New wind speed superpositions
WSLinearLocal
,WSQuadraticLocal
,WSPowLocal
,WSMaxLocal
: Adding dimensionless wind deficits, and then evaluating the overall effect for the ambient results at evaluation points (no scaling with rotor effective data)
Utils:
New utility
Factory
, creating class instances from selections of allowed parameter choisesNew utility
FDict
, a dictionary that supports factories
Bug fixes:
Bug fixed with
TurbOParkIX
, that prevented it from running
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v0.7.1
v0.7.2¶
Bug fixes:
Fix for bug with
Factory
that confused templatesA_B<..>
type withB<..>
type templates
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v0.7.2
v0.7.3¶
Dependencies:
Restriction to
numpy<2
due to an incompatibility of dependecyautograd
Core:
New model type
GroundModel
, which manages the call of the partial wakes models in case of farm calculations and wake models in case of point calculations
Inputs:
New height dependent states:
MultiHeightNCStates
andMultiHeightNCTimeseries
, same asMultiHeightStates
andMultiHeightTimeseries
, but starting from a netCDF file orxarray.Dataset
input
Models:
New wake model helper class
WakeK
, handling thek
,ka
,kb
choices for all wake modelsNew ground model
NoGround
, plain call of the partial wakes and wakes modelsNew ground models
WakeMirror
andGroundMirror
, replacing the equivalent former wake models. Realizing wake reflection at horizontal planes.New induction model
VortexSheet
, which is a radial implementation of the centreline deficit model in Medici 2012 https://doi.org/10.1002/we.451
Utils:
New utility
WakeKFactory
class, enabling the choice of eitherk
orka, kb
directly from the wake model names in the model book.
Inputs:
Work on
windio
, but unfinished on their side when it comes to analysis requests
Examples:
Example
multi_height
: Now based onMultiHeightNCTimeseries
Bug fixes:
Fox for bug with wake mirrors and partial wakes
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v0.7.3
v0.7.4¶
Input:
Adding output options to
windio
Output:
New output
StateTurbineTable
, exporting state-turbine data to NetCDF
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v0.7.4
v0.8¶
Starting with this version, the previous foxes.opt
sub-package is is now its own package at github, pypi and conda-forge: foxes-opt, with its own documentation.
If you are planning to run wind farm optimizations, install it via
pip install foxes[opt]
or
pip install foxes-opt
or
conda install foxes-opt -c conda-forge
Compared to older versions, replace foxes.opt
by foxes_opt
in all your scripts - then everything should just run as before.
If you are not running any optimizations, just don’t do any of the above and enjoy the lighter version with less dependencies.
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v0.8
v0.8.1¶
Updated requirements.txt
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v0.8.1
v0.8.2¶
Removing
plotly_helpers.py
fromutils
Updating dependencies
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v0.8.2
v0.8.3¶
Outputs:
Improved
SliceData
output: Now either specifyresolution
orn_img_points
, e.g.n_img_points=(100, 100)
for an image with 100 x 100 points
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v0.8.3
v1.0¶
This major version introduces the concept of Engines
which handle the chunking and parallelization of all foxes calculations. The default choice now prefers the concurrent.futures package and provides a significant speedup compared to previous versions. See the documentation for more details and all engine choices. The Engines
replace the Runners
of previous versions.
Engines
New engine
ThreadsEngine
(shortthreads
): Sends chunks to threads, based onconcurrent.futures
New engine
ProcessEngine
(shortprocess
): Sends chunks to processes, based onconcurrent.futures
New engine
MultiprocessEngine
(shortmultiprocess
): Sends chunks to a multiprocessing poolNew engine
XArrayEngine
(shortxarray
): Runs parallelization via xarray.apply_ufuncNew engine
DaskEngine
(shortdask
): Submits chunk calculation functions todask
New engine
LocalClusterEngine
(shortlocal_cluster
): Creates a virtual cluster on the local machineNew engine
MPIEngine
(shortmpi
): Parallel computation viampi4py
, also multi-nodeNew engine
SlurmClusterEngine
(shortslurm_cluster
): Submits jobs to a SLURM systemNew engine
NumpyEngine
(shortnumpy
): Runs a loop over chunksNew engine
SingleChunkEngine
(shortsingle
): Runs single-chunk calculationsNew engine
DefaultEngine
(shortdefault
): Switches betweensingle
andprocess
, depending on the case size
Inputs:
New states
OnePointFlowStates
,OnePointFlowTimeseries
,OnePointFlowMultiHeightTimeseries
,OnePointFlowMultiHeightNCTimeseries
: Generating horizontally inhomogeneous inflow from horizontally homogeneous input dataNew farm layout option:
add_ring
, adding a ring of turbines
Models:
Wake frame
Timelines
now also accept spatially uniform multi-height statesNew wake frame
DynamicWakes
: Dynamic wakes for any kind of timeseries states, compatible with chunkingNew turbine type
FromLookupTable
, computes power and thrust coefficient from a lookup table
Outputs:
New sub package
seq_plugins
, in case more of these will be added in the futureNew sequential plugin
SeqWakeDebugPlugin
, adding wake centres and velocity vectors to flow animations, for debugging
Examples:
New example:
dyn_wakes
, similar totimelines
but with dynamic wakes andOnePointFlowTimeseries
inflow
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v1.0
v1.1¶
Python versions:
Adding support for Python3.13
Engines:
Default number of processes is now os.cpu_count(), or os.process_cpu_count() for python3.13
New engine:
RayEngine
(short nameray
), runs parallel computations based on the Ray package
Inputs:
New states
SliceDataNC
, much likeFieldDataNC
but without height dependency
Models:
New turbine type
TBLFile
: Reads power, ct, D, H, P_rated from a *.tbl fileTurbine induction models
SelfSimilar
,SelfSimilar2020
,Rathmann
,VortexSheet
now optionally accept any wind speed superposition model, i.e., they are no longer based on hard-coded linear superposition
Bug fixes:
Bug fixed in
WSProduct
, causing zero wind speed at regions not touched by wakesBugs fixes in
FarmLayoutOutput
, concerning the writing of the layout csv file
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v1.1
v1.1.1¶
Dependencies:
Removing optional dependencies
io
. The installation advice will be printed when trying to use thefoxes.input.windio
sub package. The reason is that for now this depends on a personal fork by kilojoules, and the inclusion of such dependencies is not supported by PyPi.
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v1.1.1
v1.2¶
Command line applications:
New command line application:
foxes_yaml
, runs foxes by interpreting ayaml
input parameter file (no script neccessary)New command line application:
foxes_windio
, runs foxes by interpreting a windioyaml
input parameter file (no script neccessary)
Config:
Introducing a dictionary-like configuration object
foxes.config
, setting default data types, the directory choices, etc.
Inputs:
New input package
foxes.input.yaml
, realizing the run via yaml parameter files. This is not followingwindio
, but a foxes specific structure.Reworked
windio
input package, now atfoxes.input.yaml.windio
and based onfoxes.input.yaml
Outputs:
Introducing the idea of a default output directory, accessible via
foxes.config.out_dir
. The file writing output classes now refer to this, or a output specific output directory that is given as an argument to the constructor of the output class.
Examples:
New example
yaml_input
, demonstrating the command line applicationfoxes_yaml
and the new yaml parameter file
Bug fixes:
Fix for
TurbOParkIX
wake model: Nowk
is trulyk
, such that onlyambka
orka
choices fromWakeK
correspond to multiplication withAMB_TI
orTI
, respectively.
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v1.2
v1.2.1¶
Dependencies:
Removing dependency on
windrose
package
Outputs:
Output
FarmResultsEval
: Renaming contraction rulemean
intoweights
. Introducing new rulemean_no_weights
.New Output
WindRoseBinPlot
, for example showing variable mean values for wind rose binsRe-implementation of
WindRosePlot
, no longer needs thewindrose
package
Inputs:
Generalizing
ScanWS
states toScanStates
, for arbitrary tensor products of variable listsStates
FieldDataNC
now also accepts fields without heights, signature (state, x, y) and (state, y, x)
Bug fixes:
Fixing some examples that were computing the turbine efficiency incorrectly
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v1.2.1
v1.2.2¶
Developments required by
foxes_opt
v0.3, related to running also wind farm optimizations by yaml parameter files
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v1.2.2
v1.2.3¶
Dependencies:
Switching
windIO
support to fork at https://github.com/EUFLOW/windIORemoving dependency
netcdf4
, since this orh5netcdf
are now a dynamic choice, called when NetCDF files are being used
Config:
Now three directories are defined:
work_dir
,input_dir
,output_dir
. If not defined, falling back towork_dir
, defaulting to cwd.
Inputs:
Removing
SliceDataNC
, since nowFieldDataNC
can handle data without height dependencyEnhancing
FieldDataNC
for more efficient parallel loading of large data, replacingpre_load
flag with load mode optionspreload
,lazy
,fly
Enhancing
windio
inputs for output generation
Outputs:
New output
SlicesData
which combines slices fromSliceData
into a single NetCDF file, resulting in full 3d field output (or 4d, with time/states dimension)
Models:
New point model
Ustar2TI
, estimates TI from friction velocity
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v1.2.3
v1.2.4¶
Config:
Fix for bug with
nc_engine
for Python 3.8
Utils:
New util
ReaderWRG
, reading WRG files. Thanks @HassanKassem
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v1.2.4
v1.2.5¶
Models:
Fix for bug in
VortexSheet
turbine induction wake model. Thanks @MellBeli
Full Changelog: https://github.com/FraunhoferIWES/foxes/commits/v1.2.5