def test_simulation_parameter_to_dict_detailed(): """Test the to_dict method with a detailed SimulationParameter.""" sim_par = SimulationParameter() output = SimulationOutput() output.add_zone_energy_use() output.include_html = True output.reporting_frequency = 'Daily' output.add_summary_report('Annual Building Utility Performance Summary') output.add_summary_report('Climatic Data Summary') output.add_summary_report('Envelope Summary') sim_par.output = output run_period = RunPeriod(Date(1, 1), Date(6, 21)) run_period.daylight_saving_time = DaylightSavingTime( Date(3, 12), Date(11, 5)) run_period.start_day_of_week = 'Monday' run_period.holidays = [Date(1, 1), Date(3, 17), Date(7, 4)] sim_par.run_period = run_period sim_par.timestep = 4 sim_control_alt = SimulationControl(run_for_sizing_periods=True, run_for_run_periods=False) sim_par.simulation_control = sim_control_alt shadow_calc_alt = ShadowCalculation(calculation_frequency=20) sim_par.shadow_calculation = shadow_calc_alt sizing_alt = SizingParameter(None, 1, 1) relative_path = './tests/ddy/chicago.ddy' sizing_alt.add_from_ddy_996_004(relative_path) sim_par.sizing_parameter = sizing_alt sim_par_dict = sim_par.to_dict() assert 'outputs' in sim_par_dict['output'] assert 'holidays' in sim_par_dict['run_period'] assert 'daylight_saving_time' in sim_par_dict['run_period'] assert 'design_days' in sim_par_dict['sizing_parameter']
def test_simulation_parameter_setability(): """Test the setting of properties of SimulationParameter.""" sim_par = SimulationParameter() output = SimulationOutput() output.add_zone_energy_use() sim_par.output = output assert sim_par.output == output run_period = RunPeriod(Date(1, 1), Date(6, 21)) sim_par.run_period = run_period assert sim_par.run_period == run_period sim_par.timestep = 4 assert sim_par.timestep == 4 sim_control_alt = SimulationControl(run_for_sizing_periods=True, run_for_run_periods=False) sim_par.simulation_control = sim_control_alt assert sim_par.simulation_control == sim_control_alt shadow_calc_alt = ShadowCalculation('FullExteriorWithReflections') sim_par.shadow_calculation = shadow_calc_alt assert sim_par.shadow_calculation == shadow_calc_alt sizing_alt = SizingParameter(None, 1, 1) relative_path = './tests/ddy/chicago_monthly.ddy' sizing_alt.add_from_ddy(relative_path) sim_par.sizing_parameter = sizing_alt assert sim_par.sizing_parameter == sizing_alt sim_par.north_angle = 20 assert sim_par.north_angle == 20 sim_par.terrain_type = 'Ocean' assert sim_par.terrain_type == 'Ocean'
def simulation_par_detailed(directory): sim_par = SimulationParameter() output = SimulationOutput() output.add_zone_energy_use() output.include_html = True output.reporting_frequency = 'Daily' output.add_summary_report('Annual Building Utility Performance Summary') output.add_summary_report('Climatic Data Summary') output.add_summary_report('Envelope Summary') sim_par.output = output run_period = RunPeriod(Date(1, 1), Date(6, 21)) run_period.daylight_saving_time = DaylightSavingTime(Date(3, 12), Date(11, 5)) run_period.start_day_of_week = 'Monday' run_period.holidays = [Date(1, 1), Date(3, 17), Date(7, 4)] sim_par.run_period = run_period sim_par.timestep = 4 sim_control_alt = SimulationControl(run_for_sizing_periods=True, run_for_run_periods=False) sim_par.simulation_control = sim_control_alt shadow_calc_alt = ShadowCalculation( solar_distribution='FullInteriorAndExteriorWithReflections', calculation_method='PixelCounting', calculation_update_method='Timestep') sim_par.shadow_calculation = shadow_calc_alt sizing_alt = SizingParameter(None, 1, 1) relative_path = './scripts/ddy/chicago.ddy' sizing_alt.add_from_ddy_996_004(relative_path) sim_par.sizing_parameter = sizing_alt dest_file = os.path.join(directory, 'simulation_par_detailed.json') with open(dest_file, 'w') as fp: json.dump(sim_par.to_dict(), fp, indent=4)
def test_sizing_parameter_to_ddy(): """Test the setting of properties of SizingParameter.""" sizing = SizingParameter() relative_path = './tests/ddy/chicago_monthly.ddy' sizing.add_from_ddy(relative_path) ddy_obj = DDY.from_ddy_file(relative_path) assert sizing.to_ddy() == ddy_obj
def test_simulation_control_init_from_idf(): """Test the initialization of SimulationControl from_idf.""" sizing = SizingParameter(1) idf_str = sizing.to_idf() rebuilt_sizing = SizingParameter.from_idf(idf_str) assert sizing == rebuilt_sizing assert rebuilt_sizing.to_idf() == idf_str
def test_sizing_parameter_setability(): """Test the setting of properties of SizingParameter.""" sizing = SizingParameter() sizing.heating_factor = 1 assert sizing.heating_factor == 1 sizing.cooling_factor = 1 assert sizing.cooling_factor == 1
def test_simulation_control_dict_methods(): """Test the to/from dict methods.""" sizing = SizingParameter(1) sizing_dict = sizing.to_dict() new_sizing = SizingParameter.from_dict(sizing_dict) assert new_sizing == sizing assert sizing_dict == new_sizing.to_dict()
def test_sizing_parameter_equality(): """Test the equality of SizingParameter objects.""" sizing = SizingParameter() sizing_dup = sizing.duplicate() sizing_alt = SizingParameter(1) assert sizing is sizing assert sizing is not sizing_dup assert sizing == sizing_dup sizing_dup.cooling_factor = 1 assert sizing != sizing_dup assert sizing != sizing_alt
def dict_to_simulation(sim_dict, raise_exception=True): """Get a Python object of any Simulation object from a dictionary. Args: sim_dict: A dictionary of any Honeybee energy simulation object. Note that this should be a non-abridged dictionary to be valid. raise_exception: Boolean to note whether an excpetion should be raised if the object is not identified as a simulation object. Default: True. Returns: A Python object derived from the input sim_dict. """ try: # get the type key from the dictionary sim_type = sim_dict['type'] except KeyError: raise ValueError('Simulation dictionary lacks required "type" key.') if sim_type == 'SimulationControl': return SimulationControl.from_dict(sim_dict) elif sim_type == 'RunPeriod': return RunPeriod.from_dict(sim_dict) elif sim_type == 'DaylightSavingTime': return DaylightSavingTime.from_dict(sim_dict) elif sim_type == 'ShadowCalculation': return ShadowCalculation.from_dict(sim_dict) elif sim_type == 'SizingParameter': return SizingParameter.from_dict(sim_dict) elif sim_type == 'SimulationOutput': return SimulationOutput.from_dict(sim_dict) elif sim_type == 'SimulationParameter': return SimulationParameter.from_dict(sim_dict) elif raise_exception: raise ValueError( '{} is not a recognized energy Simulation type'.format(sim_type))
def test_sizing_parameter_init(): """Test the initialization of SizingParameter and basic properties.""" sizing = SizingParameter() str(sizing) # test the string representation assert sizing.heating_factor == 1.25 assert sizing.cooling_factor == 1.15
def test_simulation_parameter_init(): """Test the initialization of SimulationParameter and basic properties.""" sim_par = SimulationParameter() str(sim_par) # test the string representation assert sim_par.output == SimulationOutput() assert sim_par.run_period == RunPeriod() assert sim_par.timestep == 6 assert sim_par.simulation_control == SimulationControl() assert sim_par.shadow_calculation == ShadowCalculation() assert sim_par.sizing_parameter == SizingParameter()
def test_simulation_parameter_init_from_idf(): """Test the initialization of SimulationParameter from_idf.""" sim_par = SimulationParameter() output = SimulationOutput() output.add_zone_energy_use() sim_par.output = output run_period = RunPeriod(Date(1, 1), Date(6, 21)) sim_par.run_period = run_period sim_par.timestep = 4 sim_control_alt = SimulationControl(run_for_sizing_periods=True, run_for_run_periods=False) sim_par.simulation_control = sim_control_alt shadow_calc_alt = ShadowCalculation(calculation_frequency=20) sim_par.shadow_calculation = shadow_calc_alt sizing_alt = SizingParameter(None, 1, 1) relative_path = './tests/ddy/chicago.ddy' sizing_alt.add_from_ddy_996_004(relative_path) sim_par.sizing_parameter = sizing_alt idf_str = sim_par.to_idf() rebuilt_sim_par = SimulationParameter.from_idf(idf_str) rebuilt_sim_par.sizing_parameter.apply_location(sizing_alt[0].location) assert sim_par == rebuilt_sim_par assert rebuilt_sim_par.to_idf() == idf_str
def test_simulation_parameter_dict_methods(): """Test the to/from dict methods.""" sim_par = SimulationParameter() output = SimulationOutput() output.add_zone_energy_use() sim_par.output = output run_period = RunPeriod(Date(1, 1), Date(6, 21)) sim_par.run_period = run_period sim_par.timestep = 4 sim_control_alt = SimulationControl(run_for_sizing_periods=True, run_for_run_periods=False) sim_par.simulation_control = sim_control_alt shadow_calc_alt = ShadowCalculation(calculation_frequency=20) sim_par.shadow_calculation = shadow_calc_alt sizing_alt = SizingParameter(None, 1, 1) relative_path = './tests/ddy/chicago.ddy' sizing_alt.add_from_ddy_996_004(relative_path) sim_par.sizing_parameter = sizing_alt sim_par_dict = sim_par.to_dict() new_sim_par = SimulationParameter.from_dict(sim_par_dict) new_sim_par.sizing_parameter.apply_location(sizing_alt[0].location) assert new_sim_par == sim_par assert sim_par_dict == new_sim_par.to_dict()
def test_sizing_parameter_dict_methods(): """Test the to/from dict methods.""" sizing = SizingParameter(None, 1) relative_path = './tests/ddy/chicago.ddy' sizing.add_from_ddy_996_004(relative_path) sizing_dict = sizing.to_dict() new_sizing = SizingParameter.from_dict(sizing_dict) new_sizing.apply_location(sizing[0].location) assert new_sizing == sizing assert sizing_dict == new_sizing.to_dict()
def test_sizing_parameter_setability(): """Test the setting of properties of SizingParameter.""" sizing = SizingParameter() relative_path = './tests/ddy/chicago_monthly.ddy' sizing.add_from_ddy(relative_path) assert len(sizing.design_days) == 12 assert len(sizing) == 12 assert isinstance(sizing[0], DesignDay) sizing.heating_factor = 1 assert sizing.heating_factor == 1 sizing.cooling_factor = 1 assert sizing.cooling_factor == 1
def test_sizing_parameter_init_from_idf(): """Test the initialization of SimulationControl from_idf.""" sizing = SizingParameter(None, 1) relative_path = './tests/ddy/chicago.ddy' sizing.add_from_ddy_996_004(relative_path) des_days, idf_str = sizing.to_idf() rebuilt_sizing = SizingParameter.from_idf(des_days, idf_str) rebuilt_sizing.apply_location(sizing[0].location) assert sizing == rebuilt_sizing assert rebuilt_sizing.to_idf()[1] == idf_str for dday1, dday2 in zip(des_days, rebuilt_sizing.to_idf()[0]): assert dday1 == dday2
def test_sizing_parameter_equality(): """Test the equality of SizingParameter objects.""" sizing = SizingParameter() relative_path = './tests/ddy/chicago_monthly.ddy' sizing.add_from_ddy(relative_path) sizing_dup = sizing.duplicate() sizing_alt = SizingParameter(None, 1) assert sizing is sizing assert sizing is not sizing_dup assert sizing == sizing_dup sizing_dup.cooling_factor = 1 assert sizing != sizing_dup assert sizing != sizing_alt
def test_simulation_parameter_init_from_idf(): """Test the initialization of SimulationParameter from_idf.""" sim_par = SimulationParameter() output = SimulationOutput() output.add_zone_energy_use() sim_par.output = output run_period = RunPeriod(Date(1, 1), Date(6, 21)) sim_par.run_period = run_period sim_par.timestep = 4 sim_control_alt = SimulationControl(run_for_sizing_periods=True, run_for_run_periods=False) sim_par.simulation_control = sim_control_alt shadow_calc_alt = ShadowCalculation(calculation_frequency=20) sim_par.shadow_calculation = shadow_calc_alt sizing_alt = SizingParameter(1, 1) sim_par.sizing_parameter = sizing_alt idf_str = sim_par.to_idf() rebuilt_sim_par = SimulationParameter.from_idf(idf_str) assert sim_par == rebuilt_sim_par assert rebuilt_sim_par.to_idf() == idf_str
def test_simulation_parameter_dict_methods(): """Test the to/from dict methods.""" sim_par = SimulationParameter() output = SimulationOutput() output.add_zone_energy_use() sim_par.output = output run_period = RunPeriod(Date(1, 1), Date(6, 21)) sim_par.run_period = run_period sim_par.timestep = 4 sim_control_alt = SimulationControl(run_for_sizing_periods=True, run_for_run_periods=False) sim_par.simulation_control = sim_control_alt shadow_calc_alt = ShadowCalculation(calculation_frequency=20) sim_par.shadow_calculation = shadow_calc_alt sizing_alt = SizingParameter(1, 1) sim_par.sizing_parameter = sizing_alt sim_par_dict = sim_par.to_dict() new_sim_par = SimulationParameter.from_dict(sim_par_dict) assert new_sim_par == sim_par assert sim_par_dict == new_sim_par.to_dict()
def test_simulation_parameter_setability(): """Test the setting of properties of SimulationParameter.""" sim_par = SimulationParameter() output = SimulationOutput() output.add_zone_energy_use() sim_par.output = output assert sim_par.output == output run_period = RunPeriod(Date(1, 1), Date(6, 21)) sim_par.run_period = run_period assert sim_par.run_period == run_period sim_par.timestep = 4 assert sim_par.timestep == 4 sim_control_alt = SimulationControl(run_for_sizing_periods=True, run_for_run_periods=False) sim_par.simulation_control = sim_control_alt assert sim_par.simulation_control == sim_control_alt shadow_calc_alt = ShadowCalculation('FullExteriorWithReflections') sim_par.shadow_calculation = shadow_calc_alt assert sim_par.shadow_calculation == shadow_calc_alt sizing_alt = SizingParameter(1, 1) sim_par.sizing_parameter = sizing_alt assert sim_par.sizing_parameter == sizing_alt
Returns: sizing: Parameters with criteria for sizing the heating and cooling system. These can be connected to the "HB Simulation Parameter" component in order to specify settings for the EnergyPlus simulation. """ ghenv.Component.Name = "HB Sizing Parameter" ghenv.Component.NickName = 'SizingPar' ghenv.Component.Message = '0.1.0' ghenv.Component.Category = 'HB-Energy' ghenv.Component.SubCategory = '5 :: Simulate' ghenv.Component.AdditionalHelpFromDocStrings = "2" try: from honeybee_energy.simulation.sizing import SizingParameter except ImportError as e: raise ImportError('\nFailed to import honeybee_energy:\n\t{}'.format(e)) # set default sizing factors heating_fac = 1.25 if _heating_fac_ is None else _heating_fac_ cooling_fac = 1.15 if _cooling_fac_ is None else _cooling_fac_ # create the object sizing = SizingParameter(None, heating_fac, cooling_fac) # apply design days from ddy if ddy_file_ is not None: sizing.add_from_ddy(ddy_file_)