Source code for foxes.models.ground_models.wake_mirror

from foxes.core import GroundModel
import foxes.variables as FV
import foxes.constants as FC


[docs] class WakeMirror(GroundModel): """ Wake reflection from ground and/or other horizontal planes. Attributes ---------- heights: list of float The reflection heights :group: models.ground_models """
[docs] def __init__(self, heights): """ Constructor. Parameters ---------- heights: list of float The reflection heights """ super().__init__() self.heights = heights
[docs] def contribute_to_farm_wakes( self, algo, mdata, fdata, tdata, downwind_index, wake_deltas, wmodel, pwake, ): """ Modifies wake deltas at target points by contributions from the specified wake source turbines. 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 downwind order wake_deltas: dict The wake deltas. Key: variable name, value: numpy.ndarray with shape (n_states, n_targets, n_tpoints, ...) wmodel: foxes.core.WakeModel The wake model pwake: foxes.core.PartialWakesModel The partial wakes model """ # prepare: hh = fdata[FV.H][:, downwind_index].copy() # DEBUG CHECK: # import numpy as np # assert(np.all(fdata[FV.H]==fdata[FV.TXYH[..., 2]])) # contribution from main wake: wcoos = algo.wake_frame.get_wake_coos(algo, mdata, fdata, tdata, downwind_index) wmodel.contribute(algo, mdata, fdata, tdata, downwind_index, wcoos, wake_deltas) # contribution from mirrors: tdata[FC.TARGETS] = tdata[FC.TARGETS].copy() # making sure this is no ref for h in self.heights: fdata[FV.TXYH][:, downwind_index, 2] = hh + 2 * (h - hh) pwake.contribute( algo, mdata, fdata, tdata, downwind_index, wake_deltas, wmodel ) # reset heights: fdata[FV.TXYH][:, downwind_index, 2] = hh
[docs] def contribute_to_point_wakes( self, algo, mdata, fdata, tdata, downwind_index, wake_deltas, wmodel, ): """ Modifies wake deltas at target points by contributions from the specified wake source turbines. 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 downwind order wake_deltas: dict The wake deltas. Key: variable name, value: numpy.ndarray with shape (n_states, n_targets, n_tpoints, ...) wmodel: foxes.core.WakeModel The wake model """ # prepare: hh = fdata[FV.H][:, downwind_index].copy() # contribution from main wake: wcoos = algo.wake_frame.get_wake_coos(algo, mdata, fdata, tdata, downwind_index) wmodel.contribute(algo, mdata, fdata, tdata, downwind_index, wcoos, wake_deltas) # contribution from mirrors: tdata[FC.TARGETS] = tdata[FC.TARGETS].copy() # making sure this is no ref for h in self.heights: fdata[FV.TXYH][:, downwind_index, 2] = hh + 2 * (h - hh) wcoos = algo.wake_frame.get_wake_coos( algo, mdata, fdata, tdata, downwind_index ) wmodel.contribute( algo, mdata, fdata, tdata, downwind_index, wcoos, wake_deltas ) # reset heights: fdata[FV.TXYH][:, downwind_index, 2] = hh
[docs] class GroundMirror(WakeMirror): """ Wake reflection from the ground. :group: models.ground_models """
[docs] def __init__(self): """ Constructor. """ super().__init__(heights=[0.0])