def test_calculate_windturbine_power_output_realistic_values(self): power_v5 = weather_features.calculate_windturbine_power_output(5) self.assertAlmostEqual(power_v5, 0.11522159872442202) windspeed_v8 = weather_features.calculate_windturbine_power_output(8) self.assertAlmostEqual(windspeed_v8, 0.48838209152618717) # The generated power should level off to the rated power for high wind speeds power_v100 = weather_features.calculate_windturbine_power_output(100) self.assertAlmostEqual(power_v100, 1)
def make_wind_forecast_pj(pj, context): """Make a wind prediction for a specific prediction job Args: pj: (dict) prediction job """ context.logger.info("Get turbine data", turbine_type=pj["turbine_type"]) turbine_data = context.database.get_power_curve(pj["turbine_type"]) context.logger.info("Get windspeed", location=[pj["lat"], pj["lon"]], hub_height=pj["hub_height"]) windspeed = context.database.get_wind_input( (pj["lat"], pj["lon"]), pj["hub_height"], pj["horizon_minutes"], pj["resolution_minutes"], ) context.logger.info("Calculate windturbine power", n_turbines=pj["n_turbines"]) power = weather_features.calculate_windturbine_power_output( windspeed, pj["n_turbines"], turbine_data).rename(columns=dict(windspeed_100m="forecast")) context.logger.info("Store wind prediction in database") power["pid"] = pj["id"] power["type"] = "wind" power["algtype"] = "powerCurve" power["customer"] = pj["name"] power["description"] = pj["description"] context.database.write_forecast(power, t_ahead_series=True)
def test_calculate_windturbine_power_output(self): windspeed = 20 n_turbines = 1 turbine_data = {"slope_center": 1, "rated_power": 1, "steepness": 0.1} power_output = weather_features.calculate_windturbine_power_output( windspeed, n_turbines, turbine_data) expected_power_output = 0.8698915256370021 self.assertAlmostEqual(power_output, expected_power_output)
def test_apply_power_curve_nan_wind(self): power = weather_features.calculate_windturbine_power_output( float("nan")) self.assertIsNAN(power)
def test_calculate_windturbine_power_output_no_wind(self): power = weather_features.calculate_windturbine_power_output(0) self.assertAlmostEqual(power, 0, places=2)