Skip to content

Commit c40cd33

Browse files
committed
Simplify run_model() function
1 parent f791288 commit c40cd33

File tree

1 file changed

+55
-22
lines changed

1 file changed

+55
-22
lines changed

windpowerlib/turbine_cluster_modelchain.py

Lines changed: 55 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,59 @@ def __init__(self, power_plant, wake_losses_model='dena_mean',
149149
self.power_curve = None
150150
self.power_output = None
151151

152+
def assign_power_curve(self, weather_df):
153+
r"""
154+
Calculates the power curve of the wind turbine cluster.
155+
156+
The power curve is aggregated from the wind farms' and wind turbines'
157+
power curves by using :func:`power_plant.assign_power_curve`. Depending
158+
on the parameters of the WindTurbineCluster power curves are smoothed
159+
and/or wake losses are taken into account.
160+
161+
Parameters
162+
----------
163+
weather_df : pandas.DataFrame
164+
DataFrame with time series for wind speed `wind_speed` in m/s, and
165+
roughness length `roughness_length` in m, as well as optionally
166+
temperature `temperature` in K, pressure `pressure` in Pa,
167+
density `density` in kg/m³ and turbulence intensity
168+
`turbulence_intensity` depending on `power_output_model`,
169+
`density_model` and `standard_deviation_model` chosen.
170+
The columns of the DataFrame are a MultiIndex where the first level
171+
contains the variable name (e.g. wind_speed) and the second level
172+
contains the height at which it applies (e.g. 10, if it was
173+
measured at a height of 10 m). See documentation of
174+
:func:`TurbineClusterModelChain.run_model` for an example on how
175+
to create the weather_df DataFrame.
176+
177+
Returns
178+
-------
179+
self
180+
181+
"""
182+
183+
# Set turbulence intensity for assigning power curve
184+
turbulence_intensity = (
185+
weather_df['turbulence_intensity'].values.mean() if
186+
'turbulence_intensity' in
187+
weather_df.columns.get_level_values(0) else None)
188+
# Assign power curve
189+
if (self.wake_losses_model == 'power_efficiency_curve' or
190+
self.wake_losses_model == 'constant_efficiency' or
191+
self.wake_losses_model is None):
192+
wake_losses_model_to_power_curve = self.wake_losses_model
193+
else:
194+
wake_losses_model_to_power_curve = None
195+
self.power_plant.assign_power_curve(
196+
wake_losses_model=wake_losses_model_to_power_curve,
197+
smoothing=self.smoothing, block_width=self.block_width,
198+
standard_deviation_method=self.standard_deviation_method,
199+
smoothing_order=self.smoothing_order,
200+
roughness_length=weather_df['roughness_length'][0].mean(),
201+
turbulence_intensity=turbulence_intensity)
202+
203+
return self
204+
152205
def run_model(self, weather_df):
153206
r"""
154207
Runs the model.
@@ -192,29 +245,9 @@ def run_model(self, weather_df):
192245
'wind_speed'
193246
194247
"""
195-
# Set turbulence intensity for assigning power curve
196-
turbulence_intensity = (
197-
weather_df['turbulence_intensity'].values.mean() if
198-
'turbulence_intensity' in
199-
weather_df.columns.get_level_values(0) else None)
200-
# Assign power curve
201-
if (self.wake_losses_model == 'power_efficiency_curve' or
202-
self.wake_losses_model == 'constant_efficiency' or
203-
self.wake_losses_model is None):
204-
wake_losses_model_to_power_curve = self.wake_losses_model
205-
else:
206-
wake_losses_model_to_power_curve = None
207-
self.power_plant.assign_power_curve(
208-
wake_losses_model=wake_losses_model_to_power_curve,
209-
smoothing=self.smoothing, block_width=self.block_width,
210-
standard_deviation_method=self.standard_deviation_method,
211-
smoothing_order=self.smoothing_order,
212-
roughness_length=weather_df['roughness_length'][0].mean(),
213-
turbulence_intensity=turbulence_intensity)
214-
# Assign mean hub height
215-
self.power_plant.mean_hub_height()
216248

217-
# Run modelchain
249+
self.assign_power_curve(weather_df)
250+
self.power_plant.mean_hub_height()
218251
wind_speed_hub = self.wind_speed_hub(weather_df)
219252
density_hub = (None if (self.power_output_model == 'power_curve' and
220253
self.density_correction is False)

0 commit comments

Comments
 (0)