Skip to content

Commit a930785

Browse files
authored
Merge pull request #87 from wind-python/error_message_issue_69
Solve #69, error msg
2 parents e90ab16 + 1a8a601 commit a930785

File tree

3 files changed

+37
-18
lines changed

3 files changed

+37
-18
lines changed

tests/test_wind_farm.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,3 +219,17 @@ def test_aggregation_of_power_curve_with_missing_power_curve(self):
219219
msg = "For an aggregated wind farm power curve each wind"
220220
with pytest.raises(ValueError, match=msg):
221221
windfarm.assign_power_curve()
222+
223+
def test_wind_farm_efficiency_with_missing_efficiency(self):
224+
"""Test WindFarm.assign_power_curve() with missing efficiency while
225+
`wake_losses_model` is 'wind_farm_efficiency'."""
226+
wind_turbine_fleet = [
227+
{
228+
"wind_turbine": WindTurbine(**self.test_turbine),
229+
"number_of_turbines": 3,
230+
}
231+
]
232+
windfarm = WindFarm(wind_turbine_fleet=wind_turbine_fleet)
233+
msg = "If you use `wake_losses_model`"
234+
with pytest.raises(ValueError, match=msg):
235+
windfarm.assign_power_curve()

windpowerlib/wind_farm.py

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -76,39 +76,39 @@ class WindFarm(object):
7676
>>> from windpowerlib import wind_farm
7777
>>> from windpowerlib import WindTurbine
7878
>>> import pandas as pd
79-
>>> enerconE126={
79+
>>> enerconE126 = {
8080
... 'hub_height': 135,
8181
... 'rotor_diameter': 127,
8282
... 'turbine_type': 'E-126/4200'}
83-
>>> e126=WindTurbine(**enerconE126)
84-
>>> vestasV90={
83+
>>> e126 = WindTurbine(**enerconE126)
84+
>>> vestasV90 = {
8585
... 'hub_height': 90,
8686
... 'turbine_type': 'V90/2000',
8787
... 'nominal_power': 2e6}
88-
>>> v90=WindTurbine(**vestasV90)
88+
>>> v90 = WindTurbine(**vestasV90)
8989
>>> # turbine fleet as DataFrame
90-
>>> wind_turbine_fleet=pd.DataFrame(
90+
>>> wind_turbine_fleet = pd.DataFrame(
9191
... {'wind_turbine': [e126, v90],
9292
... 'number_of_turbines': [6, None],
9393
... 'total_capacity': [None, 3 * 2e6]})
94-
>>> example_farm=wind_farm.WindFarm(wind_turbine_fleet, name='my_farm')
94+
>>> example_farm = wind_farm.WindFarm(wind_turbine_fleet, name='my_farm')
9595
>>> print(example_farm.nominal_power)
9696
31200000.0
9797
>>> # turbine fleet as a list of WindTurbineGroup objects using the
9898
>>> # 'to_group' method.
99-
>>> wind_turbine_fleet=[e126.to_group(6),
99+
>>> wind_turbine_fleet = [e126.to_group(6),
100100
... v90.to_group(total_capacity=3 * 2e6)]
101-
>>> example_farm=wind_farm.WindFarm(wind_turbine_fleet, name='my_farm')
101+
>>> example_farm = wind_farm.WindFarm(wind_turbine_fleet, name='my_farm')
102102
>>> print(example_farm.nominal_power)
103103
31200000.0
104104
>>> # turbine fleet as list of dictionaries (not recommended)
105-
>>> example_farm_data={
105+
>>> example_farm_data = {
106106
... 'name': 'my_farm',
107107
... 'wind_turbine_fleet': [{'wind_turbine': e126,
108108
... 'number_of_turbines': 6},
109109
... {'wind_turbine': v90,
110110
... 'total_capacity': 3 * 2e6}]}
111-
>>> example_farm=wind_farm.WindFarm(**example_farm_data)
111+
>>> example_farm = wind_farm.WindFarm(**example_farm_data)
112112
>>> print(example_farm.nominal_power)
113113
31200000.0
114114
"""
@@ -275,7 +275,7 @@ def mean_hub_height(self):
275275
-----
276276
The following equation is used [1]_:
277277
278-
.. math:: h_{WF}=e^{\sum\limits_{k}{ln(h_{WT,k})}
278+
.. math:: h_{WF} = e^{\sum\limits_{k}{ln(h_{WT,k})}
279279
\frac{P_{N,k}}{\sum\limits_{k}{P_{N,k}}}}
280280
281281
with:
@@ -470,12 +470,15 @@ def assign_power_curve(
470470
wind_farm_efficiency=self.efficiency,
471471
)
472472
else:
473-
logging.info(
474-
"`wake_losses_model` is {} but wind farm ".format(
475-
wake_losses_model
473+
msg = (
474+
"If you use `wake_losses_model` '{model}' your WindFarm "
475+
"needs an efficiency but `efficiency` is {eff}. \n\n"
476+
"Failing farm:\n {farm}"
477+
)
478+
raise ValueError(
479+
msg.format(
480+
model=wake_losses_model, farm=self, eff=self.efficiency
476481
)
477-
+ "efficiency is NOT taken into "
478-
"account as it is None."
479482
)
480483
self.power_curve = wind_farm_power_curve
481484
return self

windpowerlib/wind_turbine_cluster.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -148,8 +148,10 @@ def assign_power_curve(
148148
Parameters
149149
----------
150150
wake_losses_model : str
151-
Defines the method for taking wake losses within the farm into
152-
consideration. Options: 'wind_farm_efficiency' or None.
151+
Defines the method for taking wake losses within the wind farms of
152+
the cluster into consideration. Options: 'wind_farm_efficiency'
153+
or None. If 'wind_farm_efficiency' is chosen the `efficiency`
154+
attribute of the WindFarms must be set.
153155
Default: 'wind_farm_efficiency'.
154156
smoothing : bool
155157
If True the power curves will be smoothed before or after the

0 commit comments

Comments
 (0)