@@ -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