Source code for accim.sim.accim_VRFsystem

# accim - Adaptive-Comfort-Control-Implemented Model
# Copyright (C) 2021-2025 Daniel Sánchez-García

# accim is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# any later version.

# accim is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.

# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.

"""Add EnergyPlus objects only for VRFsystem."""

from accim.lists import epvers_space_objs

[docs] def addOpTempTherm(self, verboseMode : bool = True): """ Amend ZoneControl:Thermostat:OperativeTemperature objects. Add ZoneControl:Thermostat:OperativeTemperature objects for each zone. :param self: Used as a method for class ``accim.sim.accim_Main.accimJob`` :param verboseMode: Inherited from class ``accim.sim.accis.addAccis`` """ for zonename_orig in self.zonenames_orig: if zonename_orig+' Thermostat' in [thermostat.Thermostat_Name for thermostat in self.idf1.idfobjects ['ZoneControl:Thermostat:OperativeTemperature']]: if verboseMode: print(zonename_orig+' Thermostat already was in the model') else: self.idf1.newidfobject( 'ZoneControl:Thermostat:OperativeTemperature', Thermostat_Name=zonename_orig+" Thermostat", Radiative_Fraction_Input_Mode="Scheduled", Fixed_Radiative_Fraction='', Radiative_Fraction_Schedule_Name='TypOperativeTempControlSch' ) if verboseMode: print(zonename_orig+' Thermostat has been added')
[docs] def addBaseSchedules(self, verboseMode : bool = True): """ Amend Schedule:Compact objects. Checks Schedule:Compact objects needed for accim, and add them in case these are not in the model :param self: Used as a method for class ``accim.sim.accim_Main.accimJob`` :param verboseMode: Inherited from class ``accim.sim.accis.addAccis`` """ if "On" in [schedule.Name for schedule in self.idf1.idfobjects['Schedule:Compact']]: if verboseMode: print("On Schedule already was in the model") else: self.idf1.newidfobject( 'Schedule:Compact', Name="On", Schedule_Type_Limits_Name="Any Number", Field_1='Through: 12/31', Field_2='For: AllDays', Field_3='Until: 24:00,1' ) if verboseMode: print("On Schedule has been added") if "TypOperativeTempControlSch" in [schedule.Name for schedule in self.idf1.idfobjects['Schedule:Compact']]: if verboseMode: print("TypOperativeTempControlSch Schedule already was in the model") else: self.idf1.newidfobject( 'Schedule:Compact', Name="TypOperativeTempControlSch", Schedule_Type_Limits_Name="Temperature", Field_1='Through: 12/31', Field_2='For: SummerDesignDay WinterDesignDay', Field_3='Until: 24:00,0', Field_4='For: AllOtherDays', Field_5='Until: 24:00, 0.5', ) if verboseMode: print("TypOperativeTempControlSch Schedule has been added")
[docs] def setAvailSchOn(self, verboseMode: bool = True): """ Amend availability schedules. Assign On Compact:Schedule to heating and cooling availability schedule names. :param self: Used as a method for class ``accim.sim.accim_Main.accimJob`` :param verboseMode: Inherited from class ``accim.sim.accis.addAccis`` """ for schedule in [i for i in self.idf1.idfobjects['ZoneHVAC:IdealLoadsAirSystem']]: schedule.Heating_Availability_Schedule_Name='On' schedule.Cooling_Availability_Schedule_Name='On' if verboseMode: print('All ZoneHVAC:IdealLoadsAirSystem ' 'Heating and Cooling availability schedules has been set to on')
[docs] def addVRFsystemSch(self, verboseMode: bool = True): """ Amend Schedule:Compact objects for VRFsystem. Add Schedule:Compact objects needed for VRFsystem to work, other than AHST_Sch and ACST_Sch Schedules. :param self: Used as a method for class ``accim.sim.accim_Main.accimJob`` :param verboseMode: Inherited from class ``accim.sim.accis.addAccis`` """ addVRFsystemSch_dict = { 'On 24/7': 'Until: 24:00,1', 'Control type schedule: Always 4': 'Until: 24:00,4', 'Relative humidity setpoint schedule: Always 50.00': 'Until: 24:00,50', 'Heating Fanger comfort setpoint: Always -0.5': 'Until: 24:00,-0.5', 'Cooling Fanger comfort setpoint: Always 0.1': 'Until: 24:00, 0.1', 'Zone CO2 setpoint: Always 900ppm': 'Until: 24:00, 900', 'Min CO2 concentration: Always 600ppm': 'Until: 24:00, 600', 'Generic contaminant setpoint: Always 0.5ppm': 'Until: 24:00, 0.5', 'Air distribution effectiveness (always 1)': 'Until: 24:00, 1' } for i in addVRFsystemSch_dict: if i in [schedule.Name for schedule in self.idf1.idfobjects['Schedule:Compact']]: if verboseMode: print(i+" Schedule already was in the model") else: self.idf1.newidfobject('Schedule:Compact', Name=i, Schedule_Type_Limits_Name="Any Number", Field_1='Through: 12/31', Field_2='For: AllDays', Field_3=addVRFsystemSch_dict[i]) if verboseMode: print(i+" Schedule has been added") if "VRF Heating Cooling (Northern Hemisphere)" in [schedule.Name for schedule in self.idf1.idfobjects ['Schedule:Compact']]: if verboseMode: print("VRF Heating Cooling (Northern Hemisphere) Schedule already was in the model") else: self.idf1.newidfobject( 'Schedule:Compact', Name="VRF Heating Cooling (Northern Hemisphere)", Schedule_Type_Limits_Name="Any Number", Field_1='Through: 31 Mar', Field_2='For: AllDays', Field_3='Until: 24:00, 0', Field_4='Through: 30 Sep', Field_5='For: AllDays', Field_6='Until: 24:00, 1', Field_7='Through: 31 Dec', Field_8='For: AllDays', Field_9='Until: 24:00, 0') if verboseMode: print("VRF Heating Cooling (Northern Hemisphere) Schedule has been added")
[docs] def addCurveObj(self, verboseMode: bool = True): """ Add Curve Objects needed for VRFsystem to work. :param self: Used as a method for class ``accim.sim.accim_Main.accimJob`` :param verboseMode: Inherited from class ``accim.sim.accis.addAccis`` """ # curvecubiclist=([i for i in self.idf1.idfobjects['Curve:Cubic']]) # print(curvecubiclist) if 'DefaultFanEffRatioCurve' in [i.Name for i in self.idf1.idfobjects['Curve:Cubic']]: if verboseMode: print('DefaultFanEffRatioCurve Curve:Cubic Object already was in the model') else: self.idf1.newidfobject( 'Curve:Cubic', Name='DefaultFanEffRatioCurve', Coefficient1_Constant='0.33856828', Coefficient2_x='1.72644131', Coefficient3_x2='-1.49280132', Coefficient4_x3='0.42776208', Minimum_Value_of_x='0.5', Maximum_Value_of_x='1.5', Minimum_Curve_Output='0.3', Maximum_Curve_Output='1.0', Input_Unit_Type_for_X='', Output_Unit_Type='' ) if verboseMode: print("DefaultFanEffRatioCurve Curve:Cubic Object has been added") if 'VRFTUCoolCapFT' in [i.Name for i in self.idf1.idfobjects['Curve:Cubic']]: if verboseMode: print('VRFTUCoolCapFT Curve:Cubic Object already was in the model') else: self.idf1.newidfobject( 'Curve:Cubic', Name='VRFTUCoolCapFT', Coefficient1_Constant='0.504547273506488', Coefficient2_x='0.0288891279198444', Coefficient3_x2='-0.000010819418650677', Coefficient4_x3='0.0000101359395177008', Minimum_Value_of_x='0.0', Maximum_Value_of_x='50.0', Minimum_Curve_Output='0.5', Maximum_Curve_Output='1.5', Input_Unit_Type_for_X='Temperature', Output_Unit_Type='Dimensionless' ) if verboseMode: print("VRFTUCoolCapFT Curve:Cubic Object has been added") if 'VRFTUHeatCapFT' in [i.Name for i in self.idf1.idfobjects['Curve:Cubic']]: if verboseMode: print('VRFTUHeatCapFT Curve:Cubic Object already was in the model') else: self.idf1.newidfobject( 'Curve:Cubic', Name='VRFTUHeatCapFT', Coefficient1_Constant='-0.390708928227928', Coefficient2_x='0.261815023760162', Coefficient3_x2='-0.0130431603151873', Coefficient4_x3='0.000178131745997821', Minimum_Value_of_x='0.0', Maximum_Value_of_x='50.0', Minimum_Curve_Output='0.5', Maximum_Curve_Output='1.5', Input_Unit_Type_for_X='Temperature', Output_Unit_Type='Dimensionless' ) if verboseMode: print("VRFTUHeatCapFT Curve:Cubic Object has been added") if 'VRFCoolCapFTBoundary' in [i.Name for i in self.idf1.idfobjects['Curve:Cubic']]: if verboseMode: print('VRFCoolCapFTBoundary Curve:Cubic Object already was in the model') else: self.idf1.newidfobject( 'Curve:Cubic', Name='VRFCoolCapFTBoundary', Coefficient1_Constant='25.73473775', Coefficient2_x='-0.03150043', Coefficient3_x2='-0.01416595', Coefficient4_x3='0', Minimum_Value_of_x='11', Maximum_Value_of_x='30', Minimum_Curve_Output='', Maximum_Curve_Output='', Input_Unit_Type_for_X='Temperature', Output_Unit_Type='' ) if verboseMode: print("VRFCoolCapFTBoundary Curve:Cubic Object has been added") if 'VRFCoolEIRFTBoundary' in [i.Name for i in self.idf1.idfobjects['Curve:Cubic']]: if verboseMode: print('VRFCoolEIRFTBoundary Curve:Cubic Object already was in the model') else: self.idf1.newidfobject( 'Curve:Cubic', Name='VRFCoolEIRFTBoundary', Coefficient1_Constant='25.73473775', Coefficient2_x='-0.03150043', Coefficient3_x2='-0.01416595', Coefficient4_x3='0', Minimum_Value_of_x='15', Maximum_Value_of_x='24', Minimum_Curve_Output='', Maximum_Curve_Output='', Input_Unit_Type_for_X='Temperature', Output_Unit_Type='' ) if verboseMode: print("VRFCoolEIRFTBoundary Curve:Cubic Object has been added") if 'CoolingEIRLowPLR' in [i.Name for i in self.idf1.idfobjects['Curve:Cubic']]: if verboseMode: print('CoolingEIRLowPLR Curve:Cubic Object already was in the model') else: self.idf1.newidfobject( 'Curve:Cubic', Name='CoolingEIRLowPLR', Coefficient1_Constant='0.4628123', Coefficient2_x='-1.0402406', Coefficient3_x2='2.17490997', Coefficient4_x3='-0.5974817', Minimum_Value_of_x='0', Maximum_Value_of_x='1', Minimum_Curve_Output='', Maximum_Curve_Output='', Input_Unit_Type_for_X='Temperature', Output_Unit_Type='Capacity' ) if verboseMode: print("CoolingEIRLowPLR Curve:Cubic Object has been added") if 'VRFHeatCapFTBoundary' in [i.Name for i in self.idf1.idfobjects['Curve:Cubic']]: if verboseMode: print('VRFHeatCapFTBoundary Curve:Cubic Object already was in the model') else: self.idf1.newidfobject( 'Curve:Cubic', Name='VRFHeatCapFTBoundary', Coefficient1_Constant='-7.6000882', Coefficient2_x='3.05090016', Coefficient3_x2='-0.1162844', Coefficient4_x3='0.0', Minimum_Value_of_x='15', Maximum_Value_of_x='27', Minimum_Curve_Output='', Maximum_Curve_Output='', Input_Unit_Type_for_X='Temperature', Output_Unit_Type='' ) if verboseMode: print("VRFHeatCapFTBoundary Curve:Cubic Object has been added") if 'VRFHeatEIRFTBoundary' in [i.Name for i in self.idf1.idfobjects['Curve:Cubic']]: if verboseMode: print('VRFHeatEIRFTBoundary Curve:Cubic Object already was in the model') else: self.idf1.newidfobject( 'Curve:Cubic', Name='VRFHeatEIRFTBoundary', Coefficient1_Constant='-7.6000882', Coefficient2_x='3.05090016', Coefficient3_x2='-0.1162844', Coefficient4_x3='0.0', Minimum_Value_of_x='15', Maximum_Value_of_x='27', Minimum_Curve_Output='-20', Maximum_Curve_Output='15', Input_Unit_Type_for_X='Temperature', Output_Unit_Type='' ) if verboseMode: print("VRFHeatEIRFTBoundary Curve:Cubic Object has been added") if 'HeatingEIRLowPLR' in [i.Name for i in self.idf1.idfobjects['Curve:Cubic']]: if verboseMode: print('HeatingEIRLowPLR Curve:Cubic Object already was in the model') else: self.idf1.newidfobject( 'Curve:Cubic', Name='HeatingEIRLowPLR', Coefficient1_Constant='0.1400093', Coefficient2_x='0.6415002', Coefficient3_x2='0.1339047', Coefficient4_x3='0.0845859', Minimum_Value_of_x='0', Maximum_Value_of_x='1', Minimum_Curve_Output='', Maximum_Curve_Output='', Input_Unit_Type_for_X='Dimensionless', Output_Unit_Type='Dimensionless' ) if verboseMode: print("HeatingEIRLowPLR Curve:Cubic Object has been added") # curveexponentlist=[i for i in self.idf1.idfobjects['Curve:Exponent']] # print(curveexponentlist) if 'DefaultFanPowerRatioCurve' in [i.Name for i in self.idf1.idfobjects['Curve:Exponent']]: if verboseMode: print('DefaultFanPowerRatioCurve Curve:Exponent Object already was in the model') else: self.idf1.newidfobject( 'Curve:Exponent', Name='DefaultFanPowerRatioCurve', Coefficient1_Constant='0', Coefficient2_Constant='1', Coefficient3_Constant='3', Minimum_Value_of_x='0', Maximum_Value_of_x='1.5', Minimum_Curve_Output='0.01', Maximum_Curve_Output='1.5', Input_Unit_Type_for_X='', Output_Unit_Type='' ) if verboseMode: print("DefaultFanPowerRatioCurve Curve:Exponent Object has been added") # curvebiquadraticlist=[i for i in self.idf1.idfobjects['Curve:Biquadratic']] # print(curvebiquadraticlist) if 'DXHtgCoilDefrostEIRFT' in [i.Name for i in self.idf1.idfobjects['Curve:Biquadratic']]: if verboseMode: print('DXHtgCoilDefrostEIRFT Curve:Biquadratic Object already was in the model') else: self.idf1.newidfobject( 'Curve:Biquadratic', Name='DXHtgCoilDefrostEIRFT', Coefficient1_Constant='1.0', Coefficient2_x='0.0', Coefficient3_x2='0.0', Coefficient4_y='0.0', Coefficient5_y2='0', Coefficient6_xy='0', Minimum_Value_of_x='0.0', Maximum_Value_of_x='50.0', Minimum_Value_of_y='0.0', Maximum_Value_of_y='50.0', Minimum_Curve_Output='', Maximum_Curve_Output='', Input_Unit_Type_for_X='Temperature', Input_Unit_Type_for_Y='Temperature', Output_Unit_Type='Dimensionless' ) if verboseMode: print("DXHtgCoilDefrostEIRFT Curve:Biquadratic Object has been added") if 'VRFCoolCapFT' in [i.Name for i in self.idf1.idfobjects['Curve:Biquadratic']]: if verboseMode: print('VRFCoolCapFT Curve:Biquadratic Object already was in the model') else: self.idf1.newidfobject( 'Curve:Biquadratic', Name='VRFCoolCapFT', Coefficient1_Constant='0.576882692', Coefficient2_x='0.017447952', Coefficient3_x2='0.000583269', Coefficient4_y='-1.76324E-06', Coefficient5_y2='-7.474E-09', Coefficient6_xy='-1.30413E-07', Minimum_Value_of_x='15', Maximum_Value_of_x='24', Minimum_Value_of_y='-5', Maximum_Value_of_y='23', Minimum_Curve_Output='', Maximum_Curve_Output='', Input_Unit_Type_for_X='Temperature', Input_Unit_Type_for_Y='Temperature', Output_Unit_Type='Dimensionless' ) if verboseMode: print("VRFCoolCapFT Curve:Biquadratic Object has been added") if 'VRFCoolCapFTHi' in [i.Name for i in self.idf1.idfobjects['Curve:Biquadratic']]: if verboseMode: print('VRFCoolCapFTHi Curve:Biquadratic Object already was in the model') else: self.idf1.newidfobject( 'Curve:Biquadratic', Name='VRFCoolCapFTHi', Coefficient1_Constant='0.6867358', Coefficient2_x='0.0207631', Coefficient3_x2='0.0005447', Coefficient4_y='-0.0016218', Coefficient5_y2='-4.259E-07', Coefficient6_xy='-0.0003392', Minimum_Value_of_x='15', Maximum_Value_of_x='24', Minimum_Value_of_y='16', Maximum_Value_of_y='43', Minimum_Curve_Output='', Maximum_Curve_Output='', Input_Unit_Type_for_X='Temperature', Input_Unit_Type_for_Y='Temperature', Output_Unit_Type='Dimensionless' ) if verboseMode: print("VRFCoolCapFTHi Curve:Biquadratic Object has been added") if 'VRFCoolEIRFT' in [i.Name for i in self.idf1.idfobjects['Curve:Biquadratic']]: if verboseMode: print('VRFCoolEIRFT Curve:Biquadratic Object already was in the model') else: self.idf1.newidfobject( 'Curve:Biquadratic', Name='VRFCoolEIRFT', Coefficient1_Constant='0.989010541', Coefficient2_x='-0.02347967', Coefficient3_x2='0.000199711', Coefficient4_y='0.005968336', Coefficient5_y2='-1.0289E-07', Coefficient6_xy='-0.00015686', Minimum_Value_of_x='15', Maximum_Value_of_x='24', Minimum_Value_of_y='-5', Maximum_Value_of_y='23', Minimum_Curve_Output='', Maximum_Curve_Output='', Input_Unit_Type_for_X='Temperature', Input_Unit_Type_for_Y='Temperature', Output_Unit_Type='Dimensionless' ) if verboseMode: print("VRFCoolEIRFT Curve:Biquadratic Object has been added") if 'VRFCoolEIRFTHi' in [i.Name for i in self.idf1.idfobjects['Curve:Biquadratic']]: if verboseMode: print('VRFCoolEIRFTHi Curve:Biquadratic Object already was in the model') else: self.idf1.newidfobject( 'Curve:Biquadratic', Name='VRFCoolEIRFTHi', Coefficient1_Constant='0.14351470', Coefficient2_x='0.01860035', Coefficient3_x2='-0.0003954', Coefficient4_y='0.02485219', Coefficient5_y2='0.00016329', Coefficient6_xy='-0.0006244', Minimum_Value_of_x='15', Maximum_Value_of_x='24', Minimum_Value_of_y='16', Maximum_Value_of_y='43', Minimum_Curve_Output='', Maximum_Curve_Output='', Input_Unit_Type_for_X='Temperature', Input_Unit_Type_for_Y='Temperature', Output_Unit_Type='Dimensionless' ) if verboseMode: print("VRFCoolEIRFTHi Curve:Biquadratic Object has been added") if 'VRFHeatCapFT' in [i.Name for i in self.idf1.idfobjects['Curve:Biquadratic']]: if verboseMode: print('VRFHeatCapFT Curve:Biquadratic Object already was in the model') else: self.idf1.newidfobject( 'Curve:Biquadratic', Name='VRFHeatCapFT', Coefficient1_Constant='1.014599599', Coefficient2_x='-0.002506703', Coefficient3_x2='-0.000141599', Coefficient4_y='0.026931595', Coefficient5_y2='1.83538E-06', Coefficient6_xy='-0.000358147', Minimum_Value_of_x='15', Maximum_Value_of_x='27', Minimum_Value_of_y='-20', Maximum_Value_of_y='15', Minimum_Curve_Output='', Maximum_Curve_Output='', Input_Unit_Type_for_X='Temperature', Input_Unit_Type_for_Y='Temperature', Output_Unit_Type='Dimensionless' ) if verboseMode: print("VRFHeatCapFT Curve:Biquadratic Object has been added") if 'VRFHeatCapFTHi' in [i.Name for i in self.idf1.idfobjects['Curve:Biquadratic']]: if verboseMode: print('VRFHeatCapFTHi Curve:Biquadratic Object already was in the model') else: self.idf1.newidfobject( 'Curve:Biquadratic', Name='VRFHeatCapFTHi', Coefficient1_Constant='1.161134821', Coefficient2_x='0.027478868', Coefficient3_x2='-0.00168795', Coefficient4_y='0.001783378', Coefficient5_y2='2.03208E-06', Coefficient6_xy='-6.8969E-05', Minimum_Value_of_x='15', Maximum_Value_of_x='27', Minimum_Value_of_y='-10', Maximum_Value_of_y='15', Minimum_Curve_Output='', Maximum_Curve_Output='', Input_Unit_Type_for_X='Temperature', Input_Unit_Type_for_Y='Temperature', Output_Unit_Type='Dimensionless' ) if verboseMode: print("VRFHeatCapFTHi Curve:Biquadratic Object has been added") if 'VRFHeatEIRFT' in [i.Name for i in self.idf1.idfobjects['Curve:Biquadratic']]: if verboseMode: print('VRFHeatEIRFT Curve:Biquadratic Object already was in the model') else: self.idf1.newidfobject( 'Curve:Biquadratic', Name='VRFHeatEIRFT', Coefficient1_Constant='0.87465501', Coefficient2_x='-0.01319754', Coefficient3_x2='0.00110307', Coefficient4_y='-0.0133118', Coefficient5_y2='0.00089017', Coefficient6_xy='-0.00012766', Minimum_Value_of_x='15', Maximum_Value_of_x='27', Minimum_Value_of_y='-20', Maximum_Value_of_y='12', Minimum_Curve_Output='', Maximum_Curve_Output='', Input_Unit_Type_for_X='Temperature', Input_Unit_Type_for_Y='Temperature', Output_Unit_Type='Dimensionless' ) if verboseMode: print("VRFHeatEIRFT Curve:Biquadratic Object has been added") if 'VRFHeatEIRFTHi' in [i.Name for i in self.idf1.idfobjects['Curve:Biquadratic']]: if verboseMode: print('VRFHeatEIRFTHi Curve:Biquadratic Object already was in the model') else: self.idf1.newidfobject( 'Curve:Biquadratic', Name='VRFHeatEIRFTHi', Coefficient1_Constant='2.504005146', Coefficient2_x='-0.05736767', Coefficient3_x2='4.07336E-05', Coefficient4_y='-0.12959669', Coefficient5_y2='0.00135839', Coefficient6_xy='0.00317047', Minimum_Value_of_x='15', Maximum_Value_of_x='27', Minimum_Value_of_y='-10', Maximum_Value_of_y='15', Minimum_Curve_Output='', Maximum_Curve_Output='', Input_Unit_Type_for_X='Temperature', Input_Unit_Type_for_Y='Temperature', Output_Unit_Type='Dimensionless' ) if verboseMode: print("VRFHeatEIRFTHi Curve:Biquadratic Object has been added") if 'CoolingLengthCorrectionFactor' in [i.Name for i in self.idf1.idfobjects['Curve:Biquadratic']]: if verboseMode: print('CoolingLengthCorrectionFactor Curve:Biquadratic Object already was in the model') else: self.idf1.newidfobject( 'Curve:Biquadratic', Name='CoolingLengthCorrectionFactor', Coefficient1_Constant='1.0693794', Coefficient2_x='-0.0014951', Coefficient3_x2='2.56E-06', Coefficient4_y='-0.1151104', Coefficient5_y2='0.0511169', Coefficient6_xy='-0.0004369', Minimum_Value_of_x='8', Maximum_Value_of_x='175', Minimum_Value_of_y='0.5', Maximum_Value_of_y='1.5', Minimum_Curve_Output='', Maximum_Curve_Output='', Input_Unit_Type_for_X='Temperature', Input_Unit_Type_for_Y='Temperature', Output_Unit_Type='Dimensionless' ) if verboseMode: print("CoolingLengthCorrectionFactor Curve:Biquadratic Object has been added") if 'VRF Piping Correction Factor for Length in Heating Mode' in [i.Name for i in self.idf1.idfobjects ['Curve:Biquadratic']]: if verboseMode: print('VRF Piping Correction Factor for Length in ' 'Heating Mode Curve:Biquadratic Object already was in the model') else: self.idf1.newidfobject( 'Curve:Biquadratic', Name='VRF Piping Correction Factor for Length in Heating Mode', Coefficient1_Constant='.989916', Coefficient2_x='.001961', Coefficient3_x2='-.000036', Coefficient4_y='0', Coefficient5_y2='0', Coefficient6_xy='0', Minimum_Value_of_x='7', Maximum_Value_of_x='106.5', Minimum_Value_of_y='1', Maximum_Value_of_y='1', Minimum_Curve_Output='', Maximum_Curve_Output='', Input_Unit_Type_for_X='Distance', Input_Unit_Type_for_Y='Dimensionless', Output_Unit_Type='Dimensionless' ) if verboseMode: print("VRF Piping Correction Factor for Length in " "Heating Mode Curve:Biquadratic Object has been added") if 'VRF Heat Recovery Cooling Capacity Modifier' in [i.Name for i in self.idf1.idfobjects ['Curve:Biquadratic']]: if verboseMode: print('VRF Heat Recovery Cooling Capacity Modifier ' 'Curve:Biquadratic Object already was in the model') else: self.idf1.newidfobject( 'Curve:Biquadratic', Name='VRF Heat Recovery Cooling Capacity Modifier', Coefficient1_Constant='.9', Coefficient2_x='0', Coefficient3_x2='0', Coefficient4_y='0', Coefficient5_y2='0', Coefficient6_xy='0', Minimum_Value_of_x='-100', Maximum_Value_of_x='100', Minimum_Value_of_y='-100', Maximum_Value_of_y='100', Minimum_Curve_Output='', Maximum_Curve_Output='', Input_Unit_Type_for_X='Temperature', Input_Unit_Type_for_Y='Temperature', Output_Unit_Type='Dimensionless' ) if verboseMode: print("VRF Heat Recovery Cooling Capacity Modifier " "Curve:Biquadratic Object has been added") if 'VRF Heat Recovery Cooling Energy Modifier' in [i.Name for i in self.idf1.idfobjects ['Curve:Biquadratic']]: if verboseMode: print('VRF Heat Recovery Cooling Energy Modifier ' 'Curve:Biquadratic Object already was in the model') else: self.idf1.newidfobject( 'Curve:Biquadratic', Name='VRF Heat Recovery Cooling Energy Modifier', Coefficient1_Constant='1.1', Coefficient2_x='0', Coefficient3_x2='0', Coefficient4_y='0', Coefficient5_y2='0', Coefficient6_xy='0', Minimum_Value_of_x='-100', Maximum_Value_of_x='100', Minimum_Value_of_y='-100', Maximum_Value_of_y='100', Minimum_Curve_Output='', Maximum_Curve_Output='', Input_Unit_Type_for_X='Temperature', Input_Unit_Type_for_Y='Temperature', Output_Unit_Type='Dimensionless' ) if verboseMode: print("VRF Heat Recovery Cooling Energy Modifier " "Curve:Biquadratic Object has been added") if 'VRF Heat Recovery Heating Capacity Modifier' in [i.Name for i in self.idf1.idfobjects ['Curve:Biquadratic']]: if verboseMode: print('VRF Heat Recovery Heating Capacity Modifier ' 'Curve:Biquadratic Object already was in the model') else: self.idf1.newidfobject( 'Curve:Biquadratic', Name='VRF Heat Recovery Heating Capacity Modifier', Coefficient1_Constant='.9', Coefficient2_x='0', Coefficient3_x2='0', Coefficient4_y='0', Coefficient5_y2='0', Coefficient6_xy='0', Minimum_Value_of_x='-100', Maximum_Value_of_x='100', Minimum_Value_of_y='-100', Maximum_Value_of_y='100', Minimum_Curve_Output='', Maximum_Curve_Output='', Input_Unit_Type_for_X='Temperature', Input_Unit_Type_for_Y='Temperature', Output_Unit_Type='Dimensionless' ) if verboseMode: print("VRF Heat Recovery Heating Capacity Modifier " "Curve:Biquadratic Object has been added") if 'VRF Heat Recovery Heating Energy Modifier' in [i.Name for i in self.idf1.idfobjects ['Curve:Biquadratic']]: if verboseMode: print('VRF Heat Recovery Heating Energy Modifier ' 'Curve:Biquadratic Object already was in the model') else: self.idf1.newidfobject( 'Curve:Biquadratic', Name='VRF Heat Recovery Heating Energy Modifier', Coefficient1_Constant='1.1', Coefficient2_x='0', Coefficient3_x2='0', Coefficient4_y='0', Coefficient5_y2='0', Coefficient6_xy='0', Minimum_Value_of_x='-100', Maximum_Value_of_x='100', Minimum_Value_of_y='-100', Maximum_Value_of_y='100', Minimum_Curve_Output='', Maximum_Curve_Output='', Input_Unit_Type_for_X='Temperature', Input_Unit_Type_for_Y='Temperature', Output_Unit_Type='Dimensionless' ) if verboseMode: print("VRF Heat Recovery Heating Energy Modifier " "Curve:Biquadratic Object has been added") # curvequadraticlist=[i for i in self.idf1.idfobjects['Curve:Quadratic']] # print(curvequadraticlist) if 'VRFACCoolCapFFF' in [i.Name for i in self.idf1.idfobjects['Curve:Quadratic']]: if verboseMode: print('VRFACCoolCapFFF Curve:Quadratic Object already was in the model') else: self.idf1.newidfobject( 'Curve:Quadratic', Name='VRFACCoolCapFFF', Coefficient1_Constant='0.8', Coefficient2_x='0.2', Coefficient3_x2='0.0', Minimum_Value_of_x='0.5', Maximum_Value_of_x='1.5', Minimum_Curve_Output='', Maximum_Curve_Output='', Input_Unit_Type_for_X='', Output_Unit_Type='' ) if verboseMode: print("VRFACCoolCapFFF Curve:Quadratic Object has been added") if 'CoolingEIRHiPLR' in [i.Name for i in self.idf1.idfobjects['Curve:Quadratic']]: if verboseMode: print('CoolingEIRHiPLR Curve:Quadratic Object already was in the model') else: self.idf1.newidfobject( 'Curve:Quadratic', Name='CoolingEIRHiPLR', Coefficient1_Constant='1.0', Coefficient2_x='0.0', Coefficient3_x2='0.0', Minimum_Value_of_x='1.0', Maximum_Value_of_x='1.5', Minimum_Curve_Output='', Maximum_Curve_Output='', Input_Unit_Type_for_X='', Output_Unit_Type='' ) if verboseMode: print("CoolingEIRHiPLR Curve:Quadratic Object has been added") if 'VRFCPLFFPLR' in [i.Name for i in self.idf1.idfobjects['Curve:Quadratic']]: if verboseMode: print('VRFCPLFFPLR Curve:Quadratic Object already was in the model') else: self.idf1.newidfobject( 'Curve:Quadratic', Name='VRFCPLFFPLR', Coefficient1_Constant='0.85', Coefficient2_x='0.15', Coefficient3_x2='0.0', Minimum_Value_of_x='0.0', Maximum_Value_of_x='1.0', Minimum_Curve_Output='', Maximum_Curve_Output='', Input_Unit_Type_for_X='', Output_Unit_Type='' ) if verboseMode: print("VRFCPLFFPLR Curve:Quadratic Object has been added") if 'HeatingEIRHiPLR' in [i.Name for i in self.idf1.idfobjects['Curve:Quadratic']]: if verboseMode: print('HeatingEIRHiPLR Curve:Quadratic Object already was in the model') else: self.idf1.newidfobject( 'Curve:Quadratic', Name='HeatingEIRHiPLR', Coefficient1_Constant='2.4294355', Coefficient2_x='-2.235887', Coefficient3_x2='0.8064516', Minimum_Value_of_x='1.0', Maximum_Value_of_x='1.5', Minimum_Curve_Output='', Maximum_Curve_Output='', Input_Unit_Type_for_X='', Output_Unit_Type='' ) if verboseMode: print("HeatingEIRHiPLR Curve:Quadratic Object has been added") # curvelinearlist=[i for i in self.idf1.idfobjects['Curve:Linear']] # print(curvelinearlist) if 'CoolingCombRatio' in [i.Name for i in self.idf1.idfobjects['Curve:Linear']]: if verboseMode: print('CoolingCombRatio Curve:Linear Object already was in the model') else: self.idf1.newidfobject( 'Curve:Linear', Name='CoolingCombRatio', Coefficient1_Constant='0.618055', Coefficient2_x='0.381945', Minimum_Value_of_x='1.0', Maximum_Value_of_x='1.5', Minimum_Curve_Output='', Maximum_Curve_Output='', Input_Unit_Type_for_X='', Output_Unit_Type='' ) if verboseMode: print("CoolingCombRatio Curve:Linear Object has been added") if 'HeatingCombRatio' in [i.Name for i in self.idf1.idfobjects['Curve:Linear']]: if verboseMode: print('HeatingCombRatio Curve:Linear Object already was in the model') else: self.idf1.newidfobject( 'Curve:Linear', Name='HeatingCombRatio', Coefficient1_Constant='0.96034', Coefficient2_x='0.03966', Minimum_Value_of_x='1.0', Maximum_Value_of_x='1.5', Minimum_Curve_Output='', Maximum_Curve_Output='', Input_Unit_Type_for_X='', Output_Unit_Type='' ) if verboseMode: print("HeatingCombRatio Curve:Linear Object has been added")
[docs] def addDetHVACobj( self, EnergyPlus_version: str = None, verboseMode: bool = True, SupplyAirTempInputMethod: str = None, eer: float = 2, cop: float = 2.1, VRFschedule: str = 'On 24/7', ): """Add Detailed HVAC objects for VRFsystem to work. :param self: Used as a method for class ``accim.sim.accim_Main.accimJob`` :param EnergyPlus_version: Inherited from class ``accim.sim.accis.addAccis`` :param verboseMode: Inherited from class ``accim.sim.accis.addAccis`` :param SupplyAirTempInputMethod: Inherited from class ``accim.sim.accis.addAccis`` """ for zn in self.zonenames_orig: if 'VRF Outdoor Unit_'+zn in [i.Heat_Pump_Name for i in self.idf1.idfobjects ['AirConditioner:VariableRefrigerantFlow']]: if verboseMode: print('VRF Outdoor Unit_'+ zn+ ' AirConditioner:VariableRefrigerantFlow ' 'Object already was in the model') else: if any([EnergyPlus_version.lower() == v for v in epvers_space_objs]): self.idf1.newidfobject( 'AirConditioner:VariableRefrigerantFlow', Heat_Pump_Name='VRF Outdoor Unit_'+zn, Availability_Schedule_Name=VRFschedule, Gross_Rated_Total_Cooling_Capacity='autosize', Gross_Rated_Cooling_COP=eer, Minimum_Condenser_Inlet_Node_Temperature_in_Cooling_Mode=-20, Maximum_Condenser_Inlet_Node_Temperature_in_Cooling_Mode=80, # Minimum_Outdoor_Temperature_in_Cooling_Mode=-6, # Maximum_Outdoor_Temperature_in_Cooling_Mode=43, Cooling_Capacity_Ratio_Modifier_Function_of_Low_Temperature_Curve_Name= 'VRFCoolCapFT', Cooling_Capacity_Ratio_Boundary_Curve_Name='VRFCoolCapFTBoundary', Cooling_Capacity_Ratio_Modifier_Function_of_High_Temperature_Curve_Name= 'VRFCoolCapFTHi', Cooling_Energy_Input_Ratio_Modifier_Function_of_Low_Temperature_Curve_Name= 'VRFCoolEIRFT', Cooling_Energy_Input_Ratio_Boundary_Curve_Name='VRFCoolEIRFTBoundary', Cooling_Energy_Input_Ratio_Modifier_Function_of_High_Temperature_Curve_Name= 'VRFCoolEIRFTHi', Cooling_Energy_Input_Ratio_Modifier_Function_of_Low_PartLoad_Ratio_Curve_Name= 'CoolingEIRLowPLR', Cooling_Energy_Input_Ratio_Modifier_Function_of_High_PartLoad_Ratio_Curve_Name= 'CoolingEIRHiPLR', Cooling_Combination_Ratio_Correction_Factor_Curve_Name= 'CoolingCombRatio', Cooling_PartLoad_Fraction_Correlation_Curve_Name='VRFCPLFFPLR', Gross_Rated_Heating_Capacity='autosize', Rated_Heating_Capacity_Sizing_Ratio=1, Gross_Rated_Heating_COP=cop, Minimum_Condenser_Inlet_Node_Temperature_in_Heating_Mode=-20, Maximum_Condenser_Inlet_Node_Temperature_in_Heating_Mode=80, Heating_Capacity_Ratio_Modifier_Function_of_Low_Temperature_Curve_Name= 'VRFHeatCapFT', Heating_Capacity_Ratio_Boundary_Curve_Name='VRFHeatCapFTBoundary', Heating_Capacity_Ratio_Modifier_Function_of_High_Temperature_Curve_Name= 'VRFHeatCapFTHi', Heating_Energy_Input_Ratio_Modifier_Function_of_Low_Temperature_Curve_Name= 'VRFHeatEIRFT', Heating_Energy_Input_Ratio_Boundary_Curve_Name='VRFHeatEIRFTBoundary', Heating_Energy_Input_Ratio_Modifier_Function_of_High_Temperature_Curve_Name= 'VRFHeatEIRFTHi', Heating_Performance_Curve_Outdoor_Temperature_Type='WetBulbTemperature', Heating_Energy_Input_Ratio_Modifier_Function_of_Low_PartLoad_Ratio_Curve_Name= 'HeatingEIRLowPLR', Heating_Energy_Input_Ratio_Modifier_Function_of_High_PartLoad_Ratio_Curve_Name= 'HeatingEIRHiPLR', Heating_Combination_Ratio_Correction_Factor_Curve_Name= 'HeatingCombRatio', Heating_PartLoad_Fraction_Correlation_Curve_Name='VRFCPLFFPLR', Minimum_Heat_Pump_PartLoad_Ratio=0.2, Zone_Name_for_Master_Thermostat_Location='', Master_Thermostat_Priority_Control_Type='LoadPriority', Thermostat_Priority_Schedule_Name='', Zone_Terminal_Unit_List_Name='VRF Outdoor Unit_'+zn+' Zone List', Heat_Pump_Waste_Heat_Recovery='Yes', Equivalent_Piping_Length_used_for_Piping_Correction_Factor_in_Cooling_Mode=50, Vertical_Height_used_for_Piping_Correction_Factor=15, Piping_Correction_Factor_for_Length_in_Cooling_Mode_Curve_Name= 'CoolingLengthCorrectionFactor', Piping_Correction_Factor_for_Height_in_Cooling_Mode_Coefficient=0, Equivalent_Piping_Length_used_for_Piping_Correction_Factor_in_Heating_Mode=50, Piping_Correction_Factor_for_Length_in_Heating_Mode_Curve_Name= 'VRF Piping Correction Factor for Length in Heating Mode', Piping_Correction_Factor_for_Height_in_Heating_Mode_Coefficient=0, Crankcase_Heater_Power_per_Compressor=15, Number_of_Compressors=2, Ratio_of_Compressor_Size_to_Total_Compressor_Capacity=0.5, Maximum_Outdoor_DryBulb_Temperature_for_Crankcase_Heater=5, Defrost_Strategy='Resistive', Defrost_Control='Timed', Defrost_Energy_Input_Ratio_Modifier_Function_of_Temperature_Curve_Name='', Defrost_Time_Period_Fraction=0, Resistive_Defrost_Heater_Capacity='autosize', Maximum_Outdoor_Drybulb_Temperature_for_Defrost_Operation=5, Condenser_Type='AirCooled', Condenser_Inlet_Node_Name='VRF Outdoor Unit_'+ zn+ ' Outdoor Air Node', Condenser_Outlet_Node_Name='', Water_Condenser_Volume_Flow_Rate='autosize', Evaporative_Condenser_Effectiveness=0.9, Evaporative_Condenser_Air_Flow_Rate='autosize', Evaporative_Condenser_Pump_Rated_Power_Consumption='autosize', Supply_Water_Storage_Tank_Name='', Basin_Heater_Capacity=0, Basin_Heater_Setpoint_Temperature=2, Basin_Heater_Operating_Schedule_Name='On 24/7', Fuel_Type='Electricity', Minimum_Condenser_Inlet_Node_Temperature_in_Heat_Recovery_Mode=-5.99, Maximum_Condenser_Inlet_Node_Temperature_in_Heat_Recovery_Mode=80, Heat_Recovery_Cooling_Capacity_Modifier_Curve_Name= 'VRF Heat Recovery Cooling Capacity Modifier', Initial_Heat_Recovery_Cooling_Capacity_Fraction=0.5, Heat_Recovery_Cooling_Capacity_Time_Constant=0.15, Heat_Recovery_Cooling_Energy_Modifier_Curve_Name= 'VRF Heat Recovery Cooling Energy Modifier', Initial_Heat_Recovery_Cooling_Energy_Fraction=1, Heat_Recovery_Cooling_Energy_Time_Constant=0, Heat_Recovery_Heating_Capacity_Modifier_Curve_Name= 'VRF Heat Recovery Heating Capacity Modifier', Initial_Heat_Recovery_Heating_Capacity_Fraction=1, Heat_Recovery_Heating_Capacity_Time_Constant=0.15, Heat_Recovery_Heating_Energy_Modifier_Curve_Name= 'VRF Heat Recovery Heating Energy Modifier', Initial_Heat_Recovery_Heating_Energy_Fraction=1, Heat_Recovery_Heating_Energy_Time_Constant=0 ) else: self.idf1.newidfobject( 'AirConditioner:VariableRefrigerantFlow', Heat_Pump_Name='VRF Outdoor Unit_' + zn, Availability_Schedule_Name=VRFschedule, Gross_Rated_Total_Cooling_Capacity='autosize', Gross_Rated_Cooling_COP=eer, # Minimum_Condenser_Inlet_Node_Temperature_in_Cooling_Mode=-6, # Maximum_Condenser_Inlet_Node_Temperature_in_Cooling_Mode=43, Minimum_Outdoor_Temperature_in_Cooling_Mode=-20, Maximum_Outdoor_Temperature_in_Cooling_Mode=80, Cooling_Capacity_Ratio_Modifier_Function_of_Low_Temperature_Curve_Name= 'VRFCoolCapFT', Cooling_Capacity_Ratio_Boundary_Curve_Name='VRFCoolCapFTBoundary', Cooling_Capacity_Ratio_Modifier_Function_of_High_Temperature_Curve_Name= 'VRFCoolCapFTHi', Cooling_Energy_Input_Ratio_Modifier_Function_of_Low_Temperature_Curve_Name= 'VRFCoolEIRFT', Cooling_Energy_Input_Ratio_Boundary_Curve_Name='VRFCoolEIRFTBoundary', Cooling_Energy_Input_Ratio_Modifier_Function_of_High_Temperature_Curve_Name= 'VRFCoolEIRFTHi', Cooling_Energy_Input_Ratio_Modifier_Function_of_Low_PartLoad_Ratio_Curve_Name= 'CoolingEIRLowPLR', Cooling_Energy_Input_Ratio_Modifier_Function_of_High_PartLoad_Ratio_Curve_Name= 'CoolingEIRHiPLR', Cooling_Combination_Ratio_Correction_Factor_Curve_Name= 'CoolingCombRatio', Cooling_PartLoad_Fraction_Correlation_Curve_Name='VRFCPLFFPLR', Gross_Rated_Heating_Capacity='autosize', Rated_Heating_Capacity_Sizing_Ratio=1, Gross_Rated_Heating_COP=cop, Minimum_Outdoor_Temperature_in_Heating_Mode=-20, Maximum_Outdoor_Temperature_in_Heating_Mode=80, Heating_Capacity_Ratio_Modifier_Function_of_Low_Temperature_Curve_Name= 'VRFHeatCapFT', Heating_Capacity_Ratio_Boundary_Curve_Name='VRFHeatCapFTBoundary', Heating_Capacity_Ratio_Modifier_Function_of_High_Temperature_Curve_Name= 'VRFHeatCapFTHi', Heating_Energy_Input_Ratio_Modifier_Function_of_Low_Temperature_Curve_Name= 'VRFHeatEIRFT', Heating_Energy_Input_Ratio_Boundary_Curve_Name='VRFHeatEIRFTBoundary', Heating_Energy_Input_Ratio_Modifier_Function_of_High_Temperature_Curve_Name= 'VRFHeatEIRFTHi', Heating_Performance_Curve_Outdoor_Temperature_Type='WetBulbTemperature', Heating_Energy_Input_Ratio_Modifier_Function_of_Low_PartLoad_Ratio_Curve_Name= 'HeatingEIRLowPLR', Heating_Energy_Input_Ratio_Modifier_Function_of_High_PartLoad_Ratio_Curve_Name= 'HeatingEIRHiPLR', Heating_Combination_Ratio_Correction_Factor_Curve_Name= 'HeatingCombRatio', Heating_PartLoad_Fraction_Correlation_Curve_Name='VRFCPLFFPLR', Minimum_Heat_Pump_PartLoad_Ratio=0.2, Zone_Name_for_Master_Thermostat_Location='', Master_Thermostat_Priority_Control_Type='LoadPriority', Thermostat_Priority_Schedule_Name='', Zone_Terminal_Unit_List_Name='VRF Outdoor Unit_' + zn + ' Zone List', Heat_Pump_Waste_Heat_Recovery='Yes', Equivalent_Piping_Length_used_for_Piping_Correction_Factor_in_Cooling_Mode=50, Vertical_Height_used_for_Piping_Correction_Factor=15, Piping_Correction_Factor_for_Length_in_Cooling_Mode_Curve_Name= 'CoolingLengthCorrectionFactor', Piping_Correction_Factor_for_Height_in_Cooling_Mode_Coefficient=0, Equivalent_Piping_Length_used_for_Piping_Correction_Factor_in_Heating_Mode=50, Piping_Correction_Factor_for_Length_in_Heating_Mode_Curve_Name= 'VRF Piping Correction Factor for Length in Heating Mode', Piping_Correction_Factor_for_Height_in_Heating_Mode_Coefficient=0, Crankcase_Heater_Power_per_Compressor=15, Number_of_Compressors=2, Ratio_of_Compressor_Size_to_Total_Compressor_Capacity=0.5, Maximum_Outdoor_DryBulb_Temperature_for_Crankcase_Heater=5, Defrost_Strategy='Resistive', Defrost_Control='Timed', Defrost_Energy_Input_Ratio_Modifier_Function_of_Temperature_Curve_Name='', Defrost_Time_Period_Fraction=0, Resistive_Defrost_Heater_Capacity='autosize', Maximum_Outdoor_Drybulb_Temperature_for_Defrost_Operation=5, Condenser_Type='AirCooled', Condenser_Inlet_Node_Name='VRF Outdoor Unit_' + zn + ' Outdoor Air Node', Condenser_Outlet_Node_Name='', Water_Condenser_Volume_Flow_Rate='autosize', Evaporative_Condenser_Effectiveness=0.9, Evaporative_Condenser_Air_Flow_Rate='autosize', Evaporative_Condenser_Pump_Rated_Power_Consumption='autosize', Supply_Water_Storage_Tank_Name='', Basin_Heater_Capacity=0, Basin_Heater_Setpoint_Temperature=2, Basin_Heater_Operating_Schedule_Name='On 24/7', Fuel_Type='Electricity', Minimum_Outdoor_Temperature_in_Heat_Recovery_Mode=-5.99, Maximum_Outdoor_Temperature_in_Heat_Recovery_Mode=80, Heat_Recovery_Cooling_Capacity_Modifier_Curve_Name= 'VRF Heat Recovery Cooling Capacity Modifier', Initial_Heat_Recovery_Cooling_Capacity_Fraction=0.5, Heat_Recovery_Cooling_Capacity_Time_Constant=0.15, Heat_Recovery_Cooling_Energy_Modifier_Curve_Name= 'VRF Heat Recovery Cooling Energy Modifier', Initial_Heat_Recovery_Cooling_Energy_Fraction=1, Heat_Recovery_Cooling_Energy_Time_Constant=0, Heat_Recovery_Heating_Capacity_Modifier_Curve_Name= 'VRF Heat Recovery Heating Capacity Modifier', Initial_Heat_Recovery_Heating_Capacity_Fraction=1, Heat_Recovery_Heating_Capacity_Time_Constant=0.15, Heat_Recovery_Heating_Energy_Modifier_Curve_Name= 'VRF Heat Recovery Heating Energy Modifier', Initial_Heat_Recovery_Heating_Energy_Fraction=1, Heat_Recovery_Heating_Energy_Time_Constant=0 ) if verboseMode: print('VRF Outdoor Unit_'+ zn+ ' AirConditioner:VariableRefrigerantFlow ' 'Object has been added') OANDlist = [i for i in self.idf1.idfobjects['OutdoorAir:NodeList']] # print(OANDlist) for i in range(len(OANDlist)): firstOAND = self.idf1.idfobjects['OutdoorAir:NodeList'][-1] self.idf1.removeidfobject(firstOAND) del OANDlist ZTULlist = [i for i in self.idf1.idfobjects['ZoneTerminalUnitList']] # print(ZTULlist) for i in range(len(ZTULlist)): firstZTUL = self.idf1.idfobjects['ZoneTerminalUnitList'][-1] self.idf1.removeidfobject(firstZTUL) del ZTULlist for zn in self.zonenames_orig: self.idf1.newidfobject( 'OutdoorAir:NodeList', Node_or_NodeList_Name_1='VRF Outdoor Unit_'+zn+' Outdoor Air Node' ) if verboseMode: print('VRF Outdoor Unit_'+ zn+ ' Outdoor Air Node Object has been added') self.idf1.newidfobject( 'ZoneTerminalUnitList', Zone_Terminal_Unit_List_Name='VRF Outdoor Unit_'+zn+' Zone List', Zone_Terminal_Unit_Name_1=zn+' VRF Indoor Unit' ) if verboseMode: print('VRF Outdoor Unit_'+zn+' Zone List Object has been added') ZCTlist = [i for i in self.idf1.idfobjects['ZoneControl:Thermostat']] # print(ZCTlist) for i in range(len(ZCTlist)): firstZCT = self.idf1.idfobjects['ZoneControl:Thermostat'][-1] self.idf1.removeidfobject(firstZCT) del ZCTlist for zn in self.zonenames_orig: self.idf1.newidfobject( 'ZoneControl:Thermostat', Name=zn+' Thermostat', Zone_or_ZoneList_Name=zn, Control_Type_Schedule_Name='Control type schedule: Always 4', Control_1_Object_Type='ThermostatSetpoint:DualSetpoint', Control_1_Name=zn+' Dual SP' ) sizingzonelist = [i for i in self.idf1.idfobjects['Sizing:Zone']] # print(sizingzonelist) for i in range(len(sizingzonelist)): firstsizingzone = self.idf1.idfobjects['Sizing:Zone'][-1] self.idf1.removeidfobject(firstsizingzone) del sizingzonelist # if TempCtrl == 'pmv': # supply_air_temp_input_method = 'SupplyAirTemperature' # elif TempCtrl.lower() == 'temp' or TempCtrl.lower() == 'temperature': # supply_air_temp_input_method = 'TemperatureDifference' if SupplyAirTempInputMethod == 'supply air temperature': supply_air_temp_input_method = 'SupplyAirTemperature' elif SupplyAirTempInputMethod == 'temperature difference': supply_air_temp_input_method = 'TemperatureDifference' for zn in self.zonenames_orig: self.idf1.newidfobject( 'Sizing:Zone', Zone_or_ZoneList_Name=zn, Zone_Cooling_Design_Supply_Air_Temperature_Input_Method= supply_air_temp_input_method, Zone_Cooling_Design_Supply_Air_Temperature=14, Zone_Cooling_Design_Supply_Air_Temperature_Difference=5, Zone_Heating_Design_Supply_Air_Temperature_Input_Method= supply_air_temp_input_method, Zone_Heating_Design_Supply_Air_Temperature=50, Zone_Heating_Design_Supply_Air_Temperature_Difference=5, Zone_Cooling_Design_Supply_Air_Humidity_Ratio=0.009, Zone_Heating_Design_Supply_Air_Humidity_Ratio=0.004, Design_Specification_Outdoor_Air_Object_Name= zn+' Design Specification Outdoor Air Object', Zone_Heating_Sizing_Factor=1.25, Zone_Cooling_Sizing_Factor=1.15, Cooling_Design_Air_Flow_Method='DesignDay', Cooling_Design_Air_Flow_Rate=0, Cooling_Minimum_Air_Flow_per_Zone_Floor_Area=0.00076, Cooling_Minimum_Air_Flow=0, Cooling_Minimum_Air_Flow_Fraction=0, Heating_Design_Air_Flow_Method='DesignDay', Heating_Design_Air_Flow_Rate=0, Heating_Maximum_Air_Flow_per_Zone_Floor_Area=0.00203, Heating_Maximum_Air_Flow=0.14158, Heating_Maximum_Air_Flow_Fraction=0.3, Design_Specification_Zone_Air_Distribution_Object_Name= zn+' Design Specification Zone Air Distribution Object', Account_for_Dedicated_Outdoor_Air_System='Yes', Dedicated_Outdoor_Air_System_Control_Strategy='NeutralSupplyAir', Dedicated_Outdoor_Air_Low_Setpoint_Temperature_for_Design='autosize', Dedicated_Outdoor_Air_High_Setpoint_Temperature_for_Design='autosize' ) if verboseMode: print(zn+' Sizing:Zone Object has been added') DSOAlist = [i for i in self.idf1.idfobjects['DesignSpecification:OutdoorAir']] # print(DSOAlist) for i in range(len(DSOAlist)): firstDSOA = self.idf1.idfobjects['DesignSpecification:OutdoorAir'][-1] self.idf1.removeidfobject(firstDSOA) del DSOAlist for zn in self.zonenames_orig: self.idf1.newidfobject( 'DesignSpecification:OutdoorAir', Name=zn+' Design Specification Outdoor Air Object', Outdoor_Air_Method='Flow/Person', Outdoor_Air_Flow_per_Person=0.00944, Outdoor_Air_Flow_per_Zone_Floor_Area=0, Outdoor_Air_Flow_per_Zone=0, Outdoor_Air_Flow_Air_Changes_per_Hour=0, Outdoor_Air_Schedule_Name='On 24/7', ) if verboseMode: print(zn+' Design Specification Outdoor Air Object has been added') DSZADlist = [i for i in self.idf1.idfobjects ['DesignSpecification:ZoneAirDistribution']] # print(DSZADlist) for i in range(len(DSZADlist)): firstDSZAD = self.idf1.idfobjects[ 'DesignSpecification:ZoneAirDistribution' ][-1] self.idf1.removeidfobject(firstDSZAD) del DSZADlist for zn in self.zonenames_orig: self.idf1.newidfobject( 'DesignSpecification:ZoneAirDistribution', Name=zn+' Design Specification Zone Air Distribution Object', Zone_Air_Distribution_Effectiveness_in_Cooling_Mode=1, Zone_Air_Distribution_Effectiveness_in_Heating_Mode=1, Zone_Air_Distribution_Effectiveness_Schedule_Name='', Zone_Secondary_Recirculation_Fraction=0 ) if verboseMode: print(zn+' Design Specification Zone Air Distribution ' 'Object has been added') nodelistlist = [i for i in self.idf1.idfobjects['NodeList']] # print(nodelistlist) for i in range(len(nodelistlist)): firstnodelist = self.idf1.idfobjects['NodeList'][-1] self.idf1.removeidfobject(firstnodelist) del nodelistlist for zn in self.zonenames_orig: self.idf1.newidfobject( 'NodeList', Name=zn+' Air Inlet Node List', Node_1_Name=zn+' VRF Indoor Unit Supply Outlet' ) self.idf1.newidfobject( 'NodeList', Name=zn+' Air Exhaust Node List', Node_1_Name=zn+' VRF Indoor Unit Return' ) if verboseMode: print(zn+' Nodelist Objects has been added') ZHEClist = [i for i in self.idf1.idfobjects['ZoneHVAC:EquipmentConnections']] # print(ZHEClist) for i in range(len(ZHEClist)): firstZHEC = self.idf1.idfobjects['ZoneHVAC:EquipmentConnections'][-1] self.idf1.removeidfobject(firstZHEC) del ZHEClist for zn in self.zonenames_orig: self.idf1.newidfobject( 'ZoneHVAC:EquipmentConnections', Zone_Name=zn, Zone_Conditioning_Equipment_List_Name=zn+' Equipment', Zone_Air_Inlet_Node_or_NodeList_Name=zn+' Air Inlet Node List', Zone_Air_Exhaust_Node_or_NodeList_Name=zn+' Air Exhaust Node List', Zone_Air_Node_Name=zn+' Zone Air Node', Zone_Return_Air_Node_or_NodeList_Name=zn+' Return Outlet' ) if verboseMode: print(zn+' ZoneHVAC:EquipmentConnections Objects has been added') ZHELlist = [i for i in self.idf1.idfobjects['ZoneHVAC:EquipmentList']] # print(ZHELlist) for i in range(len(ZHELlist)): firstZHEL = self.idf1.idfobjects['ZoneHVAC:EquipmentList'][-1] self.idf1.removeidfobject(firstZHEL) del ZHELlist for zn in self.zonenames_orig: self.idf1.newidfobject( 'ZoneHVAC:EquipmentList', # defaultvalues=False, Name=zn+' Equipment', Load_Distribution_Scheme='SequentialLoad', Zone_Equipment_1_Object_Type= 'ZoneHVAC:TerminalUnit:VariableRefrigerantFlow', Zone_Equipment_1_Name=zn+' VRF Indoor Unit', Zone_Equipment_1_Cooling_Sequence=1, Zone_Equipment_1_Heating_or_NoLoad_Sequence=1, Zone_Equipment_1_Sequential_Cooling_Fraction_Schedule_Name='', Zone_Equipment_1_Sequential_Heating_Fraction_Schedule_Name='' ) if verboseMode: print(zn+' ZoneHVAC:EquipmentList Objects has been added') ZHTUVRFlist = [i for i in self.idf1.idfobjects ['ZoneHVAC:TerminalUnit:VariableRefrigerantFlow']] # print(ZHTUVRFlist) for i in range(len(ZHTUVRFlist)): firstZHTUVRF = self.idf1.idfobjects[ 'ZoneHVAC:TerminalUnit:VariableRefrigerantFlow' ][-1] self.idf1.removeidfobject(firstZHTUVRF) del ZHTUVRFlist for zn in self.zonenames_orig: self.idf1.newidfobject( 'ZoneHVAC:TerminalUnit:VariableRefrigerantFlow', Zone_Terminal_Unit_Name=zn+' VRF Indoor Unit', Terminal_Unit_Availability_Schedule=VRFschedule, Terminal_Unit_Air_Inlet_Node_Name=zn+' VRF Indoor Unit Return', Terminal_Unit_Air_Outlet_Node_Name= zn+' VRF Indoor Unit Supply Outlet', Cooling_Supply_Air_Flow_Rate='autosize', No_Cooling_Supply_Air_Flow_Rate='autosize', Heating_Supply_Air_Flow_Rate='autosize', No_Heating_Supply_Air_Flow_Rate='autosize', Cooling_Outdoor_Air_Flow_Rate=0, Heating_Outdoor_Air_Flow_Rate=0, No_Load_Outdoor_Air_Flow_Rate=0, Supply_Air_Fan_Operating_Mode_Schedule_Name='On 24/7', Supply_Air_Fan_Placement='DrawThrough', Supply_Air_Fan_Object_Type='Fan:ConstantVolume', Supply_Air_Fan_Object_Name=zn+' VRF Indoor Unit Supply Fan', Outside_Air_Mixer_Object_Type='', Outside_Air_Mixer_Object_Name='', Cooling_Coil_Object_Type='Coil:Cooling:DX:VariableRefrigerantFlow', Cooling_Coil_Object_Name=zn+' VRF Indoor Unit DX Cooling Coil', Heating_Coil_Object_Type='Coil:Heating:DX:VariableRefrigerantFlow', Heating_Coil_Object_Name=zn+' VRF Indoor Unit DX Heating Coil', Zone_Terminal_Unit_On_Parasitic_Electric_Energy_Use=30, Zone_Terminal_Unit_Off_Parasitic_Electric_Energy_Use=20, Rated_Heating_Capacity_Sizing_Ratio='', Availability_Manager_List_Name='' ) if verboseMode: print(zn+' ZoneHVAC:TerminalUnit:VariableRefrigerantFlow ' 'Object has been added') CCDXVRFlist = [i for i in self.idf1.idfobjects ['Coil:Cooling:DX:VariableRefrigerantFlow']] # print(CCDXVRFlist) for i in range(len(CCDXVRFlist)): firstCCDCVRF = self.idf1.idfobjects[ 'Coil:Cooling:DX:VariableRefrigerantFlow' ][-1] self.idf1.removeidfobject(firstCCDCVRF) del CCDXVRFlist for zn in self.zonenames_orig: self.idf1.newidfobject( 'Coil:Cooling:DX:VariableRefrigerantFlow', Name=zn+' VRF Indoor Unit DX Cooling Coil', Availability_Schedule_Name='On 24/7', Gross_Rated_Total_Cooling_Capacity='autosize', Gross_Rated_Sensible_Heat_Ratio='autosize', Rated_Air_Flow_Rate='autosize', Cooling_Capacity_Ratio_Modifier_Function_of_Temperature_Curve_Name= 'VRFTUCoolCapFT', Cooling_Capacity_Modifier_Curve_Function_of_Flow_Fraction_Name= 'VRFACCoolCapFFF', Coil_Air_Inlet_Node=zn+' VRF Indoor Unit Return', Coil_Air_Outlet_Node=zn+' VRF Indoor Unit DX Cooling Coil Outlet', Name_of_Water_Storage_Tank_for_Condensate_Collection='' ) if verboseMode: print(zn+' Coil:Cooling:DX:VariableRefrigerantFlow ' 'Object has been added') CHDXVRFlist = [i for i in self.idf1.idfobjects ['Coil:Heating:DX:VariableRefrigerantFlow']] # print(CHDXVRFlist) for i in range(len(CHDXVRFlist)): firstCHDXVRF = self.idf1.idfobjects[ 'Coil:Heating:DX:VariableRefrigerantFlow' ][-1] self.idf1.removeidfobject(firstCHDXVRF) del CHDXVRFlist for zn in self.zonenames_orig: self.idf1.newidfobject( 'Coil:Heating:DX:VariableRefrigerantFlow', Name=zn+' VRF Indoor Unit DX Heating Coil', Availability_Schedule='On 24/7', Gross_Rated_Heating_Capacity='autosize', Rated_Air_Flow_Rate='autosize', Coil_Air_Inlet_Node=zn+' VRF Indoor Unit DX Cooling Coil Outlet', Coil_Air_Outlet_Node=zn+' VRF Indoor Unit DX Heating Coil Outlet', Heating_Capacity_Ratio_Modifier_Function_of_Temperature_Curve_Name= 'VRFTUHeatCapFT', Heating_Capacity_Modifier_Function_of_Flow_Fraction_Curve_Name= 'VRFACCoolCapFFF' ) if verboseMode: print(zn+' Coil:Heating:DX:VariableRefrigerantFlow ' 'Object has been added') FCVlist = [i for i in self.idf1.idfobjects['Fan:ConstantVolume']] # print(FCVlist) for i in range(len(FCVlist)): firstFCV = self.idf1.idfobjects['Fan:ConstantVolume'][-1] self.idf1.removeidfobject(firstFCV) del FCVlist for zn in self.zonenames_orig: self.idf1.newidfobject( 'Fan:ConstantVolume', Name=zn+' VRF Indoor Unit Supply Fan', Availability_Schedule_Name=VRFschedule, Fan_Total_Efficiency=0.7, Pressure_Rise=100, Maximum_Flow_Rate='autosize', Motor_Efficiency=0.9, Motor_In_Airstream_Fraction=1, Air_Inlet_Node_Name=zn+' VRF Indoor Unit DX Heating Coil Outlet', Air_Outlet_Node_Name=zn+' VRF Indoor Unit Supply Outlet', EndUse_Subcategory='General' ) if verboseMode: print(zn+' Fan:ConstantVolume Object has been added')
[docs] def addForscriptSchVRFsystem(self, verboseMode: bool = True): """Add AST Schedules for each zone for VRFsystem. :param self: Used as a method for class ``accim.sim.accim_Main.accimJob`` :param verboseMode: Inherited from :class:``accim.sim.accis.addAccis`` """ for zn in self.ems_objs_name: if "AHST_Sch_"+zn in [sch.Name for sch in self.idf1.idfobjects['Schedule:Compact']]: if verboseMode: print('AHST_Sch_'+zn+' Schedule already was in the model') else: self.idf1.newidfobject( 'Schedule:Compact', Name="AHST_Sch_"+zn, Schedule_Type_Limits_Name="Any Number", Field_1='Through: 12/31', Field_2='For: AllDays', Field_3='Until: 24:00,20' ) if verboseMode: print('AHST_Sch_'+zn+' Schedule has been added') if "ACST_Sch_"+zn in [sch.Name for sch in self.idf1.idfobjects['Schedule:Compact']]: if verboseMode: print('ACST_Sch_'+zn+' Schedule already was in the model') else: self.idf1.newidfobject( 'Schedule:Compact', Name="ACST_Sch_"+zn, Schedule_Type_Limits_Name="Any Number", Field_1='Through: 12/31', Field_2='For: AllDays', Field_3='Until: 24:00,24' ) if verboseMode: print('ACST_Sch_'+zn+' Schedule has been added') # allschedules=([i for i in self.idf1.idfobjects['Schedule:Compact']]) # print(allschedules) TSDSlist = ([i for i in self.idf1.idfobjects['ThermostatSetpoint:DualSetpoint']]) # print(TSDSlist) for i in range(len(TSDSlist)): firstTSDS = self.idf1.idfobjects['ThermostatSetpoint:DualSetpoint'][-1] self.idf1.removeidfobject(firstTSDS) del TSDSlist for i in range(len(self.ems_objs_name)): self.idf1.newidfobject( 'ThermostatSetpoint:DualSetpoint', Name=self.ems_zonenames[i]+' Dual SP', Heating_Setpoint_Temperature_Schedule_Name= "AHST_Sch_"+self.ems_objs_name[i], Cooling_Setpoint_Temperature_Schedule_Name= "ACST_Sch_"+self.ems_objs_name[i] )
[docs] def checkVentIsOn(self, verboseMode: bool = True): """Check ventilation settings. :param self: Used as a method for :class:``accim.sim.accim_Main.accimJob`` :param verboseMode: Inherited from :class:``accim.sim.accis.addAccis`` """ if "Vent_SP_temp" in [sch.Name for sch in self.idf1.idfobjects['Schedule:Compact']]: if verboseMode: print("Vent_SP_temp Schedule already was in the model") else: self.idf1.newidfobject( 'Schedule:Compact', Name="Vent_SP_temp", Schedule_Type_Limits_Name="Any Number", Field_1='Through: 12/31', Field_2='For: AllDays', Field_3='Until: 24:00,24' ) if verboseMode: print("Vent_SP_temp Schedule has been added") Wlist = ([w for w in self.idf1.idfobjects ['AirflowNetwork:MultiZone:Component:DetailedOpening'] if w.Name.endswith('_Win')]) # print(Wlist) for w in Wlist: w.Height_Factor_for_Opening_Factor_1 = 1 w.Start_Height_Factor_for_Opening_Factor_1 = 0 w.Width_Factor_for_Opening_Factor_2 = 1 w.Height_Factor_for_Opening_Factor_2 = 1 w.Start_Height_Factor_for_Opening_Factor_2 = 0 Wlist_2 = ([w for w in self.idf1.idfobjects ['AirflowNetwork:MultiZone:Surface'] if w.Surface_Name.endswith('_Win')]) # print(Wlist_2) for w in Wlist_2: w.Ventilation_Control_Mode = 'Temperature' w.Ventilation_Control_Zone_Temperature_Setpoint_Schedule_Name = 'Vent_SP_temp' w.Venting_Availability_Schedule_Name = 'On' # Checking if all internal doors are always opened Dlist = ([d for d in self.idf1.idfobjects ['AirflowNetwork:MultiZone:Component:DetailedOpening'] if d.Name.endswith('_Door')]) for d in Dlist: d.Width_Factor_for_Opening_Factor_2 = 1 Dlist_2 = ([d for d in self.idf1.idfobjects ['AirflowNetwork:MultiZone:Surface'] if d.Surface_Name.endswith('_Door')]) for d in Dlist_2: d.Venting_Availability_Schedule_Name = 'On'