Source code for archetypal.idfclass.outputs

[docs]class Outputs: """Handles preparation of EnergyPlus outputs. Different instance methods allow to chain methods together and to add predefined bundles of outputs in one go. Examples: >>> from archetypal import IDF >>> idf = IDF(prep_outputs=False) # True be default >>> idf.outputs.add_output_control().add_umi_ouputs( >>> ).add_profile_gas_elect_ouputs().apply() """ def __init__(self, idf): """Initialize an outputs object. Args: idf (IDF): the IDF object for wich this outputs object is created. """ self.idf = idf self._outputs = []
[docs] def add_custom(self, outputs): """Add custom-defined outputs as a list of objects. Examples: >>> outputs = IDF().outputs >>> to_add = dict( >>> key= "OUTPUT:METER", >>> Key_Name="Electricity:Facility", >>> Reporting_Frequency="hourly", >>> ) >>> outputs.add_custom([to_add]).apply() Args: outputs (list, bool): Pass a list of ep-objects defined as dictionary. See examples. If a bool, ignored. Returns: Outputs: self """ if isinstance(outputs, list): self._outputs.extend(outputs) return self
[docs] def add_basics(self): """Adds the summary report and the sql file to the idf outputs""" return ( self.add_summary_report() .add_output_control() .add_sql() .add_schedules() .add_meter_variables() )
[docs] def add_schedules(self): """Adds Schedules object""" outputs = [{"key": "Output:Schedules".upper(), **dict(Key_Field="Hourly")}] self._outputs.extend(outputs) return self
[docs] def add_meter_variables(self, format="IDF"): """Generate .mdd file at end of simulation. This file (from the Output:VariableDictionary, regular; and Output:VariableDictionary, IDF; commands) shows all the report meters along with their “availability” for the current input file. A user must first run the simulation (at least semi-successfully) before the available output meters are known. This output file is available in two flavors: regular (listed as they are in the Input Output Reference) and IDF (ready to be copied and pasted into your Input File). Args: format (str): Choices are "IDF" and "regul Returns: Outputs: self """ outputs = [dict(key="Output:VariableDictionary".upper(), Key_Field=format)] self._outputs.extend(outputs) return self
[docs] def add_summary_report(self, summary="AllSummary"): """Adds the Output:Table:SummaryReports object. Args: summary (str): Choices are AllSummary, AllMonthly, AllSummaryAndMonthly, AllSummaryAndSizingPeriod, AllSummaryMonthlyAndSizingPeriod, AnnualBuildingUtilityPerformanceSummary, InputVerificationandResultsSummary, SourceEnergyEndUseComponentsSummary, ClimaticDataSummary, EnvelopeSummary, SurfaceShadowingSummary, ShadingSummary, LightingSummary, EquipmentSummary, HVACSizingSummary, ComponentSizingSummary, CoilSizingDetails, OutdoorAirSummary, SystemSummary, AdaptiveComfortSummary, SensibleHeatGainSummary, Standard62.1Summary, EnergyMeters, InitializationSummary, LEEDSummary, TariffReport, EconomicResultSummary, ComponentCostEconomicsSummary, LifeCycleCostReport, HeatEmissionsSummary, Returns: Outputs: self """ outputs = [ { "key": "Output:Table:SummaryReports".upper(), **dict(Report_1_Name=summary), } ] self._outputs.extend(outputs) return self
[docs] def add_sql(self, sql_output_style="SimpleAndTabular"): """Adds the `Output:SQLite` object. This object will produce an sql file that contains the simulation results in a database format. See `eplusout.sql <https://bigladdersoftware.com/epx/docs/9-2/output-details-and -examples/eplusout-sql.html#eplusout.sql>`_ for more details. Args: sql_output_style (str): The *Simple* option will include all of the predefined database tables as well as time series related data. Using the *SimpleAndTabular* choice adds database tables related to the tabular reports that are already output by EnergyPlus in other formats. Returns: Outputs: self """ output = {"key": "Output:SQLite".upper(), **dict(Option_Type=sql_output_style)} self._outputs.extend([output]) return self
[docs] def add_output_control(self, output_control_table_style="CommaAndHTML"): """Sets the `OutputControl:Table:Style` object. Args: output_control_table_style (str): Choices are: Comma, Tab, Fixed, HTML, XML, CommaAndHTML, TabAndHTML, XMLAndHTML, All Returns: Outputs: self """ outputs = [ { "key": "OutputControl:Table:Style".upper(), **dict(Column_Separator=output_control_table_style), } ] self._outputs.extend(outputs) return self
[docs] def add_umi_template_outputs(self): """Adds the necessary outputs in order to create an UMI template.""" # list the outputs here outputs = [ { "key": "Output:Variable".upper(), **dict( Variable_Name="Air System Total Heating Energy", Reporting_Frequency="hourly", ), }, { "key": "Output:Variable".upper(), **dict( Variable_Name="Air System Total Cooling Energy", Reporting_Frequency="hourly", ), }, { "key": "Output:Variable".upper(), **dict( Variable_Name="Zone Ideal Loads Zone Total Cooling Energy", Reporting_Frequency="hourly", ), }, { "key": "Output:Variable".upper(), **dict( Variable_Name="Zone Ideal Loads Zone Total Heating Energy", Reporting_Frequency="hourly", ), }, { "key": "Output:Variable".upper(), **dict( Variable_Name="Zone Thermostat Heating Setpoint Temperature", Reporting_Frequency="hourly", ), }, { "key": "Output:Variable".upper(), **dict( Variable_Name="Zone Thermostat Cooling Setpoint Temperature", Reporting_Frequency="hourly", ), }, { "key": "Output:Variable".upper(), **dict( Variable_Name="Heat Exchanger Total Heating Rate", Reporting_Frequency="hourly", ), }, { "key": "Output:Variable".upper(), **dict( Variable_Name="Heat Exchanger Sensible Effectiveness", Reporting_Frequency="hourly", ), }, { "key": "Output:Variable".upper(), **dict( Variable_Name="Heat Exchanger Latent Effectiveness", Reporting_Frequency="hourly", ), }, { "key": "Output:Variable".upper(), **dict( Variable_Name="Water Heater Heating Energy", Reporting_Frequency="hourly", ), }, { "key": "Output:Variable".upper(), **dict( Variable_Name="Air System Outdoor Air Minimum Flow Fraction", Reporting_Frequency="hourly", ), }, { "key": "OUTPUT:METER", **dict( Key_Name="HeatRejection:EnergyTransfer", Reporting_Frequency="hourly", ), }, { "key": "OUTPUT:METER", **dict(Key_Name="Heating:EnergyTransfer", Reporting_Frequency="hourly"), }, { "key": "OUTPUT:METER", **dict(Key_Name="Cooling:EnergyTransfer", Reporting_Frequency="hourly"), }, { "key": "OUTPUT:METER", **dict( Key_Name="Heating:DistrictHeating", Reporting_Frequency="hourly" ), }, { "key": "OUTPUT:METER", **dict(Key_Name="Heating:Electricity", Reporting_Frequency="hourly"), }, { "key": "OUTPUT:METER", **dict(Key_Name="Heating:Gas", Reporting_Frequency="hourly"), }, { "key": "OUTPUT:METER", **dict( Key_Name="Cooling:DistrictCooling", Reporting_Frequency="hourly" ), }, { "key": "OUTPUT:METER", **dict(Key_Name="Cooling:Electricity", Reporting_Frequency="hourly"), }, { "key": "OUTPUT:METER", **dict(Key_Name="Cooling:Electricity", Reporting_Frequency="hourly"), }, { "key": "OUTPUT:METER", **dict(Key_Name="Cooling:Gas", Reporting_Frequency="hourly"), }, { "key": "OUTPUT:METER", **dict( Key_Name="WaterSystems:EnergyTransfer", Reporting_Frequency="hourly" ), }, { "key": "OUTPUT:METER", **dict(Key_Name="Fans:Electricity", Reporting_Frequency="hourly"), }, { "key": "OUTPUT:METER", **dict(Key_Name="Pumps:Electricity", Reporting_Frequency="hourly"), }, { "key": "OUTPUT:METER", **dict( Key_Name="Refrigeration:Electricity", Reporting_Frequency="hourly" ), }, { "key": "OUTPUT:METER", **dict( Key_Name="Refrigeration:EnergyTransfer", Reporting_Frequency="hourly", ), }, { "key": "Output:Meter".upper(), **dict( Key_Name="HeatingCoils:EnergyTransfer", Reporting_Frequency="hourly", ), }, { "key": "Output:Meter".upper(), **dict( Key_Name="Baseboard:EnergyTransfer", Reporting_Frequency="hourly", ), }, { "key": "Output:Meter".upper(), **dict( Key_Name="HeatRejection:Electricity", Reporting_Frequency="hourly", ), }, { "key": "Output:Meter".upper(), **dict( Key_Name="CoolingCoils:EnergyTransfer", Reporting_Frequency="hourly", ), }, ] self._outputs.extend(outputs) return self
def add_dxf(self): outputs = [ { "key": "Output:Surfaces:Drawing".upper(), **dict(Report_Type="DXF", Report_Specifications_1="ThickPolyline"), } ] self._outputs.extend(outputs) return self
[docs] def add_umi_ouputs(self): """Adds the necessary outputs in order to return the same energy profile as in UMI. """ # list the outputs here outputs = [ { "key": "Output:Variable".upper(), **dict( Variable_Name="Air System Total Heating Energy", Reporting_Frequency="hourly", ), }, { "key": "Output:Variable".upper(), **dict( Variable_Name="Air System Total Cooling Energy", Reporting_Frequency="hourly", ), }, { "key": "Output:Variable".upper(), **dict( Variable_Name="Zone Ideal Loads Zone Total Cooling Energy", Reporting_Frequency="hourly", ), }, { "key": "Output:Variable".upper(), **dict( Variable_Name="Zone Ideal Loads Zone Total Heating Energy", Reporting_Frequency="hourly", ), }, { "key": "Output:Variable".upper(), **dict( Variable_Name="Water Heater Heating Energy", Reporting_Frequency="hourly", ), }, ] self._outputs.extend(outputs) return self
[docs] def add_profile_gas_elect_ouputs(self): """Adds the following meters: Electricity:Facility, Gas:Facility, WaterSystems:Electricity, Heating:Electricity, Cooling:Electricity """ # list the outputs here outputs = [ { "key": "OUTPUT:METER", **dict(Key_Name="Electricity:Facility", Reporting_Frequency="hourly"), }, { "key": "OUTPUT:METER", **dict(Key_Name="Gas:Facility", Reporting_Frequency="hourly"), }, { "key": "OUTPUT:METER", **dict( Key_Name="WaterSystems:Electricity", Reporting_Frequency="hourly" ), }, { "key": "OUTPUT:METER", **dict(Key_Name="Heating:Electricity", Reporting_Frequency="hourly"), }, { "key": "OUTPUT:METER", **dict(Key_Name="Cooling:Electricity", Reporting_Frequency="hourly"), }, ] self._outputs.extend(outputs) return self
[docs] def apply(self): """Applies the outputs to the idf model. Modifies the model by calling :meth:`~archetypal.idfclass.idf.IDF.newidfobject`""" for output in self._outputs: self.idf.newidfobject(**output) return self