def test_sapm_ndarray(sapm_default): temps = np.array([0, 10, 5]) irrads = np.array([0, 500, 0]) winds = np.array([10, 5, 0]) cell_temps = temperature.sapm_cell(irrads, temps, winds, sapm_default['a'], sapm_default['b'], sapm_default['deltaT']) module_temps = temperature.sapm_module(irrads, temps, winds, sapm_default['a'], sapm_default['b']) expected_cell = np.array([0., 23.06066166, 5.]) expected_module = np.array([0., 21.56066166, 5.]) assert_allclose(expected_cell, cell_temps, 3) assert_allclose(expected_module, module_temps, 3)
def test_sapm_series(sapm_default): times = pd.date_range(start='2015-01-01', end='2015-01-02', freq='12H') temps = pd.Series([0, 10, 5], index=times) irrads = pd.Series([0, 500, 0], index=times) winds = pd.Series([10, 5, 0], index=times) cell_temps = temperature.sapm_cell(irrads, temps, winds, sapm_default['a'], sapm_default['b'], sapm_default['deltaT']) module_temps = temperature.sapm_module(irrads, temps, winds, sapm_default['a'], sapm_default['b']) expected_cell = pd.Series([0., 23.06066166, 5.], index=times) expected_module = pd.Series([0., 21.56066166, 5.], index=times) assert_series_equal(expected_cell, cell_temps) assert_series_equal(expected_module, module_temps)
def ajuste_temp_sapm_module(data, grafica=True): def f(meteo_inputs, a, b): poa_global, temp_air, wind_speed = meteo_inputs return sapm_module(poa_global, temp_air, wind_speed, a, b) (a, b), pcov = curve_fit(f, (data.dni, data.temp_air, data.wind_speed), data.temp_cell_35) temp_cell_35_est_sapm = sapm_module(data.dni, data.temp_air, data.wind_speed, a, b) residuals_sapm = data.temp_cell_35 - temp_cell_35_est_sapm RMSE_sapm = np.sqrt(((residuals_sapm)**2).mean()) print('RMSE SAPM_module:', RMSE_sapm) if grafica: plt.figure() plt.hist2d(data.temp_cell_35, temp_cell_35_est_sapm, bins=30) plt.grid(True) plt.figure() plt.hist(residuals_sapm, bins=100) return a, b
def test_sapm_module(sapm_default): default = temperature.sapm_module(900, 20, 5, sapm_default['a'], sapm_default['b']) assert_allclose(default, 40.809, 3)
def f(meteo_inputs, a, b): poa_global, temp_air, wind_speed = meteo_inputs return sapm_module(poa_global, temp_air, wind_speed, a, b)
# drop times when GHI is <= 1 df.drop(df.index[df['ghi'] <= 1.], inplace=True) # assume poa = ghi, e.g., horizontal module df['poa_actual'] = df['ghi'] # Simulate some noise on the measured poa irradiance. poa_noise_level = 0.02 df['poa_meas'] = df['poa_actual'] * (1 + poa_noise_level * (np.random.random(df['ghi'].shape) - 0.5)) # estimate module/cell temperature df['temperature_module_actual'] = sapm_module(poa_global=df['poa_actual'], temp_air=df['temperature_air'], wind_speed=df['wind_speed'], a=-3.56, b=-0.075) df['temperature_cell_actual'] = sapm_cell(poa_global=df['poa_actual'], temp_air=df['temperature_air'], wind_speed=df['wind_speed'], a=-3.56, b=-0.075, deltaT=3) # "measured" module temperature has noise. temperature_noise_level = 2 df['temperature_module_meas'] = df['temperature_module_actual'] + ( np.random.random(df['ghi'].shape) - 0.5) * temperature_noise_level
# filtro 3 días soleados # data = data['2019-05-30':'2019-06-01'] #%% Ajuste sapm_module def f_sapm(meteo_inputs, a, b): poa_global, temp_air, wind_speed = meteo_inputs return sapm_module(poa_global, temp_air, wind_speed, a, b) (a, b), pcov = curve_fit(f_sapm, (data.dii, data.temp_air, data.wind_speed), data.temp_cell_35) print("a, b =", a, b) temp_cell_35_est_sapm = sapm_module(data.dii, data.temp_air, data.wind_speed, a, b) residuals_sapm = data.temp_cell_35 - temp_cell_35_est_sapm RMSE_sapm = np.sqrt(((residuals_sapm)**2).mean()) print('RMSE SAPM_module:', RMSE_sapm) plt.figure() plt.hist2d(data.temp_cell_35, temp_cell_35_est_sapm, bins=30) plt.grid(True) plt.figure() plt.hist(residuals_sapm, bins=100) #%% Ajuste pvsyst_cell def f_pvsyst(meteo_inputs, u_c, u_v, eta_m, alpha_absorption): poa_global, temp_air, wind_speed = meteo_inputs