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
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)
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)
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
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)