示例#1
0
def test_horizontal_solarcal_collection_defaults():
    """Test the default inputs assigned to the HorizontalSolarCal collection."""
    calc_length = 24
    irr_header = Header(Irradiance(), 'W/m2',
                        AnalysisPeriod(end_month=1, end_day=1))
    dir_norm = HourlyContinuousCollection(irr_header, [500] * calc_length)
    diff_horiz = HourlyContinuousCollection(irr_header, [200] * calc_length)
    solarcal_obj = HorizontalSolarCal(Location(), dir_norm, diff_horiz, 24)

    assert isinstance(solarcal_obj.fraction_body_exposed,
                      HourlyContinuousCollection)
    assert len(solarcal_obj.fraction_body_exposed.values) == calc_length
    assert solarcal_obj.fraction_body_exposed[12] == 1

    assert isinstance(solarcal_obj.floor_reflectance,
                      HourlyContinuousCollection)
    assert len(solarcal_obj.floor_reflectance.values) == calc_length
    assert solarcal_obj.floor_reflectance[12] == 0.25

    assert isinstance(solarcal_obj.solarcal_body_parameter, SolarCalParameter)
    default_par = SolarCalParameter()
    assert solarcal_obj.solarcal_body_parameter.posture == default_par.posture
    assert solarcal_obj.solarcal_body_parameter.sharp == default_par.sharp
    assert solarcal_obj.solarcal_body_parameter.body_azimuth == default_par.body_azimuth
    assert solarcal_obj.solarcal_body_parameter.body_absorptivity == default_par.body_absorptivity
    assert solarcal_obj.solarcal_body_parameter.body_emissivity == default_par.body_emissivity
示例#2
0
def test_init_horizontal_solarcal_collection():
    """Test the initialization of the HorizontalSolarCal collection."""
    calc_length = 24
    irr_header = Header(Irradiance(), 'W/m2',
                        AnalysisPeriod(end_month=1, end_day=1))
    dir_norm = HourlyContinuousCollection(irr_header, [300] * calc_length)
    diff_horiz = HourlyContinuousCollection(irr_header, [100] * calc_length)
    solarcal_obj = HorizontalSolarCal(Location(), dir_norm, diff_horiz, 24)

    assert solarcal_obj.comfort_model == 'Horizontal SolarCal'
    assert solarcal_obj.calc_length == calc_length
    str(solarcal_obj)  # test that the string representation is ok

    assert isinstance(solarcal_obj.direct_horizontal_solar,
                      HourlyContinuousCollection)
    assert len(solarcal_obj.direct_horizontal_solar.values) == calc_length
    assert solarcal_obj.direct_horizontal_solar[12] == 300
    assert isinstance(solarcal_obj.diffuse_horizontal_solar,
                      HourlyContinuousCollection)
    assert len(solarcal_obj.diffuse_horizontal_solar.values) == calc_length
    assert solarcal_obj.diffuse_horizontal_solar[12] == 100

    assert isinstance(solarcal_obj.effective_radiant_field,
                      HourlyContinuousCollection)
    assert len(solarcal_obj.effective_radiant_field.values) == calc_length
    assert solarcal_obj.effective_radiant_field[12] == pytest.approx(79.35027,
                                                                     rel=1e-3)
    assert isinstance(solarcal_obj.mrt_delta, HourlyContinuousCollection)
    assert len(solarcal_obj.mrt_delta.values) == calc_length
    assert solarcal_obj.mrt_delta[12] == pytest.approx(18.20503, rel=1e-3)
    assert isinstance(solarcal_obj.mean_radiant_temperature,
                      HourlyContinuousCollection)
    assert len(solarcal_obj.mean_radiant_temperature.values) == calc_length
    assert solarcal_obj.mean_radiant_temperature[12] == pytest.approx(42.20503,
                                                                      rel=1e-3)
示例#3
0
def test_init_outdoor_solarcal_collection():
    """Test the initialization of the OutdoorSolarCal collection."""
    calc_length = 24
    irr_header = Header(Irradiance(), 'W/m2',
                        AnalysisPeriod(end_month=1, end_day=1))
    dir_norm = HourlyContinuousCollection(irr_header, [500] * calc_length)
    diff_horiz = HourlyContinuousCollection(irr_header, [200] * calc_length)
    solarcal_obj = OutdoorSolarCal(Location(), dir_norm, diff_horiz, 350, 24)

    assert solarcal_obj.comfort_model == 'Outdoor SolarCal'
    assert solarcal_obj.calc_length == calc_length
    str(solarcal_obj)  # test that the string representaiton is ok

    assert isinstance(solarcal_obj.direct_normal_solar,
                      HourlyContinuousCollection)
    assert len(solarcal_obj.direct_normal_solar.values) == calc_length
    assert solarcal_obj.direct_normal_solar[12] == 500
    assert isinstance(solarcal_obj.diffuse_horizontal_solar,
                      HourlyContinuousCollection)
    assert len(solarcal_obj.diffuse_horizontal_solar.values) == calc_length
    assert solarcal_obj.diffuse_horizontal_solar[12] == 200

    assert isinstance(solarcal_obj.shortwave_effective_radiant_field,
                      HourlyContinuousCollection)
    assert len(
        solarcal_obj.shortwave_effective_radiant_field.values) == calc_length
    assert solarcal_obj.shortwave_effective_radiant_field[12] == pytest.approx(
        137.30710, rel=1e-3)
    assert isinstance(solarcal_obj.longwave_effective_radiant_field,
                      HourlyContinuousCollection)
    assert len(
        solarcal_obj.longwave_effective_radiant_field.values) == calc_length
    assert solarcal_obj.longwave_effective_radiant_field[12] == pytest.approx(
        -28.8326, rel=1e-3)
    assert isinstance(solarcal_obj.shortwave_mrt_delta,
                      HourlyContinuousCollection)
    assert len(solarcal_obj.shortwave_mrt_delta.values) == calc_length
    assert solarcal_obj.shortwave_mrt_delta[12] == pytest.approx(31.50184,
                                                                 rel=1e-3)
    assert isinstance(solarcal_obj.longwave_mrt_delta,
                      HourlyContinuousCollection)
    assert len(solarcal_obj.longwave_mrt_delta.values) == calc_length
    assert solarcal_obj.longwave_mrt_delta[12] == pytest.approx(-6.614966,
                                                                rel=1e-3)
    assert isinstance(solarcal_obj.mrt_delta, HourlyContinuousCollection)
    assert len(solarcal_obj.mrt_delta.values) == calc_length
    assert solarcal_obj.mrt_delta[12] == pytest.approx(24.886886, rel=1e-3)
    assert isinstance(solarcal_obj.mean_radiant_temperature,
                      HourlyContinuousCollection)
    assert len(solarcal_obj.mean_radiant_temperature.values) == calc_length
    assert solarcal_obj.mean_radiant_temperature[12] == pytest.approx(48.88688,
                                                                      rel=1e-3)
示例#4
0
def test_horizontal_solarcal_collection_full_input():
    """Test the initialization of the HorizontalSolarCal collection will all inputs."""
    calc_length = 24
    irr_header = Header(Irradiance(), 'W/m2',
                        AnalysisPeriod(end_month=1, end_day=1))
    dir_norm = HourlyContinuousCollection(irr_header, [500] * calc_length)
    diff_horiz = HourlyContinuousCollection(irr_header, [200] * calc_length)
    custom_par = SolarCalParameter('seated', None, 45, 0.65, 0.97)
    solarcal_obj = HorizontalSolarCal(Location(), dir_norm, diff_horiz, 24,
                                      0.6, 0.35, custom_par)

    assert solarcal_obj.fraction_body_exposed[12] == 0.6
    assert solarcal_obj.floor_reflectance[0] == 0.35
    assert solarcal_obj.solarcal_body_parameter.posture == 'seated'
    assert solarcal_obj.solarcal_body_parameter.sharp is None
    assert solarcal_obj.solarcal_body_parameter.body_azimuth == 45
    assert solarcal_obj.solarcal_body_parameter.body_absorptivity == 0.65
    assert solarcal_obj.solarcal_body_parameter.body_emissivity == 0.97
示例#5
0
def _ill_values_to_data(ill_values, sun_indices, timestep=1, leap_yr=False):
    """Convert a list of sun-up irradiance from an .ill file into annual irradiance data.

    Args:
        ill_values: A list of raw irradiance values from an .ill file.
        sun_indices: A list of integers for where in the total_count sun-up hours occur.
        timestep: The timestep to make the data collection.
        leap_yr: Boolean to note if data is for a leap year.
    
    Return:
        An annual HourlyContinuousCollection of irradiance data.
    """
    values = [0] * (8760 * timestep) if not leap_yr else [0] * (8784 *
                                                                timestep)
    for i, irr in zip(sun_indices, ill_values):
        values[i] = irr
    a_period = AnalysisPeriod(timestep=timestep, is_leap_year=leap_yr)
    header = Header(Irradiance(), 'W/m2', a_period)
    return HourlyContinuousCollection(header, values)