Rotor model visualizations

Rotor models are responsible for averaging ambient background quantities over the rotor disc, yielding rotor equivalent ambient results.

Note that in foxes wake effects are averaged by partial wakes models, not by rotor models.

import foxes
import matplotlib.pyplot as plt

mbook = foxes.ModelBook()
/home/runner/work/foxes/foxes/foxes/core/engine.py:4: TqdmExperimentalWarning: Using `tqdm.autonotebook.tqdm` in notebook mode. Use `tqdm.tqdm` instead to force console mode (e.g. in jupyter console)
  from tqdm.autonotebook import tqdm

CentreRotor

The simplest rotor model consists of a single point located at the rotor centre. For spatially uniform ambient states, that’s all you need - but beware of chosing this as a partial wakes model, since for wakes rotor averaging is always crucial.

o = foxes.output.RotorPointPlot(mbook.rotor_models["centre"])
ax = o.get_point_figure()
plt.show()
../_images/06e07c230e20a409be18d208856ec5fcb994b9235e851ce50cdb69aa08dd7817.png

GridRotor

Grid rotors are based on regular two dimensional grids with non-uniform weights. The weights represent the overlap of the area element that is associated with each rotor point and the rotor disc.

Concrete grid rotors with N x N points can be constructed as GridRotor(n=N). Note that points with zero weights will be removed from the point list. These models are available in the default model book under the name template grid<n2>, where n2 represents N x N.

If you prefer to switch off the weights, i.e., use equal weights for all points of the regular grid, simply set reduce=False as an argument of the constructor. Such models are available in the default model book under the name template grid<n2>_raw, where n2 represents N x N.

grid4

o = foxes.output.RotorPointPlot(mbook.rotor_models["grid4"])
ax = o.get_point_figure()
plt.show()
../_images/80a6f9c42f8a4b9a914c247df105c996be07f64a32d2f32cb753fd4b0b5d7224.png

grid9

o = foxes.output.RotorPointPlot(mbook.rotor_models["grid9"])
ax = o.get_point_figure()
plt.show()
../_images/d8236eb31033132f0d244cd7d84f48fb6a24e9961d03fd8023950c157e2c5040.png

grid16

o = foxes.output.RotorPointPlot(mbook.rotor_models["grid16"])
ax = o.get_point_figure()
plt.show()
../_images/68efe4f96b0af76fcb5d88b62cba868362fcbbdc2e6818ae4b4bffecb7bbde67.png

grid25

o = foxes.output.RotorPointPlot(mbook.rotor_models["grid25"])
ax = o.get_point_figure()
plt.show()
../_images/b869df2f40533e7a26f11b10cd80fa5e78d4fc4c9a0ced134f0180b9575364ce.png

grid25_raw

o = foxes.output.RotorPointPlot(mbook.rotor_models["grid25_raw"])
ax = o.get_point_figure()
plt.show()
../_images/26765ddd1339c97f3e1fa69291fef28794cd7a187de5e383685f7e385e0f6bc2.png

grid36

o = foxes.output.RotorPointPlot(mbook.rotor_models["grid36"])
ax = o.get_point_figure()
plt.show()
../_images/b973821abdec66b1cbc5eb83c76e2c7423a36b0755a338f69ede6f6dd5308e01.png

grid100

o = foxes.output.RotorPointPlot(mbook.rotor_models["grid100"])
ax = o.get_point_figure()
plt.show()
../_images/8bb4bb9c8814bbfd9bd2910211041bad1d62bf55342474dc5481f902a36207f8.png

grid400

o = foxes.output.RotorPointPlot(mbook.rotor_models["grid400"])
ax = o.get_point_figure()
plt.show()
../_images/f2014f220043663224fe0df8a8bafedeb7f373fe8569269bfd53e3e3d7971fda.png

LevelRotor

Level rotors consist of a single vertical line through the rotor centre. Each point represents a vertical slice of the rotor disc. These rotors are intended to be used in combination with ambient states that vary in vertical direction only (height dependent data).

Never combine this rotor model with partial wakes rotor_points, since for wake averaging, the rotor points simply don’t make much sense.

A level rotor with N levels can be constructed as LevelRotor(n=N) (add reduce=False if uniform weights should be used). The default model book contains level rotors with N levels under the name templates level<N> and level<N>_raw for reduce=True and reduce=False, respectively.

level2

o = foxes.output.RotorPointPlot(mbook.rotor_models["level2"])
ax = o.get_point_figure()
plt.show()
../_images/d1e5cd0162aa503f5d2cbdeea0c45aca8f1fd10aa0e1c71c6b745547715d1da2.png

level3

o = foxes.output.RotorPointPlot(mbook.rotor_models["level3"])
ax = o.get_point_figure()
plt.show()
../_images/15bfbddfe6486241d9ee1d5c16b5703ebc9e211b07537b10a7ce2ea2e9d31f69.png

level5

o = foxes.output.RotorPointPlot(mbook.rotor_models["level5"])
ax = o.get_point_figure()
plt.show()
../_images/64f848387cca7ec3cebdecbea2fbd8caa42738b2b94ccb80e1bf4ce5ea941a7f.png

level5_raw

o = foxes.output.RotorPointPlot(mbook.rotor_models["level5_raw"])
ax = o.get_point_figure()
plt.show()
../_images/a1b5dc6d3d2ac7abcd63cfdd3ca197e2b37de05acad0bbcf764973f95bb8dc31.png

level10

o = foxes.output.RotorPointPlot(mbook.rotor_models["level10"])
ax = o.get_point_figure()
plt.show()
../_images/4fac0a64daf25717511e490315f4d1c049e6bb3aa69b362a2e0e030743e0d655.png

level20

o = foxes.output.RotorPointPlot(mbook.rotor_models["level20"])
ax = o.get_point_figure()
plt.show()
../_images/c4b7168d3f160acea556ecdcefe6dc6bbe9816164383fdb8a762f39b4a5d39ab.png