示例#1
0
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)
示例#2
0
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)
示例#3
0
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
示例#4
0
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)
示例#5
0
 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
示例#7
0
# 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