Source code for foxes.algorithms.downwind.models.reorder_farm_output

import numpy as np

from foxes.core import FarmDataModel
import foxes.variables as FV


[docs] class ReorderFarmOutput(FarmDataModel): """ Reorders final results to state-turbine dimensions Attributes ---------- outputs: list of str, optional The output variables, or None for defaults :group: algorithms.downwind.models """
[docs] def __init__(self, outputs): """ Constructor Parameters ---------- outputs: list of str, optional The output variables, or None for defaults """ super().__init__(pre_rotor=False) self.outputs = outputs
[docs] def output_farm_vars(self, algo): """ The variables which are being modified by the model. Parameters ---------- algo: foxes.core.Algorithm The calculation algorithm Returns ------- output_vars: list of str The output variable names """ return self.outputs if self.outputs is not None else algo.farm_vars
[docs] def calculate(self, algo, mdata, fdata): """ The main model calculation. 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.Data The model data fdata: foxes.core.Data The farm data Returns ------- results: dict The resulting data, keys: output variable str. Values: numpy.ndarray with shape (n_states, n_turbines) """ ssel = fdata[FV.ORDER_SSEL] order_inv = fdata[FV.ORDER_INV] out = {} for v in self.output_farm_vars(algo): if v != FV.ORDER and np.any(fdata[v] != fdata[v][0, 0, None, None]): out[v] = fdata[v][ssel, order_inv] else: out[v] = fdata[v] return out