@@ -91,113 +91,11 @@ def __init__(self, wind_object, wake_losses_method='wind_efficiency_curve',
9191
9292 if (isinstance (self .wind_object , wind_farm .WindFarm ) and
9393 self .smoothing_order == 'cluster_power_curve' ):
94- raise ValueError ("`smoothing_order` can only be " +
94+ raise ValueError ("`smoothing_order` can only be done to " +
9595 "'cluster_power_curve' if you calculate a " +
9696 "cluster but `wind_object` is an object of the " +
9797 "class WindFarm." )
9898
99- def wind_farm_power_curve (self , wind_farm , ** kwargs ):
100- r"""
101- Caluclates the power curve of a wind farm.
102-
103- Depending on the parameters of the class the power curves are smoothed
104- and/or density corrected before or after the summation and/or a wind
105- farm efficiency is applied after the summation. TODO: check entry
106-
107- Parameters
108- ----------
109- wind_farm : WindFarm
110- A :class:`~.wind_farm.WindFarm` object representing the wind farm.
111-
112- Other Parameters
113- ----------------
114- roughness_length : Float, optional.
115- Roughness length.
116- turbulence_intensity : Float, optional.
117- Turbulence intensity.
118-
119- Returns
120- -------
121- summarized_power_curve_df : pd.DataFrame
122- Calculated power curve of the wind farm.
123-
124- """
125- # Initialize data frame for power curve values
126- df = pd .DataFrame ()
127- for turbine_type_dict in wind_farm .wind_turbine_fleet :
128- # Check if all needed parameters are available
129- if self .smoothing :
130- if (self .standard_deviation_method ==
131- 'turbulence_intensity' and
132- 'turbulence_intensity' not in kwargs ):
133- if 'roughness_length' in kwargs :
134- # Calculate turbulence intensity and write to kwargs
135- turbulence_intensity = (
136- tools .estimate_turbulence_intensity (
137- turbine_type_dict ['wind_turbine' ].hub_height ,
138- kwargs ['roughness_length' ]))
139- kwargs ['turbulence_intensity' ] = turbulence_intensity
140- else :
141- raise ValueError (
142- "`roughness_length` must be defined for using " +
143- "'turbulence_intensity' as " +
144- "`standard_deviation_method` if " +
145- "`turbulence_intensity` is not given" )
146- if self .wake_losses_method is not None :
147- if wind_farm .efficiency is None :
148- raise KeyError (
149- "wind_farm_efficiency is needed if " +
150- "`wake_losses_method´ is '{0}', but " .format (
151- self .wake_losses_method ) +
152- " `wind_farm_efficiency` of {0} is {1}." .format (
153- self .wind_object .object_name ,
154- self .wind_object .efficiency ))
155- # Get original power curve
156- power_curve = pd .DataFrame (
157- turbine_type_dict ['wind_turbine' ].power_curve )
158- # Editions to power curve before the summation
159- if (self .smoothing and
160- self .smoothing_order == 'turbine_power_curves' ):
161- power_curve = power_curves .smooth_power_curve (
162- power_curve ['wind_speed' ], power_curve ['power' ],
163- standard_deviation_method = self .standard_deviation_method ,
164- ** kwargs )
165- # Add power curves of all turbines of same type to data frame after
166- # renaming columns
167- power_curve .columns = ['wind_speed' , turbine_type_dict [
168- 'wind_turbine' ].object_name ]
169- df = pd .concat ([df , pd .DataFrame ( # TODO: merge without renaming
170- power_curve .set_index (['wind_speed' ]) *
171- turbine_type_dict ['number_of_turbines' ])], axis = 1 )
172- # Rename back TODO: copy()
173- power_curve .columns = ['wind_speed' , 'power' ]
174- # Sum up power curves of all turbine types
175- summarized_power_curve = pd .DataFrame (
176- sum (df [item ].interpolate (method = 'index' ) for item in list (df )))
177- summarized_power_curve .columns = ['power' ]
178- # Return wind speed (index) to a column of the data frame
179- summarized_power_curve_df = pd .DataFrame (
180- data = [list (summarized_power_curve .index ),
181- list (summarized_power_curve ['power' ].values )]).transpose ()
182- summarized_power_curve_df .columns = ['wind_speed' , 'power' ]
183- # Editions to power curve after the summation
184- if (self .smoothing and
185- self .smoothing_order == 'wind_farm_power_curves' ):
186- summarized_power_curve_df = power_curves .smooth_power_curve (
187- summarized_power_curve_df ['wind_speed' ],
188- summarized_power_curve_df ['power' ],
189- standard_deviation_method = self .standard_deviation_method ,
190- ** kwargs )
191- if (self .wake_losses_method == 'constant_efficiency' or
192- self .wake_losses_method == 'wind_efficiency_curve' ):
193- summarized_power_curve_df = (
194- power_curves .wake_losses_to_power_curve (
195- summarized_power_curve_df ['wind_speed' ].values ,
196- summarized_power_curve_df ['power' ].values ,
197- wake_losses_method = self .wake_losses_method ,
198- wind_farm_efficiency = self .wind_object .efficiency ))
199- return summarized_power_curve_df
200-
20199 def turbine_cluster_power_curve (self , ** kwargs ):
202100 r"""
203101 Caluclates the power curve of a wind turbine cluster.
0 commit comments