Exemplo n.º 1
0
def model_energy_fixed_interval(directory):
    room = Room.from_box('Tiny_House_Office', 5, 10, 3)
    room.properties.energy.program_type = prog_type_lib.office_program
    room.properties.energy.add_default_ideal_air()

    occ_sched = ScheduleFixedInterval(
        'Random Occupancy', [round(random.random(), 4) for i in range(8760)],
        schedule_types.fractional)
    new_people = room.properties.energy.people.duplicate()
    new_people.occupancy_schedule = occ_sched
    room.properties.energy.people = new_people

    south_face = room[3]
    south_face.apertures_by_ratio(0.4, 0.01)
    south_face.apertures[0].overhang(0.5, indoor=False)
    south_face.apertures[0].overhang(0.5, indoor=True)
    south_face.move_shades(Vector3D(0, 0, -0.5))
    light_shelf_out = ShadeConstruction('Outdoor_Light_Shelf', 0.5, 0.5)
    light_shelf_in = ShadeConstruction('Indoor_Light_Shelf', 0.7, 0.7)
    south_face.apertures[0].outdoor_shades[0].properties.energy.construction = light_shelf_out
    south_face.apertures[0].indoor_shades[0].properties.energy.construction = light_shelf_in

    north_face = room[1]
    north_face.overhang(0.25, indoor=False)
    door_verts = [Point3D(2, 10, 0.1), Point3D(1, 10, 0.1),
                  Point3D(1, 10, 2.5), Point3D(2, 10, 2.5)]
    door = Door('Front_Door', Face3D(door_verts))
    north_face.add_door(door)

    aperture_verts = [Point3D(4.5, 10, 1), Point3D(2.5, 10, 1),
                      Point3D(2.5, 10, 2.5), Point3D(4.5, 10, 2.5)]
    aperture = Aperture('Front_Aperture', Face3D(aperture_verts))
    north_face.add_aperture(aperture)

    tree_canopy_geo = Face3D.from_regular_polygon(
        6, 2, Plane(Vector3D(0, 0, 1), Point3D(5, -3, 4)))
    tree_canopy = Shade('Tree_Canopy', tree_canopy_geo)
    winter = [0.75] * 2190
    spring = [0.75 - ((x / 2190) * 0.5) for x in range(2190)]
    summer = [0.25] * 2190
    fall = [0.25 + ((x / 2190) * 0.5) for x in range(2190)]
    trans_sched = ScheduleFixedInterval(
        'Seasonal Tree Transmittance', winter + spring + summer + fall,
        schedule_types.fractional)
    tree_canopy.properties.energy.transmittance_schedule = trans_sched

    model = Model('Tiny_House', [room], orphaned_shades=[tree_canopy])
    model.north_angle = 15

    dest_file = os.path.join(
        directory, 'model_energy_fixed_interval.json')
    with open(dest_file, 'w') as fp:
        json.dump(model.to_dict(included_prop=['energy']), fp, indent=4)
Exemplo n.º 2
0
def test_schedule_fixedinterval_values_at_coarser_timestep():
    """Test the ScheduleFixedInterval values_at_timestep method with a coarser step."""
    trans_sched = ScheduleFixedInterval(
        'Custom Transmittance', [x / 17520 for x in range(17520)],
        schedule_types.fractional, timestep=2)
    values = trans_sched.values_at_timestep(timestep=1)
    assert len(values) == 8760
    assert values[0] == trans_sched.values[0]

    trans_sched_2 = ScheduleFixedInterval(
        'Custom Transmittance', [x / 96 for x in range(96)],
        schedule_types.fractional, interpolate=True)
    values = trans_sched_2.values_at_timestep(timestep=1, end_date=Date(1, 1))
    assert len(values) == 24
    assert values[0] == trans_sched.values[0]
Exemplo n.º 3
0
def test_schedule_fixedinterval_equality():
    """Test the ScheduleFixedInterval to/from dict methods."""
    trans_sched = ScheduleFixedInterval('Custom Transmittance',
                                        [x / 8760 for x in range(8760)],
                                        schedule_types.fractional)
    trans_sched_dup = trans_sched.duplicate()
    occ_sched = ScheduleFixedInterval(
        'Random Occupancy', [round(random.random(), 4) for i in range(8760)],
        schedule_types.fractional)

    assert trans_sched is trans_sched
    assert trans_sched is not trans_sched_dup
    assert trans_sched == trans_sched_dup
    trans_sched_dup.identifier = 'Transmittance'
    assert trans_sched != trans_sched_dup
    assert trans_sched != occ_sched
Exemplo n.º 4
0
def test_schedule_fixedinterval_init():
    """Test the ScheduleFixedInterval initialization and basic properties."""
    trans_sched = ScheduleFixedInterval('Custom Transmittance',
                                        [x / 8760 for x in range(8760)],
                                        schedule_types.fractional)
    str(trans_sched)  # test the string representation

    assert trans_sched.identifier == 'Custom Transmittance'
    assert len(trans_sched.values) == 8760
    assert trans_sched[0] == 0
    assert trans_sched[1] == 1 / 8760
    assert isinstance(trans_sched.schedule_type_limit, ScheduleTypeLimit)
    assert trans_sched.schedule_type_limit == schedule_types.fractional
    assert trans_sched.timestep == 1
    assert not trans_sched.interpolate
    assert trans_sched.start_date == Date(1, 1)
    assert trans_sched.end_date_time == DateTime(12, 31, 23)
    assert not trans_sched.is_leap_year
    assert trans_sched.placeholder_value == 0

    sch_data = trans_sched.data_collection
    assert len(sch_data) == 8760
    assert isinstance(sch_data.header.data_type, fraction.Fraction)
    assert sch_data.header.unit == 'fraction'
    assert sch_data.header.analysis_period == AnalysisPeriod()
Exemplo n.º 5
0
def test_schedule_fixedinterval_values_at_finer_timestep():
    """Test the ScheduleFixedInterval values_at_timestep method with a finer step."""
    trans_sched = ScheduleFixedInterval(
        'Custom Transmittance', [x / 8760 for x in range(8760)],
        schedule_types.fractional)
    values = trans_sched.values_at_timestep(timestep=2)
    assert len(values) == 8760 * 2
    assert values[0] == values[1] == trans_sched.values[0]

    trans_sched_2 = ScheduleFixedInterval(
        'Custom Transmittance', [x / 24 for x in range(24)],
        schedule_types.fractional, interpolate=True)
    values = trans_sched_2.values_at_timestep(timestep=4, end_date=Date(1, 1))
    assert len(values) == 24 * 4
    assert values[0] == trans_sched.values[0]
    assert values[0] != values[1]
Exemplo n.º 6
0
def test_schedule_fixedinterval_to_idf_compact():
    """Test the ScheduleFixedInterval to_idf_compact method."""
    trans_sched = ScheduleFixedInterval('Custom Transmittance',
                                        [x / 8760 for x in range(8760)],
                                        schedule_types.fractional)

    compact_idf = trans_sched.to_idf_compact()
    assert len(compact_idf.split(',')) > 8760 * 2
Exemplo n.º 7
0
def test_schedule_fixedinterval_values_at_timestep_reversed():
    """Test the ScheduleFixedInterval values_at_timestep method with a reversed list."""
    trans_sched = ScheduleFixedInterval(
        'Custom Transmittance', [x / 8760 for x in range(8760)],
        schedule_types.fractional, start_date=Date(1, 2))
    values = trans_sched.values_at_timestep()
    assert len(values) == 8760
    assert values[24] == 0
    assert values[0] == trans_sched.values[-24]

    trans_sched_4 = ScheduleFixedInterval(
        'Custom Transmittance', [x / 168 for x in range(168)],
        schedule_types.fractional, start_date=Date(12, 31))
    values = trans_sched_4.values_at_timestep(end_date=Date(1, 2))
    assert len(values) == 48
    assert values[0] == 24 / 168
    assert values[23] == 47 / 168
Exemplo n.º 8
0
def schedule_fixedinterval_random_annual(directory):
    occ_sched = ScheduleFixedInterval(
        'Random Occupancy', [round(random.random(), 4) for i in range(8760)],
        schedule_types.fractional)

    dest_file = os.path.join(directory,
                             'schedule_fixedinterval_random_annual.json')
    with open(dest_file, 'w') as fp:
        json.dump(occ_sched.to_dict(True), fp, indent=4)
Exemplo n.º 9
0
def schedule_fixedinterval_increasing_fine_timestep(directory):
    increase_sched = ScheduleFixedInterval(
        'Solstice Increasing', [round(x / 143, 4) for x in range(144)],
        schedule_types.fractional, start_date=Date(6, 21), timestep=6,)

    dest_file = os.path.join(
        directory, 'schedule_fixedinterval_increasing_fine_timestep.json')
    with open(dest_file, 'w') as fp:
        json.dump(increase_sched.to_dict(True), fp, indent=4)
Exemplo n.º 10
0
def test_schedule_fixedinterval_dict_methods():
    """Test the ScheduleFixedInterval to/from dict methods."""
    trans_sched = ScheduleFixedInterval('Custom Transmittance',
                                        [x / 8760 for x in range(8760)],
                                        schedule_types.fractional)

    sch_dict = trans_sched.to_dict()
    new_schedule = ScheduleFixedInterval.from_dict(sch_dict)
    assert new_schedule == trans_sched
    assert sch_dict == new_schedule.to_dict()
Exemplo n.º 11
0
def schedule_fixedinterval_leap_year(directory):
    test_vals = [15, 15, 15, 15, 15, 15, 20, 20, 20, 20, 20, 20,
                 20, 20, 20, 20, 20, 20, 20, 20, 15, 15, 15, 15]
    sched = ScheduleFixedInterval(
        'Weekly Temperature', test_vals * 7,
        schedule_types.temperature, start_date=Date(2, 29, True))

    dest_file = os.path.join(directory, 'schedule_fixedinterval_leap_year.json')
    with open(dest_file, 'w') as fp:
        json.dump(sched.to_dict(True), fp, indent=4)
Exemplo n.º 12
0
def test_schedule_fixedinterval_values_at_timestep():
    """Test the ScheduleFixedInterval values_at_timestep method."""
    trans_sched = ScheduleFixedInterval('Custom Transmittance',
                                        [x / 8760 for x in range(8760)],
                                        schedule_types.fractional)
    values = trans_sched.values_at_timestep()
    assert len(values) == 8760
    assert values == list(trans_sched.values)

    trans_sched_2 = ScheduleFixedInterval('Custom Transmittance',
                                          [x / 24 for x in range(24)],
                                          schedule_types.fractional)
    values = trans_sched_2.values_at_timestep()
    assert len(values) == 8760
    assert values[:24] == [x / 24 for x in range(24)]
    assert values[24] == 0

    trans_sched_3 = ScheduleFixedInterval('Custom Transmittance',
                                          [x / 24 for x in range(24)],
                                          schedule_types.fractional,
                                          start_date=Date(1, 2))
    values = trans_sched_3.values_at_timestep()
    assert len(values) == 8760
    assert values[24:48] == [x / 24 for x in range(24)]
    assert values[0] == 0
    assert values[48] == 0

    trans_sched_4 = ScheduleFixedInterval('Custom Transmittance',
                                          [x / 168 for x in range(168)],
                                          schedule_types.fractional)
    values = trans_sched_4.values_at_timestep(end_date=Date(1, 2))
    assert len(values) == 48
    assert values[0] == 0
    assert values[47] == 47 / 168

    values = trans_sched_4.values_at_timestep(start_date=Date(1, 2),
                                              end_date=Date(1, 3))
    assert len(values) == 48
    assert values[0] == 24 / 168
    assert values[47] == 71 / 168
Exemplo n.º 13
0
def test_schedule_fixedinterval_average_schedules():
    """Test the average_schedules method."""
    trans_sched_1 = ScheduleFixedInterval('Transmittance 1', [1 for i in range(8760)],
                                          schedule_types.fractional)
    trans_sched_2 = ScheduleFixedInterval('Transmittance 2', [0 for i in range(8760)],
                                          schedule_types.fractional)

    avg_trans = ScheduleFixedInterval.average_schedules(
        'Transmittance Avg', [trans_sched_1, trans_sched_2])
    assert avg_trans.name == 'Transmittance Avg'
    assert avg_trans.schedule_type_limit == schedule_types.fractional
    assert len(avg_trans.values) == 8760
    assert list(avg_trans.values) == [0.5] * 8760

    avg_trans = ScheduleFixedInterval.average_schedules(
        'Transmittance Avg', [trans_sched_1, trans_sched_2], [0.75, 0.25])
    assert len(avg_trans.values) == 8760
    assert list(avg_trans.values) == [0.75] * 8760

    with pytest.raises(AssertionError):
        avg_trans = ScheduleFixedInterval.average_schedules(
            'Transmittance Avg', [trans_sched_1, trans_sched_2], [0.5, 0.25])
Exemplo n.º 14
0
def test_schedule_fixedinterval_lockability():
    """Test the lockability of ScheduleFixedInterval objects."""
    schedule = ScheduleFixedInterval('Custom Transmittance',
                                     [x / 8760 for x in range(8760)],
                                     schedule_types.fractional)

    schedule.interpolate = True
    schedule.lock()
    with pytest.raises(AttributeError):
        schedule.interpolate = False
    with pytest.raises(AttributeError):
        schedule.values = [1] * 8760
    schedule.unlock()
    schedule.interpolate = False
    schedule.values = [1] * 8760
Exemplo n.º 15
0
def test_schedule_fixedinterval_data_collection():
    """Test the ScheduleFixedInterval data_collection_at_timestep method."""
    trans_sched = ScheduleFixedInterval('Custom Transmittance',
                                        [x / 8760 for x in range(8760)],
                                        schedule_types.fractional)

    sch_data = trans_sched.data_collection_at_timestep()
    assert len(sch_data) == 8760
    assert sch_data.values == trans_sched.values
    assert isinstance(sch_data.header.data_type, fraction.Fraction)
    assert sch_data.header.unit == 'fraction'
    assert sch_data.header.analysis_period == AnalysisPeriod()

    sch_data = trans_sched.data_collection_at_timestep(timestep=2)
    assert len(sch_data) == 8760 * 2
Exemplo n.º 16
0
def test_schedule_fixedinterval_single_day():
    """Test the ScheduleFixedInterval initialization for a single day."""
    increase_sched = ScheduleFixedInterval(
        'Solstice Increasing', [round(x / 23, 4) for x in range(24)],
        schedule_types.fractional,
        start_date=Date(6, 21))

    assert increase_sched.identifier == 'Solstice Increasing'
    assert len(increase_sched.values) == 24
    assert increase_sched[0] == 0
    assert increase_sched[-1] == 1
    assert isinstance(increase_sched.schedule_type_limit, ScheduleTypeLimit)
    assert increase_sched.schedule_type_limit == schedule_types.fractional
    assert increase_sched.timestep == 1
    assert not increase_sched.interpolate
    assert increase_sched.start_date == Date(6, 21)
Exemplo n.º 17
0
def test_schedule_fixedinterval_average_schedules_ruleset():
    """Test the average_schedules method with a ScheduleRuleset."""
    trans_sched_1 = ScheduleFixedInterval('Transmittance 1', [1 for i in range(8760)],
                                          schedule_types.fractional)
    trans_sched_2 = ScheduleRuleset.from_constant_value('Transmittance 2', 0)

    avg_trans = ScheduleFixedInterval.average_schedules(
        'Transmittance Avg', [trans_sched_1, trans_sched_2])
    assert avg_trans.name == 'Transmittance Avg'
    assert avg_trans.schedule_type_limit == schedule_types.fractional
    assert len(avg_trans.values) == 8760
    assert list(avg_trans.values) == [0.5] * 8760

    avg_trans = ScheduleFixedInterval.average_schedules(
        'Transmittance Avg', [trans_sched_1, trans_sched_2], [0.75, 0.25])
    assert len(avg_trans.values) == 8760
    assert list(avg_trans.values) == [0.75] * 8760
Exemplo n.º 18
0
def test_schedule_fixedinterval_single_day_fine_timestep():
    """Test the ScheduleFixedInterval initialization for a single day at a fine timestep."""
    increase_sched = ScheduleFixedInterval(
        'Solstice Increasing', [round(x / 143, 4) for x in range(144)],
        schedule_types.fractional, start_date=Date(6, 21), timestep=6,)

    assert increase_sched.name == 'Solstice Increasing'
    assert len(increase_sched.values) == 144
    assert increase_sched[0] == 0
    assert increase_sched[-1] == 1
    assert isinstance(increase_sched.schedule_type_limit, ScheduleTypeLimit)
    assert increase_sched.schedule_type_limit == schedule_types.fractional
    assert increase_sched.timestep == 6
    assert not increase_sched.interpolate
    assert increase_sched.start_date == Date(6, 21)

    """
Exemplo n.º 19
0
def test_schedule_fixedinterval_to_idf():
    """Test the methods that go to and from an IDF."""
    random_occ = [0.5] * 8760
    occ_sched = ScheduleFixedInterval('Random Occupancy', random_occ,
                                      schedule_types.fractional)

    schedule_file = occ_sched.to_idf('./tests/csv/', include_datetimes=False)
    sch_type = schedule_types.fractional.to_idf()

    rebuilt_schedule = ScheduleFixedInterval.from_idf(schedule_file, sch_type)
    assert rebuilt_schedule == occ_sched
    assert rebuilt_schedule.to_idf('./tests/csv/') == schedule_file

    schedule_file = occ_sched.to_idf('./tests/csv/', include_datetimes=True)
    rebuilt_schedule = ScheduleFixedInterval.from_idf(schedule_file, sch_type)
    assert rebuilt_schedule == occ_sched

    os.remove('./tests/csv/Random_Occupancy.csv')
try:  # import ladybug_rhino dependencies
    from ladybug_rhino.grasshopper import all_required_inputs
except ImportError as e:
    raise ImportError('\nFailed to import ladybug_rhino:\n\t{}'.format(e))

if all_required_inputs(ghenv.Component):
    # set the defaults
    _timestep_ = 1 if _timestep_ is None else _timestep_
    start_date = Date(1, 1) if analysis_period_ is None else \
        analysis_period_.st_time.date
    name = clean_and_id_ep_string('FixedIntervalSchedule') if _name_ is None else \
        clean_ep_string(_name_)

    # get the ScheduleTypeLimit object
    if _type_limit_ is None:
        _type_limit_ = schedule_type_limit_by_identifier('Fractional')
    elif isinstance(_type_limit_, str):
        _type_limit_ = schedule_type_limit_by_identifier(_type_limit_)

    # create the schedule object
    schedule = ScheduleFixedInterval(name,
                                     _values,
                                     _type_limit_,
                                     _timestep_,
                                     start_date,
                                     placeholder_value=0,
                                     interpolate=False)
    if _name_ is not None:
        schedule.display_name = _name_
    from honeybee_energy.lib.scheduletypelimits import schedule_type_limit_by_identifier
except ImportError as e:
    raise ImportError('\nFailed to import honeybee_energy:\n\t{}'.format(e))

try:  # import ladybug_rhino dependencies
    from ladybug_rhino.grasshopper import all_required_inputs
except ImportError as e:
    raise ImportError('\nFailed to import ladybug_rhino:\n\t{}'.format(e))

if all_required_inputs(ghenv.Component):
    # set the defaults
    _timestep_ = 1 if _timestep_ is None else _timestep_
    start_date = Date(1, 1) if analysis_period_ is None else \
        analysis_period_.st_time.date

    # get the ScheduleTypeLimit object
    if _type_limit_ is None:
        _type_limit_ = schedule_type_limit_by_identifier('Fractional')
    elif isinstance(_type_limit_, str):
        _type_limit_ = schedule_type_limit_by_identifier(_type_limit_)

    # create the schedule object
    schedule = ScheduleFixedInterval(clean_and_id_ep_string(_name),
                                     _values,
                                     _type_limit_,
                                     _timestep_,
                                     start_date,
                                     placeholder_value=0,
                                     interpolate=False)
    schedule.display_name = _name
Exemplo n.º 22
0
def test_to_dict_single_zone_schedule_fixed_interval():
    """Test the Model to_dict method with a single zone model and fixed interval schedules."""
    room = Room.from_box('Tiny House Zone', 5, 10, 3)
    room.properties.energy.program_type = office_program
    room.properties.energy.hvac = IdealAirSystem()

    occ_sched = ScheduleFixedInterval(
        'Random Occupancy', [round(random.random(), 4) for i in range(8760)],
        schedule_types.fractional)
    new_people = room.properties.energy.people.duplicate()
    new_people.occupancy_schedule = occ_sched
    room.properties.energy.people = new_people

    south_face = room[3]
    south_face.apertures_by_ratio(0.4, 0.01)
    south_face.apertures[0].overhang(0.5, indoor=False)
    south_face.apertures[0].overhang(0.5, indoor=True)
    south_face.move_shades(Vector3D(0, 0, -0.5))
    light_shelf_out = ShadeConstruction('Outdoor Light Shelf', 0.5, 0.5)
    light_shelf_in = ShadeConstruction('Indoor Light Shelf', 0.7, 0.7)
    south_face.apertures[0].outdoor_shades[
        0].properties.energy.construction = light_shelf_out
    south_face.apertures[0].indoor_shades[
        0].properties.energy.construction = light_shelf_in

    north_face = room[1]
    north_face.overhang(0.25, indoor=False)
    door_verts = [
        Point3D(2, 10, 0.1),
        Point3D(1, 10, 0.1),
        Point3D(1, 10, 2.5),
        Point3D(2, 10, 2.5)
    ]
    door = Door('Front Door', Face3D(door_verts))
    north_face.add_door(door)

    aperture_verts = [
        Point3D(4.5, 10, 1),
        Point3D(2.5, 10, 1),
        Point3D(2.5, 10, 2.5),
        Point3D(4.5, 10, 2.5)
    ]
    aperture = Aperture('Front Aperture', Face3D(aperture_verts))
    north_face.add_aperture(aperture)

    tree_canopy_geo = Face3D.from_regular_polygon(
        6, 2, Plane(Vector3D(0, 0, 1), Point3D(5, -3, 4)))
    tree_canopy = Shade('Tree Canopy', tree_canopy_geo)
    winter = [0.75] * 2190
    spring = [0.75 - ((x / 2190) * 0.5) for x in range(2190)]
    summer = [0.25] * 2190
    fall = [0.25 + ((x / 2190) * 0.5) for x in range(2190)]
    trans_sched = ScheduleFixedInterval('Seasonal Tree Transmittance',
                                        winter + spring + summer + fall,
                                        schedule_types.fractional)
    tree_canopy.properties.energy.transmittance_schedule = trans_sched

    model = Model('Tiny House', [room], orphaned_shades=[tree_canopy])
    model.north_angle = 15

    model_dict = model.to_dict()

    assert 'energy' in model_dict['properties']
    assert 'schedules' in model_dict['properties']['energy']
    assert 'program_types' in model_dict['properties']['energy']

    assert len(model_dict['properties']['energy']['program_types']) == 1
    assert len(model_dict['properties']['energy']['schedules']) == 9

    assert 'people' in model_dict['rooms'][0]['properties']['energy']
    assert model_dict['rooms'][0]['properties']['energy']['people']['occupancy_schedule'] \
        == 'Random Occupancy'
    assert model_dict['orphaned_shades'][0]['properties']['energy']['transmittance_schedule'] \
        == 'Seasonal Tree Transmittance'

    assert model_dict['rooms'][0]['properties']['energy']['program_type'] == \
        office_program.name
    """