Exemple #1
0
def test_HybridSystem_singlediode():

    from collections import OrderedDict

    static_hybsystem = cpvsystem.StaticHybridSystem(
        module_parameters_cpv=mod_params_cpv,
        module_parameters_flatplate=mod_params_flatplate)

    diode_parameters_cpv = (0.768, 6.021260125175771e-09, 0.01,
                            5355.728196448678, 1.973560253332227)
    diode_parameters_flat = (0.90375, 1.4707860128864193e-07, 0.5,
                             605.1508364413314, 0.35922505316643616)

    dc_cpv, dc_flat = static_hybsystem.singlediode(diode_parameters_cpv,
                                                   diode_parameters_flat)

    assert dc_cpv == OrderedDict([('i_sc', 0.7679985660005298),
                                  ('v_oc', 36.81679129270333),
                                  ('i_mp', 0.7169288240780115),
                                  ('v_mp', 31.238496992958595),
                                  ('p_mp', 22.395778915126304),
                                  ('i_x', 0.7644934769583084),
                                  ('i_xx', 0.5758846117534837)])

    assert dc_flat == OrderedDict([('i_sc', 0.903003532284735),
                                   ('v_oc', 5.6113766436897095),
                                   ('i_mp', 0.8210320675081583),
                                   ('v_mp', 4.310035383000505),
                                   ('p_mp', 3.5386772615382216),
                                   ('i_x', 0.8971082731548178),
                                   ('i_xx', 0.5712911044697004)])
Exemple #2
0
def test_StaticHybridSystem_get_effective_irradiance():
    static_hybsystem = cpvsystem.StaticHybridSystem(
        surface_tilt=32,
        surface_azimuth=135,
        module_parameters_cpv=mod_params_cpv,
        module_parameters_flatplate=mod_params_flatplate)
    times = pd.date_range(start='20160101 1200-0700',
                          end='20160101 1800-0700',
                          freq='6H')
    location = pvlib.location.Location(latitude=32, longitude=-111)
    solar_position = location.get_solarposition(times)
    irrads = pd.DataFrame({
        'dni': [900, 0],
        'ghi': [600, 0],
        'dhi': [100, 0]
    },
                          index=times)
    eff_irr_cpv, wff_irr_flat = static_hybsystem.get_effective_irradiance(
        solar_position['apparent_zenith'], solar_position['azimuth'],
        irrads['dni'], irrads['ghi'], irrads['dhi'])

    expected_cpv = pd.Series(data=np.array([637.964408, 0.0]), index=times)
    expected_flat = pd.Series(data=np.array([137.794154, 0.0]), index=times)

    pd.testing.assert_series_equal(eff_irr_cpv, expected_cpv, rtol=0.0001)
    pd.testing.assert_series_equal(wff_irr_flat, expected_flat, rtol=0.0001)
Exemple #3
0
def test_HybridSystem_calcparams_pvsyst():

    static_hybsystem = cpvsystem.StaticHybridSystem(
        module_parameters_cpv=mod_params_cpv,
        module_parameters_flatplate=mod_params_flatplate)

    irrad_cpv = 800
    irrad_flat = 150
    temp_cell_cpv = 65
    temp_cell_flat = 50

    diode_parameters_cpv, diode_parameters_flat = static_hybsystem.calcparams_pvsyst(
        irrad_cpv, irrad_flat, temp_cell_cpv, temp_cell_flat)

    assert diode_parameters_cpv == (0.768, 6.021260125175771e-09, 0.01,
                                    5355.728196448678, 1.973560253332227)
    assert diode_parameters_flat == (0.90375, 1.4707860128864193e-07, 0.5,
                                     605.1508364413314, 0.35922505316643616)
Exemple #4
0
def test_HybridSystem_get_global_utilization_factor_cpv():

    static_hybsystem = cpvsystem.StaticHybridSystem(
        module_parameters_cpv=mod_params_cpv,
        module_parameters_flatplate=mod_params_flatplate)

    times = pd.date_range(start='20160101 1200',
                          end='20160101 1500',
                          freq='3H')

    airmass_absolute = pd.Series(data=np.array([2.056997, 3.241064]),
                                 index=times)
    temp_air = pd.Series(data=np.array([5, 35]), index=times)

    uf_global = static_hybsystem.get_global_utilization_factor_cpv(
        airmass_absolute, temp_air)

    expected = pd.Series(data=np.array([0.822522, 0.940439]), index=times)

    pd.testing.assert_series_equal(uf_global, expected, rtol=0.0001)
Exemple #5
0
def test_HybridSystem_pvsyst_celltemp():

    parameter_set = 'freestanding'
    temp_model_params_cpv = pvlib.temperature.TEMPERATURE_MODEL_PARAMETERS[
        'pvsyst'][parameter_set]
    temp_model_params_flat = pvlib.temperature.TEMPERATURE_MODEL_PARAMETERS[
        'pvsyst'][parameter_set]

    static_hybsystem = cpvsystem.StaticHybridSystem(
        module_parameters_cpv=mod_params_cpv,
        module_parameters_flatplate=mod_params_flatplate,
        temperature_model_parameters_cpv=temp_model_params_cpv,
        temperature_model_parameters_flatplate=temp_model_params_flat)

    irrad_cpv = 800
    irrad_flat = 150
    temp = 45
    wind = 0.5

    out_cpv, out_flat = static_hybsystem.pvsyst_celltemp(
        irrad_cpv, irrad_flat, temp, wind)

    assert np.round(out_cpv, 4) == 61.8828
    assert np.round(out_flat, 4) == 49.1897
                                   altitude=695,
                                   tz='utc')

solar_zenith = location.get_solarposition(data.index).zenith
solar_azimuth = location.get_solarposition(data.index).azimuth

#%%
# StaticHybridSystem
static_hybrid_sys = cpvsystem.StaticHybridSystem(
    surface_tilt=30,
    surface_azimuth=180,
    module_cpv=None,
    module_flatplate=None,
    module_parameters_cpv=mod_params_cpv,
    module_parameters_flatplate=mod_params_flatplate,
    modules_per_string=1,
    strings_per_inverter=1,
    inverter=None,
    inverter_parameters=None,
    racking_model="insulated",
    losses_parameters=None,
    name=None,
)

# get_effective_irradiance
data['dii_effective'], data[
    'poa_flatplate_static_effective'] = static_hybrid_sys.get_effective_irradiance(
        solar_zenith,
        solar_azimuth,
        # iam_param=0.7,
        # aoi_limit=55,
Exemple #7
0
def test_StaticHybridSystem_composicion_2019_05(data):

    location = pvlib.location.Location(latitude=40.4,
                                       longitude=-3.7,
                                       altitude=695,
                                       tz='Europe/Madrid')

    solar_zenith = location.get_solarposition(data.index).zenith
    solar_azimuth = location.get_solarposition(data.index).azimuth

    # StaticCPVSystem
    static_cpv_sys = cpvsystem.StaticCPVSystem(
        surface_tilt=30,
        surface_azimuth=180,
        module=None,
        module_parameters=mod_params_cpv,
        temperature_model_parameters=pvlib.temperature.
        TEMPERATURE_MODEL_PARAMETERS['pvsyst']['insulated'],
        modules_per_string=1,
        strings_per_inverter=1,
        inverter=None,
        inverter_parameters=None,
        racking_model="insulated",
        losses_parameters=None,
        name=None,
    )

    data['aoi'] = static_cpv_sys.get_aoi(solar_zenith, solar_azimuth)

    data['dii_effective'] = data['dii'] * pvlib.iam.ashrae(data['aoi'], b=0.7)

    diode_parameters_cpv = static_cpv_sys.calcparams_pvsyst(
        data['dii_effective'], data['temp_cell_35'])

    dc_cpv = static_cpv_sys.singlediode(*diode_parameters_cpv)

    airmass_absolute = location.get_airmass(data.index).airmass_absolute

    # OJO uf_global NO incluye uf_aoi!!
    uf_global = static_cpv_sys.get_global_utilization_factor(
        airmass_absolute, data['temp_air'])

    # StaticFlatPlateSystem
    static_flatplate_sys = cpvsystem.StaticFlatPlateSystem(
        surface_tilt=30,
        surface_azimuth=180,
        module=None,
        module_parameters=mod_params_flatplate,
        modules_per_string=1,
        strings_per_inverter=1,
        inverter=None,
        inverter_parameters=None,
        racking_model="insulated",
        losses_parameters=None,
        name=None,
    )

    # el aoi de difusa es el mismo que cpv
    data['poa_flatplate_static'] = static_flatplate_sys.get_irradiance(
        solar_zenith,
        solar_azimuth,
        aoi=data['aoi'],
        # aoi_limit=55, # ahora pasa por module_params
        # dii_effective no aplica, ya que si no el calculo de difusa es artificialmente alto!
        dii=data['dii'],
        gii=data['gii'])

    celltemp_flatplate = static_flatplate_sys.pvsyst_celltemp(
        data['poa_flatplate_static'], data['temp_air'], data['wind_speed'])

    diode_parameters_flatplate = static_flatplate_sys.calcparams_pvsyst(
        data['poa_flatplate_static'], celltemp_flatplate)

    dc_flatplate = static_flatplate_sys.singlediode(
        *diode_parameters_flatplate)

    # StaticHybridSystem
    static_hybrid_sys = cpvsystem.StaticHybridSystem(
        surface_tilt=30,
        surface_azimuth=180,
        module_cpv=None,
        module_flatplate=None,
        module_parameters_cpv=mod_params_cpv,
        module_parameters_flatplate=mod_params_flatplate,
        modules_per_string=1,
        strings_per_inverter=1,
        inverter=None,
        inverter_parameters=None,
        racking_model="insulated",
        losses_parameters=None,
        name=None,
    )

    # get_effective_irradiance
    dii_effective_h, poa_flatplate_static_h = static_hybrid_sys.get_effective_irradiance(
        solar_zenith,
        solar_azimuth,
        dni=data['dni'],
        dii=
        None,  # dii_effective no aplica, ya que si no el calculo de difusa es artificialmente alto!
        gii=data['gii'],
    )

    assert np.allclose(data['dii_effective'], dii_effective_h, atol=1) is True
    assert np.allclose(
        data['poa_flatplate_static'], poa_flatplate_static_h, atol=1) is True

    # pvsyst_celltemp
    _, celltemp_flatplate_h = static_hybrid_sys.pvsyst_celltemp(
        dii=dii_effective_h,
        poa_flatplate_static=poa_flatplate_static_h,
        temp_air=data['temp_air'],
        wind_speed=data['wind_speed'])

    assert np.allclose(celltemp_flatplate, celltemp_flatplate_h,
                       atol=1) is True

    # calcparams_pvsyst
    diode_parameters_cpv_h, diode_parameters_flatplate_h = static_hybrid_sys.calcparams_pvsyst(
        dii=dii_effective_h,
        poa_flatplate_static=poa_flatplate_static_h,
        temp_cell_cpv=data['temp_cell_35'],
        temp_cell_flatplate=celltemp_flatplate_h,
    )

    for diode_param, diode_param_h in zip(diode_parameters_cpv,
                                          diode_parameters_cpv_h):
        assert np.allclose(diode_param, diode_param_h, atol=10) is True

    # singlediode
    airmass_absolute = location.get_airmass(data.index).airmass_absolute
    dc_cpv_h, dc_flatplate_h = static_hybrid_sys.singlediode(
        diode_parameters_cpv_h, diode_parameters_flatplate_h)

    for dc_param in dc_cpv:
        assert np.allclose(dc_cpv[dc_param], dc_cpv_h[dc_param],
                           atol=1) is True

    for dc_param in dc_cpv:
        assert np.allclose(dc_flatplate[dc_param].fillna(0),
                           dc_flatplate_h[dc_param].fillna(0),
                           atol=100) is True

    # uf_global
    airmass_absolute = location.get_airmass(data.index).airmass_absolute

    uf_global_h = static_hybrid_sys.get_global_utilization_factor_cpv(
        airmass_absolute, data['temp_air'])

    assert np.allclose(uf_global, uf_global_h, atol=0.001) is True