Source code for accim.sim.accim_IDFgeneration
# 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/>.
"""Generate IDFs."""
[docs]
def inputData(self, ScriptType: str = None):
"""Input data for IDF generation.
:param self: Used as a method for class ``accim.sim.accim_Main.accimJob``
:param ScriptType: Inherited from class ``accim.sim.accis.addAccis``
"""
CS_CA_CM_list_dict = {
'0 = ESP CTE': [['n/a'], ['n/a']],
'1 = INT EN16798-1': [[1, 2, 3], [0, 1, 2, 3]],
'2 = INT ASHRAE55': [[80, 90], [0, 1, 2, 3]],
'3 = JPN Rijal': [[80, 90], [0, 1, 2, 3]],
'4 = CHN GBT50785 Cold': [[1, 2], [3]],
'5 = CHN GBT50785 HotMild': [[1, 2], [3]],
'6 = CHN Yang': [[80, 90], [0, 1, 2, 3]],
'7 = IND IMAC C NV': [[80, 85, 90], [0, 1, 2, 3]],
'8 = IND IMAC C MM': [[80, 85, 90], [0, 1, 2, 3]],
'9 = IND IMAC R 7DRM': [[80, 90], [0, 1, 2, 3]],
'10 = IND IMAC R 30DRM': [[80, 90], [0, 1, 2, 3]],
'11 = IND Dhaka': [[80, 90], [0, 1, 2, 3]],
'12 = ROM Udrea': [[80, 90], [0, 1, 2, 3]],
'13 = AUS Williamson': [[80, 90], [0.1, 0.2, 0.3, 0.4, 0.5, 1.1, 1.2, 1.3, 1.4, 1.5, 2, 3]],
'14 = AUS DeDear': [[80, 90], [0.1, 0.2, 0.3, 0.4, 0.5, 1.1, 1.2, 1.3, 1.4, 1.5, 2, 3]],
'15 = BRA Rupp NV': [[80, 90], [0, 1, 2, 3]],
'16 = BRA Rupp AC': [[80, 90], [0, 1, 2, 3]],
'17 = MEX Oropeza Arid': [[80, 90], [0, 1, 2, 3]],
'18 = MEX Oropeza DryTropic': [[80, 90], [0, 1, 2, 3]],
'19 = MEX Oropeza Temperate': [[80, 90], [0, 1, 2, 3]],
'20 = MEX Oropeza HumTropic': [[80, 90], [0, 1, 2, 3]],
'21 = CHL Perez-Fargallo': [[80, 90], [2, 3]],
'22 = INT ISO7730': [[1, 2, 3], [0]],
'99 = CUSTOM': [['n/a'], [3]],
}
CS_CA_CM_data_dict = {
0: {
'name': '0 = ESP CTE',
'CAT':{
'n/a': 'n/a'
},
'ComfMod': {
'n/a': 'n/a'
}
},
1: {
'name': '1 = INT EN16798',
'CAT': {
1: 'EN16798 Category I',
2: 'EN16798 Category II',
3: 'EN16798 Category III',
},
'ComfMod': {
0: 'EN16798 Static setpoints',
1: 'EN16798 Adaptive setpoints when applicable, otherwise CTE',
2: 'EN16798 Adaptive setpoints when applicable, otherwise EN16798 Static setpoints',
3: 'EN16798 Adaptive setpoints when applicable, otherwise EN16798 Adaptive setpoints horizontally extended',
}
},
2: {
'name': '2 = INT ASHRAE55',
'CAT': {
80: 'ASHRAE 55 80% acceptability',
90: 'ASHRAE 55 90% acceptability',
},
'ComfMod': {
0: 'ISO 7730 Static setpoints',
1: 'ASHRAE 55 Adaptive setpoints when applicable, otherwise CTE',
2: 'ASHRAE 55 Adaptive setpoints when applicable, otherwise ISO 7730 Static setpoints',
3: 'ASHRAE 55 Adaptive setpoints when applicable, otherwise ASHRAE 55 Adaptive setpoints horizontally extended',
}
},
3: {
'name': '3 = JPN Rijal',
'CAT': {
80: '80% acceptability',
90: '90% acceptability',
},
'ComfMod': {
0: 'COOLBIZ Static setpoints',
1: 'Rijal Model Adaptive setpoints when applicable, otherwise COOLBIZ Static setpoints',
2: 'Rijal Model Adaptive setpoints when applicable, otherwise ISO 7730 Static setpoints',
3: 'Rijal Model Adaptive setpoints when applicable, otherwise Adaptive setpoints horizontally extended',
}
},
4: {
'name': '4 = CHN GBT50785 Cold',
'CAT': {
1: '90% acceptability',
2: '75-90% acceptability',
},
'ComfMod': {
# 0: 'X Static setpoints',
# 1: 'GBT50785 Cold Model Adaptive setpoints when applicable, otherwise X Static setpoints',
# 2: 'GBT50785 Cold Model Adaptive setpoints when applicable, otherwise ISO 7730 Static setpoints',
3: 'GBT50785 Cold Model Adaptive setpoints when applicable, otherwise Adaptive setpoints horizontally extended',
}
},
5: {
'name': '5 = CHN GBT50785 HotMild',
'CAT': {
1: '90% acceptability',
2: '75-90% acceptability',
},
'ComfMod': {
# 0: 'X Static setpoints',
# 1: 'GBT50785 HotMild Model Adaptive setpoints when applicable, otherwise X Static setpoints',
# 2: 'GBT50785 HotMild Model Adaptive setpoints when applicable, otherwise ISO 7730 Static setpoints',
3: 'GBT50785 HotMild Model Adaptive setpoints when applicable, otherwise Adaptive setpoints horizontally extended',
}
},
6: {
'name': '6 = CHN Yang',
'CAT': {
80: '80% acceptability',
90: '90% acceptability',
},
'ComfMod': {
# 0: 'X Static setpoints',
# 1: 'Yang Model Adaptive setpoints when applicable, otherwise X Static setpoints',
2: 'Yang Model Adaptive setpoints when applicable, otherwise ISO 7730 Static setpoints',
3: 'Yang Model Adaptive setpoints when applicable, otherwise Adaptive setpoints horizontally extended',
}
},
7: {
'name': '7 = IND IMAC C NV',
'CAT': {
80: '80% acceptability',
85: '85% acceptability',
90: '90% acceptability',
},
'ComfMod': {
0: 'Indian Building Code Static setpoints',
1: 'IMAC C NV Model Adaptive setpoints when applicable, otherwise Indian Building Code Static setpoints',
2: 'IMAC C NV Model Adaptive setpoints when applicable, otherwise ISO 7730 Static setpoints',
3: 'IMAC C NV Model Adaptive setpoints when applicable, otherwise Adaptive setpoints horizontally extended',
}
},
8: {
'name': '8 = IND IMAC C MM',
'CAT': {
80: '80% acceptability',
85: '85% acceptability',
90: '90% acceptability',
},
'ComfMod': {
0: 'Indian Building Code Static setpoints',
1: 'IMAC C MM Model Adaptive setpoints when applicable, otherwise Indian Building Code Static setpoints',
2: 'IMAC C MM Model Adaptive setpoints when applicable, otherwise ISO 7730 Static setpoints',
3: 'IMAC C MM Model Adaptive setpoints when applicable, otherwise Adaptive setpoints horizontally extended',
}
},
9: {
'name': '9 = IND IMAC R 7DRM',
'CAT': {
80: '80% acceptability',
90: '90% acceptability',
},
'ComfMod': {
0: 'Indian Building Code Static setpoints',
1: 'IMAC R 7DRM Model Adaptive setpoints when applicable, otherwise Indian Building Code Static setpoints',
2: 'IMAC R 7DRM Model Adaptive setpoints when applicable, otherwise ISO 7730 Static setpoints',
3: 'IMAC R 7DRM Model Adaptive setpoints when applicable, otherwise Adaptive setpoints horizontally extended',
}
},
10: {
'name': '10 = IND IMAC R 30DRM',
'CAT': {
80: '80% acceptability',
90: '90% acceptability',
},
'ComfMod': {
0: 'Indian Building Code Static setpoints',
1: 'IMAC R 30DRM Model Adaptive setpoints when applicable, otherwise Indian Building Code Static setpoints',
2: 'IMAC R 30DRM Model Adaptive setpoints when applicable, otherwise ISO 7730 Static setpoints',
3: 'IMAC R 30DRM Model Adaptive setpoints when applicable, otherwise Adaptive setpoints horizontally extended',
}
},
11: {
'name': '11 = IND Dhaka',
'CAT': {
80: '80% acceptability',
90: '90% acceptability',
},
'ComfMod': {
0: 'Indian Building Code Static setpoints',
1: 'Dhaka Model Adaptive setpoints when applicable, otherwise Indian Building Code Static setpoints',
2: 'Dhaka Model Adaptive setpoints when applicable, otherwise ISO 7730 Static setpoints',
3: 'Dhaka Model Adaptive setpoints when applicable, otherwise Adaptive setpoints horizontally extended',
}
},
12: {
'name': '12 = ROM Udrea',
'CAT': {
80: '80% acceptability',
90: '90% acceptability',
},
'ComfMod': {
0: 'Romanian Building Code Static setpoints',
1: 'Udrea Model Adaptive setpoints when applicable, otherwise Romanian Building Code Static setpoints',
2: 'Udrea Model Adaptive setpoints when applicable, otherwise ISO 7730 Static setpoints',
3: 'Udrea Model Adaptive setpoints when applicable, otherwise Adaptive setpoints horizontally extended',
}
},
13: {
'name': '13 = AUS Williamson',
'CAT': {
80: '80% acceptability',
90: '90% acceptability',
},
'ComfMod': {
0.1: 'Australian Building Code Static setpoints for climate zones 1, 2 and 3',
0.2: 'Australian Building Code Static setpoints for climate zone 4',
0.3: 'Australian Building Code Static setpoints for climate zone 5',
0.4: 'Australian Building Code Static setpoints for climate zones 6 and 7',
0.5: 'Australian Building Code Static setpoints for climate zone 8',
1.1: 'Williamson Model Adaptive setpoints when applicable, otherwise Australian Building Code Static setpoints for climate zones 1, 2 and 3',
1.2: 'Williamson Model Adaptive setpoints when applicable, otherwise Australian Building Code Static setpoints for climate zone 4',
1.3: 'Williamson Model Adaptive setpoints when applicable, otherwise Australian Building Code Static setpoints for climate zone 5',
1.4: 'Williamson Model Adaptive setpoints when applicable, otherwise Australian Building Code Static setpoints for climate zones 6 and 7',
1.5: 'Williamson Model Adaptive setpoints when applicable, otherwise Australian Building Code Static setpoints for climate zone 8',
2: 'Williamson Model Adaptive setpoints when applicable, otherwise ISO 7730 Static setpoints',
3: 'Williamson Model Adaptive setpoints when applicable, otherwise Adaptive setpoints horizontally extended',
}
},
14: {
'name': '14 = AUS DeDear',
'CAT': {
80: '80% acceptability',
90: '90% acceptability',
},
'ComfMod': {
0.1: 'Australian Building Code Static setpoints for climate zones 1, 2 and 3',
0.2: 'Australian Building Code Static setpoints for climate zone 4',
0.3: 'Australian Building Code Static setpoints for climate zone 5',
0.4: 'Australian Building Code Static setpoints for climate zones 6 and 7',
0.5: 'Australian Building Code Static setpoints for climate zone 8',
1.1: 'DeDear Model Adaptive setpoints when applicable, otherwise Australian Building Code Static setpoints for climate zones 1, 2 and 3',
1.2: 'DeDear Model Adaptive setpoints when applicable, otherwise Australian Building Code Static setpoints for climate zone 4',
1.3: 'DeDear Model Adaptive setpoints when applicable, otherwise Australian Building Code Static setpoints for climate zone 5',
1.4: 'DeDear Model Adaptive setpoints when applicable, otherwise Australian Building Code Static setpoints for climate zones 6 and 7',
1.5: 'DeDear Model Adaptive setpoints when applicable, otherwise Australian Building Code Static setpoints for climate zone 8',
2: 'DeDear Model Adaptive setpoints when applicable, otherwise ISO 7730 Static setpoints',
3: 'DeDear Model Adaptive setpoints when applicable, otherwise Adaptive setpoints horizontally extended',
}
},
15: {
'name': '15 = BRA Rupp NV',
'CAT': {
80: '80% acceptability',
90: '90% acceptability',
},
'ComfMod': {
0: 'Brazilian Building Code Static setpoints (ABNT NBR 16401-2 Standard (2008))',
1: 'Rupp NV Model Adaptive setpoints when applicable, otherwise Brazilian Building Code Static setpoints',
2: 'Rupp NV Model Adaptive setpoints when applicable, otherwise ISO 7730 Static setpoints',
3: 'Rupp NV Model Adaptive setpoints when applicable, otherwise Adaptive setpoints horizontally extended',
}
},
16: {
'name': '16 = BRA Rupp AC',
'CAT': {
80: '80% acceptability',
90: '90% acceptability',
},
'ComfMod': {
0: 'Brazilian Building Code Static setpoints (ABNT NBR 16401-2 Standard (2008))',
1: 'Rupp AC Model Adaptive setpoints when applicable, otherwise Brazilian Building Code Static setpoints',
2: 'Rupp AC Model Adaptive setpoints when applicable, otherwise ISO 7730 Static setpoints',
3: 'Rupp AC Model Adaptive setpoints when applicable, otherwise Adaptive setpoints horizontally extended',
}
},
17: {
'name': '17 = MEX Oropeza Arid',
'CAT': {
80: '80% acceptability',
90: '90% acceptability',
},
'ComfMod': {
0: 'Relevant Static setpoints for Mexico: 20 for heating and 25 for cooling',
1: 'Oropeza Arid Model Adaptive setpoints when applicable, otherwise Relevant Static setpoints for Mexico',
2: 'Oropeza Arid Model Adaptive setpoints when applicable, otherwise ISO 7730 Static setpoints',
3: 'Oropeza Arid Model Adaptive setpoints when applicable, otherwise Adaptive setpoints horizontally extended',
}
},
18: {
'name': '18 = MEX Oropeza DryTropic',
'CAT': {
80: '80% acceptability',
90: '90% acceptability',
},
'ComfMod': {
0: 'Relevant Static setpoints for Mexico: 20 for heating and 25 for cooling',
1: 'Oropeza DryTropic Model Adaptive setpoints when applicable, otherwise Relevant Static setpoints for Mexico',
2: 'Oropeza DryTropic Model Adaptive setpoints when applicable, otherwise ISO 7730 Static setpoints',
3: 'Oropeza DryTropic Model Adaptive setpoints when applicable, otherwise Adaptive setpoints horizontally extended',
}
},
19: {
'name': '19 = MEX Oropeza Temperate',
'CAT': {
80: '80% acceptability',
90: '90% acceptability',
},
'ComfMod': {
0: 'Relevant Static setpoints for Mexico: 20 for heating and 25 for cooling',
1: 'Oropeza Temperate Model Adaptive setpoints when applicable, otherwise Relevant Static setpoints for Mexico',
2: 'Oropeza Temperate Model Adaptive setpoints when applicable, otherwise ISO 7730 Static setpoints',
3: 'Oropeza Temperate Model Adaptive setpoints when applicable, otherwise Adaptive setpoints horizontally extended',
}
},
20: {
'name': '20 = MEX Oropeza HumTropic',
'CAT': {
80: '80% acceptability',
90: '90% acceptability',
},
'ComfMod': {
0: 'Relevant Static setpoints for Mexico: 20 for heating and 25 for cooling',
1: 'Oropeza HumTropic Model Adaptive setpoints when applicable, otherwise Relevant Static setpoints for Mexico',
2: 'Oropeza HumTropic Model Adaptive setpoints when applicable, otherwise ISO 7730 Static setpoints',
3: 'Oropeza HumTropic Model Adaptive setpoints when applicable, otherwise Adaptive setpoints horizontally extended',
}
},
21: {
'name': '21 = CHL Perez-Fargallo',
'CAT': {
80: '80% acceptability',
90: '90% acceptability',
},
'ComfMod': {
2: 'Perez-Fargallo Model Adaptive setpoints when applicable, otherwise ISO 7730 Static setpoints',
3: 'Perez-Fargallo Model Adaptive setpoints when applicable, otherwise Adaptive setpoints horizontally extended',
}
},
22: {
'name': '22 = INT ISO7730',
'CAT': {
1: 'Cat A: -0.2 < PMV < 0.2; PPD < 6%',
2: 'Cat B: -0.5 < PMV < 0.5; PPD < 10%',
3: 'Cat C: -0.7 < PMV < 0.7; PPD < 15%',
},
'ComfMod': {
0: 'ISO 7730 Static setpoints',
}
},
99: {
'name': '99 = CUSTOM',
'CAT': {
'n/a': 'n/a'
},
'ComfMod': {
3: 'Custom Model Adaptive setpoints when applicable, otherwise Adaptive setpoints horizontally extended',
}
},
}
print('The information you will be required to enter below will be used to generate the customised output IDFs:')
fullComfStandList = list(range(len(CS_CA_CM_list_dict)-1))
fullComfStandList.append(99)
self.ComfStand_List = list(int(num) for num in input(
'Enter the Comfort Standard numbers separated by space (\n'
'0 = ESP CTE;\n'
'1 = INT EN16798-1;\n'
'2 = INT ASHRAE55;\n'
'3 = JPN Rijal;\n'
'4 = CHN GBT50785 Cold;\n'
'5 = CHN GBT50785 HotMild;\n'
'6 = CHN Yang;\n'
'7 = IND IMAC C NV;\n'
'8 = IND IMAC C MM;\n'
'9 = IND IMAC R 7DRM;\n'
'10 = IND IMAC R 30DRM;\n'
'11 = IND Dhaka;\n'
'12 = ROM Udrea;\n'
'13 = AUS Williamson;\n'
'14 = AUS DeDear;\n'
'15 = BRA Rupp NV;\n'
'16 = BRA Rupp AC;\n'
'17 = MEX Oropeza Arid;\n'
'18 = MEX Oropeza DryTropic;\n'
'19 = MEX Oropeza Temperate;\n'
'20 = MEX Oropeza HumTropic;\n'
'21 = CHL Perez-Fargallo;\n'
'22 = INT ISO7730;\n'
'99 = CUSTOM;\n'
'Please refer to the full list of setpoint temperatures at https://htmlpreview.github.io/?https://github.com/dsanchez-garcia/accim/blob/master/docs/source/html_files/full_setpoint_table.html\n'
'): '
).split())
while len(self.ComfStand_List) == 0 or not all(elem in fullComfStandList for elem in self.ComfStand_List):
print(' Comfort Standard numbers are not correct. Please enter the numbers again.')
self.ComfStand_List = list(
int(num) for num in input(" Enter the Comfort Standard numbers separated by space: ").split())
while input(' Are you sure the numbers are correct? [y or [] / n]: ') == 'n':
self.ComfStand_List = list(
int(num) for num in input(" Enter the Comfort Standard numbers separated by space: ").split())
while len(self.ComfStand_List) == 0 or not all(elem in fullComfStandList for elem in self.ComfStand_List):
print(' Comfort Standard numbers are not correct. Please enter the numbers again.')
self.ComfStand_List = list(
int(num) for num in input(" Enter the Comfort Standard numbers separated by space: ").split())
if 99 in self.ComfStand_List:
print('\nYou have requested the use of a custom comfort model. Please enter the following data necessary to build the custom comfort model:')
self.CustAST_m = float(input('\nEnter the m coefficient (slope) of comfort model linear regression (mx+n) (any number greater than 0): '))
while self.CustAST_m < 0:
print(f' The number you entered for CustAST_m is {self.CustAST_m}, which is smaller than 0, and that is not allowed. ')
self.CustAST_m = float(input(' Enter the m coefficient (slope) of comfort model linear regression (mx+n) (any number greater than 0): '))
while input(' Are you sure the number is correct? [y or [] / n]: ') == 'n':
self.CustAST_m = float(input(' Enter the m coefficient (slope) of comfort model linear regression (mx+n) (any number greater than 0): '))
self.CustAST_n = float(input('\nEnter the n coefficient of comfort model linear regression (mx+n): '))
while input(' Are you sure the number is correct? [y or [] / n]: ') == 'n':
self.CustAST_n = float(input(' Enter the n coefficient of comfort model linear regression (mx+n): '))
self.CustAST_AHSToffset = float(input('\nEnter the offset from neutral temperature for the heating setpoint (value will be summed, therefore, it should be negative): '))
while self.CustAST_AHSToffset > 0:
print(f' The number you entered for CustAST_AHSToffset is {self.CustAST_AHSToffset}, which is larger than 0, and that is not allowed. ')
self.CustAST_AHSToffset = float(input(' Enter the offset from neutral temperature for the heating setpoint (value will be summed, therefore, it should be negative): '))
while input(' Are you sure the number is correct? [y or [] / n]: ') == 'n':
self.CustAST_AHSToffset = float(input(' Enter the offset from neutral temperature for the heating setpoint (value will be summed, therefore, it should be negative): '))
self.CustAST_ACSToffset = float(input('\nEnter the offset from neutral temperature for the cooling setpoint (value will be summed, therefore, it should be positive): '))
while self.CustAST_ACSToffset < 0:
print(f' The number you entered for CustAST_ACSToffset is {self.CustAST_ACSToffset}, which is smaller than 0, and that is not allowed. ')
self.CustAST_ACSToffset = float(input(' Enter the offset from neutral temperature for the cooling setpoint (value will be summed, therefore, it should be positive): '))
while input(' Are you sure the number is correct? [y or [] / n]: ') == 'n':
self.CustAST_ACSToffset = float(input(' Enter the offset from neutral temperature for the cooling setpoint (value will be summed, therefore, it should be positive): '))
self.CustAST_ACSTall = float(input('\nEnter the value for the cooling setpoint applicability lower limit (ACSTall): '))
while input(' Are you sure the number is correct? [y or [] / n]: ') == 'n':
self.CustAST_ACSTall = float(input(' Enter the value for the cooling setpoint applicability lower limit (ACSTall): '))
self.CustAST_ACSTaul = float(input('\nEnter the value for the cooling setpoint applicability upper limit (ACSTaul): '))
while input(' Are you sure the number is correct? [y or [] / n]: ') == 'n':
self.CustAST_ACSTaul = float(input(' Enter the value for the cooling setpoint applicability upper limit (ACSTaul): '))
self.CustAST_AHSTall = float(
input('\nEnter the value for the heating setpoint applicability lower limit (ACSTall): '))
while input(' Are you sure the number is correct? [y or [] / n]: ') == 'n':
self.CustAST_AHSTall = float(input(' Enter the value for the heating setpoint applicability lower limit (AHSTall): '))
self.CustAST_AHSTaul = float(
input('\nEnter the value for the heating setpoint applicability upper limit (ACSTall): '))
while input(' Are you sure the number is correct? [y or [] / n]: ') == 'n':
self.CustAST_AHSTaul = float(input(' Enter the value for the heating setpoint applicability upper limit (AHSTaul): '))
else:
self.CustAST_m = 0
self.CustAST_n = 0
self.CustAST_AHSToffset = 0
self.CustAST_ACSToffset = 0
self.CustAST_ACSTall = 0
self.CustAST_ACSTaul = 0
self.CustAST_AHSTall = 0
self.CustAST_AHSTaul = 0
print('\n')
for i in self.ComfStand_List:
print('For the comfort standard ' + CS_CA_CM_data_dict[i]['name'] + ', the available categories you can choose are: ')
for j in CS_CA_CM_data_dict[i]['CAT']:
print(str(j) + ' = ' + CS_CA_CM_data_dict[i]['CAT'][j])
fullCATlist = [1, 2, 3, 80, 85, 90]
availableCATlist = []
for i in self.ComfStand_List:
availableCATlist.extend([j for j in CS_CA_CM_data_dict[i]['CAT'].keys() if j != 'n/a'])
print("Enter the Category numbers separated by space (")
if 1 in availableCATlist:
print("1 = CAT I / CAT A;")
if 2 in availableCATlist:
print("2 = CAT II / CAT B;")
if 3 in availableCATlist:
print("3 = CAT III / CAT C;")
if 80 in availableCATlist:
print("80 = 80% ACCEPT;")
if 85 in availableCATlist:
print("85 = 85% ACCEPT;")
if 90 in availableCATlist:
print("90 = 90% ACCEPT;")
print("Please refer to the full list of setpoint temperatures at https://htmlpreview.github.io/?https://github.com/dsanchez-garcia/accim/blob/master/docs/source/html_files/full_setpoint_table.html")
self.CAT_List = list(int(num) for num in input('):').split())
while len(self.CAT_List) == 0 or not all(elem in fullCATlist for elem in self.CAT_List):
print(' Category numbers are not correct. Please enter the numbers again.')
self.CAT_List = list(int(num) for num in input("Enter the Category numbers separated by space: ").split())
while input(' Are you sure the numbers are correct? [y or [] / n]: ') == 'n':
self.CAT_List = list(int(num) for num in input(" Enter the Category numbers separated by space: ").split())
while len(self.CAT_List) == 0 or not all(elem in fullCATlist for elem in self.CAT_List):
print(' Category numbers are not correct. Please enter the numbers again.')
self.CAT_List = list(int(num) for num in input("Enter the Category numbers separated by space: ").split())
print('\n')
for i in self.ComfStand_List:
print('For the comfort standard ' + CS_CA_CM_data_dict[i]['name'] + ', the available ComfMods you can choose are: ')
for j in CS_CA_CM_data_dict[i]['ComfMod']:
print(str(j) + ' = ' + CS_CA_CM_data_dict[i]['ComfMod'][j])
fullComfModList = [0, 0.1, 0.2, 0.3, 0.4, 0.5, 1, 1.1, 1.2, 1.3, 1.4, 1.5, 2, 3]
self.ComfMod_List = list(float(num) for num in input(
"Enter the Comfort Mode numbers separated by space (\n"
"0 or 0.X = Static;\n"
"1, 1.X, 2, 3 = Adaptive;\n"
"Please refer to the full list of setpoint temperatures at https://htmlpreview.github.io/?https://github.com/dsanchez-garcia/accim/blob/master/docs/source/html_files/full_setpoint_table.html\n"
"): ").split())
while len(self.ComfMod_List) == 0 or not all(elem in fullComfModList for elem in self.ComfMod_List):
print(' Comfort Mode numbers are not correct. Please enter the numbers again.')
self.ComfMod_List = list(
float(num) for num in input(" Enter the Comfort Mode numbers separated by space: ").split())
while input(' Are you sure the numbers are correct? [y or [] / n]: ') == 'n':
self.ComfMod_List = list(
float(num) for num in input(" Enter the Comfort Mode numbers separated by space: ").split())
while len(self.ComfMod_List) == 0 or not all(elem in fullComfModList for elem in self.ComfMod_List):
print(' Comfort Mode numbers are not correct. Please enter the numbers again.')
self.ComfMod_List = list(
float(num) for num in input(" Enter the Comfort Mode numbers separated by space: ").split())
try:
self.SetpointAcc = float(input('\nEnter the setpoint accuracy number (any number greater than 0, if omitted will be 100): '))
except ValueError:
self.SetpointAcc = 100
while self.SetpointAcc < 0:
print(' The setpoint accuracy number is not correct. It must be a number greater than 0. Please enter the number again.')
self.SetpointAcc = float(input(' Enter the setpoint accuracy number (any number greater than 0, if omitted will be 100): '))
while input(' Are you sure the number is correct? [y or [] / n]: ') == 'n':
try:
self.SetpointAcc = float(input(' Enter the setpoint accuracy number (any number greater than 0, if omitted will be 100): '))
except ValueError:
self.SetpointAcc = 100
while self.SetpointAcc < 0:
print(' The setpoint accuracy number is not correct. It must be a number greater than 0. Please enter the number again.')
try:
self.SetpointAcc = float(input(' Enter the setpoint accuracy number (any number greater than 0, if omitted will be 100): '))
except ValueError:
self.SetpointAcc = 100
try:
self.CATcoolOffset = float(input('\nEnter the number for the CAT cooling offset modifier (value will be summed to the ACST, if omitted will be 0): '))
except ValueError:
self.CATcoolOffset = 0.0
while input(' Are you sure the number is correct? [y or [] / n]: ') == 'n':
try:
self.CATcoolOffset = float(input('\n Enter the number for the CAT cooling offset modifier (value will be summed to the ACST, if omitted will be 0): '))
except ValueError:
self.CATcoolOffset = 0.0
try:
self.CATheatOffset = float(input('\nEnter the number for the CAT heating offset modifier (value will be summed to the AHST, if omitted will be 0): '))
except ValueError:
self.CATheatOffset = 0.0
while input(' Are you sure the number is correct? [y or [] / n]: ') == 'n':
try:
self.CATheatOffset = float(input('\n Enter the number for the CAT heating offset modifier (value will be summed to the AHST, if omitted will be 0): '))
except ValueError:
self.CATheatOffset = 0.0
while self.CATheatOffset > self.CATcoolOffset:
print(f' You have entered a CATheatOffset ({self.CATheatOffset}) larger than the CATcoolOffset ({self.CATcoolOffset}), '
f'which will probably lead to an error in the EnergyPlus simulation.')
try:
self.CATheatOffset = float(input('\n Enter the number for the CAT heating offset modifier (value will be summed to the AHST, if omitted will be 0): '))
except ValueError:
self.CATheatOffset = 0.0
while input(' Are you sure the number is correct? [y or [] / n]: ') == 'n':
try:
self.CATheatOffset = float(input('\n Enter the number for the CAT heating offset modifier (value will be summed to the AHST, if omitted will be 0): '))
except ValueError:
self.CATheatOffset = 0.0
# self.CATheatOffset = float(input('\nEnter the number for the CAT heating offset modifier (value will be summed to the AHST): '))
# while input(' Are you sure the number is correct? [y or [] / n]: ') == 'n':
# self.CATheatOffset = float(input(' Enter the number for the CAT heating offset modifier (value will be summed to the AHST): '))
if (any(i in [1, 2] for i in self.ComfStand_List) and 0 in self.ComfMod_List) or 22 in self.ComfStand_List:
self.CoolSeasonStart = list(
int(num)
for num
in input("\nEnter the start of the cooling season in numeric date format dd/mm or the day of the year: ").split('/')
)
if len(self.CoolSeasonStart) == 1:
day_of_year = self.CoolSeasonStart[0]
elif len(self.CoolSeasonStart) == 2:
from datetime import date
day_of_year = date(2007, self.CoolSeasonStart[1], self.CoolSeasonStart[0]).timetuple().tm_yday
while day_of_year < 1 or day_of_year > 365:
print(' The start for cooling season is not correct. It must be a numeric date format dd/mm or the day of the year. Please enter the value again.')
self.CoolSeasonStart = list(
int(num)
for num
in input("Enter the start of the cooling season in numeric date format dd/mm or the day of the year: ").split('/')
)
while input(' Are you sure the number is correct? [y or [] / n]: ') == 'n':
self.CoolSeasonStart = list(
int(num)
for num
in input("Enter the start of the cooling season in numeric date format dd/mm or the day of the year: ").split('/')
)
if len(self.CoolSeasonStart) == 1:
day_of_year = self.CoolSeasonStart[0]
elif len(self.CoolSeasonStart) == 2:
day_of_year = date(2007, self.CoolSeasonStart[1], self.CoolSeasonStart[0]).timetuple().tm_yday
while day_of_year < 1 or day_of_year > 365:
print(' The start for cooling season is not correct. It must be a numeric date format dd/mm or the day of the year. Please enter the value again.')
self.CoolSeasonStart = list(
int(num)
for num
in input("Enter the start of the cooling season in numeric date format dd/mm or the day of the year: ").split('/')
)
if len(self.CoolSeasonStart) == 1:
day_of_year = self.CoolSeasonStart[0]
elif len(self.CoolSeasonStart) == 2:
day_of_year = date(2007, self.CoolSeasonStart[1], self.CoolSeasonStart[0]).timetuple().tm_yday
self.CoolSeasonStart = day_of_year
self.CoolSeasonEnd = list(
int(num)
for num
in input("\nEnter the end of the cooling season in numeric date format dd/mm or the day of the year: ").split('/')
)
if len(self.CoolSeasonEnd) == 1:
day_of_year = self.CoolSeasonEnd[0]
elif len(self.CoolSeasonEnd) == 2:
from datetime import date
day_of_year = date(2007, self.CoolSeasonEnd[1], self.CoolSeasonEnd[0]).timetuple().tm_yday
while day_of_year < 1 or day_of_year > 365:
print(' The end for cooling season is not correct. It must be a numeric date format dd/mm or the day of the year. Please enter the value again.')
self.CoolSeasonEnd = list(
int(num)
for num
in input("Enter the end of the cooling season in numeric date format dd/mm or the day of the year: ").split('/')
)
while input(' Are you sure the number is correct? [y or [] / n]: ') == 'n':
self.CoolSeasonEnd = list(
int(num)
for num
in input("Enter the end of the cooling season in numeric date format dd/mm or the day of the year: ").split('/')
)
if len(self.CoolSeasonEnd) == 1:
day_of_year = self.CoolSeasonEnd[0]
elif len(self.CoolSeasonEnd) == 2:
day_of_year = date(2007, self.CoolSeasonEnd[1], self.CoolSeasonEnd[0]).timetuple().tm_yday
while day_of_year < 1 or day_of_year > 365:
print(' The end for cooling season is not correct. It must be a numeric date format dd/mm or the day of the year. Please enter the value again.')
self.CoolSeasonEnd = list(
int(num)
for num
in input("Enter the end of the cooling season in numeric date format dd/mm or the day of the year: ").split('/')
)
if len(self.CoolSeasonEnd) == 1:
day_of_year = self.CoolSeasonEnd[0]
elif len(self.CoolSeasonEnd) == 2:
day_of_year = date(2007, self.CoolSeasonEnd[1], self.CoolSeasonEnd[0]).timetuple().tm_yday
self.CoolSeasonEnd = day_of_year
else:
self.CoolSeasonStart = 121
self.CoolSeasonEnd = 274
if 'mm' in ScriptType.lower():
fullHVACmodeList = [0, 1, 2]
self.HVACmode_List = list(int(num) for num in input(
"\nEnter the HVAC Mode numbers separated by space (\n"
"0 = Fully Air-conditioned;\n"
"1 = Naturally ventilated;\n"
"2 = Mixed Mode;\n"
"): ").split())
while len(self.HVACmode_List) == 0 or not all(elem in fullHVACmodeList for elem in self.HVACmode_List):
print(' HVACmode numbers are not correct. Please enter the numbers again.')
self.HVACmode_List = list(
int(num) for num in input(" Enter the HVACmode numbers separated by space: ").split())
while input(' Are you sure the numbers are correct? [y or [] / n]: ') == 'n':
self.HVACmode_List = list(
int(num) for num in input(" Enter the HVACmode numbers separated by space: ").split())
while len(self.HVACmode_List) == 0 or not all(elem in fullHVACmodeList for elem in self.HVACmode_List):
print(' HVACmode numbers are not correct. Please enter the numbers again.')
self.HVACmode_List = list(
int(num) for num in input(" Enter the HVACmode numbers separated by space: ").split())
fullVentCtrlList = [0, 1, 2, 3]
self.VentCtrl_List = list(int(num) for num in input(
"\nEnter the Ventilation Control numbers separated by space (\n"
"If HVACmode = 1:\n"
" 0 = Ventilates above neutral temperature;\n"
" 1 = Ventilates above upper comfort limit;\n"
"If HVACmode = 2:\n"
" 0 = Ventilates above neutral temperature and fully opens doors and windows;\n"
" 1 = Ventilates above lower comfort limit and fully opens doors and windows;\n"
" 2 = Ventilates above neutral temperature and opens doors and windows based on the customised venting opening factor;\n"
" 3 = Ventilates above lower comfort limit and opens doors and windows based on the customised venting opening factor;\n"
"): ").split())
while len(self.VentCtrl_List) == 0 or not all(elem in fullVentCtrlList for elem in self.VentCtrl_List):
print(' Ventilation Control numbers are not correct. Please enter the numbers again.')
self.VentCtrl_List = list(
int(num) for num in input(" Enter the Ventilation Control numbers separated by space: ").split())
while input(' Are you sure the numbers are correct? [y or [] / n]: ') == 'n':
self.VentCtrl_List = list(
int(num) for num in input(" Enter the Ventilation Control numbers separated by space: ").split())
while len(self.VentCtrl_List) == 0 or not all(elem in fullVentCtrlList for elem in self.VentCtrl_List):
print(' Ventilation Control numbers are not correct. Please enter the numbers again.')
self.VentCtrl_List = list(int(num) for num in input(
" Enter the Ventilation Control numbers separated by space: ").split())
if any([i in self.VentCtrl_List for i in [2, 3]]):
self.MaxTempDiffVOF = float(input('Enter the maximum temperature difference number for Ventilation Opening Factor (any number larger than 0): '))
while self.MaxTempDiffVOF <= 0:
print(' The maximum temperature difference number is not correct. It must be a number larger than 0. Please enter the number again.')
self.MaxTempDiffVOF = float(input(' Enter the maximum temperature difference number for Ventilation Opening Factor (any number larger than 0): '))
while input(' Are you sure the number is correct? [y or [] / n]: ') == 'n':
self.MaxTempDiffVOF = float(input(' Enter the maximum temperature difference number for Ventilation Opening Factor (any number larger than 0): '))
while self.MaxTempDiffVOF <= 0:
print(' The maximum temperature difference number is not correct. It must be a number larger than 0. Please enter the number again.')
self.MaxTempDiffVOF = float(input(' Enter the maximum temperature difference number for Ventilation Opening Factor (any number larger than 0): '))
self.MinTempDiffVOF = float(input('Enter the minimum temperature difference number for Ventilation Opening Factor (any number larger than 0 and smaller than the maximum temperature difference number): '))
while self.MinTempDiffVOF <= 0:
print(' The minimum temperature difference number is not correct. It must be a number larger than 0 and smaller than the maximum temperature difference number. Please enter the number again.')
self.MinTempDiffVOF = float(input(' Enter the minimum temperature difference number for Ventilation Opening Factor (any number larger than 0 and smaller than the maximum temperature difference number): '))
while input(' Are you sure the number is correct? [y or [] / n]: ') == 'n':
self.MinTempDiffVOF = float(input(' Enter the minimum temperature difference number for Ventilation Opening Factor (any number larger than 0 and smaller than the maximum temperature difference number): '))
while self.MinTempDiffVOF <= 0:
print(' The minimum temperature difference number is not correct. It must be a number larger than 0 and smaller than the maximum temperature difference number. Please enter the number again.')
self.MinTempDiffVOF = float(input(' Enter the minimum temperature difference number for Ventilation Opening Factor (any number larger than 0 and smaller than the maximum temperature difference number): '))
while self.MinTempDiffVOF >= self.MaxTempDiffVOF:
print('The minimum temperature difference number you entered is larger than or equal to the maximum temperature difference number. Please enter both maximum and minimum temperature difference numbers again.')
self.MaxTempDiffVOF = float(input('Enter the maximum temperature difference number for Ventilation Opening Factor (any number larger than 0): '))
while self.MaxTempDiffVOF <= 0:
print(' The maximum temperature difference number is not correct. It must be a number larger than 0. Please enter the number again.')
self.MaxTempDiffVOF = float(input(' Enter the maximum temperature difference number for Ventilation Opening Factor (any number larger than 0): '))
while input(' Are you sure the number is correct? [y or [] / n]: ') == 'n':
self.MaxTempDiffVOF = float(input(' Enter the maximum temperature difference number for Ventilation Opening Factor (any number larger than 0): '))
while self.MaxTempDiffVOF <= 0:
print(' The maximum temperature difference number is not correct. It must be a number larger than 0. Please enter the number again.')
self.MaxTempDiffVOF = float(input(' Enter the maximum temperature difference number for Ventilation Opening Factor (any number larger than 0): '))
self.MinTempDiffVOF = float(input('Enter the minimum temperature difference number for Ventilation Opening Factor (any number larger than 0 and smaller than the maximum temperature difference number): '))
while self.MinTempDiffVOF <= 0:
print(' The minimum temperature difference number is not correct. It must be a number larger than 0 and smaller than the maximum temperature difference number. Please enter the number again.')
self.MinTempDiffVOF = float(input(' Enter the minimum temperature difference number for Ventilation Opening Factor (any number larger than 0 and smaller than the maximum temperature difference number): '))
while input(' Are you sure the number is correct? [y or [] / n]: ') == 'n':
self.MinTempDiffVOF = float(input(' Enter the minimum temperature difference number for Ventilation Opening Factor (any number larger than 0 and smaller than the maximum temperature difference number): '))
while self.MinTempDiffVOF <= 0:
print(' The minimum temperature difference number is not correct. It must be a number larger than 0 and smaller than the maximum temperature difference number. Please enter the number again.')
self.MinTempDiffVOF = float(input(' Enter the minimum temperature difference number for Ventilation Opening Factor (any number larger than 0 and smaller than the maximum temperature difference number): '))
self.MultiplierVOF = float(input('Enter the multiplier number for Ventilation Opening Factor (any number between 0 and 1): '))
while self.MultiplierVOF < 0 or self.MultiplierVOF > 1:
print(' The multiplier number is not correct. It must be a number between 0 and 1. Please enter the number again.')
self.MultiplierVOF = float(input(' Enter the multiplier number for modulating the Ventilation Opening Factor (any number between 0 and 1): '))
while input(' Are you sure the number is correct? [y or [] / n]: ') == 'n':
self.MultiplierVOF = float(input(' Enter the multiplier number for modulating the Ventilation Opening Factor (any number between 0 and 1): '))
while self.MultiplierVOF < 0 or self.MultiplierVOF > 1:
print(' The multiplier number is not correct. It must be a number between 0 and 1. Please enter the number again.')
self.MultiplierVOF = float(input(' Enter the multiplier number for modulating the Ventilation Opening Factor (any number between 0 and 1): '))
else:
self.MaxTempDiffVOF = 6
self.MinTempDiffVOF = 1
self.MultiplierVOF = 0.25
self.VSToffset_List = list(float(num) for num in input(
"\nEnter the VSToffset numbers separated by space (if omitted, will be 0): ").split())
if len(self.VSToffset_List) == 0:
self.VSToffset_List = [float(0)]
while input(' Are you sure the numbers are correct? [y or [] / n]: ') == 'n':
self.VSToffset_List = list(float(num) for num in input(
" Enter the VSToffset numbers separated by space (if omitted, will be 0): ").split())
if len(self.VSToffset_List) == 0:
self.VSToffset_List = [float(0)]
self.MinOToffset_List = list(float(num) for num in input(
"\nEnter the MinOToffset numbers separated by space (if omitted, will be 50): ").split())
if len(self.MinOToffset_List) == 0:
self.MinOToffset_List = [float(50)]
while input(' Are you sure the numbers are correct? [y or [] / n]: ') == 'n':
self.MinOToffset_List = list(float(num) for num in input(
" Enter the MinOToffset numbers separated by space (if omitted, will be 50): ").split())
if len(self.MinOToffset_List) == 0:
self.MinOToffset_List = [float(50)]
self.MaxWindSpeed_List = list(float(num) for num in input(
"\nEnter the MaxWindSpeed numbers separated by space (if omitted, will be 50): ").split())
if len(self.MaxWindSpeed_List) == 0:
self.MaxWindSpeed_List = [float(50)]
while input(' Are you sure the numbers are correct? [y or [] / n]: ') == 'n':
self.MaxWindSpeed_List = list(float(num) for num in input(
" Enter the MaxWindSpeed numbers separated by space (if omitted, will be 50): ").split())
if len(self.MaxWindSpeed_List) == 0:
self.MaxWindSpeed_List = [float(50)]
elif 'ac' in ScriptType.lower():
self.HVACmode_List = [0]
self.VentCtrl_List = [0]
self.MaxTempDiffVOF = 1
self.MinTempDiffVOF = 0
self.MultiplierVOF = 0
self.VSToffset_List = [0]
self.MinOToffset_List = [0]
self.MaxWindSpeed_List = [0]
try:
self.ASTtol_value_from = float(input('\nEnter the ASTtol value from (if omitted, will be 0.1): '))
except ValueError:
self.ASTtol_value_from = float(0.1)
while input(' Are you sure the numbers are correct? [y or [] / n]: ') == 'n':
try:
self.ASTtol_value_from = float(input(' Enter the ASTtol value from (if omitted, will be 0.1): '))
except ValueError:
self.ASTtol_value_from = float(0.1)
try:
self.ASTtol_value_to_input = float(input('Enter the ASTtol value to (if omitted, will be 0.1): '))
except ValueError:
self.ASTtol_value_to_input = float(0.1)
while input(' Are you sure the numbers are correct? [y or [] / n]: ') == 'n':
try:
self.ASTtol_value_to_input = float(input(' Enter the ASTtol value to (if omitted, will be 0.1): '))
except ValueError:
self.ASTtol_value_to_input = float(0.1)
try:
self.ASTtol_value_steps = float(input('Enter the ASTtol value steps (if omitted, will be 0.1): '))
except ValueError:
self.ASTtol_value_steps = float(0.1)
while input(' Are you sure the numbers are correct? [y or [] / n]: ') == 'n':
try:
self.ASTtol_value_steps = float(input(' Enter the ASTtol value steps (if omitted, will be 0.1): '))
except ValueError:
self.ASTtol_value_steps = float(0.1)
self.user_input_arguments = {
'ComfStand': self.ComfStand_List,
'CAT': self.CAT_List,
'CATcoolOffset': self.CATcoolOffset,
'CATheatOffset': self.CATheatOffset,
'ComfMod': self.ComfMod_List,
'SetpointAcc': self.SetpointAcc,
'CustAST_ACSTaul': self.CustAST_ACSTaul,
'CustAST_ACSTall': self.CustAST_ACSTall,
'CustAST_AHSTaul': self.CustAST_AHSTaul,
'CustAST_AHSTall': self.CustAST_AHSTall,
'CustAST_m': self.CustAST_m,
'CustAST_n': self.CustAST_n,
'CustAST_ACSToffset': self.CustAST_ACSToffset,
'CustAST_AHSToffset': self.CustAST_AHSToffset,
'CoolSeasonStart': self.CoolSeasonStart,
'CoolSeasonEnd': self.CoolSeasonEnd,
'HVACmode': self.HVACmode_List,
'VentCtrl': self.VentCtrl_List,
'MaxTempDiffVOF': self.MaxTempDiffVOF,
'MinTempDiffVOF': self.MinTempDiffVOF,
'MultiplierVOF': self.MultiplierVOF,
'VSToffset': self.VSToffset_List,
'MinOToffset': self.MinOToffset_List,
'MaxWindSpeed': self.MaxWindSpeed_List,
'ASTtol_start': self.ASTtol_value_from,
'ASTtol_end_input': self.ASTtol_value_to_input,
'ASTtol_steps': self.ASTtol_value_steps,
}
[docs]
def genIDF(self,
ScriptType: str = None,
TempCtrl: str = None,
ComfStand: list = None,
CAT: list = None,
CATcoolOffset: float = 0,
CATheatOffset: float = 0,
ComfMod: list = None,
SetpointAcc: float = 10000,
CustAST_ACSTaul: float = 0,
CustAST_ACSTall: float = 0,
CustAST_AHSTaul: float = 0,
CustAST_AHSTall: float = 0,
CustAST_m: float = 0,
CustAST_n: float = 0,
CustAST_ACSToffset: float = 0,
CustAST_AHSToffset: float = 0,
CoolSeasonStart=121,
CoolSeasonEnd=274,
HVACmode: list = None,
VentCtrl: list = None,
MaxTempDiffVOF: float = 6,
MinTempDiffVOF: float = 1,
MultiplierVOF: float = 0.25,
VSToffset: list = [0],
MinOToffset: list = [50],
MaxWindSpeed: list = [50],
ASTtol_start: float = 0.1,
ASTtol_end_input: float = 0.1,
ASTtol_steps: float = 0.1,
NameSuffix: str = '',
verboseMode: bool = True,
confirmGen: bool = None
):
"""Generate IDFs.
:param self: Used as a method for class ``accim.sim.accim_Main.accimJob``
:param ScriptType: Inherited from class ``accim.sim.accis.addAccis``
:param TempCtrl: Inherited from class ``accim.sim.accis.addAccis``
:param ComfStand: Inherited from class ``accim.sim.accis.addAccis``
:param CustAST_m: Inherited from class ``accim.sim.accis.addAccis``
:param CustAST_n: Inherited from class ``accim.sim.accis.addAccis``
:param CustAST_ACSToffset: Inherited from class ``accim.sim.accis.addAccis``
:param CustAST_AHSToffset: Inherited from class ``accim.sim.accis.addAccis``
:param CustAST_ACSTall: Inherited from class ``accim.sim.accis.addAccis``
:param CustAST_ACSTaul: Inherited from class ``accim.sim.accis.addAccis``
:param CustAST_AHSTall: Inherited from class ``accim.sim.accis.addAccis``
:param CustAST_AHSTaul: Inherited from class ``accim.sim.accis.addAccis``
:param CAT: Inherited from class ``accim.sim.accis.addAccis``
:param CATcoolOffset: Inherited from class ``accim.sim.accis.addAccis``
:param CATheatOffset: Inherited from class ``accim.sim.accis.addAccis``
:param ComfMod: Inherited from :class:``accim.sim.accis.addAccis``
:param SetpointAcc: Inherited from :class:``accim.sim.accis.addAccis``
:param CoolSeasonStart: Inherited from :class:``accim.sim.accis.addAccis``
:param CoolSeasonEnd: Inherited from :class:``accim.sim.accis.addAccis``
:param HVACmode: Inherited from :class:``accim.sim.accis.addAccis``
:param VentCtrl: Inherited from :class:``accim.sim.accis.addAccis``
:param MaxTempDiffVOF: Inherited from :class:``accim.sim.accis.addAccis``
:param MinTempDiffVOF: Inherited from :class:``accim.sim.accis.addAccis``
:param MultiplierVOF: Inherited from :class:``accim.sim.accis.addAccis``
:param VSToffset: Inherited from :class:``accim.sim.accis.addAccis``
:param MinOToffset: Inherited from :class:``accim.sim.accis.addAccis``
:param MaxWindSpeed: Inherited from :class:``accim.sim.accis.addAccis``
:param ASTtol_start: Inherited from :class:``accim.sim.accis.addAccis``
:param ASTtol_end_input: Inherited from :class:``accim.sim.accis.addAccis``
:param ASTtol_steps: Inherited from :class:``accim.sim.accis.addAccis``
:param NameSuffix: Inherited from :class:``accim.sim.accis.addAccis``
:param verboseMode: Inherited from :class:``accim.sim.accis.addAccis``
:param confirmGen: Inherited from :class:``accim.sim.accis.addAccis``
"""
import os
from os import listdir
import numpy
from eppy import modeleditor
from eppy.modeleditor import IDF
from besos.eppy_funcs import get_building
# import time
# from tqdm import tqdm
arguments = (ComfStand is None,
CAT is None,
CATcoolOffset == 0,
CATheatOffset == 0,
ComfMod is None,
SetpointAcc == 10000,
CustAST_ACSTaul == 0,
CustAST_ACSTall == 0,
CustAST_AHSTaul == 0,
CustAST_AHSTall == 0,
CustAST_m == 0,
CustAST_n == 0,
CustAST_ACSToffset == 0,
CustAST_AHSToffset == 0,
CoolSeasonStart == 121,
CoolSeasonEnd == 274,
HVACmode is None,
VentCtrl is None,
MaxTempDiffVOF == 6,
MinTempDiffVOF == 1,
MultiplierVOF == 0.25,
VSToffset == [0],
MinOToffset == [50],
MaxWindSpeed == [50],
ASTtol_start == 0.1,
ASTtol_end_input == 0.1,
ASTtol_steps == 0.1)
if all(arguments):
self.ASTtol_value_to = self.ASTtol_value_to_input + self.ASTtol_value_steps
else:
ASTtol_end = ASTtol_end_input + ASTtol_steps
if all(arguments):
self.ASTtol_value_from = round(self.ASTtol_value_from, 2)
self.ASTtol_value_to = round(self.ASTtol_value_to, 2)
self.ASTtol_value_steps = round(self.ASTtol_value_steps, 2)
else:
self.ComfStand_List = ComfStand
self.CAT_List = CAT
self.ComfMod_List = ComfMod
self.SetpointAcc = SetpointAcc
self.CATcoolOffset = CATcoolOffset
self.CATheatOffset = CATheatOffset
self.CustAST_ACSTaul = CustAST_ACSTaul
self.CustAST_ACSTall = CustAST_ACSTall
self.CustAST_AHSTaul = CustAST_AHSTaul
self.CustAST_AHSTall = CustAST_AHSTall
self.CustAST_m = CustAST_m
self.CustAST_n = CustAST_n
self.CustAST_ACSToffset = CustAST_ACSToffset
self.CustAST_AHSToffset = CustAST_AHSToffset
if type(CoolSeasonStart) is str:
CoolSeasonStart = list(int(num) for num in CoolSeasonStart.split('/'))
from datetime import date
day_of_year = date(2007, CoolSeasonStart[1], CoolSeasonStart[0]).timetuple().tm_yday
elif type(CoolSeasonStart) is int:
day_of_year = CoolSeasonStart
self.CoolSeasonStart = day_of_year
# CoolSeasonEnd = list(int(num) for num in CoolSeasonEnd.split('/'))
# if len(CoolSeasonEnd) == 1:
# day_of_year = CoolSeasonEnd[0]
# elif len(CoolSeasonEnd) == 2:
# from datetime import date
# day_of_year = date(2007, CoolSeasonEnd[1], CoolSeasonEnd[0]).timetuple().tm_yday
# self.CoolSeasonEnd = day_of_year
if type(CoolSeasonEnd) is str:
CoolSeasonEnd = list(int(num) for num in CoolSeasonEnd.split('/'))
from datetime import date
day_of_year = date(2007, CoolSeasonEnd[1], CoolSeasonEnd[0]).timetuple().tm_yday
elif type(CoolSeasonEnd) is int:
day_of_year = CoolSeasonEnd
self.CoolSeasonEnd = day_of_year
self.HVACmode_List = HVACmode
self.VentCtrl_List = VentCtrl
self.MaxTempDiffVOF = MaxTempDiffVOF,
self.MinTempDiffVOF = MinTempDiffVOF,
self.MultiplierVOF = MultiplierVOF,
self.VSToffset_List = VSToffset
self.MinOToffset_List = MinOToffset
self.MaxWindSpeed_List = MaxWindSpeed
self.ASTtol_value_from = round(ASTtol_start, 2)
self.ASTtol_value_to = round(ASTtol_end, 2)
self.ASTtol_value_steps = round(ASTtol_steps, 2)
if 'ac' in ScriptType.lower():
self.HVACmode_List = [0]
self.VentCtrl_List = [0]
self.MaxTempDiffVOF = 1,
self.MinTempDiffVOF = 0,
self.MultiplierVOF = 0,
self.VSToffset_List = [0]
self.MinOToffset_List = [0]
self.MaxWindSpeed_List = [0]
if any([i in self.VentCtrl_List for i in [2, 3]]):
if type(self.MaxTempDiffVOF) is tuple:
self.MaxTempDiffVOF = self.MaxTempDiffVOF[0]
if type(self.MinTempDiffVOF) is tuple:
self.MinTempDiffVOF = self.MinTempDiffVOF[0]
if type(self.MultiplierVOF) is tuple:
self.MultiplierVOF = self.MultiplierVOF[0]
self.VSToffset_List = [float(i) for i in self.VSToffset_List]
self.MinOToffset_List = [float(i) for i in self.MinOToffset_List]
self.MaxWindSpeed_List = [float(i) for i in self.MaxWindSpeed_List]
if NameSuffix == '':
suffix = '[NS_X'
else:
suffix = '[NS_' + NameSuffix
filelist_pymod = ([file for file in listdir() if file.endswith('_pymod.idf')])
filelist_pymod = ([file.split('.idf')[0] for file in filelist_pymod])
# print(filelist_pymod)
# Characters not admitted: & ^ , = % " / \ : * ? " < > |
ComfStand_dict = {
0: '[CS_ESP CTE',
1: '[CS_INT EN16798',
2: '[CS_INT ASHRAE55',
3: '[CS_JPN Rijal',
4: '[CS_CHN GBT50785 Cold',
5: '[CS_CHN GBT50785 HotMild',
6: '[CS_CHN Yang',
7: '[CS_IND IMAC C NV',
8: '[CS_IND IMAC C MM',
9: '[CS_IND IMAC R 7DRM',
10: '[CS_IND IMAC R 30DRM',
11: '[CS_IND Dhaka',
12: '[CS_ROU Udrea',
13: '[CS_AUS Williamson',
14: '[CS_AUS DeDear',
15: '[CS_BRA Rupp NV',
16: '[CS_BRA Rupp AC',
17: '[CS_MEX Oropeza Arid',
18: '[CS_MEX Oropeza DryTropic',
19: '[CS_MEX Oropeza Temperate',
20: '[CS_MEX Oropeza HumTropic',
21: '[CS_CHL Perez-Fargallo',
22: '[CS_INT ISO7730',
99: '[CS_CUSTOM',
}
outputlist = []
for file in filelist_pymod:
filename = file.replace('_pymod', '')
if TempCtrl.lower() == 'temp' or TempCtrl.lower() == 'temperature':
for ComfStand_value in self.ComfStand_List:
if ComfStand_value == 0:
for HVACmode_value in self.HVACmode_List:
if HVACmode_value == 0:
for ASTtol_value in numpy.arange(self.ASTtol_value_from, self.ASTtol_value_to,
self.ASTtol_value_steps):
outputname = (
filename
+ ComfStand_dict[ComfStand_value]
+ '[CA_X'
+ '[CM_X'
+ '[HM_' + repr(HVACmode_value)
+ '[VC_X'
+ '[VO_X'
+ '[MT_X'
+ '[MW_X'
+ '[AT_' + repr(round(ASTtol_value, 2))
+ suffix
+ '.idf'
)
outputlist.append(outputname)
else:
for VentCtrl_value in self.VentCtrl_List:
if HVACmode_value == 1 and VentCtrl_value == 2:
continue
elif HVACmode_value == 1 and VentCtrl_value == 3:
continue
else:
for VSToffset_value in self.VSToffset_List:
for MinOToffset_value in self.MinOToffset_List:
for MaxWindSpeed_value in self.MaxWindSpeed_List:
for ASTtol_value in numpy.arange(self.ASTtol_value_from,
self.ASTtol_value_to,
self.ASTtol_value_steps):
outputname = (
filename
+ ComfStand_dict[ComfStand_value]
+ '[CA_X'
+ '[CM_X'
+ '[HM_' + repr(HVACmode_value)
+ '[VC_' + repr(VentCtrl_value)
+ '[VO_' + repr(VSToffset_value)
+ '[MT_' + repr(MinOToffset_value)
+ '[MW_' + repr(MaxWindSpeed_value)
+ '[AT_' + repr(round(ASTtol_value, 2))
+ suffix
+ '.idf'
)
outputlist.append(outputname)
elif ComfStand_value in [1, 4, 5, 22]:
for CAT_value in self.CAT_List:
if ComfStand_value in [1, 22] and CAT_value not in range(0, 4):
continue
elif ComfStand_value in [4, 5] and CAT_value not in [1, 2]:
continue
else:
for ComfMod_value in self.ComfMod_List:
if ComfStand_value not in [13, 14] and ComfMod_value in [0.1, 0.2, 0.3, 0.4, 0.5, 1.1, 1.2, 1.3, 1.4, 1.5]:
continue
elif ComfStand_value == 22 and ComfMod_value != 0:
continue
else:
for HVACmode_value in self.HVACmode_List:
if HVACmode_value == 0:
for ASTtol_value in numpy.arange(self.ASTtol_value_from, self.ASTtol_value_to,
self.ASTtol_value_steps):
outputname = (
filename
+ ComfStand_dict[ComfStand_value]
+ '[CA_' + repr(CAT_value)
+ '[CM_' + repr(ComfMod_value)
+ '[HM_' + repr(HVACmode_value)
+ '[VC_X'
+ '[VO_X'
+ '[MT_X'
+ '[MW_X'
+ '[AT_' + repr(round(ASTtol_value, 2))
+ suffix
+ '.idf'
)
outputlist.append(outputname)
else:
for VentCtrl_value in self.VentCtrl_List:
if HVACmode_value == 1 and VentCtrl_value == 2:
continue
elif HVACmode_value == 1 and VentCtrl_value == 3:
continue
else:
for VSToffset_value in self.VSToffset_List:
for MinOToffset_value in self.MinOToffset_List:
for MaxWindSpeed_value in self.MaxWindSpeed_List:
for ASTtol_value in numpy.arange(self.ASTtol_value_from,
self.ASTtol_value_to,
self.ASTtol_value_steps):
outputname = (
filename
+ ComfStand_dict[ComfStand_value]
+ '[CA_' + repr(CAT_value)
+ '[CM_' + repr(ComfMod_value)
+ '[HM_' + repr(HVACmode_value)
+ '[VC_' + repr(VentCtrl_value)
+ '[VO_' + repr(VSToffset_value)
+ '[MT_' + repr(MinOToffset_value)
+ '[MW_' + repr(MaxWindSpeed_value)
+ '[AT_' + repr(round(ASTtol_value, 2))
+ suffix
+ '.idf'
)
outputlist.append(outputname)
elif ComfStand_value in [2, 3, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 99]:
for CAT_value in self.CAT_List:
if ComfStand_value in [2, 3, 6, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
20, 21] and CAT_value not in range(80, 91, 10):
continue
elif ComfStand_value in [7, 8] and CAT_value not in range(80, 91, 5):
continue
else:
for ComfMod_value in self.ComfMod_List:
if ComfStand_value in [13, 14] and ComfMod_value in [0, 1]:
continue
elif ComfStand_value not in [13, 14] and ComfMod_value in [0.1, 0.2, 0.3, 0.4, 0.5, 1.1, 1.2, 1.3, 1.4, 1.5]:
continue
elif ComfStand_value == 21 and ComfMod_value not in [2, 3]:
continue
else:
for HVACmode_value in self.HVACmode_List:
if HVACmode_value == 0:
for ASTtol_value in numpy.arange(self.ASTtol_value_from, self.ASTtol_value_to,
self.ASTtol_value_steps):
outputname = (
filename
+ ComfStand_dict[ComfStand_value]
+ '[CA_' + repr(CAT_value)
+ '[CM_' + repr(ComfMod_value)
+ '[HM_' + repr(HVACmode_value)
+ '[VC_X'
+ '[VO_X'
+ '[MT_X'
+ '[MW_X'
+ '[AT_' + repr(round(ASTtol_value, 2))
+ suffix
+ '.idf'
)
outputlist.append(outputname)
else:
for VentCtrl_value in self.VentCtrl_List:
if HVACmode_value == 1 and VentCtrl_value == 2:
continue
elif HVACmode_value == 1 and VentCtrl_value == 3:
continue
else:
for VSToffset_value in self.VSToffset_List:
for MinOToffset_value in self.MinOToffset_List:
for MaxWindSpeed_value in self.MaxWindSpeed_List:
for ASTtol_value in numpy.arange(self.ASTtol_value_from,
self.ASTtol_value_to,
self.ASTtol_value_steps):
outputname = (
filename
+ ComfStand_dict[ComfStand_value]
+ '[CA_' + repr(CAT_value)
+ '[CM_' + repr(ComfMod_value)
+ '[HM_' + repr(HVACmode_value)
+ '[VC_' + repr(VentCtrl_value)
+ '[VO_' + repr(VSToffset_value)
+ '[MT_' + repr(MinOToffset_value)
+ '[MW_' + repr(MaxWindSpeed_value)
+ '[AT_' + repr(round(ASTtol_value, 2))
+ suffix
+ '.idf'
)
outputlist.append(outputname)
elif TempCtrl.lower() == 'pmv':
outputname = (
filename
+ '[CS_PMV'
+ '[CA_X'
+ '[CM_X'
+ '[HM_X'
+ '[VC_X'
+ '[VO_X'
+ '[MT_X'
+ '[MW_X'
+ '[AT_X'
+ suffix
+ '.idf'
)
outputlist.append(outputname)
if verboseMode:
print('The list of output IDFs is going to be:')
print(*outputlist, sep="\n")
print(f'And the total number of output IDFs is going to be {len(outputlist)}')
if confirmGen is None:
confirmGen = input('Do you still want to run ACCIS? [y/n]: ')
if confirmGen == 'y':
confirmGen = True
else:
confirmGen = False
if confirmGen == True:
if verboseMode:
print('Generating the following output IDF files:')
# pbar = tqdm(total=len(outputlist))
# self.output_idf_dict = {}
for file in filelist_pymod:
filename = file
fname1 = filename + '.idf'
filename = file.replace('_pymod', '')
# if verboseMode:
# print(f'Taking "{fname1}" as input IDF file:')
# idf1 = IDF(fname1)
idf1 = get_building(fname1)
# print(filename)
SetInputData = ([program for program in idf1.idfobjects['EnergyManagementSystem:Program'] if
program.Name == 'SetInputData'])
ApplyCAT = ([program for program in idf1.idfobjects['EnergyManagementSystem:Program'] if
program.Name == 'ApplyCAT'])
SetVOFinputData = ([program for program in idf1.idfobjects['EnergyManagementSystem:Program'] if
program.Name == 'SetVOFinputData'])
SetAST = ([program for program in idf1.idfobjects['EnergyManagementSystem:Program'] if
program.Name == 'SetAST'])
SetComfTemp= ([program for program in idf1.idfobjects['EnergyManagementSystem:Program'] if
program.Name == 'SetComfTemp'])
SetAppLimits= ([program for program in idf1.idfobjects['EnergyManagementSystem:Program'] if
program.Name == 'SetAppLimits'])
if TempCtrl.lower() == 'temp' or TempCtrl.lower() == 'temperature':
for ComfStand_value in self.ComfStand_List:
SetInputData[0].Program_Line_1 = 'set ComfStand = ' + repr(ComfStand_value)
if ComfStand_value == 0:
SetInputData[0].Program_Line_2 = 'set CAT = 1'
SetInputData[0].Program_Line_3 = 'set ComfMod = 0'
for HVACmode_value in self.HVACmode_List:
SetInputData[0].Program_Line_4 = 'set HVACmode = ' + repr(HVACmode_value)
if HVACmode_value == 0:
for ASTtol_value in numpy.arange(self.ASTtol_value_from, self.ASTtol_value_to,
self.ASTtol_value_steps):
SetInputData[0].Program_Line_9 = 'set ACSTtol = ' + repr(-ASTtol_value)
SetInputData[0].Program_Line_10 = 'set AHSTtol = ' + repr(ASTtol_value)
SetInputData[0].Program_Line_11 = 'set CoolSeasonStart = ' + repr(self.CoolSeasonStart)
SetInputData[0].Program_Line_12 = 'set CoolSeasonEnd = ' + repr(self.CoolSeasonEnd)
ApplyCAT[0].Program_Line_1 = 'set CATcoolOffset = ' + repr(self.CATcoolOffset)
ApplyCAT[0].Program_Line_2 = 'set CATheatOffset = ' + repr(self.CATheatOffset)
SetAST[0].Program_Line_1 = 'set SetpointAcc = ' + repr(self.SetpointAcc)
outputname = (
filename
+ ComfStand_dict[ComfStand_value]
+ '[CA_X'
+ '[CM_X'
+ '[HM_' + repr(HVACmode_value)
+ '[VC_X'
+ '[VO_X'
+ '[MT_X'
+ '[MW_X'
+ '[AT_' + repr(round(ASTtol_value, 2))
+ suffix
+ '.idf'
)
if verboseMode:
print(outputname)
# time.sleep(0.1)
# pbar.update(1)
idf1.savecopy(outputname)
self.output_idf_dict.update({outputname: idf1})
else:
for VentCtrl_value in self.VentCtrl_List:
SetInputData[0].Program_Line_5 = 'set VentCtrl = ' + repr(VentCtrl_value)
if HVACmode_value == 2:
if VentCtrl_value == 2 or VentCtrl_value == 3:
SetVOFinputData[0].Program_Line_1 = 'set MaxTempDiffVOF = ' + repr(self.MaxTempDiffVOF)
SetVOFinputData[0].Program_Line_2 = 'set MinTempDiffVOF = ' + repr(self.MinTempDiffVOF)
SetVOFinputData[0].Program_Line_3 = 'set MultiplierVOF = ' + repr(self.MultiplierVOF)
for VSToffset_value in self.VSToffset_List:
SetInputData[0].Program_Line_6 = 'set VSToffset = ' + repr(VSToffset_value)
for MinOToffset_value in self.MinOToffset_List:
SetInputData[0].Program_Line_7 = 'set MinOToffset = ' + repr(
MinOToffset_value)
for MaxWindSpeed_value in self.MaxWindSpeed_List:
SetInputData[0].Program_Line_8 = 'set MaxWindSpeed = ' + repr(
MaxWindSpeed_value)
for ASTtol_value in numpy.arange(self.ASTtol_value_from,
self.ASTtol_value_to,
self.ASTtol_value_steps):
SetInputData[0].Program_Line_9 = 'set ACSTtol = ' + repr(-ASTtol_value)
SetInputData[0].Program_Line_10 = 'set AHSTtol = ' + repr(ASTtol_value)
SetInputData[0].Program_Line_11 = 'set CoolSeasonStart = ' + repr(self.CoolSeasonStart)
SetInputData[0].Program_Line_12 = 'set CoolSeasonEnd = ' + repr(self.CoolSeasonEnd)
ApplyCAT[0].Program_Line_1 = 'set CATcoolOffset = ' + repr(self.CATcoolOffset)
ApplyCAT[0].Program_Line_2 = 'set CATheatOffset = ' + repr(self.CATheatOffset)
SetAST[0].Program_Line_1 = 'set SetpointAcc = ' + repr(self.SetpointAcc)
outputname = (
filename
+ ComfStand_dict[ComfStand_value]
+ '[CA_X'
+ '[CM_X'
+ '[HM_' + repr(HVACmode_value)
+ '[VC_' + repr(VentCtrl_value)
+ '[VO_' + repr(VSToffset_value)
+ '[MT_' + repr(MinOToffset_value)
+ '[MW_' + repr(MaxWindSpeed_value)
+ '[AT_' + repr(round(ASTtol_value, 2))
+ suffix
+ '.idf'
)
if verboseMode:
print(outputname)
# time.sleep(0.1)
# pbar.update(1)
idf1.savecopy(outputname)
self.output_idf_dict.update({outputname: idf1})
elif ComfStand_value in [1, 4, 5, 22]:
for CAT_value in self.CAT_List:
if ComfStand_value in [1, 22] and CAT_value not in range(0, 4):
continue
elif ComfStand_value in [4, 5] and CAT_value not in [1, 2]:
continue
else:
SetInputData[0].Program_Line_2 = 'set CAT = ' + repr(CAT_value)
for ComfMod_value in self.ComfMod_List:
if ComfStand_value not in [13, 14] and ComfMod_value in [0.1, 0.2, 0.3, 0.4, 0.5, 1.1, 1.2, 1.3, 1.4, 1.5]:
continue
elif ComfStand_value == 22 and ComfMod_value != 0:
continue
else:
SetInputData[0].Program_Line_3 = 'set ComfMod = ' + repr(ComfMod_value)
for HVACmode_value in self.HVACmode_List:
SetInputData[0].Program_Line_4 = 'set HVACmode = ' + repr(HVACmode_value)
if HVACmode_value == 0:
for ASTtol_value in numpy.arange(self.ASTtol_value_from,
self.ASTtol_value_to,
self.ASTtol_value_steps):
SetInputData[0].Program_Line_9 = 'set ACSTtol = ' + repr(-ASTtol_value)
SetInputData[0].Program_Line_10 = 'set AHSTtol = ' + repr(ASTtol_value)
SetInputData[0].Program_Line_11 = 'set CoolSeasonStart = ' + repr(self.CoolSeasonStart)
SetInputData[0].Program_Line_12 = 'set CoolSeasonEnd = ' + repr(self.CoolSeasonEnd)
ApplyCAT[0].Program_Line_1 = 'set CATcoolOffset = ' + repr(self.CATcoolOffset)
ApplyCAT[0].Program_Line_2 = 'set CATheatOffset = ' + repr(self.CATheatOffset)
SetAST[0].Program_Line_1 = 'set SetpointAcc = ' + repr(self.SetpointAcc)
outputname = (
filename
+ ComfStand_dict[ComfStand_value]
+ '[CA_' + repr(CAT_value)
+ '[CM_' + repr(ComfMod_value)
+ '[HM_' + repr(HVACmode_value)
+ '[VC_X'
+ '[VO_X'
+ '[MT_X'
+ '[MW_X'
+ '[AT_' + repr(round(ASTtol_value, 2))
+ suffix
+ '.idf'
)
if verboseMode:
print(outputname)
# time.sleep(0.1)
# pbar.update(1)
idf1.savecopy(outputname)
self.output_idf_dict.update({outputname: idf1})
else:
for VentCtrl_value in self.VentCtrl_List:
SetInputData[0].Program_Line_5 = 'set VentCtrl = ' + repr(VentCtrl_value)
if HVACmode_value == 2:
if VentCtrl_value == 2 or VentCtrl_value == 3:
SetVOFinputData[0].Program_Line_1 = 'set MaxTempDiffVOF = ' + repr(self.MaxTempDiffVOF)
SetVOFinputData[0].Program_Line_2 = 'set MinTempDiffVOF = ' + repr(self.MinTempDiffVOF)
SetVOFinputData[0].Program_Line_3 = 'set MultiplierVOF = ' + repr(self.MultiplierVOF)
for VSToffset_value in self.VSToffset_List:
SetInputData[0].Program_Line_6 = 'set VSToffset = ' + repr(
VSToffset_value)
for MinOToffset_value in self.MinOToffset_List:
SetInputData[0].Program_Line_7 = 'set MinOToffset = ' + repr(
MinOToffset_value)
for MaxWindSpeed_value in self.MaxWindSpeed_List:
SetInputData[
0].Program_Line_8 = 'set MaxWindSpeed = ' + repr(
MaxWindSpeed_value)
for ASTtol_value in numpy.arange(self.ASTtol_value_from,
self.ASTtol_value_to,
self.ASTtol_value_steps):
SetInputData[0].Program_Line_9 = 'set ACSTtol = ' + repr(-ASTtol_value)
SetInputData[0].Program_Line_10 = 'set AHSTtol = ' + repr(ASTtol_value)
SetInputData[0].Program_Line_11 = 'set CoolSeasonStart = ' + repr(self.CoolSeasonStart)
SetInputData[0].Program_Line_12 = 'set CoolSeasonEnd = ' + repr(self.CoolSeasonEnd)
ApplyCAT[0].Program_Line_1 = 'set CATcoolOffset = ' + repr(self.CATcoolOffset)
ApplyCAT[0].Program_Line_2 = 'set CATheatOffset = ' + repr(self.CATheatOffset)
SetAST[0].Program_Line_1 = 'set SetpointAcc = ' + repr(self.SetpointAcc)
outputname = (
filename
+ ComfStand_dict[ComfStand_value]
+ '[CA_' + repr(CAT_value)
+ '[CM_' + repr(ComfMod_value)
+ '[HM_' + repr(HVACmode_value)
+ '[VC_' + repr(VentCtrl_value)
+ '[VO_' + repr(VSToffset_value)
+ '[MT_' + repr(MinOToffset_value)
+ '[MW_' + repr(MaxWindSpeed_value)
+ '[AT_' + repr(round(ASTtol_value, 2))
+ suffix
+ '.idf'
)
if verboseMode:
print(outputname)
# time.sleep(0.1)
# pbar.update(1)
idf1.savecopy(outputname)
self.output_idf_dict.update({outputname: idf1})
elif ComfStand_value in [2, 3, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 99]:
for CAT_value in self.CAT_List:
if ComfStand_value in [2, 3, 6, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
20, 21] and CAT_value not in range(80, 91, 10):
continue
elif ComfStand_value in [7, 8] and CAT_value not in range(80, 91, 5):
continue
else:
SetInputData[0].Program_Line_2 = 'set CAT = ' + repr(CAT_value)
for ComfMod_value in self.ComfMod_List:
if ComfStand_value in [13, 14] and ComfMod_value in [0, 1]:
continue
elif ComfStand_value not in [13, 14] and ComfMod_value in [0.1, 0.2, 0.3, 0.4, 0.5, 1.1, 1.2, 1.3, 1.4, 1.5]:
continue
elif ComfStand_value == 21 and ComfMod_value not in [2, 3]:
continue
else:
SetInputData[0].Program_Line_3 = 'set ComfMod = ' + repr(ComfMod_value)
for HVACmode_value in self.HVACmode_List:
SetInputData[0].Program_Line_4 = 'set HVACmode = ' + repr(HVACmode_value)
if HVACmode_value == 0:
for ASTtol_value in numpy.arange(self.ASTtol_value_from,
self.ASTtol_value_to,
self.ASTtol_value_steps):
SetInputData[0].Program_Line_9 = 'set ACSTtol = ' + repr(-ASTtol_value)
SetInputData[0].Program_Line_10 = 'set AHSTtol = ' + repr(ASTtol_value)
SetInputData[0].Program_Line_11 = 'set CoolSeasonStart = ' + repr(self.CoolSeasonStart)
SetInputData[0].Program_Line_12 = 'set CoolSeasonEnd = ' + repr(self.CoolSeasonEnd)
# SetComfTemp[0].Program_Line_2 = f'set ComfTemp = PMOT*{repr(self.CustAST_m)}+{repr(self.CustAST_n)}'
SetAppLimits[0].Program_Line_2 = f'set ACSTaul = {repr(self.CustAST_ACSTaul)}'
SetAppLimits[0].Program_Line_3 = f'set ACSTall = {repr(self.CustAST_ACSTall)}'
SetAppLimits[0].Program_Line_4 = f'set AHSTaul = {repr(self.CustAST_AHSTaul)}'
SetAppLimits[0].Program_Line_5 = f'set AHSTall = {repr(self.CustAST_AHSTall)}'
ApplyCAT[0].Program_Line_1 = 'set CATcoolOffset = ' + repr(self.CATcoolOffset)
ApplyCAT[0].Program_Line_2 = 'set CATheatOffset = ' + repr(self.CATheatOffset)
ApplyCAT[0].Program_Line_4 = f'set ACSToffset = {repr(self.CustAST_ACSToffset)} + {repr(self.CATcoolOffset)}'
ApplyCAT[0].Program_Line_5 = f'set AHSToffset = {repr(self.CustAST_AHSToffset)} + {repr(self.CATheatOffset)}'
SetAST[0].Program_Line_1 = 'set SetpointAcc = ' + repr(self.SetpointAcc)
SetAST[0].Program_Line_2 = 'set m = ' + repr(self.CustAST_m)
SetAST[0].Program_Line_3 = 'set n = ' + repr(self.CustAST_n)
outputname = (
filename
+ ComfStand_dict[ComfStand_value]
+ '[CA_' + repr(CAT_value)
+ '[CM_' + repr(ComfMod_value)
+ '[HM_' + repr(HVACmode_value)
+ '[VC_X'
+ '[VO_X'
+ '[MT_X'
+ '[MW_X'
+ '[AT_' + repr(round(ASTtol_value, 2))
+ suffix
+ '.idf'
)
if verboseMode:
print(outputname)
# time.sleep(0.1)
# pbar.update(1)
idf1.savecopy(outputname)
self.output_idf_dict.update({outputname: idf1})
else:
for VentCtrl_value in self.VentCtrl_List:
SetInputData[0].Program_Line_5 = 'set VentCtrl = ' + repr(VentCtrl_value)
if HVACmode_value == 2:
if VentCtrl_value == 2 or VentCtrl_value == 3:
SetVOFinputData[0].Program_Line_1 = 'set MaxTempDiffVOF = ' + repr(self.MaxTempDiffVOF)
SetVOFinputData[0].Program_Line_2 = 'set MinTempDiffVOF = ' + repr(self.MinTempDiffVOF)
SetVOFinputData[0].Program_Line_3 = 'set MultiplierVOF = ' + repr(self.MultiplierVOF)
for VSToffset_value in self.VSToffset_List:
SetInputData[0].Program_Line_6 = 'set VSToffset = ' + repr(
VSToffset_value)
for MinOToffset_value in self.MinOToffset_List:
SetInputData[0].Program_Line_7 = 'set MinOToffset = ' + repr(
MinOToffset_value)
for MaxWindSpeed_value in self.MaxWindSpeed_List:
SetInputData[0].Program_Line_8 = 'set MaxWindSpeed = ' + repr(MaxWindSpeed_value)
for ASTtol_value in numpy.arange(self.ASTtol_value_from,
self.ASTtol_value_to,
self.ASTtol_value_steps):
SetInputData[0].Program_Line_9 = 'set ACSTtol = ' + repr(-ASTtol_value)
SetInputData[0].Program_Line_10 = 'set AHSTtol = ' + repr(ASTtol_value)
SetInputData[0].Program_Line_11 = 'set CoolSeasonStart = ' + repr(self.CoolSeasonStart)
SetInputData[0].Program_Line_12 = 'set CoolSeasonEnd = ' + repr(self.CoolSeasonEnd)
# SetComfTemp[0].Program_Line_2 = f'set ComfTemp = PMOT*{repr(self.CustAST_m)}+{repr(self.CustAST_n)}'
SetAppLimits[0].Program_Line_2 = f'set ACSTaul = {repr(self.CustAST_ACSTaul)}'
SetAppLimits[0].Program_Line_3 = f'set ACSTall = {repr(self.CustAST_ACSTall)}'
SetAppLimits[0].Program_Line_4 = f'set AHSTaul = {repr(self.CustAST_AHSTaul)}'
SetAppLimits[0].Program_Line_5 = f'set AHSTall = {repr(self.CustAST_AHSTall)}'
ApplyCAT[0].Program_Line_1 = 'set CATcoolOffset = ' + repr(self.CATcoolOffset)
ApplyCAT[0].Program_Line_2 = 'set CATheatOffset = ' + repr(self.CATheatOffset)
ApplyCAT[0].Program_Line_4 = f'set ACSToffset = {repr(self.CustAST_ACSToffset)} + {repr(self.CATcoolOffset)}'
ApplyCAT[0].Program_Line_5 = f'set AHSToffset = {repr(self.CustAST_AHSToffset)} + {repr(self.CATheatOffset)}'
SetAST[0].Program_Line_1 = 'set SetpointAcc = ' + repr(self.SetpointAcc)
SetAST[0].Program_Line_2 = 'set m = ' + repr(self.CustAST_m)
SetAST[0].Program_Line_3 = 'set n = ' + repr(self.CustAST_n)
outputname = (
filename
+ ComfStand_dict[ComfStand_value]
+ '[CA_' + repr(CAT_value)
+ '[CM_' + repr(ComfMod_value)
+ '[HM_' + repr(HVACmode_value)
+ '[VC_' + repr(VentCtrl_value)
+ '[VO_' + repr(VSToffset_value)
+ '[MT_' + repr(MinOToffset_value)
+ '[MW_' + repr(MaxWindSpeed_value)
+ '[AT_' + repr(round(ASTtol_value, 2))
+ suffix
+ '.idf'
)
if verboseMode:
print(outputname)
# time.sleep(0.1)
# pbar.update(1)
idf1.savecopy(outputname)
self.output_idf_dict.update({outputname: idf1})
elif TempCtrl.lower() == 'pmv':
SetInputData[0].Program_Line_4 = 'set HVACmode = 0'
outputname = (
filename
+ '[CS_PMV'
+ '[CA_X'
+ '[CM_X'
+ '[HM_0'
+ '[VC_X'
+ '[VO_X'
+ '[MT_X'
+ '[MW_X'
+ '[AT_X'
+ suffix
+ '.idf'
)
if verboseMode:
print(outputname)
# time.sleep(0.1)
# pbar.update(1)
idf1.savecopy(outputname)
self.output_idf_dict.update({outputname: idf1})
# pbar.close()
elif confirmGen == False:
if verboseMode:
print('IDF generation has been shut down')
filelist_pymod = ([file for file in listdir() if file.endswith('_pymod.idf')])
for file in filelist_pymod:
os.remove(file)
# del SetInputData