Source code for foxes.models.wake_frames.farm_order
import numpy as np
import foxes.constants as FC
from .rotor_wd import RotorWD
from foxes.core import WakeFrame
[docs]
class FarmOrder(WakeFrame):
"""
Invokes turbine ordering as defined
by the wind farm.
Warning: This is for testing purposes only, and in general
only gives correct calculation results when used
in an iterative algorithm.
Attributes
----------
base_frame: foxes.core.WakeFrame
The wake frame from which to start
:group: models.wake_frames
"""
[docs]
def __init__(self, base_frame=RotorWD()):
"""
Constructor.
Parameters
----------
base_frame: foxes.core.WakeFrame
The wake frame from which to start
"""
super().__init__()
self.base_frame = base_frame
[docs]
def sub_models(self):
"""
List of all sub-models
Returns
-------
smdls: list of foxes.core.Model
Names of all sub models
"""
return [self.base_frame]
[docs]
def calc_order(self, algo, mdata, fdata):
""" "
Calculates the order of turbine evaluation.
This function is executed on a single chunk of data,
all computations should be based on numpy arrays.
Parameters
----------
algo: foxes.core.Algorithm
The calculation algorithm
mdata: foxes.core.MData
The model data
fdata: foxes.core.FData
The farm data
Returns
-------
order: numpy.ndarray
The turbine order, shape: (n_states, n_turbines)
"""
order = np.zeros((fdata.n_states, fdata.n_turbines), dtype=FC.ITYPE)
order[:] = np.arange(fdata.n_turbines)[None, :]
return order
[docs]
def get_wake_coos(
self,
algo,
mdata,
fdata,
tdata,
downwind_index,
):
"""
Calculate wake coordinates of rotor points.
Parameters
----------
algo: foxes.core.Algorithm
The calculation algorithm
mdata: foxes.core.MData
The model data
fdata: foxes.core.FData
The farm data
tdata: foxes.core.TData
The target point data
downwind_index: int
The index of the wake causing turbine
in the downwnd order
Returns
-------
wake_coos: numpy.ndarray
The wake frame coordinates of the evaluation
points, shape: (n_states, n_targets, n_tpoints, 3)
"""
return self.base_frame.get_wake_coos(algo, mdata, fdata, tdata, downwind_index)
[docs]
def get_centreline_points(self, algo, mdata, fdata, downwind_index, x):
"""
Gets the points along the centreline for given
values of x.
Parameters
----------
algo: foxes.core.Algorithm
The calculation algorithm
mdata: foxes.core.MData
The model data
fdata: foxes.core.FData
The farm data
downwind_index: int
The index in the downwind order
x: numpy.ndarray
The wake frame x coordinates, shape: (n_states, n_points)
Returns
-------
points: numpy.ndarray
The centreline points, shape: (n_states, n_points, 3)
"""
return self.base_frame.get_centreline_points(
algo, mdata, fdata, downwind_index, x
)