From 64e7ae69337a48a914a8804a593e513222f70ff3 Mon Sep 17 00:00:00 2001 From: Shaojie Wang <55248793+wsjsxn@users.noreply.github.com> Date: Thu, 29 May 2025 12:19:19 -0500 Subject: [PATCH 01/23] Create test --- commercial measures/SWHC043/test | 1 + 1 file changed, 1 insertion(+) create mode 100644 commercial measures/SWHC043/test diff --git a/commercial measures/SWHC043/test b/commercial measures/SWHC043/test new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/commercial measures/SWHC043/test @@ -0,0 +1 @@ + From b64f7936da7c576453c732a985b308ba0cdee75b Mon Sep 17 00:00:00 2001 From: Shaojie Wang <55248793+wsjsxn@users.noreply.github.com> Date: Thu, 29 May 2025 12:19:43 -0500 Subject: [PATCH 02/23] Add files via upload --- .../SWHC043 (05.29.2025) Model Input Files.zip | Bin 0 -> 272767 bytes ...SWHC043 (05.29.2025) Model Output Files.zip | Bin 0 -> 130554 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 commercial measures/SWHC043/SWHC043 (05.29.2025) Model Input Files.zip create mode 100644 commercial measures/SWHC043/SWHC043 (05.29.2025) Model Output Files.zip diff --git a/commercial measures/SWHC043/SWHC043 (05.29.2025) Model Input Files.zip b/commercial measures/SWHC043/SWHC043 (05.29.2025) Model Input Files.zip new file mode 100644 index 0000000000000000000000000000000000000000..aaf084853c23120c0820e7d94765b7635ef81afa GIT binary patch literal 272767 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
m$5_1=3>RPp;&_Vs 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
*i+ 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

vrz&V!z3f*k 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 Date: Thu, 29 May 2025 12:20:21 -0500 Subject: [PATCH 03/23] Delete commercial measures/SWHC043/test --- commercial measures/SWHC043/test | 1 - 1 file changed, 1 deletion(-) delete mode 100644 commercial measures/SWHC043/test diff --git a/commercial measures/SWHC043/test b/commercial measures/SWHC043/test deleted file mode 100644 index 8b137891..00000000 --- a/commercial measures/SWHC043/test +++ /dev/null @@ -1 +0,0 @@ - From a51b4405ad82c555e7cf6d72c33b072c1c4ffce8 Mon Sep 17 00:00:00 2001 From: Shaojie Wang <55248793+wsjsxn@users.noreply.github.com> Date: Sat, 29 Nov 2025 21:00:06 -0600 Subject: [PATCH 04/23] Create test --- .../SWHC043 Multi_Cap_Com_ACEx_Ex/cases/test | 1 + 1 file changed, 1 insertion(+) create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/test diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/test b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/test new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/test @@ -0,0 +1 @@ + From 22fd807b4c53a99b6b96f060728e59dcd39eb885 Mon Sep 17 00:00:00 2001 From: Shaojie Wang <55248793+wsjsxn@users.noreply.github.com> Date: Sat, 29 Nov 2025 21:00:40 -0600 Subject: [PATCH 05/23] Add files via upload --- .../cases/Asm&0&cDXGF&Ex&dxAC_equip.csv | 7 +++++++ .../cases/ECC&0&cDXGF&Ex&dxAC_equip.csv | 7 +++++++ .../cases/EPr&0&cDXGF&Ex&dxAC_equip.csv | 7 +++++++ .../cases/ERC&0&cDXGF&Ex&dxAC_equip.csv | 7 +++++++ .../cases/ESe&0&cDXGF&Ex&dxAC_equip.csv | 7 +++++++ .../cases/EUn&0&cDXGF&Ex&dxAC_equip.csv | 7 +++++++ .../cases/Fin&0&cDXGF&Ex&dxAC_equip.csv | 7 +++++++ .../cases/Gro&0&cDXGF&Ex&dxAC_equip.csv | 7 +++++++ .../cases/Hsp&0&cDXGF&Ex&dxAC_equip.csv | 7 +++++++ .../cases/Htl&0&cDXGF&Ex&dxAC_equip.csv | 7 +++++++ .../cases/Lib&0&cDXGF&Ex&dxAC_equip.csv | 7 +++++++ .../cases/MBT&0&cDXGF&Ex&dxAC_equip.csv | 7 +++++++ .../cases/MLI&0&cDXGF&Ex&dxAC_equip.csv | 7 +++++++ .../cases/Mtl&0&cDXGF&Ex&dxAC_equip.csv | 7 +++++++ .../cases/Nrs&0&cDXGF&Ex&dxAC_equip.csv | 7 +++++++ .../cases/OfL&0&cDXGF&Ex&dxAC_equip.csv | 7 +++++++ .../cases/OfS&0&cDXGF&Ex&dxAC_equip.csv | 7 +++++++ .../cases/RFF&0&cDXGF&Ex&dxAC_equip.csv | 7 +++++++ .../cases/RSD&0&cDXGF&Ex&dxAC_equip.csv | 7 +++++++ .../cases/Rel&0&cDXGF&Ex&dxAC_equip.csv | 7 +++++++ .../cases/Rt3&0&cDXGF&Ex&dxAC_equip.csv | 7 +++++++ .../cases/RtL&0&cDXGF&Ex&dxAC_equip.csv | 7 +++++++ .../cases/RtS&0&cDXGF&Ex&dxAC_equip.csv | 7 +++++++ .../cases/SCn&0&cDXGF&Ex&dxAC_equip.csv | 7 +++++++ .../cases/SUn&0&cDXGF&Ex&dxAC_equip.csv | 7 +++++++ .../cases/WRf&0&cDXGF&Ex&dxAC_equip.csv | 7 +++++++ 26 files changed, 182 insertions(+) create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/Asm&0&cDXGF&Ex&dxAC_equip.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/ECC&0&cDXGF&Ex&dxAC_equip.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/EPr&0&cDXGF&Ex&dxAC_equip.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/ERC&0&cDXGF&Ex&dxAC_equip.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/ESe&0&cDXGF&Ex&dxAC_equip.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/EUn&0&cDXGF&Ex&dxAC_equip.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/Fin&0&cDXGF&Ex&dxAC_equip.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/Gro&0&cDXGF&Ex&dxAC_equip.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/Hsp&0&cDXGF&Ex&dxAC_equip.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/Htl&0&cDXGF&Ex&dxAC_equip.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/Lib&0&cDXGF&Ex&dxAC_equip.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/MBT&0&cDXGF&Ex&dxAC_equip.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/MLI&0&cDXGF&Ex&dxAC_equip.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/Mtl&0&cDXGF&Ex&dxAC_equip.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/Nrs&0&cDXGF&Ex&dxAC_equip.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/OfL&0&cDXGF&Ex&dxAC_equip.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/OfS&0&cDXGF&Ex&dxAC_equip.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/RFF&0&cDXGF&Ex&dxAC_equip.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/RSD&0&cDXGF&Ex&dxAC_equip.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/Rel&0&cDXGF&Ex&dxAC_equip.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/Rt3&0&cDXGF&Ex&dxAC_equip.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/RtL&0&cDXGF&Ex&dxAC_equip.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/RtS&0&cDXGF&Ex&dxAC_equip.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/SCn&0&cDXGF&Ex&dxAC_equip.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/SUn&0&cDXGF&Ex&dxAC_equip.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/WRf&0&cDXGF&Ex&dxAC_equip.csv diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/Asm&0&cDXGF&Ex&dxAC_equip.csv b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/Asm&0&cDXGF&Ex&dxAC_equip.csv new file mode 100644 index 00000000..94a4f4a6 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/Asm&0&cDXGF&Ex&dxAC_equip.csv @@ -0,0 +1,7 @@ +skip,case_name,:main_hvac_type,:main_atu_reheat_coil_type,:main_atu_reheat_control,:main_fan_rise,:main_cool_coil_type,:main_heat_coil_type,:main_dx_type,:main_sat_reset_type,:main_sat_temp_max,:main_design_peak_load,:main_oa_econ_type,:main_cool_coil_cop,:main_dx_comp_speed,:main_fan_speed,:main_fan_motor_eff,:main_heat_coil_eff,:main_cool_coil_cop2,:main_cool_coil_cop3,:main_cool_coil_cop4 +,NE-dxAC-PkgAC-65to134-Ex-EER-11.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.8,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-Ex-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.19,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-Ex-EER-13.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.62,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-10.8,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.81,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.29,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-12.5,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.51,CONSTANT,CONSTANT,0.9,0.8,,, diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/ECC&0&cDXGF&Ex&dxAC_equip.csv b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/ECC&0&cDXGF&Ex&dxAC_equip.csv new file mode 100644 index 00000000..94a4f4a6 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/ECC&0&cDXGF&Ex&dxAC_equip.csv @@ -0,0 +1,7 @@ +skip,case_name,:main_hvac_type,:main_atu_reheat_coil_type,:main_atu_reheat_control,:main_fan_rise,:main_cool_coil_type,:main_heat_coil_type,:main_dx_type,:main_sat_reset_type,:main_sat_temp_max,:main_design_peak_load,:main_oa_econ_type,:main_cool_coil_cop,:main_dx_comp_speed,:main_fan_speed,:main_fan_motor_eff,:main_heat_coil_eff,:main_cool_coil_cop2,:main_cool_coil_cop3,:main_cool_coil_cop4 +,NE-dxAC-PkgAC-65to134-Ex-EER-11.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.8,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-Ex-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.19,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-Ex-EER-13.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.62,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-10.8,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.81,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.29,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-12.5,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.51,CONSTANT,CONSTANT,0.9,0.8,,, diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/EPr&0&cDXGF&Ex&dxAC_equip.csv b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/EPr&0&cDXGF&Ex&dxAC_equip.csv new file mode 100644 index 00000000..94a4f4a6 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/EPr&0&cDXGF&Ex&dxAC_equip.csv @@ -0,0 +1,7 @@ +skip,case_name,:main_hvac_type,:main_atu_reheat_coil_type,:main_atu_reheat_control,:main_fan_rise,:main_cool_coil_type,:main_heat_coil_type,:main_dx_type,:main_sat_reset_type,:main_sat_temp_max,:main_design_peak_load,:main_oa_econ_type,:main_cool_coil_cop,:main_dx_comp_speed,:main_fan_speed,:main_fan_motor_eff,:main_heat_coil_eff,:main_cool_coil_cop2,:main_cool_coil_cop3,:main_cool_coil_cop4 +,NE-dxAC-PkgAC-65to134-Ex-EER-11.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.8,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-Ex-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.19,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-Ex-EER-13.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.62,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-10.8,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.81,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.29,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-12.5,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.51,CONSTANT,CONSTANT,0.9,0.8,,, diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/ERC&0&cDXGF&Ex&dxAC_equip.csv b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/ERC&0&cDXGF&Ex&dxAC_equip.csv new file mode 100644 index 00000000..94a4f4a6 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/ERC&0&cDXGF&Ex&dxAC_equip.csv @@ -0,0 +1,7 @@ +skip,case_name,:main_hvac_type,:main_atu_reheat_coil_type,:main_atu_reheat_control,:main_fan_rise,:main_cool_coil_type,:main_heat_coil_type,:main_dx_type,:main_sat_reset_type,:main_sat_temp_max,:main_design_peak_load,:main_oa_econ_type,:main_cool_coil_cop,:main_dx_comp_speed,:main_fan_speed,:main_fan_motor_eff,:main_heat_coil_eff,:main_cool_coil_cop2,:main_cool_coil_cop3,:main_cool_coil_cop4 +,NE-dxAC-PkgAC-65to134-Ex-EER-11.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.8,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-Ex-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.19,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-Ex-EER-13.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.62,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-10.8,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.81,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.29,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-12.5,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.51,CONSTANT,CONSTANT,0.9,0.8,,, diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/ESe&0&cDXGF&Ex&dxAC_equip.csv b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/ESe&0&cDXGF&Ex&dxAC_equip.csv new file mode 100644 index 00000000..94a4f4a6 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/ESe&0&cDXGF&Ex&dxAC_equip.csv @@ -0,0 +1,7 @@ +skip,case_name,:main_hvac_type,:main_atu_reheat_coil_type,:main_atu_reheat_control,:main_fan_rise,:main_cool_coil_type,:main_heat_coil_type,:main_dx_type,:main_sat_reset_type,:main_sat_temp_max,:main_design_peak_load,:main_oa_econ_type,:main_cool_coil_cop,:main_dx_comp_speed,:main_fan_speed,:main_fan_motor_eff,:main_heat_coil_eff,:main_cool_coil_cop2,:main_cool_coil_cop3,:main_cool_coil_cop4 +,NE-dxAC-PkgAC-65to134-Ex-EER-11.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.8,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-Ex-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.19,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-Ex-EER-13.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.62,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-10.8,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.81,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.29,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-12.5,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.51,CONSTANT,CONSTANT,0.9,0.8,,, diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/EUn&0&cDXGF&Ex&dxAC_equip.csv b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/EUn&0&cDXGF&Ex&dxAC_equip.csv new file mode 100644 index 00000000..94a4f4a6 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/EUn&0&cDXGF&Ex&dxAC_equip.csv @@ -0,0 +1,7 @@ +skip,case_name,:main_hvac_type,:main_atu_reheat_coil_type,:main_atu_reheat_control,:main_fan_rise,:main_cool_coil_type,:main_heat_coil_type,:main_dx_type,:main_sat_reset_type,:main_sat_temp_max,:main_design_peak_load,:main_oa_econ_type,:main_cool_coil_cop,:main_dx_comp_speed,:main_fan_speed,:main_fan_motor_eff,:main_heat_coil_eff,:main_cool_coil_cop2,:main_cool_coil_cop3,:main_cool_coil_cop4 +,NE-dxAC-PkgAC-65to134-Ex-EER-11.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.8,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-Ex-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.19,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-Ex-EER-13.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.62,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-10.8,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.81,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.29,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-12.5,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.51,CONSTANT,CONSTANT,0.9,0.8,,, diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/Fin&0&cDXGF&Ex&dxAC_equip.csv b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/Fin&0&cDXGF&Ex&dxAC_equip.csv new file mode 100644 index 00000000..94a4f4a6 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/Fin&0&cDXGF&Ex&dxAC_equip.csv @@ -0,0 +1,7 @@ +skip,case_name,:main_hvac_type,:main_atu_reheat_coil_type,:main_atu_reheat_control,:main_fan_rise,:main_cool_coil_type,:main_heat_coil_type,:main_dx_type,:main_sat_reset_type,:main_sat_temp_max,:main_design_peak_load,:main_oa_econ_type,:main_cool_coil_cop,:main_dx_comp_speed,:main_fan_speed,:main_fan_motor_eff,:main_heat_coil_eff,:main_cool_coil_cop2,:main_cool_coil_cop3,:main_cool_coil_cop4 +,NE-dxAC-PkgAC-65to134-Ex-EER-11.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.8,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-Ex-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.19,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-Ex-EER-13.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.62,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-10.8,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.81,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.29,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-12.5,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.51,CONSTANT,CONSTANT,0.9,0.8,,, diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/Gro&0&cDXGF&Ex&dxAC_equip.csv b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/Gro&0&cDXGF&Ex&dxAC_equip.csv new file mode 100644 index 00000000..94a4f4a6 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/Gro&0&cDXGF&Ex&dxAC_equip.csv @@ -0,0 +1,7 @@ +skip,case_name,:main_hvac_type,:main_atu_reheat_coil_type,:main_atu_reheat_control,:main_fan_rise,:main_cool_coil_type,:main_heat_coil_type,:main_dx_type,:main_sat_reset_type,:main_sat_temp_max,:main_design_peak_load,:main_oa_econ_type,:main_cool_coil_cop,:main_dx_comp_speed,:main_fan_speed,:main_fan_motor_eff,:main_heat_coil_eff,:main_cool_coil_cop2,:main_cool_coil_cop3,:main_cool_coil_cop4 +,NE-dxAC-PkgAC-65to134-Ex-EER-11.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.8,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-Ex-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.19,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-Ex-EER-13.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.62,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-10.8,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.81,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.29,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-12.5,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.51,CONSTANT,CONSTANT,0.9,0.8,,, diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/Hsp&0&cDXGF&Ex&dxAC_equip.csv b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/Hsp&0&cDXGF&Ex&dxAC_equip.csv new file mode 100644 index 00000000..94a4f4a6 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/Hsp&0&cDXGF&Ex&dxAC_equip.csv @@ -0,0 +1,7 @@ +skip,case_name,:main_hvac_type,:main_atu_reheat_coil_type,:main_atu_reheat_control,:main_fan_rise,:main_cool_coil_type,:main_heat_coil_type,:main_dx_type,:main_sat_reset_type,:main_sat_temp_max,:main_design_peak_load,:main_oa_econ_type,:main_cool_coil_cop,:main_dx_comp_speed,:main_fan_speed,:main_fan_motor_eff,:main_heat_coil_eff,:main_cool_coil_cop2,:main_cool_coil_cop3,:main_cool_coil_cop4 +,NE-dxAC-PkgAC-65to134-Ex-EER-11.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.8,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-Ex-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.19,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-Ex-EER-13.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.62,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-10.8,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.81,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.29,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-12.5,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.51,CONSTANT,CONSTANT,0.9,0.8,,, diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/Htl&0&cDXGF&Ex&dxAC_equip.csv b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/Htl&0&cDXGF&Ex&dxAC_equip.csv new file mode 100644 index 00000000..94a4f4a6 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/Htl&0&cDXGF&Ex&dxAC_equip.csv @@ -0,0 +1,7 @@ +skip,case_name,:main_hvac_type,:main_atu_reheat_coil_type,:main_atu_reheat_control,:main_fan_rise,:main_cool_coil_type,:main_heat_coil_type,:main_dx_type,:main_sat_reset_type,:main_sat_temp_max,:main_design_peak_load,:main_oa_econ_type,:main_cool_coil_cop,:main_dx_comp_speed,:main_fan_speed,:main_fan_motor_eff,:main_heat_coil_eff,:main_cool_coil_cop2,:main_cool_coil_cop3,:main_cool_coil_cop4 +,NE-dxAC-PkgAC-65to134-Ex-EER-11.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.8,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-Ex-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.19,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-Ex-EER-13.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.62,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-10.8,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.81,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.29,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-12.5,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.51,CONSTANT,CONSTANT,0.9,0.8,,, diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/Lib&0&cDXGF&Ex&dxAC_equip.csv b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/Lib&0&cDXGF&Ex&dxAC_equip.csv new file mode 100644 index 00000000..94a4f4a6 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/Lib&0&cDXGF&Ex&dxAC_equip.csv @@ -0,0 +1,7 @@ +skip,case_name,:main_hvac_type,:main_atu_reheat_coil_type,:main_atu_reheat_control,:main_fan_rise,:main_cool_coil_type,:main_heat_coil_type,:main_dx_type,:main_sat_reset_type,:main_sat_temp_max,:main_design_peak_load,:main_oa_econ_type,:main_cool_coil_cop,:main_dx_comp_speed,:main_fan_speed,:main_fan_motor_eff,:main_heat_coil_eff,:main_cool_coil_cop2,:main_cool_coil_cop3,:main_cool_coil_cop4 +,NE-dxAC-PkgAC-65to134-Ex-EER-11.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.8,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-Ex-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.19,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-Ex-EER-13.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.62,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-10.8,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.81,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.29,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-12.5,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.51,CONSTANT,CONSTANT,0.9,0.8,,, diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/MBT&0&cDXGF&Ex&dxAC_equip.csv b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/MBT&0&cDXGF&Ex&dxAC_equip.csv new file mode 100644 index 00000000..94a4f4a6 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/MBT&0&cDXGF&Ex&dxAC_equip.csv @@ -0,0 +1,7 @@ +skip,case_name,:main_hvac_type,:main_atu_reheat_coil_type,:main_atu_reheat_control,:main_fan_rise,:main_cool_coil_type,:main_heat_coil_type,:main_dx_type,:main_sat_reset_type,:main_sat_temp_max,:main_design_peak_load,:main_oa_econ_type,:main_cool_coil_cop,:main_dx_comp_speed,:main_fan_speed,:main_fan_motor_eff,:main_heat_coil_eff,:main_cool_coil_cop2,:main_cool_coil_cop3,:main_cool_coil_cop4 +,NE-dxAC-PkgAC-65to134-Ex-EER-11.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.8,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-Ex-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.19,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-Ex-EER-13.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.62,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-10.8,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.81,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.29,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-12.5,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.51,CONSTANT,CONSTANT,0.9,0.8,,, diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/MLI&0&cDXGF&Ex&dxAC_equip.csv b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/MLI&0&cDXGF&Ex&dxAC_equip.csv new file mode 100644 index 00000000..94a4f4a6 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/MLI&0&cDXGF&Ex&dxAC_equip.csv @@ -0,0 +1,7 @@ +skip,case_name,:main_hvac_type,:main_atu_reheat_coil_type,:main_atu_reheat_control,:main_fan_rise,:main_cool_coil_type,:main_heat_coil_type,:main_dx_type,:main_sat_reset_type,:main_sat_temp_max,:main_design_peak_load,:main_oa_econ_type,:main_cool_coil_cop,:main_dx_comp_speed,:main_fan_speed,:main_fan_motor_eff,:main_heat_coil_eff,:main_cool_coil_cop2,:main_cool_coil_cop3,:main_cool_coil_cop4 +,NE-dxAC-PkgAC-65to134-Ex-EER-11.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.8,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-Ex-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.19,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-Ex-EER-13.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.62,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-10.8,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.81,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.29,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-12.5,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.51,CONSTANT,CONSTANT,0.9,0.8,,, diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/Mtl&0&cDXGF&Ex&dxAC_equip.csv b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/Mtl&0&cDXGF&Ex&dxAC_equip.csv new file mode 100644 index 00000000..94a4f4a6 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/Mtl&0&cDXGF&Ex&dxAC_equip.csv @@ -0,0 +1,7 @@ +skip,case_name,:main_hvac_type,:main_atu_reheat_coil_type,:main_atu_reheat_control,:main_fan_rise,:main_cool_coil_type,:main_heat_coil_type,:main_dx_type,:main_sat_reset_type,:main_sat_temp_max,:main_design_peak_load,:main_oa_econ_type,:main_cool_coil_cop,:main_dx_comp_speed,:main_fan_speed,:main_fan_motor_eff,:main_heat_coil_eff,:main_cool_coil_cop2,:main_cool_coil_cop3,:main_cool_coil_cop4 +,NE-dxAC-PkgAC-65to134-Ex-EER-11.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.8,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-Ex-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.19,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-Ex-EER-13.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.62,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-10.8,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.81,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.29,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-12.5,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.51,CONSTANT,CONSTANT,0.9,0.8,,, diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/Nrs&0&cDXGF&Ex&dxAC_equip.csv b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/Nrs&0&cDXGF&Ex&dxAC_equip.csv new file mode 100644 index 00000000..94a4f4a6 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/Nrs&0&cDXGF&Ex&dxAC_equip.csv @@ -0,0 +1,7 @@ +skip,case_name,:main_hvac_type,:main_atu_reheat_coil_type,:main_atu_reheat_control,:main_fan_rise,:main_cool_coil_type,:main_heat_coil_type,:main_dx_type,:main_sat_reset_type,:main_sat_temp_max,:main_design_peak_load,:main_oa_econ_type,:main_cool_coil_cop,:main_dx_comp_speed,:main_fan_speed,:main_fan_motor_eff,:main_heat_coil_eff,:main_cool_coil_cop2,:main_cool_coil_cop3,:main_cool_coil_cop4 +,NE-dxAC-PkgAC-65to134-Ex-EER-11.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.8,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-Ex-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.19,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-Ex-EER-13.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.62,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-10.8,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.81,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.29,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-12.5,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.51,CONSTANT,CONSTANT,0.9,0.8,,, diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/OfL&0&cDXGF&Ex&dxAC_equip.csv b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/OfL&0&cDXGF&Ex&dxAC_equip.csv new file mode 100644 index 00000000..94a4f4a6 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/OfL&0&cDXGF&Ex&dxAC_equip.csv @@ -0,0 +1,7 @@ +skip,case_name,:main_hvac_type,:main_atu_reheat_coil_type,:main_atu_reheat_control,:main_fan_rise,:main_cool_coil_type,:main_heat_coil_type,:main_dx_type,:main_sat_reset_type,:main_sat_temp_max,:main_design_peak_load,:main_oa_econ_type,:main_cool_coil_cop,:main_dx_comp_speed,:main_fan_speed,:main_fan_motor_eff,:main_heat_coil_eff,:main_cool_coil_cop2,:main_cool_coil_cop3,:main_cool_coil_cop4 +,NE-dxAC-PkgAC-65to134-Ex-EER-11.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.8,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-Ex-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.19,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-Ex-EER-13.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.62,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-10.8,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.81,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.29,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-12.5,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.51,CONSTANT,CONSTANT,0.9,0.8,,, diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/OfS&0&cDXGF&Ex&dxAC_equip.csv b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/OfS&0&cDXGF&Ex&dxAC_equip.csv new file mode 100644 index 00000000..94a4f4a6 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/OfS&0&cDXGF&Ex&dxAC_equip.csv @@ -0,0 +1,7 @@ +skip,case_name,:main_hvac_type,:main_atu_reheat_coil_type,:main_atu_reheat_control,:main_fan_rise,:main_cool_coil_type,:main_heat_coil_type,:main_dx_type,:main_sat_reset_type,:main_sat_temp_max,:main_design_peak_load,:main_oa_econ_type,:main_cool_coil_cop,:main_dx_comp_speed,:main_fan_speed,:main_fan_motor_eff,:main_heat_coil_eff,:main_cool_coil_cop2,:main_cool_coil_cop3,:main_cool_coil_cop4 +,NE-dxAC-PkgAC-65to134-Ex-EER-11.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.8,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-Ex-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.19,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-Ex-EER-13.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.62,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-10.8,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.81,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.29,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-12.5,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.51,CONSTANT,CONSTANT,0.9,0.8,,, diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/RFF&0&cDXGF&Ex&dxAC_equip.csv b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/RFF&0&cDXGF&Ex&dxAC_equip.csv new file mode 100644 index 00000000..94a4f4a6 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/RFF&0&cDXGF&Ex&dxAC_equip.csv @@ -0,0 +1,7 @@ +skip,case_name,:main_hvac_type,:main_atu_reheat_coil_type,:main_atu_reheat_control,:main_fan_rise,:main_cool_coil_type,:main_heat_coil_type,:main_dx_type,:main_sat_reset_type,:main_sat_temp_max,:main_design_peak_load,:main_oa_econ_type,:main_cool_coil_cop,:main_dx_comp_speed,:main_fan_speed,:main_fan_motor_eff,:main_heat_coil_eff,:main_cool_coil_cop2,:main_cool_coil_cop3,:main_cool_coil_cop4 +,NE-dxAC-PkgAC-65to134-Ex-EER-11.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.8,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-Ex-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.19,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-Ex-EER-13.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.62,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-10.8,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.81,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.29,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-12.5,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.51,CONSTANT,CONSTANT,0.9,0.8,,, diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/RSD&0&cDXGF&Ex&dxAC_equip.csv b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/RSD&0&cDXGF&Ex&dxAC_equip.csv new file mode 100644 index 00000000..94a4f4a6 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/RSD&0&cDXGF&Ex&dxAC_equip.csv @@ -0,0 +1,7 @@ +skip,case_name,:main_hvac_type,:main_atu_reheat_coil_type,:main_atu_reheat_control,:main_fan_rise,:main_cool_coil_type,:main_heat_coil_type,:main_dx_type,:main_sat_reset_type,:main_sat_temp_max,:main_design_peak_load,:main_oa_econ_type,:main_cool_coil_cop,:main_dx_comp_speed,:main_fan_speed,:main_fan_motor_eff,:main_heat_coil_eff,:main_cool_coil_cop2,:main_cool_coil_cop3,:main_cool_coil_cop4 +,NE-dxAC-PkgAC-65to134-Ex-EER-11.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.8,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-Ex-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.19,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-Ex-EER-13.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.62,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-10.8,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.81,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.29,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-12.5,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.51,CONSTANT,CONSTANT,0.9,0.8,,, diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/Rel&0&cDXGF&Ex&dxAC_equip.csv b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/Rel&0&cDXGF&Ex&dxAC_equip.csv new file mode 100644 index 00000000..94a4f4a6 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/Rel&0&cDXGF&Ex&dxAC_equip.csv @@ -0,0 +1,7 @@ +skip,case_name,:main_hvac_type,:main_atu_reheat_coil_type,:main_atu_reheat_control,:main_fan_rise,:main_cool_coil_type,:main_heat_coil_type,:main_dx_type,:main_sat_reset_type,:main_sat_temp_max,:main_design_peak_load,:main_oa_econ_type,:main_cool_coil_cop,:main_dx_comp_speed,:main_fan_speed,:main_fan_motor_eff,:main_heat_coil_eff,:main_cool_coil_cop2,:main_cool_coil_cop3,:main_cool_coil_cop4 +,NE-dxAC-PkgAC-65to134-Ex-EER-11.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.8,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-Ex-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.19,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-Ex-EER-13.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.62,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-10.8,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.81,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.29,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-12.5,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.51,CONSTANT,CONSTANT,0.9,0.8,,, diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/Rt3&0&cDXGF&Ex&dxAC_equip.csv b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/Rt3&0&cDXGF&Ex&dxAC_equip.csv new file mode 100644 index 00000000..94a4f4a6 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/Rt3&0&cDXGF&Ex&dxAC_equip.csv @@ -0,0 +1,7 @@ +skip,case_name,:main_hvac_type,:main_atu_reheat_coil_type,:main_atu_reheat_control,:main_fan_rise,:main_cool_coil_type,:main_heat_coil_type,:main_dx_type,:main_sat_reset_type,:main_sat_temp_max,:main_design_peak_load,:main_oa_econ_type,:main_cool_coil_cop,:main_dx_comp_speed,:main_fan_speed,:main_fan_motor_eff,:main_heat_coil_eff,:main_cool_coil_cop2,:main_cool_coil_cop3,:main_cool_coil_cop4 +,NE-dxAC-PkgAC-65to134-Ex-EER-11.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.8,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-Ex-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.19,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-Ex-EER-13.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.62,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-10.8,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.81,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.29,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-12.5,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.51,CONSTANT,CONSTANT,0.9,0.8,,, diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/RtL&0&cDXGF&Ex&dxAC_equip.csv b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/RtL&0&cDXGF&Ex&dxAC_equip.csv new file mode 100644 index 00000000..94a4f4a6 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/RtL&0&cDXGF&Ex&dxAC_equip.csv @@ -0,0 +1,7 @@ +skip,case_name,:main_hvac_type,:main_atu_reheat_coil_type,:main_atu_reheat_control,:main_fan_rise,:main_cool_coil_type,:main_heat_coil_type,:main_dx_type,:main_sat_reset_type,:main_sat_temp_max,:main_design_peak_load,:main_oa_econ_type,:main_cool_coil_cop,:main_dx_comp_speed,:main_fan_speed,:main_fan_motor_eff,:main_heat_coil_eff,:main_cool_coil_cop2,:main_cool_coil_cop3,:main_cool_coil_cop4 +,NE-dxAC-PkgAC-65to134-Ex-EER-11.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.8,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-Ex-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.19,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-Ex-EER-13.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.62,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-10.8,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.81,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.29,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-12.5,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.51,CONSTANT,CONSTANT,0.9,0.8,,, diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/RtS&0&cDXGF&Ex&dxAC_equip.csv b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/RtS&0&cDXGF&Ex&dxAC_equip.csv new file mode 100644 index 00000000..94a4f4a6 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/RtS&0&cDXGF&Ex&dxAC_equip.csv @@ -0,0 +1,7 @@ +skip,case_name,:main_hvac_type,:main_atu_reheat_coil_type,:main_atu_reheat_control,:main_fan_rise,:main_cool_coil_type,:main_heat_coil_type,:main_dx_type,:main_sat_reset_type,:main_sat_temp_max,:main_design_peak_load,:main_oa_econ_type,:main_cool_coil_cop,:main_dx_comp_speed,:main_fan_speed,:main_fan_motor_eff,:main_heat_coil_eff,:main_cool_coil_cop2,:main_cool_coil_cop3,:main_cool_coil_cop4 +,NE-dxAC-PkgAC-65to134-Ex-EER-11.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.8,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-Ex-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.19,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-Ex-EER-13.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.62,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-10.8,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.81,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.29,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-12.5,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.51,CONSTANT,CONSTANT,0.9,0.8,,, diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/SCn&0&cDXGF&Ex&dxAC_equip.csv b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/SCn&0&cDXGF&Ex&dxAC_equip.csv new file mode 100644 index 00000000..94a4f4a6 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/SCn&0&cDXGF&Ex&dxAC_equip.csv @@ -0,0 +1,7 @@ +skip,case_name,:main_hvac_type,:main_atu_reheat_coil_type,:main_atu_reheat_control,:main_fan_rise,:main_cool_coil_type,:main_heat_coil_type,:main_dx_type,:main_sat_reset_type,:main_sat_temp_max,:main_design_peak_load,:main_oa_econ_type,:main_cool_coil_cop,:main_dx_comp_speed,:main_fan_speed,:main_fan_motor_eff,:main_heat_coil_eff,:main_cool_coil_cop2,:main_cool_coil_cop3,:main_cool_coil_cop4 +,NE-dxAC-PkgAC-65to134-Ex-EER-11.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.8,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-Ex-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.19,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-Ex-EER-13.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.62,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-10.8,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.81,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.29,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-12.5,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.51,CONSTANT,CONSTANT,0.9,0.8,,, diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/SUn&0&cDXGF&Ex&dxAC_equip.csv b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/SUn&0&cDXGF&Ex&dxAC_equip.csv new file mode 100644 index 00000000..94a4f4a6 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/SUn&0&cDXGF&Ex&dxAC_equip.csv @@ -0,0 +1,7 @@ +skip,case_name,:main_hvac_type,:main_atu_reheat_coil_type,:main_atu_reheat_control,:main_fan_rise,:main_cool_coil_type,:main_heat_coil_type,:main_dx_type,:main_sat_reset_type,:main_sat_temp_max,:main_design_peak_load,:main_oa_econ_type,:main_cool_coil_cop,:main_dx_comp_speed,:main_fan_speed,:main_fan_motor_eff,:main_heat_coil_eff,:main_cool_coil_cop2,:main_cool_coil_cop3,:main_cool_coil_cop4 +,NE-dxAC-PkgAC-65to134-Ex-EER-11.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.8,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-Ex-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.19,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-Ex-EER-13.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.62,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-10.8,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.81,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.29,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-12.5,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.51,CONSTANT,CONSTANT,0.9,0.8,,, diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/WRf&0&cDXGF&Ex&dxAC_equip.csv b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/WRf&0&cDXGF&Ex&dxAC_equip.csv new file mode 100644 index 00000000..94a4f4a6 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/WRf&0&cDXGF&Ex&dxAC_equip.csv @@ -0,0 +1,7 @@ +skip,case_name,:main_hvac_type,:main_atu_reheat_coil_type,:main_atu_reheat_control,:main_fan_rise,:main_cool_coil_type,:main_heat_coil_type,:main_dx_type,:main_sat_reset_type,:main_sat_temp_max,:main_design_peak_load,:main_oa_econ_type,:main_cool_coil_cop,:main_dx_comp_speed,:main_fan_speed,:main_fan_motor_eff,:main_heat_coil_eff,:main_cool_coil_cop2,:main_cool_coil_cop3,:main_cool_coil_cop4 +,NE-dxAC-PkgAC-65to134-Ex-EER-11.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.8,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-Ex-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.19,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-Ex-EER-13.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.62,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-10.8,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.81,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.29,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-12.5,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.51,CONSTANT,CONSTANT,0.9,0.8,,, From 11ba477ff1582e6c99ae7a18b7fc7c4ba33c4520 Mon Sep 17 00:00:00 2001 From: Shaojie Wang <55248793+wsjsxn@users.noreply.github.com> Date: Sat, 29 Nov 2025 21:01:03 -0600 Subject: [PATCH 06/23] Delete commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/test --- .../SWHC043 Multi_Cap_Com_ACEx_Ex/cases/test | 1 - 1 file changed, 1 deletion(-) delete mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/test diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/test b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/test deleted file mode 100644 index 8b137891..00000000 --- a/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cases/test +++ /dev/null @@ -1 +0,0 @@ - From 0b31e16fa7129c195059de64728ba9501d4dd7f2 Mon Sep 17 00:00:00 2001 From: Shaojie Wang <55248793+wsjsxn@users.noreply.github.com> Date: Sat, 29 Nov 2025 21:01:34 -0600 Subject: [PATCH 07/23] Add files via upload --- .../climates.csv | 17 ++++++++++ .../SWHC043 Multi_Cap_Com_ACEx_Ex/cohorts.csv | 23 +++++++++++++ .../SWHC043 Multi_Cap_Com_ACEx_Ex/query.txt | 32 +++++++++++++++++++ 3 files changed, 72 insertions(+) create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/climates.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cohorts.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/query.txt diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/climates.csv b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/climates.csv new file mode 100644 index 00000000..b9b8d4a8 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/climates.csv @@ -0,0 +1,17 @@ +skip,climate,weather_file,climate_zone,codes_file +,CZ01,CA_EUREKA_725940S_CZ2022.epw,1,T24_weight_averaged_ex.csv +,CZ02,CA_NAPA-CO_724955S_CZ2022.epw,2,T24_weight_averaged_ex.csv +,CZ03,CA_OAKLAND-METRO-AP_724930S_CZ2022.epw,3,T24_weight_averaged_ex.csv +,CZ04,CA_SAN-JOSE-IAP_724945S_CZ2022.epw,4,T24_weight_averaged_ex.csv +,CZ05,CA_SANTA-MARIA-PUBLIC-AP_723940S_CZ2022.epw,5,T24_weight_averaged_ex.csv +,CZ06,CA_LOS-ANGELES-IAP_722950S_CZ2022.epw,6,T24_weight_averaged_ex.csv +,CZ07,CA_SAN-DIEGO-LINDBERGH-FLD_722900S_CZ2022.epw,7,T24_weight_averaged_ex.csv +,CZ08,CA_LONG-BEACH-DAUGHERTY-FLD_722970S_CZ2022.epw,8,T24_weight_averaged_ex.csv +,CZ09,CA_LOS-ANGELES-DOWNTOWN-USC_722874S_CZ2022.epw,9,T24_weight_averaged_ex.csv +,CZ10,CA_RIVERSIDE-MUNI_722869S_CZ2022.epw,10,T24_weight_averaged_ex.csv +,CZ11,CA_RED-BLUFF-MUNI-AP_725910S_CZ2022.epw,11,T24_weight_averaged_ex.csv +,CZ12,CA_STOCKTON-METRO-AP_724920S_CZ2022.epw,12,T24_weight_averaged_ex.csv +,CZ13,CA_FRESNO-YOSEMITE-IAP_723890S_CZ2022.epw,13,T24_weight_averaged_ex.csv +,CZ14,CA_DAGGETT-BARSTOW-AP_723815S_CZ2022.epw,14,T24_weight_averaged_ex.csv +,CZ15,CA_EL-CENTRO-NAF_722810S_CZ2022.epw,15,T24_weight_averaged_ex.csv +,CZ16,CA_BISHOP-AP_724800S_CZ2022.epw,16,T24_weight_averaged_ex.csv diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cohorts.csv b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cohorts.csv new file mode 100644 index 00000000..679363f7 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/cohorts.csv @@ -0,0 +1,23 @@ +skip,cohort,root,wall_type,:wall_base_cavity_insul,:wall_base_cont_insul,:roof_base_cont_insul,:window_u,:window_shgc,:window_transmittance,:floor_base_cont_insul,:office_large_light_area,:kitchen_light_area,:dining_fast_light_area,:classroom_class_light_area,:corridor_light_area,:retail_sales_light_area,:storage_warehouse_light_area,:computer_light_area,:lobby_light_area,:guestroom_light_area,:auditorium_light_area,:conference_light_area,:dining_fine_light_area,:gym_light_area,:restroom_light_area,:health_patient_light_area,:industrial_low_light_area,:laundry_light_area,:auto_light_area,:classroom_shop_light_area,:grocery_light_area,:health_operating_light_area,:industrial_high_light_area,:lab_light_area,:mech_light_area,:office_open_light_area,:storage_refrig_light_area,:office_small_light_area,:main_oa_econ_max_temp +,Asm&0&cDXGF&Ex&dxAC_equip,Asm/templates/root.pxt,Mass Heavy,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Metal Framed"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Metal Buildings"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Lighting Power Density"", ""office_large"", ""LPD"")['W/ft2']",,,,,,,,,,"%= codes.lookup(""Lighting Power Density"", ""auditorium"", ""LPD"")['W/ft2']",,,,,,,,,,,,,,,,,,"%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +,ECC&0&cDXGF&Ex&dxAC_equip,ECC/templates/root.pxt,Mass Heavy,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Metal Buildings"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Lighting Power Density"", ""office_large"", ""LPD"")['W/ft2']","%= codes.lookup(""Lighting Power Density"", ""kitchen"", ""LPD"")['W/ft2']","%= codes.lookup(""Lighting Power Density"", ""dining_fast"", ""LPD"")['W/ft2']","%= codes.lookup(""Lighting Power Density"", ""classroom_class"", ""LPD"")['W/ft2']",,,,"%= codes.lookup(""Lighting Power Density"", ""computer"", ""LPD"")['W/ft2']",,,,,,,,,,,,"%= codes.lookup(""Lighting Power Density"", ""classroom_shop"", ""LPD"")['W/ft2']",,,,,,,,,"%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +,EPr&0&cDXGF&Ex&dxAC_equip,EPr/templates/root.pxt,Wood Frame,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Wood Framed and Other"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Wood Framed and Other"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Wood Framed and Other"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']",,"%= codes.lookup(""Lighting Power Density"", ""kitchen"", ""LPD"")['W/ft2']","%= codes.lookup(""Lighting Power Density"", ""dining_fast"", ""LPD"")['W/ft2']","%= codes.lookup(""Lighting Power Density"", ""classroom_class"", ""LPD"")['W/ft2']",,,,,,,,,,"%= codes.lookup(""Lighting Power Density"", ""gym"", ""LPD"")['W/ft2']",,,,,,,,,,,,,,,"%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +,ERC&0&cDXGF&Ex&dxAC_equip,ERC/templates/root.pxt,Wood Frame,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Wood Framed and Other"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Wood Framed and Other"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Wood Framed and Other"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']",,,,"%= codes.lookup(""Lighting Power Density"", ""classroom_class"", ""LPD"")['W/ft2']",,,,,,,,,,,,,,,,,,,,,,,,,"%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +,ESe&0&cDXGF&Ex&dxAC_equip,ESe/templates/root.pxt,Mass Heavy,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Wood Framed and Other"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']",,"%= codes.lookup(""Lighting Power Density"", ""kitchen"", ""LPD"")['W/ft2']","%= codes.lookup(""Lighting Power Density"", ""dining_fast"", ""LPD"")['W/ft2']","%= codes.lookup(""Lighting Power Density"", ""classroom_class"", ""LPD"")['W/ft2']",,,,"%= codes.lookup(""Lighting Power Density"", ""computer"", ""LPD"")['W/ft2']",,,,,,"%= codes.lookup(""Lighting Power Density"", ""gym"", ""LPD"")['W/ft2']",,,,,,,,,,,,,,,"%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +,EUn&0&cDXGF&Ex&dxAC_equip,EUn/templates/root.pxt,Mass Heavy,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Metal Framed"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Metal Buildings"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Lighting Power Density"", ""office_large"", ""LPD"")['W/ft2']","%= codes.lookup(""Lighting Power Density"", ""kitchen"", ""LPD"")['W/ft2']","%= codes.lookup(""Lighting Power Density"", ""dining_fast"", ""LPD"")['W/ft2']","%= codes.lookup(""Lighting Power Density"", ""classroom_class"", ""LPD"")['W/ft2']","%= codes.lookup(""Lighting Power Density"", ""corridor"", ""LPD"")['W/ft2']",,,"%= codes.lookup(""Lighting Power Density"", ""computer"", ""LPD"")['W/ft2']",,"%= codes.lookup(""Lighting Power Density"", ""guestroom"", ""LPD"")['W/ft2']",,,,,,,"%= codes.lookup(""Lighting Power Density"", ""industrial_low"", ""LPD"")['W/ft2']",,,,,,,,,,,,"%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +,Gro&0&cDXGF&Ex&dxAC_equip,Gro/templates/root.pxt,Mass Heavy,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Metal Framed"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Metal Buildings"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Lighting Power Density"", ""office_large"", ""LPD"")['W/ft2']",,,,,,,,,,,,,,,,,,,,"%= codes.lookup(""Lighting Power Density"", ""grocery"", ""LPD"")['W/ft2']",,"%= codes.lookup(""Lighting Power Density"", ""industrial_high"", ""LPD"")['W/ft2']",,,,"%= codes.lookup(""Lighting Power Density"", ""storage_refrig"", ""LPD"")['W/ft2']",,"%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +,Hsp&0&cDXGF&Ex&dxAC_equip,Hsp/templates/root.pxt,Mass Heavy,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Metal Buildings"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Lighting Power Density"", ""office_large"", ""LPD"")['W/ft2']","%= codes.lookup(""Lighting Power Density"", ""kitchen"", ""LPD"")['W/ft2']","%= codes.lookup(""Lighting Power Density"", ""dining_fast"", ""LPD"")['W/ft2']",,,,,,,,,,,,,"%= codes.lookup(""Lighting Power Density"", ""health_patient"", ""LPD"")['W/ft2']",,,,,,"%= codes.lookup(""Lighting Power Density"", ""health_operating"", ""LPD"")['W/ft2']",,,,,,,"%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +#,Htl&0&cDXGF&Ex&dxAC_equip,Htl/templates/root.pxt,Mass Heavy,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Metal Framed"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Metal Buildings"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Lighting Power Density"", ""office_large"", ""LPD"")['W/ft2']","%= codes.lookup(""Lighting Power Density"", ""kitchen"", ""LPD"")['W/ft2']",,,"%= codes.lookup(""Lighting Power Density"", ""corridor"", ""LPD"")['W/ft2']",,,,"%= codes.lookup(""Lighting Power Density"", ""lobby"", ""LPD"")['W/ft2']","%= codes.lookup(""Lighting Power Density"", ""guestroom"", ""LPD"")['W/ft2']",,,"%= codes.lookup(""Lighting Power Density"", ""dining_fine"", ""LPD"")['W/ft2']",,,,,"%= codes.lookup(""Lighting Power Density"", ""laundry"", ""LPD"")['W/ft2']",,,,,,,,,,,"%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +,MBT&0&cDXGF&Ex&dxAC_equip,MBT/templates/root.pxt,Metal Frame,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Metal Framed"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Metal Framed"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Metal Buildings"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Lighting Power Density"", ""office_large"", ""LPD"")['W/ft2']","%= codes.lookup(""Lighting Power Density"", ""kitchen"", ""LPD"")['W/ft2']","%= codes.lookup(""Lighting Power Density"", ""dining_fast"", ""LPD"")['W/ft2']",,"%= codes.lookup(""Lighting Power Density"", ""corridor"", ""LPD"")['W/ft2']",,,"%= codes.lookup(""Lighting Power Density"", ""computer"", ""LPD"")['W/ft2']",,,,"%= codes.lookup(""Lighting Power Density"", ""conference"", ""LPD"")['W/ft2']",,,,,,,,,,,,"%= codes.lookup(""Lighting Power Density"", ""lab"", ""LPD"")['W/ft2']",,,,,"%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +,MLI&0&cDXGF&Ex&dxAC_equip,MLI/templates/root.pxt,Mass Heavy,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Metal Framed"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Metal Buildings"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']",,,,,,,"%= codes.lookup(""Lighting Power Density"", ""storage_warehouse"", ""LPD"")['W/ft2']",,,,,,,,,,"%= codes.lookup(""Lighting Power Density"", ""industrial_low"", ""LPD"")['W/ft2']",,,,,,,,,,,,"%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +,Mtl&0&cDXGF&Ex&dxAC_equip,Mtl/templates/root.pxt,Wood Frame,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Wood Framed and Other"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Wood Framed and Other"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Wood Framed and Other"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Lighting Power Density"", ""office_large"", ""LPD"")['W/ft2']",,,,"%= codes.lookup(""Lighting Power Density"", ""corridor"", ""LPD"")['W/ft2']",,,,,"%= codes.lookup(""Lighting Power Density"", ""guestroom"", ""LPD"")['W/ft2']",,,,,,,,"%= codes.lookup(""Lighting Power Density"", ""laundry"", ""LPD"")['W/ft2']",,,,,,,,,,,"%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +,Nrs&0&cDXGF&Ex&dxAC_equip,Nrs/templates/root.pxt,Wood Frame,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Wood Framed and Other"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Wood Framed and Other"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Wood Framed and Other"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Lighting Power Density"", ""office_large"", ""LPD"")['W/ft2']","%= codes.lookup(""Lighting Power Density"", ""kitchen"", ""LPD"")['W/ft2']","%= codes.lookup(""Lighting Power Density"", ""dining_fast"", ""LPD"")['W/ft2']",,"%= codes.lookup(""Lighting Power Density"", ""corridor"", ""LPD"")['W/ft2']",,,,,,,,,,,"%= codes.lookup(""Lighting Power Density"", ""health_patient"", ""LPD"")['W/ft2']",,,,,,,,,,,,,"%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +,OfL&0&cDXGF&Ex&dxAC_equip,OfL/templates/root.pxt,Metal Frame,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Metal Framed"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Metal Framed"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Metal Buildings"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Lighting Power Density"", ""office_large"", ""LPD"")['W/ft2']",,,,,,,,"%= codes.lookup(""Lighting Power Density"", ""lobby"", ""LPD"")['W/ft2']",,,,,,,,,,,,,,,,"%= codes.lookup(""Lighting Power Density"", ""mech"", ""LPD"")['W/ft2']","%= codes.lookup(""Lighting Power Density"", ""office_open"", ""LPD"")['W/ft2']",,,"%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +,OfS&0&cDXGF&Ex&dxAC_equip,OfS/templates/root.pxt,Wood Frame,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Wood Framed and Other"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Wood Framed and Other"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Wood Framed and Other"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Lighting Power Density"", ""office_large"", ""LPD"")['W/ft2']",,,,"%= codes.lookup(""Lighting Power Density"", ""corridor"", ""LPD"")['W/ft2']",,,,,,,,,,,,,,,,,,,,,,,"%= codes.lookup(""Lighting Power Density"", ""office_small"", ""LPD"")['W/ft2']","%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +,RFF&0&cDXGF&Ex&dxAC_equip,RFF/templates/root.pxt,Mass Heavy,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Wood Framed and Other"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']",,"%= codes.lookup(""Lighting Power Density"", ""kitchen"", ""LPD"")['W/ft2']","%= codes.lookup(""Lighting Power Density"", ""dining_fast"", ""LPD"")['W/ft2']",,,,,,"%= codes.lookup(""Lighting Power Density"", ""lobby"", ""LPD"")['W/ft2']",,,,,,"%= codes.lookup(""Lighting Power Density"", ""restroom"", ""LPD"")['W/ft2']",,,,,,,,,,,,,,"%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +,RSD&0&cDXGF&Ex&dxAC_equip,RSD/templates/root.pxt,Wood Frame,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Wood Framed and Other"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Wood Framed and Other"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Wood Framed and Other"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']",,"%= codes.lookup(""Lighting Power Density"", ""kitchen"", ""LPD"")['W/ft2']",,,,,,,"%= codes.lookup(""Lighting Power Density"", ""lobby"", ""LPD"")['W/ft2']",,,,"%= codes.lookup(""Lighting Power Density"", ""dining_fine"", ""LPD"")['W/ft2']",,"%= codes.lookup(""Lighting Power Density"", ""restroom"", ""LPD"")['W/ft2']",,,,,,,,,,,,,,"%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +,Rt3&0&cDXGF&Ex&dxAC_equip,Rt3/templates/root.pxt,Mass Heavy,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Metal Buildings"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']",,,,,,"%= codes.lookup(""Lighting Power Density"", ""retail_sales"", ""LPD"")['W/ft2']",,,,,,,,,,,,,,,,,,,,,,,"%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +,RtL&0&cDXGF&Ex&dxAC_equip,RtL/templates/root.pxt,Mass Heavy,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Metal Framed"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Metal Buildings"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Lighting Power Density"", ""office_large"", ""LPD"")['W/ft2']","%= codes.lookup(""Lighting Power Density"", ""kitchen"", ""LPD"")['W/ft2']",,,,"%= codes.lookup(""Lighting Power Density"", ""retail_sales"", ""LPD"")['W/ft2']","%= codes.lookup(""Lighting Power Density"", ""storage_warehouse"", ""LPD"")['W/ft2']",,,,,,,,,,,,"%= codes.lookup(""Lighting Power Density"", ""auto"", ""LPD"")['W/ft2']",,,,,,,,,,"%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +,RtS&0&cDXGF&Ex&dxAC_equip,RtS/templates/root.pxt,Mass Heavy,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Wood Framed and Other"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']",,,,,,"%= codes.lookup(""Lighting Power Density"", ""retail_sales"", ""LPD"")['W/ft2']","%= codes.lookup(""Lighting Power Density"", ""storage_warehouse"", ""LPD"")['W/ft2']",,,,,,,,,,,,,,,,,,,,,,"%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +,SCn&0&cDXGF&Ex&dxAC_equip,SCn/templates/root.pxt,Mass Heavy,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Metal Framed"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Metal Buildings"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']",,,,,,,"%= codes.lookup(""Lighting Power Density"", ""storage_warehouse"", ""LPD"")['W/ft2']",,,,,,,,,,,,,,,,,,,,,,"%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +#,WRf&0&cDXGF&Ex&dxAC_equip,WRf/templates/root.pxt,Mass Heavy,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Wood Framed and Other"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']",,,,,,,"%= codes.lookup(""Lighting Power Density"", ""storage_warehouse"", ""LPD"")['W/ft2']",,,,,,,,,,,,,,,,,,,,,,"%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/query.txt b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/query.txt new file mode 100644 index 00000000..f16ea16a --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/SWHC043 Multi_Cap_Com_ACEx_Ex/query.txt @@ -0,0 +1,32 @@ +AnnualBuildingUtilityPerformanceSummary/Entire Facility/Site and Source Energy/Energy Per Total Building Area/Net Site Energy, Net Site EUI +AnnualBuildingUtilityPerformanceSummary/Entire Facility/Site and Source Energy/Total Energy/Net Site Energy, Net Site Energy +AnnualBuildingUtilityPerformanceSummary/Entire Facility/Site and Source Energy/Energy Per Total Building Area/Net Source Energy, Net Source EUI +AnnualBuildingUtilityPerformanceSummary/Entire Facility/Site and Source Energy/Total Energy/Net Source Energy, Net Source Energy + +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Total End Uses, Total +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Heating, Heating +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Cooling, Cooling +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Interior Lighting, Interior Lighting +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Exterior Lighting, Exterior Lighting +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Interior Equipment, Interior Equipment +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Exterior Equipment, Exterior Equipment +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Fans, Fans +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Pumps, Pumps +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Heat Rejection, Heat Rejection +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Humidification, Humidification +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Heat Recovery, Heat Recovery +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Water Systems, Water Systems +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Refrigeration, Refrigeration +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Generators, Generators +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Electricity/Heating, Heating Elec +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Electricity/Cooling, Cooling Elec +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Natural Gas/Heating, Heating NG +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Natural Gas/Cooling, Cooling NG +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Electricity/Interior Equipment, Interior Equipment Elec +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Natural Gas/Interior Equipment, Interior Equipment NG + +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Electricity/Total End Uses, Electricity +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Natural Gas/Total End Uses, Natural Gas + +AnnualBuildingUtilityPerformanceSummary/Entire Facility/Comfort and Setpoint Not Met Summary/Facility/Time Setpoint Not Met During Occupied Heating, Unmet Heating +AnnualBuildingUtilityPerformanceSummary/Entire Facility/Comfort and Setpoint Not Met Summary/Facility/Time Setpoint Not Met During Occupied Cooling, Unmet Cooling From e06e27340b98a08f3c4b02cd083e089874dba7ca Mon Sep 17 00:00:00 2001 From: Shaojie Wang <55248793+wsjsxn@users.noreply.github.com> Date: Sat, 29 Nov 2025 21:01:58 -0600 Subject: [PATCH 08/23] Add files via upload --- .../.modelkit-config | 24 + .../SWHC043 Multi_Cap_Com_ACEx/global.pxv | 2 + .../SWHC043 Multi_Cap_Com_ACEx/rakefile.rb | 1010 +++++++++++++++++ 3 files changed, 1036 insertions(+) create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACEx/.modelkit-config create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACEx/global.pxv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACEx/rakefile.rb diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACEx/.modelkit-config b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/.modelkit-config new file mode 100644 index 00000000..3045867c --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/.modelkit-config @@ -0,0 +1,24 @@ + +# Paths are expanded relative to this modelkit-config file. + +prototypes-dir = '../../prototypes' +templates-dir = '../../templates/energyplus/templates' +weather-dir = '../../weather' +codes-dir = '../../codes' + +max-workers = 100 # Maximum number of simulations to run in parallel + + +[template-compose] +annotate = true +indent = " " +esc-line = "! " +dirs = '~\Documents\Modelkit Caboodle\templates\energyplus\templates' # Must be an absolute path + +[energyplus-run] +engine = 'C:\EnergyPlusV22-2-0' # Must be an absolute path +#engine = '/Applications/EnergyPlus-22-2-0' # Must be an absolute path +#engine = '/Applications/EnergyPlus-9-2-0' # Must be an absolute path +readvars = true +keep = false +output-files = "eplusout.err; eplusout.sql; eplustbl.htm; eplusvar.csv" diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACEx/global.pxv b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/global.pxv new file mode 100644 index 00000000..c707bb60 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/global.pxv @@ -0,0 +1,2 @@ +:timestep => 6, +:run_control => "ANNUAL" # ANNUAL | SIZING diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACEx/rakefile.rb b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/rakefile.rb new file mode 100644 index 00000000..1e850689 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACEx/rakefile.rb @@ -0,0 +1,1010 @@ +# Copyright (c) 2011-2020 Big Ladder Software LLC. All rights reserved. +# See the file "license.txt" for additional terms and conditions. + +if (not defined?(Modelkit)) + begin + require("modelkit") + rescue LoadError => exception + args = ARGV.join(" ") + puts exception + puts "\e[1m\e[31mERROR: This rakefile requires the Modelkit library. Make sure that you have the\nModelkit gem installed in your local Rubygems environment, or try running the\nrakefile using your stand-alone installation of Modelkit by typing:\e[0m\n \e[1mmodelkit rake #{args}\e[0m" + exit + end +end + + +require("pathname") +require("json") + +require("modelkit/config") +require("modelkit/multitable") +require("modelkit/parametrics") +require("modelkit/parametrics/worksheet") +require("modelkit/energyplus") + + +# Add to modelkit-energyplus: +# other args: +# - which design days +# - water mains temp? +# - daylight saving time? +def generate_site_pxt(idd, ddy_path, site_path) + site_file = File.open(site_path, "w") + + if (File.exists?(ddy_path)) + input_file = OpenStudio::InputFile.open(idd, ddy_path) + else + raise("file not found: #{ddy_path.inspect}") + end + + site_locations = input_file.find_objects_by_class_name("Site:Location").to_a + + if (site_locations.empty?) + raise("could not find Site:Location object in #{ddy_path.inspect}") + else + site_file.puts(site_locations.first.to_idf) + end + + all_design_days = input_file.find_objects_by_class_name("SizingPeriod:DesignDay").to_a + selected_design_days = all_design_days.select { |dd| dd.name[/Ann Htg 99.6% Condns DB|Ann Clg 0?.4% Condns DB/i] } + + if (selected_design_days.length < 2) + puts "warning: could not find requested design days; including all design days\n" + selected_design_days = all_design_days + end + + # Write design days to site file. + selected_design_days.each { |dd| site_file.puts(dd.to_idf) } + + +# 'CorrelationFromWeatherFile' is available starting in EP 9.0. + +# Does this work for design-day only runs? +# Seems to work for annual. + site_file.puts("\n\nSite:WaterMainsTemperature,\n CorrelationFromWeatherFile;\n") + + daylight_saving_time = input_file.find_objects_by_class_name("RunPeriodControl:DaylightSavingTime").to_a + if (not daylight_saving_time.empty?) + site_file.puts + site_file.puts(daylight_saving_time.first.to_idf) + end + + site_file.close +end + + +# NOPUB Should move into Modelkit somewhere. +# Support for running simulations in parallel. +require("open3") +require("set") + +$child_pids = Set.new # Global tracking of child PIDs + +# Return PID? +def run_process(command, dir) + # NOTE: Separate processes are required to make the EnergyPlus runs thread safe! + Open3.popen3(command, :chdir => dir) do |stdin, stdout, stderr, thread| + $child_pids.add(thread.pid) + # This might work with just an instance variable or similar. + + stdin.close # All input already sent with command + + file_out = File.open("#{dir}/stdout", "w") + file_err = File.open("#{dir}/stderr", "w") + + while (line = stdout.gets) + file_out.puts(line) + #@proc_out.call(line) if (@proc_out) + end + + # This is probably not right. + while (line = stderr.gets) + file_err.puts(line) + #@proc_err.call(line) if (@proc_err) + end + + stdout.close + stderr.close + + file_out.close + file_err.close + + #print "Completed: #{File.basename(dir)}\n" + $child_pids.delete(thread.pid) + end +end + +# Search up through parent directories for one or more possible file names. +def search_parent_dirs(start_dir, *file_names) + path = nil + dir_names = start_dir.to_s.split("/") + while (not dir_names.empty?) do + file_names.each do |file_name| + test_path = "#{dir_names.join("/")}/#{file_name}" + if (File.exist?(test_path)) + path = test_path + break + end + end + break if (path) + dir_names.pop + end + return(path) +end + +# Search for a file name or partial path in an array of provided directories. +# Directories are expected to already be absolute paths. +def resolve_path(path, dirs) + resolved_path = nil + dirs.each do |dir| + expanded_path = File.expand_path(path, dir) + if (File.exist?(expanded_path)) + resolved_path = expanded_path + break + end + end + return(resolved_path) +end + +# Clean up any previous output files left behind if 'compose' or 'run' fails. +# Leftover files can be processed unintentionally by downstream tasks and +# ultimately generate false results. +def clean_energyplus_output_files(dir) + # Not all of these files might be present. Others might be present and unhandled. + paths = [ + "#{dir}/instance-out.err", + "#{dir}/instance-out.rdd", + "#{dir}/instance-out.sql", # Most important for downstream tasks + "#{dir}/instance-tbl.htm", + "#{dir}/instance-var.csv", + "#{dir}/stderr", + "#{dir}/stdout" + ] + FileUtils.rm_f(paths) +end + + +# Rake stubbornly sets the working directory to wherever the Rakefile is located. +# The target directory could optionally be set from a CLI option instead. +study_dir = Rake.application.original_dir + +climates_csv_path = "#{study_dir}/climates.csv" +cohorts_csv_path = "#{study_dir}/cohorts.csv" + +query_path = "#{study_dir}/query.txt" +results_summary_path = "#{study_dir}/results-summary.csv" +results_profile_elec_path = "#{study_dir}/results-profile-elec.csv" +results_profile_gas_path = "#{study_dir}/results-profile-gas.csv" +results_paths = [results_summary_path, results_profile_elec_path, results_profile_gas_path] + +cases_dir = "#{study_dir}/cases" +runs_dir = "#{study_dir}/runs" +runs_pathname = Pathname.new(runs_dir) + +MUTEX = Mutex.new # Thread lock for when something needs to run in a single thread + +config_path = search_parent_dirs(study_dir, ".modelkit-config") +if (not config_path) + raise("modelkit-config file not found in working directory or any parent directory") +else + CONFIG = Modelkit::Config.new(config_path) + puts "Using modelkit-config at #{config_path}\n" +end + +config = Hash.new +[:prototypes_dir, :templates_dir, :weather_dir, :codes_dir].each do |key| + config[key] = [] + field = key.to_s.gsub(/_/, "-") + if (not CONFIG[field]) + raise("#{field} variable missing in modelkit-config") + else + config_paths = CONFIG[field].split(/\s*;\s*/) # Split string with semicolons into array of paths + config_paths.each do |path| + # Resolve path relative to modelkit-config file and normalize the slashes. + config[key] << File.expand_path(path.strip.gsub(/\\/, "/"), File.dirname(config_path)) + end + end +end + +max_workers = CONFIG["max-workers"] +if (max_workers.nil?) + max_workers = 1 +end + +global_pxv_path = search_parent_dirs(study_dir, "global.pxv") +if (global_pxv_path) + puts "Using global.pxv at #{global_pxv_path}\n" +end + +rake_tasks = Rake.application.top_level_tasks +rake_task_name = rake_tasks.first # Multiple tasks are allowed, but assume one + +rake_options = Rake.application.options +rake_options.always_multitask = true # --multitask, -m +#rake_options.job_stats = true # --job-stats true | :history +rake_options.thread_pool_size = max_workers - 1 # --jobs, -j (default 12 on Mac) + +if (rake_options.dryrun or rake_options.show_all_tasks or + rake_options.show_prereqs or rake_options.show_tasks) + # These are information-only requests. Rake nonetheless registers as invoked + # with the "default" task name but nothing actually gets run. + rake_task_name = "none" +end + + +# Show threads message and info about how to change +# Running with 8 threads (edit .modelkit-config to change). +# Type Ctrl+C to cancel all tasks. + +require "io/console" # need this anyway for progress bar + +#$stdin.echo = false # turn off echo; in Mac shows a cursor with a key icon +# This prevents the user from over-typing the output stream. + +# also try switching to raw mode--should also block user input; maybe no key icon? + +#print "\e[?25l" # hide the cursor; MUST remember to show it again on exit or else it's permanent for the session! + + +trap("INT") do # Ctrl+C (polite kill) + puts "Canceling all tasks.\n" + if ($child_pids) + $child_pids.each { |pid| Process.kill("KILL", pid) } + end + exit +end + +if (Modelkit::Platform.unix?) + trap("TSTP") do # Ctrl+Z (suspend) + puts "Suspending all tasks. Type 'fg' to resume.\n" + exit + end +end + +if (not rake_task_name =~ /^(prune|clean|none)$/) + +# If possible, detect if any tasks will be run before showing this message: +puts "\e[1mType Ctrl+C to cancel all tasks.\e[0m\n" + +end + +# modelkit rake -A crashes for some reason + +# NOPUB Some of above could be included here too. +# Don't evaluate worksheets and generate file tasks if not necessary! +# NOTE: prune does need to evaluate worksheets. +if (not rake_task_name =~ /^(clean|none)$/) + + pxv_paths = [] + site_paths = [] + + compose_idf_paths = [] + + + #rename size_ to sizerun_ size_run_ sizing_run_ + size_ref_paths = [] + size_idf_paths = [] + size_sql_paths = [] + size_json_paths = [] + + hardsize_idf_paths = [] + + run_sql_paths = [] + run_csv_paths = [] + + + + old_site_paths = Dir.glob("#{runs_dir}/*/site.pxt") + old_pxv_paths = Dir.glob("#{runs_dir}/**/instance.pxv") + + climates = Modelkit::Worksheet.open(climates_csv_path) + cohorts = Modelkit::Worksheet.open(cohorts_csv_path) + + climate_pattern = ENV["CLIMATE"] || "" + + new_case_csv = "skip,case_name\n,defaults\n" # Could be read from config instead + + cohorts_first_pass = true + + puts "Evaluating worksheets...\n" + + csv_table = climates.each_row do |row1, index1, variables1, parameters1| + #puts "climate_index = #{index1}" + + if (not variables1.key?(:climate)) + raise("required column \"climate\" is missing in #{File.basename(climates_csv_path)}") + end + + climate_name = variables1[:climate].to_s.strip # Could have been converted to non-string by Util.value_from_string + if (climate_name.empty?) + raise("climate field cannot be blank for row #{index1 + 2} of #{File.basename(climates_csv_path)}") + end + + next if (not climate_name =~ Regexp.new(climate_pattern)) + + FileUtils.mkdir_p("#{runs_dir}/#{climate_name}") + + site_path = "#{runs_dir}/#{climate_name}/site.pxt" + if (site_paths.include?(site_path)) + puts "warning: duplicate name #{climate_name.inspect} in climate column at row #{index1 + 2} in #{File.basename(climates_csv_path)}; row will be skipped" + next + end + + site_paths << site_path + + if (not variables1.key?(:weather_file)) + raise("required column \"weather_file\" is missing in #{File.basename(climates_csv_path)}") + end + + weather_name = variables1[:weather_file].to_s.strip # Could have been converted to non-string by Util.value_from_string + if (weather_name.empty?) + raise("weather_file field cannot be blank for row #{index1 + 2} of #{File.basename(climates_csv_path)}") + end + + epw_path = resolve_path(weather_name, config[:weather_dir]) + if (not epw_path) + puts "Could not resolve path #{weather_name.inspect} from possible paths:\n" + config[:weather_dir].each { |dir| puts " #{File.expand_path(weather_name, dir).inspect}\n" } + puts "Check the weather-dir variable in modelkit-config file.\n" + raise("weather file #{weather_name.inspect} not found for row #{index1 + 2} of #{File.basename(climates_csv_path)}") + end + + if (not File.file?(epw_path)) + raise("weather file #{epw_path.inspect} is not a file for row #{index1 + 2} of #{File.basename(climates_csv_path)}") + end + + ddy_path = "#{File.dirname(epw_path)}/#{File.basename(epw_path, ".*")}.ddy" # Ensure ddy is from same directory as resolved epw file + if (not File.exist?(ddy_path)) + puts "Weather file path resolved to #{epw_path.inspect}\n" + raise("ddy file #{ddy_path.inspect} not found for row #{index1 + 2} of #{File.basename(climates_csv_path)}") + end + + # This file only exists to indicate if the weather file changes for dependency purposes. + # The weather file is the one input that is separate from instance parameters. + weather_path = "#{runs_dir}/#{climate_name}/weather" + pathname = Pathname.new(weather_path).relative_path_from(runs_pathname) + + if (File.exist?(weather_path)) + old_epw_path = File.read(weather_path) + if (epw_path != old_epw_path) + puts "Updating: #{pathname}\n" + File.write(weather_path, epw_path) + end + else + puts "Writing: #{pathname}\n" + File.write(weather_path, epw_path) + end + + # generate site.pxt from .ddy file + file site_path => [weather_path, ddy_path] do + idd = open_data_dictionary + pathname = Pathname.new(site_path).relative_path_from(runs_pathname) + puts "Generating: #{pathname}\n" + generate_site_pxt(idd, ddy_path, site_path) + end + + if (variables1.key?(:codes_file)) # NOTE: codes_file is an optional column + codes_name = variables1[:codes_file].to_s.strip # Could have been converted to non-string by Util.value_from_string + if (codes_name.empty?) + raise("codes_file field cannot be blank for row #{index1 + 2} of #{File.basename(climates_csv_path)}") + end + + codes_path = resolve_path(codes_name, config[:codes_dir]) + if (not codes_path) + puts "Could not resolve path #{codes_name.inspect} from possible paths:\n" + config[:codes_dir].each { |dir| puts " #{File.expand_path(codes_name, dir).inspect}\n" } + puts "Check the codes-dir variable in modelkit-config file.\n" + raise("codes file #{codes_name.inspect} not found for row #{index1 + 2} of #{File.basename(climates_csv_path)}") + end + + if (not File.file?(codes_path)) + raise("codes file #{codes_path.inspect} is not a file for row #{index1 + 2} of #{File.basename(climates_csv_path)}") + end + + codes_table = Modelkit::MultiTable.new(codes_path) + + else + codes_table = nil # Must set something to pass to next worksheet + end + + variables1[:codes] = codes_table # For backwards compatibility + + # Make sure objects passed in are not mutated by the Worksheet. Make dupes? + + cohort_names = [] # Accumulate names to check for duplicates + + cohorts.each_row(variables1) do |_, index2, variables2, parameters2| + #puts " cohort_index = #{index2}" + + # NOTE: Variables from outer worksheet (variables1) are copied into this worksheet. + # Changes to the variables here (variables2) do not propagate back up. + + if (not variables2.key?(:cohort)) + raise("required column \"cohort\" is missing in #{File.basename(cohorts_csv_path)}") + end + + cohort_name = variables2[:cohort].to_s.strip # Could have been converted to non-string by Util.value_from_string + if (cohort_name.empty?) + raise("cohort field cannot be blank for row #{index2 + 2} of #{File.basename(cohorts_csv_path)}") + end + + if (cohort_names.include?(cohort_name)) + if (cohorts_first_pass) # Only warn about this row once + puts "warning: duplicate name #{cohort_name.inspect} in cohort column at row #{index2 + 2} in #{File.basename(cohorts_csv_path)}; row will be skipped" + end + next + end + + cohort_names << cohort_name + + cases_csv_path = "#{cases_dir}/#{cohort_name}.csv" + cases_csv_short_path = "#{File.basename(cases_dir)}/#{cohort_name}.csv" + if (not File.exist?(cases_csv_path)) + puts("Cases worksheet #{cases_csv_short_path.inspect} not found for row #{index2 + 2} of #{File.basename(cohorts_csv_path)}\n") + puts("Creating: #{cases_csv_short_path}\n") + FileUtils.mkdir_p(cases_dir) + File.write(cases_csv_path, new_case_csv) + end + + if (not variables2.key?(:root)) + raise("required column \"root\" is missing in #{File.basename(cohorts_csv_path)}") + end + + root_name = variables2[:root].to_s.strip # Could have been converted to non-string by Util.value_from_string + if (root_name.empty?) + raise("root field cannot be blank for row #{index2 + 2} of #{File.basename(cohorts_csv_path)}") + end + + root_path = resolve_path(root_name, config[:prototypes_dir]) + if (not root_path) + puts "Could not resolve path #{root_name.inspect} from possible paths:\n" + config[:prototypes_dir].each { |dir| puts " #{File.expand_path(root_name, dir).inspect}\n" } + puts "Check the prototypes-dir variable in modelkit-config file.\n" + raise("root template #{root_name.inspect} not found for row #{index2 + 2} of #{File.basename(cohorts_csv_path)}") + end + + if (not File.file?(root_path)) + raise("root template #{root_path.inspect} is not a file for row #{index2 + 2} of #{File.basename(cohorts_csv_path)}") + end + + case_names = [] # Accumulate names to check for duplicates + + # Better to pre-read and cache this outside the looping? + # There are only N worksheets...1 per building type. + cases = Modelkit::Worksheet.open(cases_csv_path) + + cases.each_row(variables2) do |_, index3, variables3, parameters3| + #puts " case_index = #{index3}" + + # NOTE: Variables from outer worksheet (variables2) are copied into this worksheet. + # Changes to the variables here (variables3) do not propagate back up. + + if (not variables3.key?(:case_name)) + raise("required column \"case_name\" is missing in #{File.basename(cases_dir)}/#{File.basename(cases_csv_path)}") + end + + case_name = variables3[:case_name].to_s.strip # Could have been converted to non-string by Util.value_from_string + if (case_name.empty?) + raise("case_name field cannot be blank for row #{index3 + 2} of #{File.basename(cases_dir)}/#{File.basename(cases_csv_path)}") + end + + if (case_names.include?(case_name)) + if (cohorts_first_pass) # Only warn about this row once + puts "warning: duplicate name #{case_name.inspect} in case_name column at row #{index3 + 2} in #{File.basename(cases_dir)}/#{File.basename(cases_csv_path)}; row will be skipped" + end + next + end + + case_names << case_name + run_name = "#{climate_name}/#{cohort_name}/#{case_name}" + case_dir = "#{runs_dir}/#{run_name}" + FileUtils.mkdir_p(case_dir) + + # better to create this dynamically in cases.csv by combining variables from other layers. + # all variables need to be propagated first from layer to layer. + # for example: + # :run_name + # %= "My Prefix Something: #{climate}/#{cohort}/#{case_name}" + pxv_string = ":run_name => #{run_name.inspect},\n" + + parameters = parameters1 | parameters2 | parameters3 + parameters.each do |key, value| + value_inspect = value.inspect + if (value.kind_of?(String)) + # Using `inspect` on strings is useful because it reveals invisible + # characters and invalid byte sequences. The downside is that the + # string must be unescaped. + value_inspect.gsub!(/\\\\/, "\\") + end + pxv_string << ":#{key} => #{value_inspect},\n" + end + + pxv_path = "#{case_dir}/instance.pxv" + pxv_paths << pxv_path + + pathname = Pathname.new(pxv_path).relative_path_from(runs_pathname) + + if (File.exist?(pxv_path)) + old_pxv_string = File.read(pxv_path) + if (pxv_string != old_pxv_string) + puts "Updating: #{pathname}\n" + File.write(pxv_path, pxv_string) + end + else + puts "Writing: #{pathname}\n" + File.write(pxv_path, pxv_string) + end + + compose_idf_path = "#{case_dir}/instance.idf" + compose_idf_paths << compose_idf_path + + if (variables3[:sizing_case]) + size_name = "#{climate_name}/#{cohort_name}/#{variables3[:sizing_case]}" + size_dir = "#{runs_dir}/#{size_name}" + size_ref_path = "#{size_dir}/instance.idf" + + size_idf_path = "#{size_dir}/instance-size.idf" + size_sql_path = "#{size_dir}/instance-size-out.sql" + size_json_path = "#{size_dir}/instance-size-out.json" + + if (size_ref_paths.include?(size_ref_path)) + # Avoid creating redundant tasks when multiple cases reference same sizing case. + create_sizing_tasks = false + else + create_sizing_tasks = true + + size_ref_paths << size_ref_path + size_idf_paths << size_idf_path + size_sql_paths << size_sql_path + size_json_paths << size_json_path + end + + hardsize_idf_path = "#{case_dir}/instance-hardsize.idf" + hardsize_idf_paths << hardsize_idf_path + + run_idf_path = hardsize_idf_path # Which input file to run + + run_sql_path = "#{case_dir}/instance-hardsize-out.sql" + run_sql_paths << run_sql_path + + run_csv_path = "#{case_dir}/instance-hardsize-var.csv" + run_csv_paths << run_csv_path + + else + # Autosize-only run. + size_ref_path = nil + + run_idf_path = compose_idf_path # Which input file to run + + run_sql_path = "#{case_dir}/instance-out.sql" + run_sql_paths << run_sql_path + + run_csv_path = "#{case_dir}/instance-var.csv" + run_csv_paths << run_csv_path + end + + # Compose input file from parameter file. + # need more dependencies here: template files + file compose_idf_path => [site_path, root_path, pxv_path, global_pxv_path].compact do # If no path for global.pxv, remove nil element + pathname = Pathname.new(compose_idf_path).relative_path_from(runs_pathname) + puts "Composing: #{pathname}\n" + + clean_energyplus_output_files(File.dirname(compose_idf_path)) + + site_dir = File.dirname(site_path) + + begin + Modelkit::Parametrics.template_compose(root_path, + :annotate => CONFIG["template-compose.annotate"], + :indent => CONFIG["template-compose.indent"], + :esc_line => CONFIG["template-compose.esc-line"], + :dirs => [site_dir, *config[:templates_dir]], + :files => [global_pxv_path, pxv_path].compact, # If no path for global.pxv, remove nil element + :output => compose_idf_path) + rescue Exception => exception + puts "#{exception.class.name}: #{exception.message}\n" + puts "#{exception.backtrace.first}\n" if (not SyntaxError === exception) + puts "Skipping: #{pathname}\n" + end + end + + if (create_sizing_tasks) + # Generate a modified input file in order to run a design-day-only simulation. + # NOTE: This can be eliminated if a design-day option is added to energyplus-run. + file size_idf_path => size_ref_path do + pathname = Pathname.new(size_idf_path).relative_path_from(runs_pathname) + puts "Generating size run: #{pathname}\n" + + FileUtils.cp(size_ref_path, size_idf_path) + + idd = open_data_dictionary + input_file = OpenStudio::InputFile.open(idd, size_idf_path) + + sc_objs = input_file.find_objects_by_class_name("SimulationControl") + if sc_objs.length != 1 + raise "More than one SimulationControl object found" + end + sc = sc_objs[0] + sc.fields[1] = "Yes" + sc.fields[2] = "Yes" + sc.fields[3] = "Yes" + sc.fields[4] = "Yes" + sc.fields[5] = "No" + + input_file.write(size_idf_path) + end + + # Run sizing input files for design days only. + file size_sql_path => size_idf_path do + pathname = Pathname.new(size_idf_path).relative_path_from(runs_pathname) + puts "Running size run: #{pathname}\n" + + command = "modelkit-energyplus energyplus-run --weather=\"#{epw_path}\" \"#{size_idf_path}\"" + run_process(command, size_dir) + end + + # Generate size data file (instance-size-out.json). + file size_json_path => size_sql_path do + pathname = Pathname.new(size_json_path).relative_path_from(runs_pathname) + puts "Extracting size data: #{pathname}\n" + + # Make a copy to work on because the original gets overwritten by EnergyPlus.size. + temp_path = "#{File.dirname(size_idf_path)}/instance-temp.idf" + FileUtils.cp(size_idf_path, temp_path) + + idd = open_data_dictionary + input_file = OpenStudio::InputFile.open(idd, temp_path) + sql = Modelkit::EnergyPlus::SQLOutput.new(size_sql_path) + + # This will be fixed to only generate JSON and not modify the input file. + _, count, output_file = Modelkit::EnergyPlus.size( + sql, input_file, {json: size_json_path, version: "9-2"}) + #puts("#{count} modifications made") + + FileUtils.rm_f(temp_path) + end + end + + if (hardsize_idf_path) + # This would be a reasonable place to use `multitask` because compose_idf_path and + # size_json_path are independent and can be run concurrently. However, it seems + # like `multitask` doesn't compare timestamps like `file` does. Instead it + # always runs like a regular `task`. + file hardsize_idf_path => [compose_idf_path, size_json_path] do + pathname = Pathname.new(hardsize_idf_path).relative_path_from(runs_pathname) + puts "Applying hard sizes: #{pathname}\n" + + idd = open_data_dictionary + input_file = OpenStudio::InputFile.open(idd, compose_idf_path) + + json_string = File.read(size_json_path) + value_map = JSON.parse(json_string, {:symbolize_names=>true}) + output_file, count = Modelkit::EnergyPlus.modify_objects(input_file, value_map) + #puts("#{count} modifications made") + + # Set SimulationControl fields 1, 2, and 3 to "No", "No", and "No" + sc_objs = output_file.find_objects_by_class_name("SimulationControl") + if sc_objs.length != 1 + raise "More than one SimulationControl object found" + end + sc = sc_objs[0] + sc.fields[1] = "No" + sc.fields[2] = "No" + sc.fields[3] = "No" + # Remove Sizing:Zone and Sizing:System objects + sizing_zones = output_file.find_objects_by_class_name("Sizing:Zone") + sizing_systems = output_file.find_objects_by_class_name("Sizing:System") + sizing_plants = output_file.find_objects_by_class_name("Sizing:Plant") + (sizing_zones + sizing_systems + sizing_plants).each {|x| output_file.delete_object(x)} + + output_file.write(hardsize_idf_path) + end + end + + # Run input file in a separate process. + file run_sql_path => [epw_path, run_idf_path] do + # Not sure why this check is needed; seems to try to run if even IDF does not exist. + # May need in other places, like sizing run. + next if (not File.exist?(run_idf_path)) + + pathname = Pathname.new(run_idf_path).relative_path_from(runs_pathname) + puts "Running: #{pathname}\n" + + # Because this is spawned to the shell, .modelkit-config options will be + # automatically applied. + # NOTE: If modelkit-energyplus was thread safe, would not have to run this + # as a separate process. + command = "modelkit-energyplus energyplus-run --weather=\"#{epw_path}\" \"#{run_idf_path}\"" + run_process(command, case_dir) + #$bar.inc + end + + + # see discussion with Michael + file run_csv_path => run_sql_path + + # deleting instance-out.csv breaks it; doesn't know how to recover + + end + end + + cohorts_first_pass = false + end + + + prune_paths = (old_site_paths - site_paths) + (old_pxv_paths - pxv_paths) + + if (not prune_paths.empty? and not rake_task_name =~ /^(prune|clean|none)$/) + puts "\e[1m\e[33mNote: There are cases in the runs directory that are not referenced by any\n" \ + "worksheet. You may want to delete them by typing:\e[0m\n \e[1mmodelkit rake prune\e[0m\n" + end + +end + + +desc "Generate case files" +task :cases do + # No operation; cases are generated when worksheets are evaluated. +end + + +desc "Delete unreferenced files" +task :prune do + if (prune_paths.empty?) + puts "Prune has nothing to delete." + else + prune_dirs = [] + puts "\e[1m\e[31mPrune will delete the following files:\e[0m" + +# show each as: dirname/* (106 files) + + prune_paths.each do |path| + dir = File.dirname(path) + prune_dirs << dir + pathname = Pathname.new(dir).relative_path_from(runs_pathname) + puts " \e[31m#{pathname}\e[0m" + end + print "\e[1m\e[31mConfirm (y/n)?\e[0m " + + input = ENV["CONFIRM"] || $stdin.gets || "" + if (ENV["CONFIRM"] or not $stdin.tty?) + puts input # Echo when not already written to STDOUT + end + + $start_time = Time.now # Reset to cut out wait time on the user prompt + if (input.strip =~ /^y/i) + puts "Pruning files..." + + # maybe don't have to repeat this--already said what was to be deleted + prune_dirs.each do |dir| + pathname = Pathname.new(dir).relative_path_from(runs_pathname) + puts "Deleting: #{pathname}" + FileUtils.rm_rf(dir) + end + else + puts "Task canceled." + end + end +end + + +desc "Delete all files and results" +task :clean do + paths = []; names = [] + [runs_dir, *results_paths].each do |path| + if (File.directory?(path)) + count = Dir.glob("#{path}/**/*").count { |f| File.file?(f) } + if (count.nonzero?) + paths << Dir.glob("#{path}/*") + names << "#{File.basename(path)}/* (#{count} files)" + end + elsif (File.file?(path)) + paths << path + names << File.basename(path) + end + end + + if (paths.empty?) + puts "Clean has nothing to delete." + else + puts "\e[1m\e[31mClean will delete the following files:\e[0m" + names.each { |name| puts " \e[31m#{name}\e[0m"} + print "\e[1m\e[31mConfirm (y/n)?\e[0m " + + input = ENV["CONFIRM"] || $stdin.gets || "" + if (ENV["CONFIRM"] or not $stdin.tty?) + puts input # Echo when not already written to STDOUT + end + + $start_time = Time.now # Reset to cut out wait time on the user prompt + if (input.strip =~ /^y/i) + puts "Cleaning files..." + FileUtils.rm_rf(paths) + else + puts "Task canceled." + end + end +end + + +desc "Generate site files (site.pxt)" +multitask :sites => site_paths + + +desc "Compose input files" +multitask :compose => compose_idf_paths + + +# Generate size input files +multitask :"size-idf" => size_idf_paths + + +# Run size input files +multitask :"size-sql" => size_sql_paths + + +# Extract size data +multitask :"size-json" => size_json_paths + + +desc "Apply hard sizes to input files" +multitask :hardsize => hardsize_idf_paths + + +desc "Run input files" +multitask :run => run_sql_paths + + +file query_path do + puts "Query file not found.\n" + query = +"AnnualBuildingUtilityPerformanceSummary/Entire Facility/Site and Source Energy/Energy Per Total Building Area/Net Site Energy, Net Site EUI +AnnualBuildingUtilityPerformanceSummary/Entire Facility/Site and Source Energy/Total Energy/Net Site Energy, Net Site Energy +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Electricity/Total End Uses, Electricity +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Natural Gas/Total End Uses, Natural Gas\n" + File.write(query_path, query) + puts "Writing default query file: #{query_path}\n" +end + + +file results_summary_path => [*run_sql_paths, query_path] do + pathname = Pathname.new(results_summary_path).relative_path_from(Pathname.new(study_dir)) + puts "Processing: #{pathname}\n" + + short_paths = run_sql_paths.map { |path| Pathname.new(path).relative_path_from(runs_pathname) } + Modelkit::EnergyPlus.sql(short_paths, query_path, :dir => runs_dir, :output => results_summary_path) +end + + +file results_profile_elec_path => run_csv_paths do + aggregate_profiles("Electricity:Facility", results_profile_elec_path, run_csv_paths, runs_pathname, study_dir) +end + + +file results_profile_gas_path => run_csv_paths do + aggregate_profiles("NaturalGas:Facility", results_profile_gas_path, run_csv_paths, runs_pathname, study_dir) +end + + +desc "Aggregate the simulation results" +task :results => results_paths + + +task :default => :results + + +def aggregate_profiles(column_name, output_path, run_csv_paths, runs_pathname, study_dir) + pathname = Pathname.new(output_path).relative_path_from(Pathname.new(study_dir)) + puts "Processing: #{pathname}\n" + + short_paths = run_csv_paths.map { |path| Pathname.new(path).relative_path_from(runs_pathname) } + + columns = [] + column_header = nil + date_time = true + short_paths.each do |short_path| + csv_path = "#{runs_pathname}/#{short_path}" + if (File.exist?(csv_path)) + csv = CSV.read(csv_path, :headers=>true) + if (date_time) + column = csv["Date/Time"] + column.unshift("Date/Time") # Add header + columns << column + date_time = false + end + if (not column_header) + # Match column name to the header while ignoring units/interval, i.e., [J](Hourly). + column_header = csv.headers.find { |header| header.match(column_name) } + end + column = csv[column_header] + column.unshift(short_path) # Add header + columns << column + else + puts "warning: file not found: #{csv_path}\n" + end + end + + File.open(output_path, "w") do |file| + columns.transpose.each { |row| file.puts(row.join(",")) } + end +end + + +# NOPUB consider building this into modelkit-energyplus. +# basically caches IDD path and avoids concurrent openings. + +# Open the EnergyPlus IDD if needed, but only do it once. +def open_data_dictionary + MUTEX.synchronize do # Lock to prevent opening multiple times concurrently + if (@idd.nil?) + puts "Opening Energy+.idd...\n" + + if (path = CONFIG["energyplus-run.engine"]) + path = File.expand_path(path.gsub(/\\/, "/")) # Resolve path and normalize + if (File.exist?(path)) + idd_path = "#{path}/Energy+.idd" + if (not File.exist?(idd_path)) + raise("Energy+.idd not found in specified EnergyPlus directory: #{path}") + end + else + raise("EnergyPlus directory not found: #{path}") + end + else + raise("energyplus-run.engine field missing in .modelkit-config") + end + + @idd = OpenStudio::DataDictionary.open(idd_path) + end + end + return(@idd) +end + + +# NICE, works +#require "rake/cpu_counter" +#puts "cpu=#{Rake::CpuCounter.count}" + +# Almost works but not quite: + +# shows what command was invoked from CLI +# if blank (even with -T), it's "default". +#puts "top level:" +# cli_tasks = Rake.application.top_level_tasks +# cli_task_name = cli_tasks.first # could be more than one; just grab first for now +# puts "cli_task_name=#{cli_task_name}" # returns String + +# cli_task = Rake.application.tasks.find { |t| t.name == cli_task_name } # returns Rake::Task +# puts "cli_task=#{cli_task}" +# + +# +## Rake has this builtin: +# Rake.application.lookup(task_name) => task + +# work_to_do = false +# if (cli_task.needed?) +# # Just because needed doesn't mean there is any work to do--check prereqs! +# cli_task.prerequisite_tasks.each do |prereq| +# if (prereq.needed?) +# work_to_do = true +# break +# end +# end +# end +# +# if (work_to_do) +# puts "Work to do!" +# else +# puts "Up to date; nothing to do." +# end + + +$start_time = Time.now +#$bar = RakeProgressbar.new(run_sql_paths.length) + +at_exit do + #$bar.finished + if (not rake_task_name =~ /^none$/) + puts "Elapsed task duration: #{Time.now - $start_time} sec" + end +end From b3c7e25cb67f837f82ea43b4321a8c7d826790fb Mon Sep 17 00:00:00 2001 From: Shaojie Wang <55248793+wsjsxn@users.noreply.github.com> Date: Sat, 29 Nov 2025 21:02:52 -0600 Subject: [PATCH 09/23] Create test --- .../SWHC043 Multi_Cap_Com_ACNew_New/cases/test | 1 + 1 file changed, 1 insertion(+) create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/test diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/test b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/test new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/test @@ -0,0 +1 @@ + From cd0685d365461dc395aedad5fb58c610df7fb26d Mon Sep 17 00:00:00 2001 From: Shaojie Wang <55248793+wsjsxn@users.noreply.github.com> Date: Sat, 29 Nov 2025 21:03:22 -0600 Subject: [PATCH 10/23] Add files via upload --- .../cases/Asm&0&cDXGF&New&dxAC_equip.csv | 7 +++++++ .../cases/ECC&0&cDXGF&New&dxAC_equip.csv | 7 +++++++ .../cases/EPr&0&cDXGF&New&dxAC_equip.csv | 7 +++++++ .../cases/ERC&0&cDXGF&New&dxAC_equip.csv | 7 +++++++ .../cases/ESe&0&cDXGF&New&dxAC_equip.csv | 7 +++++++ .../cases/EUn&0&cDXGF&New&dxAC_equip.csv | 7 +++++++ .../cases/Fin&0&cDXGF&New&dxAC_equip.csv | 7 +++++++ .../cases/Gro&0&cDXGF&New&dxAC_equip.csv | 7 +++++++ .../cases/Hsp&0&cDXGF&New&dxAC_equip.csv | 7 +++++++ .../cases/Htl&0&cDXGF&New&dxAC_equip.csv | 7 +++++++ .../cases/Lib&0&cDXGF&New&dxAC_equip.csv | 7 +++++++ .../cases/MBT&0&cDXGF&New&dxAC_equip.csv | 7 +++++++ .../cases/MLI&0&cDXGF&New&dxAC_equip.csv | 7 +++++++ .../cases/Mtl&0&cDXGF&New&dxAC_equip.csv | 7 +++++++ .../cases/Nrs&0&cDXGF&New&dxAC_equip.csv | 7 +++++++ .../cases/OfL&0&cDXGF&New&dxAC_equip.csv | 7 +++++++ .../cases/OfS&0&cDXGF&New&dxAC_equip.csv | 7 +++++++ .../cases/RFF&0&cDXGF&New&dxAC_equip.csv | 7 +++++++ .../cases/RSD&0&cDXGF&New&dxAC_equip.csv | 7 +++++++ .../cases/Rel&0&cDXGF&New&dxAC_equip.csv | 7 +++++++ .../cases/Rt3&0&cDXGF&New&dxAC_equip.csv | 7 +++++++ .../cases/RtL&0&cDXGF&New&dxAC_equip.csv | 7 +++++++ .../cases/RtS&0&cDXGF&New&dxAC_equip.csv | 7 +++++++ .../cases/SCn&0&cDXGF&New&dxAC_equip.csv | 7 +++++++ .../cases/SUn&0&cDXGF&New&dxAC_equip.csv | 7 +++++++ .../cases/WRf&0&cDXGF&New&dxAC_equip.csv | 7 +++++++ 26 files changed, 182 insertions(+) create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/Asm&0&cDXGF&New&dxAC_equip.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/ECC&0&cDXGF&New&dxAC_equip.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/EPr&0&cDXGF&New&dxAC_equip.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/ERC&0&cDXGF&New&dxAC_equip.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/ESe&0&cDXGF&New&dxAC_equip.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/EUn&0&cDXGF&New&dxAC_equip.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/Fin&0&cDXGF&New&dxAC_equip.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/Gro&0&cDXGF&New&dxAC_equip.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/Hsp&0&cDXGF&New&dxAC_equip.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/Htl&0&cDXGF&New&dxAC_equip.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/Lib&0&cDXGF&New&dxAC_equip.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/MBT&0&cDXGF&New&dxAC_equip.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/MLI&0&cDXGF&New&dxAC_equip.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/Mtl&0&cDXGF&New&dxAC_equip.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/Nrs&0&cDXGF&New&dxAC_equip.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/OfL&0&cDXGF&New&dxAC_equip.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/OfS&0&cDXGF&New&dxAC_equip.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/RFF&0&cDXGF&New&dxAC_equip.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/RSD&0&cDXGF&New&dxAC_equip.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/Rel&0&cDXGF&New&dxAC_equip.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/Rt3&0&cDXGF&New&dxAC_equip.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/RtL&0&cDXGF&New&dxAC_equip.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/RtS&0&cDXGF&New&dxAC_equip.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/SCn&0&cDXGF&New&dxAC_equip.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/SUn&0&cDXGF&New&dxAC_equip.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/WRf&0&cDXGF&New&dxAC_equip.csv diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/Asm&0&cDXGF&New&dxAC_equip.csv b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/Asm&0&cDXGF&New&dxAC_equip.csv new file mode 100644 index 00000000..2c23a38a --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/Asm&0&cDXGF&New&dxAC_equip.csv @@ -0,0 +1,7 @@ +skip,case_name,:main_hvac_type,:main_atu_reheat_coil_type,:main_atu_reheat_control,:main_fan_rise,:main_cool_coil_type,:main_heat_coil_type,:main_dx_type,:main_sat_reset_type,:main_sat_temp_max,:main_design_peak_load,:main_oa_econ_type,:main_cool_coil_cop,:main_dx_comp_speed,:main_fan_speed,:main_fan_motor_eff,:main_heat_coil_eff,:main_cool_coil_cop2,:main_cool_coil_cop3,:main_cool_coil_cop4 +,NE-dxAC-PkgAC-65to134-New-EER-11.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.8,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-New-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.19,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-New-EER-13.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.62,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-10.8,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.81,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.29,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-12.5,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.51,CONSTANT,CONSTANT,0.9,0.8,,, diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/ECC&0&cDXGF&New&dxAC_equip.csv b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/ECC&0&cDXGF&New&dxAC_equip.csv new file mode 100644 index 00000000..ef4d99b7 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/ECC&0&cDXGF&New&dxAC_equip.csv @@ -0,0 +1,7 @@ +skip,case_name,:main_hvac_type,:main_atu_reheat_coil_type,:main_atu_reheat_control,:main_fan_rise,:main_cool_coil_type,:main_heat_coil_type,:main_dx_type,:main_sat_reset_type,:main_sat_temp_max,:main_design_peak_load,:main_oa_econ_type,:main_cool_coil_cop,:main_dx_comp_speed,:main_fan_speed,:main_fan_motor_eff,:main_heat_coil_eff,:main_cool_coil_cop2,:main_cool_coil_cop3,:main_cool_coil_cop4 +,NE-dxAC-PkgAC-65to134-New-EER-11.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.8,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-New-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.19,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-New-EER-13.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.62,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-10.8,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.81,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.29,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-12.5,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.51,CONSTANT,CONSTANT,0.9,0.8,,, \ No newline at end of file diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/EPr&0&cDXGF&New&dxAC_equip.csv b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/EPr&0&cDXGF&New&dxAC_equip.csv new file mode 100644 index 00000000..ef4d99b7 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/EPr&0&cDXGF&New&dxAC_equip.csv @@ -0,0 +1,7 @@ +skip,case_name,:main_hvac_type,:main_atu_reheat_coil_type,:main_atu_reheat_control,:main_fan_rise,:main_cool_coil_type,:main_heat_coil_type,:main_dx_type,:main_sat_reset_type,:main_sat_temp_max,:main_design_peak_load,:main_oa_econ_type,:main_cool_coil_cop,:main_dx_comp_speed,:main_fan_speed,:main_fan_motor_eff,:main_heat_coil_eff,:main_cool_coil_cop2,:main_cool_coil_cop3,:main_cool_coil_cop4 +,NE-dxAC-PkgAC-65to134-New-EER-11.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.8,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-New-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.19,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-New-EER-13.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.62,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-10.8,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.81,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.29,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-12.5,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.51,CONSTANT,CONSTANT,0.9,0.8,,, \ No newline at end of file diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/ERC&0&cDXGF&New&dxAC_equip.csv b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/ERC&0&cDXGF&New&dxAC_equip.csv new file mode 100644 index 00000000..ef4d99b7 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/ERC&0&cDXGF&New&dxAC_equip.csv @@ -0,0 +1,7 @@ +skip,case_name,:main_hvac_type,:main_atu_reheat_coil_type,:main_atu_reheat_control,:main_fan_rise,:main_cool_coil_type,:main_heat_coil_type,:main_dx_type,:main_sat_reset_type,:main_sat_temp_max,:main_design_peak_load,:main_oa_econ_type,:main_cool_coil_cop,:main_dx_comp_speed,:main_fan_speed,:main_fan_motor_eff,:main_heat_coil_eff,:main_cool_coil_cop2,:main_cool_coil_cop3,:main_cool_coil_cop4 +,NE-dxAC-PkgAC-65to134-New-EER-11.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.8,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-New-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.19,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-New-EER-13.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.62,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-10.8,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.81,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.29,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-12.5,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.51,CONSTANT,CONSTANT,0.9,0.8,,, \ No newline at end of file diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/ESe&0&cDXGF&New&dxAC_equip.csv b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/ESe&0&cDXGF&New&dxAC_equip.csv new file mode 100644 index 00000000..ef4d99b7 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/ESe&0&cDXGF&New&dxAC_equip.csv @@ -0,0 +1,7 @@ +skip,case_name,:main_hvac_type,:main_atu_reheat_coil_type,:main_atu_reheat_control,:main_fan_rise,:main_cool_coil_type,:main_heat_coil_type,:main_dx_type,:main_sat_reset_type,:main_sat_temp_max,:main_design_peak_load,:main_oa_econ_type,:main_cool_coil_cop,:main_dx_comp_speed,:main_fan_speed,:main_fan_motor_eff,:main_heat_coil_eff,:main_cool_coil_cop2,:main_cool_coil_cop3,:main_cool_coil_cop4 +,NE-dxAC-PkgAC-65to134-New-EER-11.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.8,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-New-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.19,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-New-EER-13.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.62,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-10.8,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.81,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.29,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-12.5,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.51,CONSTANT,CONSTANT,0.9,0.8,,, \ No newline at end of file diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/EUn&0&cDXGF&New&dxAC_equip.csv b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/EUn&0&cDXGF&New&dxAC_equip.csv new file mode 100644 index 00000000..ef4d99b7 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/EUn&0&cDXGF&New&dxAC_equip.csv @@ -0,0 +1,7 @@ +skip,case_name,:main_hvac_type,:main_atu_reheat_coil_type,:main_atu_reheat_control,:main_fan_rise,:main_cool_coil_type,:main_heat_coil_type,:main_dx_type,:main_sat_reset_type,:main_sat_temp_max,:main_design_peak_load,:main_oa_econ_type,:main_cool_coil_cop,:main_dx_comp_speed,:main_fan_speed,:main_fan_motor_eff,:main_heat_coil_eff,:main_cool_coil_cop2,:main_cool_coil_cop3,:main_cool_coil_cop4 +,NE-dxAC-PkgAC-65to134-New-EER-11.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.8,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-New-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.19,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-New-EER-13.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.62,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-10.8,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.81,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.29,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-12.5,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.51,CONSTANT,CONSTANT,0.9,0.8,,, \ No newline at end of file diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/Fin&0&cDXGF&New&dxAC_equip.csv b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/Fin&0&cDXGF&New&dxAC_equip.csv new file mode 100644 index 00000000..ef4d99b7 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/Fin&0&cDXGF&New&dxAC_equip.csv @@ -0,0 +1,7 @@ +skip,case_name,:main_hvac_type,:main_atu_reheat_coil_type,:main_atu_reheat_control,:main_fan_rise,:main_cool_coil_type,:main_heat_coil_type,:main_dx_type,:main_sat_reset_type,:main_sat_temp_max,:main_design_peak_load,:main_oa_econ_type,:main_cool_coil_cop,:main_dx_comp_speed,:main_fan_speed,:main_fan_motor_eff,:main_heat_coil_eff,:main_cool_coil_cop2,:main_cool_coil_cop3,:main_cool_coil_cop4 +,NE-dxAC-PkgAC-65to134-New-EER-11.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.8,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-New-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.19,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-New-EER-13.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.62,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-10.8,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.81,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.29,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-12.5,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.51,CONSTANT,CONSTANT,0.9,0.8,,, \ No newline at end of file diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/Gro&0&cDXGF&New&dxAC_equip.csv b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/Gro&0&cDXGF&New&dxAC_equip.csv new file mode 100644 index 00000000..ef4d99b7 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/Gro&0&cDXGF&New&dxAC_equip.csv @@ -0,0 +1,7 @@ +skip,case_name,:main_hvac_type,:main_atu_reheat_coil_type,:main_atu_reheat_control,:main_fan_rise,:main_cool_coil_type,:main_heat_coil_type,:main_dx_type,:main_sat_reset_type,:main_sat_temp_max,:main_design_peak_load,:main_oa_econ_type,:main_cool_coil_cop,:main_dx_comp_speed,:main_fan_speed,:main_fan_motor_eff,:main_heat_coil_eff,:main_cool_coil_cop2,:main_cool_coil_cop3,:main_cool_coil_cop4 +,NE-dxAC-PkgAC-65to134-New-EER-11.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.8,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-New-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.19,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-New-EER-13.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.62,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-10.8,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.81,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.29,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-12.5,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.51,CONSTANT,CONSTANT,0.9,0.8,,, \ No newline at end of file diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/Hsp&0&cDXGF&New&dxAC_equip.csv b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/Hsp&0&cDXGF&New&dxAC_equip.csv new file mode 100644 index 00000000..ef4d99b7 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/Hsp&0&cDXGF&New&dxAC_equip.csv @@ -0,0 +1,7 @@ +skip,case_name,:main_hvac_type,:main_atu_reheat_coil_type,:main_atu_reheat_control,:main_fan_rise,:main_cool_coil_type,:main_heat_coil_type,:main_dx_type,:main_sat_reset_type,:main_sat_temp_max,:main_design_peak_load,:main_oa_econ_type,:main_cool_coil_cop,:main_dx_comp_speed,:main_fan_speed,:main_fan_motor_eff,:main_heat_coil_eff,:main_cool_coil_cop2,:main_cool_coil_cop3,:main_cool_coil_cop4 +,NE-dxAC-PkgAC-65to134-New-EER-11.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.8,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-New-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.19,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-New-EER-13.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.62,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-10.8,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.81,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.29,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-12.5,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.51,CONSTANT,CONSTANT,0.9,0.8,,, \ No newline at end of file diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/Htl&0&cDXGF&New&dxAC_equip.csv b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/Htl&0&cDXGF&New&dxAC_equip.csv new file mode 100644 index 00000000..ef4d99b7 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/Htl&0&cDXGF&New&dxAC_equip.csv @@ -0,0 +1,7 @@ +skip,case_name,:main_hvac_type,:main_atu_reheat_coil_type,:main_atu_reheat_control,:main_fan_rise,:main_cool_coil_type,:main_heat_coil_type,:main_dx_type,:main_sat_reset_type,:main_sat_temp_max,:main_design_peak_load,:main_oa_econ_type,:main_cool_coil_cop,:main_dx_comp_speed,:main_fan_speed,:main_fan_motor_eff,:main_heat_coil_eff,:main_cool_coil_cop2,:main_cool_coil_cop3,:main_cool_coil_cop4 +,NE-dxAC-PkgAC-65to134-New-EER-11.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.8,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-New-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.19,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-New-EER-13.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.62,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-10.8,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.81,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.29,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-12.5,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.51,CONSTANT,CONSTANT,0.9,0.8,,, \ No newline at end of file diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/Lib&0&cDXGF&New&dxAC_equip.csv b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/Lib&0&cDXGF&New&dxAC_equip.csv new file mode 100644 index 00000000..ef4d99b7 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/Lib&0&cDXGF&New&dxAC_equip.csv @@ -0,0 +1,7 @@ +skip,case_name,:main_hvac_type,:main_atu_reheat_coil_type,:main_atu_reheat_control,:main_fan_rise,:main_cool_coil_type,:main_heat_coil_type,:main_dx_type,:main_sat_reset_type,:main_sat_temp_max,:main_design_peak_load,:main_oa_econ_type,:main_cool_coil_cop,:main_dx_comp_speed,:main_fan_speed,:main_fan_motor_eff,:main_heat_coil_eff,:main_cool_coil_cop2,:main_cool_coil_cop3,:main_cool_coil_cop4 +,NE-dxAC-PkgAC-65to134-New-EER-11.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.8,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-New-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.19,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-New-EER-13.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.62,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-10.8,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.81,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.29,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-12.5,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.51,CONSTANT,CONSTANT,0.9,0.8,,, \ No newline at end of file diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/MBT&0&cDXGF&New&dxAC_equip.csv b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/MBT&0&cDXGF&New&dxAC_equip.csv new file mode 100644 index 00000000..ef4d99b7 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/MBT&0&cDXGF&New&dxAC_equip.csv @@ -0,0 +1,7 @@ +skip,case_name,:main_hvac_type,:main_atu_reheat_coil_type,:main_atu_reheat_control,:main_fan_rise,:main_cool_coil_type,:main_heat_coil_type,:main_dx_type,:main_sat_reset_type,:main_sat_temp_max,:main_design_peak_load,:main_oa_econ_type,:main_cool_coil_cop,:main_dx_comp_speed,:main_fan_speed,:main_fan_motor_eff,:main_heat_coil_eff,:main_cool_coil_cop2,:main_cool_coil_cop3,:main_cool_coil_cop4 +,NE-dxAC-PkgAC-65to134-New-EER-11.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.8,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-New-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.19,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-New-EER-13.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.62,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-10.8,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.81,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.29,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-12.5,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.51,CONSTANT,CONSTANT,0.9,0.8,,, \ No newline at end of file diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/MLI&0&cDXGF&New&dxAC_equip.csv b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/MLI&0&cDXGF&New&dxAC_equip.csv new file mode 100644 index 00000000..ef4d99b7 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/MLI&0&cDXGF&New&dxAC_equip.csv @@ -0,0 +1,7 @@ +skip,case_name,:main_hvac_type,:main_atu_reheat_coil_type,:main_atu_reheat_control,:main_fan_rise,:main_cool_coil_type,:main_heat_coil_type,:main_dx_type,:main_sat_reset_type,:main_sat_temp_max,:main_design_peak_load,:main_oa_econ_type,:main_cool_coil_cop,:main_dx_comp_speed,:main_fan_speed,:main_fan_motor_eff,:main_heat_coil_eff,:main_cool_coil_cop2,:main_cool_coil_cop3,:main_cool_coil_cop4 +,NE-dxAC-PkgAC-65to134-New-EER-11.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.8,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-New-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.19,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-New-EER-13.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.62,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-10.8,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.81,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.29,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-12.5,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.51,CONSTANT,CONSTANT,0.9,0.8,,, \ No newline at end of file diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/Mtl&0&cDXGF&New&dxAC_equip.csv b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/Mtl&0&cDXGF&New&dxAC_equip.csv new file mode 100644 index 00000000..ef4d99b7 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/Mtl&0&cDXGF&New&dxAC_equip.csv @@ -0,0 +1,7 @@ +skip,case_name,:main_hvac_type,:main_atu_reheat_coil_type,:main_atu_reheat_control,:main_fan_rise,:main_cool_coil_type,:main_heat_coil_type,:main_dx_type,:main_sat_reset_type,:main_sat_temp_max,:main_design_peak_load,:main_oa_econ_type,:main_cool_coil_cop,:main_dx_comp_speed,:main_fan_speed,:main_fan_motor_eff,:main_heat_coil_eff,:main_cool_coil_cop2,:main_cool_coil_cop3,:main_cool_coil_cop4 +,NE-dxAC-PkgAC-65to134-New-EER-11.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.8,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-New-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.19,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-New-EER-13.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.62,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-10.8,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.81,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.29,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-12.5,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.51,CONSTANT,CONSTANT,0.9,0.8,,, \ No newline at end of file diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/Nrs&0&cDXGF&New&dxAC_equip.csv b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/Nrs&0&cDXGF&New&dxAC_equip.csv new file mode 100644 index 00000000..ef4d99b7 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/Nrs&0&cDXGF&New&dxAC_equip.csv @@ -0,0 +1,7 @@ +skip,case_name,:main_hvac_type,:main_atu_reheat_coil_type,:main_atu_reheat_control,:main_fan_rise,:main_cool_coil_type,:main_heat_coil_type,:main_dx_type,:main_sat_reset_type,:main_sat_temp_max,:main_design_peak_load,:main_oa_econ_type,:main_cool_coil_cop,:main_dx_comp_speed,:main_fan_speed,:main_fan_motor_eff,:main_heat_coil_eff,:main_cool_coil_cop2,:main_cool_coil_cop3,:main_cool_coil_cop4 +,NE-dxAC-PkgAC-65to134-New-EER-11.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.8,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-New-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.19,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-New-EER-13.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.62,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-10.8,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.81,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.29,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-12.5,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.51,CONSTANT,CONSTANT,0.9,0.8,,, \ No newline at end of file diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/OfL&0&cDXGF&New&dxAC_equip.csv b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/OfL&0&cDXGF&New&dxAC_equip.csv new file mode 100644 index 00000000..ef4d99b7 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/OfL&0&cDXGF&New&dxAC_equip.csv @@ -0,0 +1,7 @@ +skip,case_name,:main_hvac_type,:main_atu_reheat_coil_type,:main_atu_reheat_control,:main_fan_rise,:main_cool_coil_type,:main_heat_coil_type,:main_dx_type,:main_sat_reset_type,:main_sat_temp_max,:main_design_peak_load,:main_oa_econ_type,:main_cool_coil_cop,:main_dx_comp_speed,:main_fan_speed,:main_fan_motor_eff,:main_heat_coil_eff,:main_cool_coil_cop2,:main_cool_coil_cop3,:main_cool_coil_cop4 +,NE-dxAC-PkgAC-65to134-New-EER-11.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.8,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-New-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.19,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-New-EER-13.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.62,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-10.8,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.81,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.29,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-12.5,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.51,CONSTANT,CONSTANT,0.9,0.8,,, \ No newline at end of file diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/OfS&0&cDXGF&New&dxAC_equip.csv b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/OfS&0&cDXGF&New&dxAC_equip.csv new file mode 100644 index 00000000..ef4d99b7 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/OfS&0&cDXGF&New&dxAC_equip.csv @@ -0,0 +1,7 @@ +skip,case_name,:main_hvac_type,:main_atu_reheat_coil_type,:main_atu_reheat_control,:main_fan_rise,:main_cool_coil_type,:main_heat_coil_type,:main_dx_type,:main_sat_reset_type,:main_sat_temp_max,:main_design_peak_load,:main_oa_econ_type,:main_cool_coil_cop,:main_dx_comp_speed,:main_fan_speed,:main_fan_motor_eff,:main_heat_coil_eff,:main_cool_coil_cop2,:main_cool_coil_cop3,:main_cool_coil_cop4 +,NE-dxAC-PkgAC-65to134-New-EER-11.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.8,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-New-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.19,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-New-EER-13.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.62,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-10.8,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.81,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.29,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-12.5,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.51,CONSTANT,CONSTANT,0.9,0.8,,, \ No newline at end of file diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/RFF&0&cDXGF&New&dxAC_equip.csv b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/RFF&0&cDXGF&New&dxAC_equip.csv new file mode 100644 index 00000000..ef4d99b7 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/RFF&0&cDXGF&New&dxAC_equip.csv @@ -0,0 +1,7 @@ +skip,case_name,:main_hvac_type,:main_atu_reheat_coil_type,:main_atu_reheat_control,:main_fan_rise,:main_cool_coil_type,:main_heat_coil_type,:main_dx_type,:main_sat_reset_type,:main_sat_temp_max,:main_design_peak_load,:main_oa_econ_type,:main_cool_coil_cop,:main_dx_comp_speed,:main_fan_speed,:main_fan_motor_eff,:main_heat_coil_eff,:main_cool_coil_cop2,:main_cool_coil_cop3,:main_cool_coil_cop4 +,NE-dxAC-PkgAC-65to134-New-EER-11.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.8,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-New-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.19,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-New-EER-13.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.62,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-10.8,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.81,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.29,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-12.5,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.51,CONSTANT,CONSTANT,0.9,0.8,,, \ No newline at end of file diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/RSD&0&cDXGF&New&dxAC_equip.csv b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/RSD&0&cDXGF&New&dxAC_equip.csv new file mode 100644 index 00000000..ef4d99b7 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/RSD&0&cDXGF&New&dxAC_equip.csv @@ -0,0 +1,7 @@ +skip,case_name,:main_hvac_type,:main_atu_reheat_coil_type,:main_atu_reheat_control,:main_fan_rise,:main_cool_coil_type,:main_heat_coil_type,:main_dx_type,:main_sat_reset_type,:main_sat_temp_max,:main_design_peak_load,:main_oa_econ_type,:main_cool_coil_cop,:main_dx_comp_speed,:main_fan_speed,:main_fan_motor_eff,:main_heat_coil_eff,:main_cool_coil_cop2,:main_cool_coil_cop3,:main_cool_coil_cop4 +,NE-dxAC-PkgAC-65to134-New-EER-11.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.8,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-New-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.19,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-New-EER-13.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.62,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-10.8,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.81,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.29,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-12.5,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.51,CONSTANT,CONSTANT,0.9,0.8,,, \ No newline at end of file diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/Rel&0&cDXGF&New&dxAC_equip.csv b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/Rel&0&cDXGF&New&dxAC_equip.csv new file mode 100644 index 00000000..ef4d99b7 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/Rel&0&cDXGF&New&dxAC_equip.csv @@ -0,0 +1,7 @@ +skip,case_name,:main_hvac_type,:main_atu_reheat_coil_type,:main_atu_reheat_control,:main_fan_rise,:main_cool_coil_type,:main_heat_coil_type,:main_dx_type,:main_sat_reset_type,:main_sat_temp_max,:main_design_peak_load,:main_oa_econ_type,:main_cool_coil_cop,:main_dx_comp_speed,:main_fan_speed,:main_fan_motor_eff,:main_heat_coil_eff,:main_cool_coil_cop2,:main_cool_coil_cop3,:main_cool_coil_cop4 +,NE-dxAC-PkgAC-65to134-New-EER-11.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.8,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-New-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.19,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-New-EER-13.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.62,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-10.8,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.81,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.29,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-12.5,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.51,CONSTANT,CONSTANT,0.9,0.8,,, \ No newline at end of file diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/Rt3&0&cDXGF&New&dxAC_equip.csv b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/Rt3&0&cDXGF&New&dxAC_equip.csv new file mode 100644 index 00000000..ef4d99b7 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/Rt3&0&cDXGF&New&dxAC_equip.csv @@ -0,0 +1,7 @@ +skip,case_name,:main_hvac_type,:main_atu_reheat_coil_type,:main_atu_reheat_control,:main_fan_rise,:main_cool_coil_type,:main_heat_coil_type,:main_dx_type,:main_sat_reset_type,:main_sat_temp_max,:main_design_peak_load,:main_oa_econ_type,:main_cool_coil_cop,:main_dx_comp_speed,:main_fan_speed,:main_fan_motor_eff,:main_heat_coil_eff,:main_cool_coil_cop2,:main_cool_coil_cop3,:main_cool_coil_cop4 +,NE-dxAC-PkgAC-65to134-New-EER-11.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.8,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-New-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.19,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-New-EER-13.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.62,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-10.8,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.81,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.29,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-12.5,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.51,CONSTANT,CONSTANT,0.9,0.8,,, \ No newline at end of file diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/RtL&0&cDXGF&New&dxAC_equip.csv b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/RtL&0&cDXGF&New&dxAC_equip.csv new file mode 100644 index 00000000..ef4d99b7 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/RtL&0&cDXGF&New&dxAC_equip.csv @@ -0,0 +1,7 @@ +skip,case_name,:main_hvac_type,:main_atu_reheat_coil_type,:main_atu_reheat_control,:main_fan_rise,:main_cool_coil_type,:main_heat_coil_type,:main_dx_type,:main_sat_reset_type,:main_sat_temp_max,:main_design_peak_load,:main_oa_econ_type,:main_cool_coil_cop,:main_dx_comp_speed,:main_fan_speed,:main_fan_motor_eff,:main_heat_coil_eff,:main_cool_coil_cop2,:main_cool_coil_cop3,:main_cool_coil_cop4 +,NE-dxAC-PkgAC-65to134-New-EER-11.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.8,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-New-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.19,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-New-EER-13.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.62,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-10.8,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.81,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.29,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-12.5,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.51,CONSTANT,CONSTANT,0.9,0.8,,, \ No newline at end of file diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/RtS&0&cDXGF&New&dxAC_equip.csv b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/RtS&0&cDXGF&New&dxAC_equip.csv new file mode 100644 index 00000000..ef4d99b7 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/RtS&0&cDXGF&New&dxAC_equip.csv @@ -0,0 +1,7 @@ +skip,case_name,:main_hvac_type,:main_atu_reheat_coil_type,:main_atu_reheat_control,:main_fan_rise,:main_cool_coil_type,:main_heat_coil_type,:main_dx_type,:main_sat_reset_type,:main_sat_temp_max,:main_design_peak_load,:main_oa_econ_type,:main_cool_coil_cop,:main_dx_comp_speed,:main_fan_speed,:main_fan_motor_eff,:main_heat_coil_eff,:main_cool_coil_cop2,:main_cool_coil_cop3,:main_cool_coil_cop4 +,NE-dxAC-PkgAC-65to134-New-EER-11.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.8,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-New-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.19,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-New-EER-13.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.62,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-10.8,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.81,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.29,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-12.5,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.51,CONSTANT,CONSTANT,0.9,0.8,,, \ No newline at end of file diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/SCn&0&cDXGF&New&dxAC_equip.csv b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/SCn&0&cDXGF&New&dxAC_equip.csv new file mode 100644 index 00000000..ef4d99b7 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/SCn&0&cDXGF&New&dxAC_equip.csv @@ -0,0 +1,7 @@ +skip,case_name,:main_hvac_type,:main_atu_reheat_coil_type,:main_atu_reheat_control,:main_fan_rise,:main_cool_coil_type,:main_heat_coil_type,:main_dx_type,:main_sat_reset_type,:main_sat_temp_max,:main_design_peak_load,:main_oa_econ_type,:main_cool_coil_cop,:main_dx_comp_speed,:main_fan_speed,:main_fan_motor_eff,:main_heat_coil_eff,:main_cool_coil_cop2,:main_cool_coil_cop3,:main_cool_coil_cop4 +,NE-dxAC-PkgAC-65to134-New-EER-11.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.8,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-New-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.19,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-New-EER-13.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.62,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-10.8,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.81,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.29,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-12.5,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.51,CONSTANT,CONSTANT,0.9,0.8,,, \ No newline at end of file diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/SUn&0&cDXGF&New&dxAC_equip.csv b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/SUn&0&cDXGF&New&dxAC_equip.csv new file mode 100644 index 00000000..ef4d99b7 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/SUn&0&cDXGF&New&dxAC_equip.csv @@ -0,0 +1,7 @@ +skip,case_name,:main_hvac_type,:main_atu_reheat_coil_type,:main_atu_reheat_control,:main_fan_rise,:main_cool_coil_type,:main_heat_coil_type,:main_dx_type,:main_sat_reset_type,:main_sat_temp_max,:main_design_peak_load,:main_oa_econ_type,:main_cool_coil_cop,:main_dx_comp_speed,:main_fan_speed,:main_fan_motor_eff,:main_heat_coil_eff,:main_cool_coil_cop2,:main_cool_coil_cop3,:main_cool_coil_cop4 +,NE-dxAC-PkgAC-65to134-New-EER-11.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.8,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-New-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.19,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-New-EER-13.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.62,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-10.8,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.81,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.29,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-12.5,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.51,CONSTANT,CONSTANT,0.9,0.8,,, \ No newline at end of file diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/WRf&0&cDXGF&New&dxAC_equip.csv b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/WRf&0&cDXGF&New&dxAC_equip.csv new file mode 100644 index 00000000..2c23a38a --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/WRf&0&cDXGF&New&dxAC_equip.csv @@ -0,0 +1,7 @@ +skip,case_name,:main_hvac_type,:main_atu_reheat_coil_type,:main_atu_reheat_control,:main_fan_rise,:main_cool_coil_type,:main_heat_coil_type,:main_dx_type,:main_sat_reset_type,:main_sat_temp_max,:main_design_peak_load,:main_oa_econ_type,:main_cool_coil_cop,:main_dx_comp_speed,:main_fan_speed,:main_fan_motor_eff,:main_heat_coil_eff,:main_cool_coil_cop2,:main_cool_coil_cop3,:main_cool_coil_cop4 +,NE-dxAC-PkgAC-65to134-New-EER-11.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.8,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-New-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.19,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-New-EER-13.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.62,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-10.8,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.81,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.29,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-12.5,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.51,CONSTANT,CONSTANT,0.9,0.8,,, From f284caf2a4e76960d39e0e626a3d7d38a59ecefc Mon Sep 17 00:00:00 2001 From: Shaojie Wang <55248793+wsjsxn@users.noreply.github.com> Date: Sat, 29 Nov 2025 21:03:49 -0600 Subject: [PATCH 11/23] Delete commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/test --- .../SWHC043 Multi_Cap_Com_ACNew_New/cases/test | 1 - 1 file changed, 1 deletion(-) delete mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/test diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/test b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/test deleted file mode 100644 index 8b137891..00000000 --- a/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cases/test +++ /dev/null @@ -1 +0,0 @@ - From 4dcaea3f5d3c0e11d1b5971bd86e8a761f77f836 Mon Sep 17 00:00:00 2001 From: Shaojie Wang <55248793+wsjsxn@users.noreply.github.com> Date: Sat, 29 Nov 2025 21:04:10 -0600 Subject: [PATCH 12/23] Add files via upload --- .../climates.csv | 17 ++++++++++ .../cohorts.csv | 23 +++++++++++++ .../SWHC043 Multi_Cap_Com_ACNew_New/query.txt | 32 +++++++++++++++++++ 3 files changed, 72 insertions(+) create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/climates.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cohorts.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/query.txt diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/climates.csv b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/climates.csv new file mode 100644 index 00000000..d7027d82 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/climates.csv @@ -0,0 +1,17 @@ +skip,climate,weather_file,climate_zone,codes_file +,CZ01,CA_EUREKA_725940S_CZ2022.epw,1,T24_2025_new.csv +,CZ02,CA_NAPA-CO_724955S_CZ2022.epw,2,T24_2025_new.csv +,CZ03,CA_OAKLAND-METRO-AP_724930S_CZ2022.epw,3,T24_2025_new.csv +,CZ04,CA_SAN-JOSE-IAP_724945S_CZ2022.epw,4,T24_2025_new.csv +,CZ05,CA_SANTA-MARIA-PUBLIC-AP_723940S_CZ2022.epw,5,T24_2025_new.csv +,CZ06,CA_LOS-ANGELES-IAP_722950S_CZ2022.epw,6,T24_2025_new.csv +,CZ07,CA_SAN-DIEGO-LINDBERGH-FLD_722900S_CZ2022.epw,7,T24_2025_new.csv +,CZ08,CA_LONG-BEACH-DAUGHERTY-FLD_722970S_CZ2022.epw,8,T24_2025_new.csv +,CZ09,CA_LOS-ANGELES-DOWNTOWN-USC_722874S_CZ2022.epw,9,T24_2025_new.csv +,CZ10,CA_RIVERSIDE-MUNI_722869S_CZ2022.epw,10,T24_2025_new.csv +,CZ11,CA_RED-BLUFF-MUNI-AP_725910S_CZ2022.epw,11,T24_2025_new.csv +,CZ12,CA_STOCKTON-METRO-AP_724920S_CZ2022.epw,12,T24_2025_new.csv +,CZ13,CA_FRESNO-YOSEMITE-IAP_723890S_CZ2022.epw,13,T24_2025_new.csv +,CZ14,CA_DAGGETT-BARSTOW-AP_723815S_CZ2022.epw,14,T24_2025_new.csv +,CZ15,CA_EL-CENTRO-NAF_722810S_CZ2022.epw,15,T24_2025_new.csv +,CZ16,CA_BISHOP-AP_724800S_CZ2022.epw,16,T24_2025_new.csv diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cohorts.csv b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cohorts.csv new file mode 100644 index 00000000..63e0c335 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/cohorts.csv @@ -0,0 +1,23 @@ +skip,cohort,root,wall_type,:wall_base_cavity_insul,:wall_base_cont_insul,:roof_base_cont_insul,:window_u,:window_shgc,:window_transmittance,:floor_base_cont_insul,:office_large_light_area,:kitchen_light_area,:dining_fast_light_area,:classroom_class_light_area,:corridor_light_area,:retail_sales_light_area,:storage_warehouse_light_area,:computer_light_area,:lobby_light_area,:guestroom_light_area,:auditorium_light_area,:conference_light_area,:dining_fine_light_area,:gym_light_area,:restroom_light_area,:health_patient_light_area,:industrial_low_light_area,:laundry_light_area,:auto_light_area,:classroom_shop_light_area,:grocery_light_area,:health_operating_light_area,:industrial_high_light_area,:lab_light_area,:mech_light_area,:office_open_light_area,:storage_refrig_light_area,:office_small_light_area,:main_oa_econ_max_temp +,Asm&0&cDXGF&New&dxAC_equip,Asm/templates/root.pxt,Mass Heavy,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Metal Framed"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Metal Buildings"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Lighting Power Density"", ""office_large"", ""LPD"")['W/ft2']",,,,,,,,,,"%= codes.lookup(""Lighting Power Density"", ""auditorium"", ""LPD"")['W/ft2']",,,,,,,,,,,,,,,,,,"%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +,ECC&0&cDXGF&New&dxAC_equip,ECC/templates/root.pxt,Mass Heavy,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Metal Buildings"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Lighting Power Density"", ""office_large"", ""LPD"")['W/ft2']","%= codes.lookup(""Lighting Power Density"", ""kitchen"", ""LPD"")['W/ft2']","%= codes.lookup(""Lighting Power Density"", ""dining_fast"", ""LPD"")['W/ft2']","%= codes.lookup(""Lighting Power Density"", ""classroom_class"", ""LPD"")['W/ft2']",,,,"%= codes.lookup(""Lighting Power Density"", ""computer"", ""LPD"")['W/ft2']",,,,,,,,,,,,"%= codes.lookup(""Lighting Power Density"", ""classroom_shop"", ""LPD"")['W/ft2']",,,,,,,,,"%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +,EPr&0&cDXGF&New&dxAC_equip,EPr/templates/root.pxt,Wood Frame,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Wood Framed and Other"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Wood Framed and Other"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Wood Framed and Other"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']",,"%= codes.lookup(""Lighting Power Density"", ""kitchen"", ""LPD"")['W/ft2']","%= codes.lookup(""Lighting Power Density"", ""dining_fast"", ""LPD"")['W/ft2']","%= codes.lookup(""Lighting Power Density"", ""classroom_class"", ""LPD"")['W/ft2']",,,,,,,,,,"%= codes.lookup(""Lighting Power Density"", ""gym"", ""LPD"")['W/ft2']",,,,,,,,,,,,,,,"%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +,ERC&0&cDXGF&New&dxAC_equip,ERC/templates/root.pxt,Wood Frame,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Wood Framed and Other"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Wood Framed and Other"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Wood Framed and Other"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']",,,,"%= codes.lookup(""Lighting Power Density"", ""classroom_class"", ""LPD"")['W/ft2']",,,,,,,,,,,,,,,,,,,,,,,,,"%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +,ESe&0&cDXGF&New&dxAC_equip,ESe/templates/root.pxt,Mass Heavy,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Wood Framed and Other"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']",,"%= codes.lookup(""Lighting Power Density"", ""kitchen"", ""LPD"")['W/ft2']","%= codes.lookup(""Lighting Power Density"", ""dining_fast"", ""LPD"")['W/ft2']","%= codes.lookup(""Lighting Power Density"", ""classroom_class"", ""LPD"")['W/ft2']",,,,"%= codes.lookup(""Lighting Power Density"", ""computer"", ""LPD"")['W/ft2']",,,,,,"%= codes.lookup(""Lighting Power Density"", ""gym"", ""LPD"")['W/ft2']",,,,,,,,,,,,,,,"%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +,EUn&0&cDXGF&New&dxAC_equip,EUn/templates/root.pxt,Mass Heavy,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Metal Framed"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Metal Buildings"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Lighting Power Density"", ""office_large"", ""LPD"")['W/ft2']","%= codes.lookup(""Lighting Power Density"", ""kitchen"", ""LPD"")['W/ft2']","%= codes.lookup(""Lighting Power Density"", ""dining_fast"", ""LPD"")['W/ft2']","%= codes.lookup(""Lighting Power Density"", ""classroom_class"", ""LPD"")['W/ft2']","%= codes.lookup(""Lighting Power Density"", ""corridor"", ""LPD"")['W/ft2']",,,"%= codes.lookup(""Lighting Power Density"", ""computer"", ""LPD"")['W/ft2']",,"%= codes.lookup(""Lighting Power Density"", ""guestroom"", ""LPD"")['W/ft2']",,,,,,,"%= codes.lookup(""Lighting Power Density"", ""industrial_low"", ""LPD"")['W/ft2']",,,,,,,,,,,,"%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +,Gro&0&cDXGF&New&dxAC_equip,Gro/templates/root.pxt,Mass Heavy,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Metal Framed"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Metal Buildings"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Lighting Power Density"", ""office_large"", ""LPD"")['W/ft2']",,,,,,,,,,,,,,,,,,,,"%= codes.lookup(""Lighting Power Density"", ""grocery"", ""LPD"")['W/ft2']",,"%= codes.lookup(""Lighting Power Density"", ""industrial_high"", ""LPD"")['W/ft2']",,,,"%= codes.lookup(""Lighting Power Density"", ""storage_refrig"", ""LPD"")['W/ft2']",,"%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +,Hsp&0&cDXGF&New&dxAC_equip,Hsp/templates/root.pxt,Mass Heavy,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Metal Buildings"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Lighting Power Density"", ""office_large"", ""LPD"")['W/ft2']","%= codes.lookup(""Lighting Power Density"", ""kitchen"", ""LPD"")['W/ft2']","%= codes.lookup(""Lighting Power Density"", ""dining_fast"", ""LPD"")['W/ft2']",,,,,,,,,,,,,"%= codes.lookup(""Lighting Power Density"", ""health_patient"", ""LPD"")['W/ft2']",,,,,,"%= codes.lookup(""Lighting Power Density"", ""health_operating"", ""LPD"")['W/ft2']",,,,,,,"%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +#,Htl&0&cDXGF&New&dxAC_equip,Htl/templates/root.pxt,Mass Heavy,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Metal Framed"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Metal Buildings"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Lighting Power Density"", ""office_large"", ""LPD"")['W/ft2']","%= codes.lookup(""Lighting Power Density"", ""kitchen"", ""LPD"")['W/ft2']",,,"%= codes.lookup(""Lighting Power Density"", ""corridor"", ""LPD"")['W/ft2']",,,,"%= codes.lookup(""Lighting Power Density"", ""lobby"", ""LPD"")['W/ft2']","%= codes.lookup(""Lighting Power Density"", ""guestroom"", ""LPD"")['W/ft2']",,,"%= codes.lookup(""Lighting Power Density"", ""dining_fine"", ""LPD"")['W/ft2']",,,,,"%= codes.lookup(""Lighting Power Density"", ""laundry"", ""LPD"")['W/ft2']",,,,,,,,,,,"%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +,MBT&0&cDXGF&New&dxAC_equip,MBT/templates/root.pxt,Metal Frame,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Metal Framed"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Metal Framed"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Metal Buildings"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Lighting Power Density"", ""office_large"", ""LPD"")['W/ft2']","%= codes.lookup(""Lighting Power Density"", ""kitchen"", ""LPD"")['W/ft2']","%= codes.lookup(""Lighting Power Density"", ""dining_fast"", ""LPD"")['W/ft2']",,"%= codes.lookup(""Lighting Power Density"", ""corridor"", ""LPD"")['W/ft2']",,,"%= codes.lookup(""Lighting Power Density"", ""computer"", ""LPD"")['W/ft2']",,,,"%= codes.lookup(""Lighting Power Density"", ""conference"", ""LPD"")['W/ft2']",,,,,,,,,,,,"%= codes.lookup(""Lighting Power Density"", ""lab"", ""LPD"")['W/ft2']",,,,,"%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +,MLI&0&cDXGF&New&dxAC_equip,MLI/templates/root.pxt,Mass Heavy,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Metal Framed"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Metal Buildings"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']",,,,,,,"%= codes.lookup(""Lighting Power Density"", ""storage_warehouse"", ""LPD"")['W/ft2']",,,,,,,,,,"%= codes.lookup(""Lighting Power Density"", ""industrial_low"", ""LPD"")['W/ft2']",,,,,,,,,,,,"%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +,Mtl&0&cDXGF&New&dxAC_equip,Mtl/templates/root.pxt,Wood Frame,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Wood Framed and Other"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Wood Framed and Other"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Wood Framed and Other"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Lighting Power Density"", ""office_large"", ""LPD"")['W/ft2']",,,,"%= codes.lookup(""Lighting Power Density"", ""corridor"", ""LPD"")['W/ft2']",,,,,"%= codes.lookup(""Lighting Power Density"", ""guestroom"", ""LPD"")['W/ft2']",,,,,,,,"%= codes.lookup(""Lighting Power Density"", ""laundry"", ""LPD"")['W/ft2']",,,,,,,,,,,"%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +,Nrs&0&cDXGF&New&dxAC_equip,Nrs/templates/root.pxt,Wood Frame,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Wood Framed and Other"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Wood Framed and Other"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Wood Framed and Other"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Lighting Power Density"", ""office_large"", ""LPD"")['W/ft2']","%= codes.lookup(""Lighting Power Density"", ""kitchen"", ""LPD"")['W/ft2']","%= codes.lookup(""Lighting Power Density"", ""dining_fast"", ""LPD"")['W/ft2']",,"%= codes.lookup(""Lighting Power Density"", ""corridor"", ""LPD"")['W/ft2']",,,,,,,,,,,"%= codes.lookup(""Lighting Power Density"", ""health_patient"", ""LPD"")['W/ft2']",,,,,,,,,,,,,"%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +,OfL&0&cDXGF&New&dxAC_equip,OfL/templates/root.pxt,Metal Frame,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Metal Framed"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Metal Framed"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Metal Buildings"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Lighting Power Density"", ""office_large"", ""LPD"")['W/ft2']",,,,,,,,"%= codes.lookup(""Lighting Power Density"", ""lobby"", ""LPD"")['W/ft2']",,,,,,,,,,,,,,,,"%= codes.lookup(""Lighting Power Density"", ""mech"", ""LPD"")['W/ft2']","%= codes.lookup(""Lighting Power Density"", ""office_open"", ""LPD"")['W/ft2']",,,"%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +,OfS&0&cDXGF&New&dxAC_equip,OfS/templates/root.pxt,Wood Frame,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Wood Framed and Other"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Wood Framed and Other"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Wood Framed and Other"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Lighting Power Density"", ""office_large"", ""LPD"")['W/ft2']",,,,"%= codes.lookup(""Lighting Power Density"", ""corridor"", ""LPD"")['W/ft2']",,,,,,,,,,,,,,,,,,,,,,,"%= codes.lookup(""Lighting Power Density"", ""office_small"", ""LPD"")['W/ft2']","%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +,RFF&0&cDXGF&New&dxAC_equip,RFF/templates/root.pxt,Mass Heavy,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Wood Framed and Other"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']",,"%= codes.lookup(""Lighting Power Density"", ""kitchen"", ""LPD"")['W/ft2']","%= codes.lookup(""Lighting Power Density"", ""dining_fast"", ""LPD"")['W/ft2']",,,,,,"%= codes.lookup(""Lighting Power Density"", ""lobby"", ""LPD"")['W/ft2']",,,,,,"%= codes.lookup(""Lighting Power Density"", ""restroom"", ""LPD"")['W/ft2']",,,,,,,,,,,,,,"%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +,RSD&0&cDXGF&New&dxAC_equip,RSD/templates/root.pxt,Wood Frame,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Wood Framed and Other"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Wood Framed and Other"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Wood Framed and Other"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']",,"%= codes.lookup(""Lighting Power Density"", ""kitchen"", ""LPD"")['W/ft2']",,,,,,,"%= codes.lookup(""Lighting Power Density"", ""lobby"", ""LPD"")['W/ft2']",,,,"%= codes.lookup(""Lighting Power Density"", ""dining_fine"", ""LPD"")['W/ft2']",,"%= codes.lookup(""Lighting Power Density"", ""restroom"", ""LPD"")['W/ft2']",,,,,,,,,,,,,,"%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +,Rt3&0&cDXGF&New&dxAC_equip,Rt3/templates/root.pxt,Mass Heavy,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Metal Buildings"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']",,,,,,"%= codes.lookup(""Lighting Power Density"", ""retail_sales"", ""LPD"")['W/ft2']",,,,,,,,,,,,,,,,,,,,,,,"%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +,RtL&0&cDXGF&New&dxAC_equip,RtL/templates/root.pxt,Mass Heavy,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Metal Framed"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Metal Buildings"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Lighting Power Density"", ""office_large"", ""LPD"")['W/ft2']","%= codes.lookup(""Lighting Power Density"", ""kitchen"", ""LPD"")['W/ft2']",,,,"%= codes.lookup(""Lighting Power Density"", ""retail_sales"", ""LPD"")['W/ft2']","%= codes.lookup(""Lighting Power Density"", ""storage_warehouse"", ""LPD"")['W/ft2']",,,,,,,,,,,,"%= codes.lookup(""Lighting Power Density"", ""auto"", ""LPD"")['W/ft2']",,,,,,,,,,"%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +,RtS&0&cDXGF&New&dxAC_equip,RtS/templates/root.pxt,Mass Heavy,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Wood Framed and Other"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']",,,,,,"%= codes.lookup(""Lighting Power Density"", ""retail_sales"", ""LPD"")['W/ft2']","%= codes.lookup(""Lighting Power Density"", ""storage_warehouse"", ""LPD"")['W/ft2']",,,,,,,,,,,,,,,,,,,,,,"%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +,SCn&0&cDXGF&New&dxAC_equip,SCn/templates/root.pxt,Mass Heavy,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Metal Framed"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Metal Buildings"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']",,,,,,,"%= codes.lookup(""Lighting Power Density"", ""storage_warehouse"", ""LPD"")['W/ft2']",,,,,,,,,,,,,,,,,,,,,,"%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +#,WRf&0&cDXGF&New&dxAC_equip,WRf/templates/root.pxt,Mass Heavy,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Wood Framed and Other"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']",,,,,,,"%= codes.lookup(""Lighting Power Density"", ""storage_warehouse"", ""LPD"")['W/ft2']",,,,,,,,,,,,,,,,,,,,,,"%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/query.txt b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/query.txt new file mode 100644 index 00000000..f16ea16a --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/SWHC043 Multi_Cap_Com_ACNew_New/query.txt @@ -0,0 +1,32 @@ +AnnualBuildingUtilityPerformanceSummary/Entire Facility/Site and Source Energy/Energy Per Total Building Area/Net Site Energy, Net Site EUI +AnnualBuildingUtilityPerformanceSummary/Entire Facility/Site and Source Energy/Total Energy/Net Site Energy, Net Site Energy +AnnualBuildingUtilityPerformanceSummary/Entire Facility/Site and Source Energy/Energy Per Total Building Area/Net Source Energy, Net Source EUI +AnnualBuildingUtilityPerformanceSummary/Entire Facility/Site and Source Energy/Total Energy/Net Source Energy, Net Source Energy + +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Total End Uses, Total +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Heating, Heating +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Cooling, Cooling +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Interior Lighting, Interior Lighting +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Exterior Lighting, Exterior Lighting +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Interior Equipment, Interior Equipment +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Exterior Equipment, Exterior Equipment +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Fans, Fans +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Pumps, Pumps +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Heat Rejection, Heat Rejection +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Humidification, Humidification +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Heat Recovery, Heat Recovery +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Water Systems, Water Systems +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Refrigeration, Refrigeration +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Generators, Generators +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Electricity/Heating, Heating Elec +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Electricity/Cooling, Cooling Elec +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Natural Gas/Heating, Heating NG +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Natural Gas/Cooling, Cooling NG +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Electricity/Interior Equipment, Interior Equipment Elec +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Natural Gas/Interior Equipment, Interior Equipment NG + +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Electricity/Total End Uses, Electricity +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Natural Gas/Total End Uses, Natural Gas + +AnnualBuildingUtilityPerformanceSummary/Entire Facility/Comfort and Setpoint Not Met Summary/Facility/Time Setpoint Not Met During Occupied Heating, Unmet Heating +AnnualBuildingUtilityPerformanceSummary/Entire Facility/Comfort and Setpoint Not Met Summary/Facility/Time Setpoint Not Met During Occupied Cooling, Unmet Cooling From 1409a04ad178adfc9b76fed6bdb5242266768676 Mon Sep 17 00:00:00 2001 From: Shaojie Wang <55248793+wsjsxn@users.noreply.github.com> Date: Sat, 29 Nov 2025 21:04:33 -0600 Subject: [PATCH 13/23] Add files via upload --- .../.modelkit-config | 24 + .../SWHC043 Multi_Cap_Com_ACNew/global.pxv | 2 + .../SWHC043 Multi_Cap_Com_ACNew/rakefile.rb | 1010 +++++++++++++++++ 3 files changed, 1036 insertions(+) create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACNew/.modelkit-config create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACNew/global.pxv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_ACNew/rakefile.rb diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACNew/.modelkit-config b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/.modelkit-config new file mode 100644 index 00000000..3045867c --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/.modelkit-config @@ -0,0 +1,24 @@ + +# Paths are expanded relative to this modelkit-config file. + +prototypes-dir = '../../prototypes' +templates-dir = '../../templates/energyplus/templates' +weather-dir = '../../weather' +codes-dir = '../../codes' + +max-workers = 100 # Maximum number of simulations to run in parallel + + +[template-compose] +annotate = true +indent = " " +esc-line = "! " +dirs = '~\Documents\Modelkit Caboodle\templates\energyplus\templates' # Must be an absolute path + +[energyplus-run] +engine = 'C:\EnergyPlusV22-2-0' # Must be an absolute path +#engine = '/Applications/EnergyPlus-22-2-0' # Must be an absolute path +#engine = '/Applications/EnergyPlus-9-2-0' # Must be an absolute path +readvars = true +keep = false +output-files = "eplusout.err; eplusout.sql; eplustbl.htm; eplusvar.csv" diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACNew/global.pxv b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/global.pxv new file mode 100644 index 00000000..c707bb60 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/global.pxv @@ -0,0 +1,2 @@ +:timestep => 6, +:run_control => "ANNUAL" # ANNUAL | SIZING diff --git a/commercial measures/SWHC043 Multi_Cap_Com_ACNew/rakefile.rb b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/rakefile.rb new file mode 100644 index 00000000..1e850689 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_ACNew/rakefile.rb @@ -0,0 +1,1010 @@ +# Copyright (c) 2011-2020 Big Ladder Software LLC. All rights reserved. +# See the file "license.txt" for additional terms and conditions. + +if (not defined?(Modelkit)) + begin + require("modelkit") + rescue LoadError => exception + args = ARGV.join(" ") + puts exception + puts "\e[1m\e[31mERROR: This rakefile requires the Modelkit library. Make sure that you have the\nModelkit gem installed in your local Rubygems environment, or try running the\nrakefile using your stand-alone installation of Modelkit by typing:\e[0m\n \e[1mmodelkit rake #{args}\e[0m" + exit + end +end + + +require("pathname") +require("json") + +require("modelkit/config") +require("modelkit/multitable") +require("modelkit/parametrics") +require("modelkit/parametrics/worksheet") +require("modelkit/energyplus") + + +# Add to modelkit-energyplus: +# other args: +# - which design days +# - water mains temp? +# - daylight saving time? +def generate_site_pxt(idd, ddy_path, site_path) + site_file = File.open(site_path, "w") + + if (File.exists?(ddy_path)) + input_file = OpenStudio::InputFile.open(idd, ddy_path) + else + raise("file not found: #{ddy_path.inspect}") + end + + site_locations = input_file.find_objects_by_class_name("Site:Location").to_a + + if (site_locations.empty?) + raise("could not find Site:Location object in #{ddy_path.inspect}") + else + site_file.puts(site_locations.first.to_idf) + end + + all_design_days = input_file.find_objects_by_class_name("SizingPeriod:DesignDay").to_a + selected_design_days = all_design_days.select { |dd| dd.name[/Ann Htg 99.6% Condns DB|Ann Clg 0?.4% Condns DB/i] } + + if (selected_design_days.length < 2) + puts "warning: could not find requested design days; including all design days\n" + selected_design_days = all_design_days + end + + # Write design days to site file. + selected_design_days.each { |dd| site_file.puts(dd.to_idf) } + + +# 'CorrelationFromWeatherFile' is available starting in EP 9.0. + +# Does this work for design-day only runs? +# Seems to work for annual. + site_file.puts("\n\nSite:WaterMainsTemperature,\n CorrelationFromWeatherFile;\n") + + daylight_saving_time = input_file.find_objects_by_class_name("RunPeriodControl:DaylightSavingTime").to_a + if (not daylight_saving_time.empty?) + site_file.puts + site_file.puts(daylight_saving_time.first.to_idf) + end + + site_file.close +end + + +# NOPUB Should move into Modelkit somewhere. +# Support for running simulations in parallel. +require("open3") +require("set") + +$child_pids = Set.new # Global tracking of child PIDs + +# Return PID? +def run_process(command, dir) + # NOTE: Separate processes are required to make the EnergyPlus runs thread safe! + Open3.popen3(command, :chdir => dir) do |stdin, stdout, stderr, thread| + $child_pids.add(thread.pid) + # This might work with just an instance variable or similar. + + stdin.close # All input already sent with command + + file_out = File.open("#{dir}/stdout", "w") + file_err = File.open("#{dir}/stderr", "w") + + while (line = stdout.gets) + file_out.puts(line) + #@proc_out.call(line) if (@proc_out) + end + + # This is probably not right. + while (line = stderr.gets) + file_err.puts(line) + #@proc_err.call(line) if (@proc_err) + end + + stdout.close + stderr.close + + file_out.close + file_err.close + + #print "Completed: #{File.basename(dir)}\n" + $child_pids.delete(thread.pid) + end +end + +# Search up through parent directories for one or more possible file names. +def search_parent_dirs(start_dir, *file_names) + path = nil + dir_names = start_dir.to_s.split("/") + while (not dir_names.empty?) do + file_names.each do |file_name| + test_path = "#{dir_names.join("/")}/#{file_name}" + if (File.exist?(test_path)) + path = test_path + break + end + end + break if (path) + dir_names.pop + end + return(path) +end + +# Search for a file name or partial path in an array of provided directories. +# Directories are expected to already be absolute paths. +def resolve_path(path, dirs) + resolved_path = nil + dirs.each do |dir| + expanded_path = File.expand_path(path, dir) + if (File.exist?(expanded_path)) + resolved_path = expanded_path + break + end + end + return(resolved_path) +end + +# Clean up any previous output files left behind if 'compose' or 'run' fails. +# Leftover files can be processed unintentionally by downstream tasks and +# ultimately generate false results. +def clean_energyplus_output_files(dir) + # Not all of these files might be present. Others might be present and unhandled. + paths = [ + "#{dir}/instance-out.err", + "#{dir}/instance-out.rdd", + "#{dir}/instance-out.sql", # Most important for downstream tasks + "#{dir}/instance-tbl.htm", + "#{dir}/instance-var.csv", + "#{dir}/stderr", + "#{dir}/stdout" + ] + FileUtils.rm_f(paths) +end + + +# Rake stubbornly sets the working directory to wherever the Rakefile is located. +# The target directory could optionally be set from a CLI option instead. +study_dir = Rake.application.original_dir + +climates_csv_path = "#{study_dir}/climates.csv" +cohorts_csv_path = "#{study_dir}/cohorts.csv" + +query_path = "#{study_dir}/query.txt" +results_summary_path = "#{study_dir}/results-summary.csv" +results_profile_elec_path = "#{study_dir}/results-profile-elec.csv" +results_profile_gas_path = "#{study_dir}/results-profile-gas.csv" +results_paths = [results_summary_path, results_profile_elec_path, results_profile_gas_path] + +cases_dir = "#{study_dir}/cases" +runs_dir = "#{study_dir}/runs" +runs_pathname = Pathname.new(runs_dir) + +MUTEX = Mutex.new # Thread lock for when something needs to run in a single thread + +config_path = search_parent_dirs(study_dir, ".modelkit-config") +if (not config_path) + raise("modelkit-config file not found in working directory or any parent directory") +else + CONFIG = Modelkit::Config.new(config_path) + puts "Using modelkit-config at #{config_path}\n" +end + +config = Hash.new +[:prototypes_dir, :templates_dir, :weather_dir, :codes_dir].each do |key| + config[key] = [] + field = key.to_s.gsub(/_/, "-") + if (not CONFIG[field]) + raise("#{field} variable missing in modelkit-config") + else + config_paths = CONFIG[field].split(/\s*;\s*/) # Split string with semicolons into array of paths + config_paths.each do |path| + # Resolve path relative to modelkit-config file and normalize the slashes. + config[key] << File.expand_path(path.strip.gsub(/\\/, "/"), File.dirname(config_path)) + end + end +end + +max_workers = CONFIG["max-workers"] +if (max_workers.nil?) + max_workers = 1 +end + +global_pxv_path = search_parent_dirs(study_dir, "global.pxv") +if (global_pxv_path) + puts "Using global.pxv at #{global_pxv_path}\n" +end + +rake_tasks = Rake.application.top_level_tasks +rake_task_name = rake_tasks.first # Multiple tasks are allowed, but assume one + +rake_options = Rake.application.options +rake_options.always_multitask = true # --multitask, -m +#rake_options.job_stats = true # --job-stats true | :history +rake_options.thread_pool_size = max_workers - 1 # --jobs, -j (default 12 on Mac) + +if (rake_options.dryrun or rake_options.show_all_tasks or + rake_options.show_prereqs or rake_options.show_tasks) + # These are information-only requests. Rake nonetheless registers as invoked + # with the "default" task name but nothing actually gets run. + rake_task_name = "none" +end + + +# Show threads message and info about how to change +# Running with 8 threads (edit .modelkit-config to change). +# Type Ctrl+C to cancel all tasks. + +require "io/console" # need this anyway for progress bar + +#$stdin.echo = false # turn off echo; in Mac shows a cursor with a key icon +# This prevents the user from over-typing the output stream. + +# also try switching to raw mode--should also block user input; maybe no key icon? + +#print "\e[?25l" # hide the cursor; MUST remember to show it again on exit or else it's permanent for the session! + + +trap("INT") do # Ctrl+C (polite kill) + puts "Canceling all tasks.\n" + if ($child_pids) + $child_pids.each { |pid| Process.kill("KILL", pid) } + end + exit +end + +if (Modelkit::Platform.unix?) + trap("TSTP") do # Ctrl+Z (suspend) + puts "Suspending all tasks. Type 'fg' to resume.\n" + exit + end +end + +if (not rake_task_name =~ /^(prune|clean|none)$/) + +# If possible, detect if any tasks will be run before showing this message: +puts "\e[1mType Ctrl+C to cancel all tasks.\e[0m\n" + +end + +# modelkit rake -A crashes for some reason + +# NOPUB Some of above could be included here too. +# Don't evaluate worksheets and generate file tasks if not necessary! +# NOTE: prune does need to evaluate worksheets. +if (not rake_task_name =~ /^(clean|none)$/) + + pxv_paths = [] + site_paths = [] + + compose_idf_paths = [] + + + #rename size_ to sizerun_ size_run_ sizing_run_ + size_ref_paths = [] + size_idf_paths = [] + size_sql_paths = [] + size_json_paths = [] + + hardsize_idf_paths = [] + + run_sql_paths = [] + run_csv_paths = [] + + + + old_site_paths = Dir.glob("#{runs_dir}/*/site.pxt") + old_pxv_paths = Dir.glob("#{runs_dir}/**/instance.pxv") + + climates = Modelkit::Worksheet.open(climates_csv_path) + cohorts = Modelkit::Worksheet.open(cohorts_csv_path) + + climate_pattern = ENV["CLIMATE"] || "" + + new_case_csv = "skip,case_name\n,defaults\n" # Could be read from config instead + + cohorts_first_pass = true + + puts "Evaluating worksheets...\n" + + csv_table = climates.each_row do |row1, index1, variables1, parameters1| + #puts "climate_index = #{index1}" + + if (not variables1.key?(:climate)) + raise("required column \"climate\" is missing in #{File.basename(climates_csv_path)}") + end + + climate_name = variables1[:climate].to_s.strip # Could have been converted to non-string by Util.value_from_string + if (climate_name.empty?) + raise("climate field cannot be blank for row #{index1 + 2} of #{File.basename(climates_csv_path)}") + end + + next if (not climate_name =~ Regexp.new(climate_pattern)) + + FileUtils.mkdir_p("#{runs_dir}/#{climate_name}") + + site_path = "#{runs_dir}/#{climate_name}/site.pxt" + if (site_paths.include?(site_path)) + puts "warning: duplicate name #{climate_name.inspect} in climate column at row #{index1 + 2} in #{File.basename(climates_csv_path)}; row will be skipped" + next + end + + site_paths << site_path + + if (not variables1.key?(:weather_file)) + raise("required column \"weather_file\" is missing in #{File.basename(climates_csv_path)}") + end + + weather_name = variables1[:weather_file].to_s.strip # Could have been converted to non-string by Util.value_from_string + if (weather_name.empty?) + raise("weather_file field cannot be blank for row #{index1 + 2} of #{File.basename(climates_csv_path)}") + end + + epw_path = resolve_path(weather_name, config[:weather_dir]) + if (not epw_path) + puts "Could not resolve path #{weather_name.inspect} from possible paths:\n" + config[:weather_dir].each { |dir| puts " #{File.expand_path(weather_name, dir).inspect}\n" } + puts "Check the weather-dir variable in modelkit-config file.\n" + raise("weather file #{weather_name.inspect} not found for row #{index1 + 2} of #{File.basename(climates_csv_path)}") + end + + if (not File.file?(epw_path)) + raise("weather file #{epw_path.inspect} is not a file for row #{index1 + 2} of #{File.basename(climates_csv_path)}") + end + + ddy_path = "#{File.dirname(epw_path)}/#{File.basename(epw_path, ".*")}.ddy" # Ensure ddy is from same directory as resolved epw file + if (not File.exist?(ddy_path)) + puts "Weather file path resolved to #{epw_path.inspect}\n" + raise("ddy file #{ddy_path.inspect} not found for row #{index1 + 2} of #{File.basename(climates_csv_path)}") + end + + # This file only exists to indicate if the weather file changes for dependency purposes. + # The weather file is the one input that is separate from instance parameters. + weather_path = "#{runs_dir}/#{climate_name}/weather" + pathname = Pathname.new(weather_path).relative_path_from(runs_pathname) + + if (File.exist?(weather_path)) + old_epw_path = File.read(weather_path) + if (epw_path != old_epw_path) + puts "Updating: #{pathname}\n" + File.write(weather_path, epw_path) + end + else + puts "Writing: #{pathname}\n" + File.write(weather_path, epw_path) + end + + # generate site.pxt from .ddy file + file site_path => [weather_path, ddy_path] do + idd = open_data_dictionary + pathname = Pathname.new(site_path).relative_path_from(runs_pathname) + puts "Generating: #{pathname}\n" + generate_site_pxt(idd, ddy_path, site_path) + end + + if (variables1.key?(:codes_file)) # NOTE: codes_file is an optional column + codes_name = variables1[:codes_file].to_s.strip # Could have been converted to non-string by Util.value_from_string + if (codes_name.empty?) + raise("codes_file field cannot be blank for row #{index1 + 2} of #{File.basename(climates_csv_path)}") + end + + codes_path = resolve_path(codes_name, config[:codes_dir]) + if (not codes_path) + puts "Could not resolve path #{codes_name.inspect} from possible paths:\n" + config[:codes_dir].each { |dir| puts " #{File.expand_path(codes_name, dir).inspect}\n" } + puts "Check the codes-dir variable in modelkit-config file.\n" + raise("codes file #{codes_name.inspect} not found for row #{index1 + 2} of #{File.basename(climates_csv_path)}") + end + + if (not File.file?(codes_path)) + raise("codes file #{codes_path.inspect} is not a file for row #{index1 + 2} of #{File.basename(climates_csv_path)}") + end + + codes_table = Modelkit::MultiTable.new(codes_path) + + else + codes_table = nil # Must set something to pass to next worksheet + end + + variables1[:codes] = codes_table # For backwards compatibility + + # Make sure objects passed in are not mutated by the Worksheet. Make dupes? + + cohort_names = [] # Accumulate names to check for duplicates + + cohorts.each_row(variables1) do |_, index2, variables2, parameters2| + #puts " cohort_index = #{index2}" + + # NOTE: Variables from outer worksheet (variables1) are copied into this worksheet. + # Changes to the variables here (variables2) do not propagate back up. + + if (not variables2.key?(:cohort)) + raise("required column \"cohort\" is missing in #{File.basename(cohorts_csv_path)}") + end + + cohort_name = variables2[:cohort].to_s.strip # Could have been converted to non-string by Util.value_from_string + if (cohort_name.empty?) + raise("cohort field cannot be blank for row #{index2 + 2} of #{File.basename(cohorts_csv_path)}") + end + + if (cohort_names.include?(cohort_name)) + if (cohorts_first_pass) # Only warn about this row once + puts "warning: duplicate name #{cohort_name.inspect} in cohort column at row #{index2 + 2} in #{File.basename(cohorts_csv_path)}; row will be skipped" + end + next + end + + cohort_names << cohort_name + + cases_csv_path = "#{cases_dir}/#{cohort_name}.csv" + cases_csv_short_path = "#{File.basename(cases_dir)}/#{cohort_name}.csv" + if (not File.exist?(cases_csv_path)) + puts("Cases worksheet #{cases_csv_short_path.inspect} not found for row #{index2 + 2} of #{File.basename(cohorts_csv_path)}\n") + puts("Creating: #{cases_csv_short_path}\n") + FileUtils.mkdir_p(cases_dir) + File.write(cases_csv_path, new_case_csv) + end + + if (not variables2.key?(:root)) + raise("required column \"root\" is missing in #{File.basename(cohorts_csv_path)}") + end + + root_name = variables2[:root].to_s.strip # Could have been converted to non-string by Util.value_from_string + if (root_name.empty?) + raise("root field cannot be blank for row #{index2 + 2} of #{File.basename(cohorts_csv_path)}") + end + + root_path = resolve_path(root_name, config[:prototypes_dir]) + if (not root_path) + puts "Could not resolve path #{root_name.inspect} from possible paths:\n" + config[:prototypes_dir].each { |dir| puts " #{File.expand_path(root_name, dir).inspect}\n" } + puts "Check the prototypes-dir variable in modelkit-config file.\n" + raise("root template #{root_name.inspect} not found for row #{index2 + 2} of #{File.basename(cohorts_csv_path)}") + end + + if (not File.file?(root_path)) + raise("root template #{root_path.inspect} is not a file for row #{index2 + 2} of #{File.basename(cohorts_csv_path)}") + end + + case_names = [] # Accumulate names to check for duplicates + + # Better to pre-read and cache this outside the looping? + # There are only N worksheets...1 per building type. + cases = Modelkit::Worksheet.open(cases_csv_path) + + cases.each_row(variables2) do |_, index3, variables3, parameters3| + #puts " case_index = #{index3}" + + # NOTE: Variables from outer worksheet (variables2) are copied into this worksheet. + # Changes to the variables here (variables3) do not propagate back up. + + if (not variables3.key?(:case_name)) + raise("required column \"case_name\" is missing in #{File.basename(cases_dir)}/#{File.basename(cases_csv_path)}") + end + + case_name = variables3[:case_name].to_s.strip # Could have been converted to non-string by Util.value_from_string + if (case_name.empty?) + raise("case_name field cannot be blank for row #{index3 + 2} of #{File.basename(cases_dir)}/#{File.basename(cases_csv_path)}") + end + + if (case_names.include?(case_name)) + if (cohorts_first_pass) # Only warn about this row once + puts "warning: duplicate name #{case_name.inspect} in case_name column at row #{index3 + 2} in #{File.basename(cases_dir)}/#{File.basename(cases_csv_path)}; row will be skipped" + end + next + end + + case_names << case_name + run_name = "#{climate_name}/#{cohort_name}/#{case_name}" + case_dir = "#{runs_dir}/#{run_name}" + FileUtils.mkdir_p(case_dir) + + # better to create this dynamically in cases.csv by combining variables from other layers. + # all variables need to be propagated first from layer to layer. + # for example: + # :run_name + # %= "My Prefix Something: #{climate}/#{cohort}/#{case_name}" + pxv_string = ":run_name => #{run_name.inspect},\n" + + parameters = parameters1 | parameters2 | parameters3 + parameters.each do |key, value| + value_inspect = value.inspect + if (value.kind_of?(String)) + # Using `inspect` on strings is useful because it reveals invisible + # characters and invalid byte sequences. The downside is that the + # string must be unescaped. + value_inspect.gsub!(/\\\\/, "\\") + end + pxv_string << ":#{key} => #{value_inspect},\n" + end + + pxv_path = "#{case_dir}/instance.pxv" + pxv_paths << pxv_path + + pathname = Pathname.new(pxv_path).relative_path_from(runs_pathname) + + if (File.exist?(pxv_path)) + old_pxv_string = File.read(pxv_path) + if (pxv_string != old_pxv_string) + puts "Updating: #{pathname}\n" + File.write(pxv_path, pxv_string) + end + else + puts "Writing: #{pathname}\n" + File.write(pxv_path, pxv_string) + end + + compose_idf_path = "#{case_dir}/instance.idf" + compose_idf_paths << compose_idf_path + + if (variables3[:sizing_case]) + size_name = "#{climate_name}/#{cohort_name}/#{variables3[:sizing_case]}" + size_dir = "#{runs_dir}/#{size_name}" + size_ref_path = "#{size_dir}/instance.idf" + + size_idf_path = "#{size_dir}/instance-size.idf" + size_sql_path = "#{size_dir}/instance-size-out.sql" + size_json_path = "#{size_dir}/instance-size-out.json" + + if (size_ref_paths.include?(size_ref_path)) + # Avoid creating redundant tasks when multiple cases reference same sizing case. + create_sizing_tasks = false + else + create_sizing_tasks = true + + size_ref_paths << size_ref_path + size_idf_paths << size_idf_path + size_sql_paths << size_sql_path + size_json_paths << size_json_path + end + + hardsize_idf_path = "#{case_dir}/instance-hardsize.idf" + hardsize_idf_paths << hardsize_idf_path + + run_idf_path = hardsize_idf_path # Which input file to run + + run_sql_path = "#{case_dir}/instance-hardsize-out.sql" + run_sql_paths << run_sql_path + + run_csv_path = "#{case_dir}/instance-hardsize-var.csv" + run_csv_paths << run_csv_path + + else + # Autosize-only run. + size_ref_path = nil + + run_idf_path = compose_idf_path # Which input file to run + + run_sql_path = "#{case_dir}/instance-out.sql" + run_sql_paths << run_sql_path + + run_csv_path = "#{case_dir}/instance-var.csv" + run_csv_paths << run_csv_path + end + + # Compose input file from parameter file. + # need more dependencies here: template files + file compose_idf_path => [site_path, root_path, pxv_path, global_pxv_path].compact do # If no path for global.pxv, remove nil element + pathname = Pathname.new(compose_idf_path).relative_path_from(runs_pathname) + puts "Composing: #{pathname}\n" + + clean_energyplus_output_files(File.dirname(compose_idf_path)) + + site_dir = File.dirname(site_path) + + begin + Modelkit::Parametrics.template_compose(root_path, + :annotate => CONFIG["template-compose.annotate"], + :indent => CONFIG["template-compose.indent"], + :esc_line => CONFIG["template-compose.esc-line"], + :dirs => [site_dir, *config[:templates_dir]], + :files => [global_pxv_path, pxv_path].compact, # If no path for global.pxv, remove nil element + :output => compose_idf_path) + rescue Exception => exception + puts "#{exception.class.name}: #{exception.message}\n" + puts "#{exception.backtrace.first}\n" if (not SyntaxError === exception) + puts "Skipping: #{pathname}\n" + end + end + + if (create_sizing_tasks) + # Generate a modified input file in order to run a design-day-only simulation. + # NOTE: This can be eliminated if a design-day option is added to energyplus-run. + file size_idf_path => size_ref_path do + pathname = Pathname.new(size_idf_path).relative_path_from(runs_pathname) + puts "Generating size run: #{pathname}\n" + + FileUtils.cp(size_ref_path, size_idf_path) + + idd = open_data_dictionary + input_file = OpenStudio::InputFile.open(idd, size_idf_path) + + sc_objs = input_file.find_objects_by_class_name("SimulationControl") + if sc_objs.length != 1 + raise "More than one SimulationControl object found" + end + sc = sc_objs[0] + sc.fields[1] = "Yes" + sc.fields[2] = "Yes" + sc.fields[3] = "Yes" + sc.fields[4] = "Yes" + sc.fields[5] = "No" + + input_file.write(size_idf_path) + end + + # Run sizing input files for design days only. + file size_sql_path => size_idf_path do + pathname = Pathname.new(size_idf_path).relative_path_from(runs_pathname) + puts "Running size run: #{pathname}\n" + + command = "modelkit-energyplus energyplus-run --weather=\"#{epw_path}\" \"#{size_idf_path}\"" + run_process(command, size_dir) + end + + # Generate size data file (instance-size-out.json). + file size_json_path => size_sql_path do + pathname = Pathname.new(size_json_path).relative_path_from(runs_pathname) + puts "Extracting size data: #{pathname}\n" + + # Make a copy to work on because the original gets overwritten by EnergyPlus.size. + temp_path = "#{File.dirname(size_idf_path)}/instance-temp.idf" + FileUtils.cp(size_idf_path, temp_path) + + idd = open_data_dictionary + input_file = OpenStudio::InputFile.open(idd, temp_path) + sql = Modelkit::EnergyPlus::SQLOutput.new(size_sql_path) + + # This will be fixed to only generate JSON and not modify the input file. + _, count, output_file = Modelkit::EnergyPlus.size( + sql, input_file, {json: size_json_path, version: "9-2"}) + #puts("#{count} modifications made") + + FileUtils.rm_f(temp_path) + end + end + + if (hardsize_idf_path) + # This would be a reasonable place to use `multitask` because compose_idf_path and + # size_json_path are independent and can be run concurrently. However, it seems + # like `multitask` doesn't compare timestamps like `file` does. Instead it + # always runs like a regular `task`. + file hardsize_idf_path => [compose_idf_path, size_json_path] do + pathname = Pathname.new(hardsize_idf_path).relative_path_from(runs_pathname) + puts "Applying hard sizes: #{pathname}\n" + + idd = open_data_dictionary + input_file = OpenStudio::InputFile.open(idd, compose_idf_path) + + json_string = File.read(size_json_path) + value_map = JSON.parse(json_string, {:symbolize_names=>true}) + output_file, count = Modelkit::EnergyPlus.modify_objects(input_file, value_map) + #puts("#{count} modifications made") + + # Set SimulationControl fields 1, 2, and 3 to "No", "No", and "No" + sc_objs = output_file.find_objects_by_class_name("SimulationControl") + if sc_objs.length != 1 + raise "More than one SimulationControl object found" + end + sc = sc_objs[0] + sc.fields[1] = "No" + sc.fields[2] = "No" + sc.fields[3] = "No" + # Remove Sizing:Zone and Sizing:System objects + sizing_zones = output_file.find_objects_by_class_name("Sizing:Zone") + sizing_systems = output_file.find_objects_by_class_name("Sizing:System") + sizing_plants = output_file.find_objects_by_class_name("Sizing:Plant") + (sizing_zones + sizing_systems + sizing_plants).each {|x| output_file.delete_object(x)} + + output_file.write(hardsize_idf_path) + end + end + + # Run input file in a separate process. + file run_sql_path => [epw_path, run_idf_path] do + # Not sure why this check is needed; seems to try to run if even IDF does not exist. + # May need in other places, like sizing run. + next if (not File.exist?(run_idf_path)) + + pathname = Pathname.new(run_idf_path).relative_path_from(runs_pathname) + puts "Running: #{pathname}\n" + + # Because this is spawned to the shell, .modelkit-config options will be + # automatically applied. + # NOTE: If modelkit-energyplus was thread safe, would not have to run this + # as a separate process. + command = "modelkit-energyplus energyplus-run --weather=\"#{epw_path}\" \"#{run_idf_path}\"" + run_process(command, case_dir) + #$bar.inc + end + + + # see discussion with Michael + file run_csv_path => run_sql_path + + # deleting instance-out.csv breaks it; doesn't know how to recover + + end + end + + cohorts_first_pass = false + end + + + prune_paths = (old_site_paths - site_paths) + (old_pxv_paths - pxv_paths) + + if (not prune_paths.empty? and not rake_task_name =~ /^(prune|clean|none)$/) + puts "\e[1m\e[33mNote: There are cases in the runs directory that are not referenced by any\n" \ + "worksheet. You may want to delete them by typing:\e[0m\n \e[1mmodelkit rake prune\e[0m\n" + end + +end + + +desc "Generate case files" +task :cases do + # No operation; cases are generated when worksheets are evaluated. +end + + +desc "Delete unreferenced files" +task :prune do + if (prune_paths.empty?) + puts "Prune has nothing to delete." + else + prune_dirs = [] + puts "\e[1m\e[31mPrune will delete the following files:\e[0m" + +# show each as: dirname/* (106 files) + + prune_paths.each do |path| + dir = File.dirname(path) + prune_dirs << dir + pathname = Pathname.new(dir).relative_path_from(runs_pathname) + puts " \e[31m#{pathname}\e[0m" + end + print "\e[1m\e[31mConfirm (y/n)?\e[0m " + + input = ENV["CONFIRM"] || $stdin.gets || "" + if (ENV["CONFIRM"] or not $stdin.tty?) + puts input # Echo when not already written to STDOUT + end + + $start_time = Time.now # Reset to cut out wait time on the user prompt + if (input.strip =~ /^y/i) + puts "Pruning files..." + + # maybe don't have to repeat this--already said what was to be deleted + prune_dirs.each do |dir| + pathname = Pathname.new(dir).relative_path_from(runs_pathname) + puts "Deleting: #{pathname}" + FileUtils.rm_rf(dir) + end + else + puts "Task canceled." + end + end +end + + +desc "Delete all files and results" +task :clean do + paths = []; names = [] + [runs_dir, *results_paths].each do |path| + if (File.directory?(path)) + count = Dir.glob("#{path}/**/*").count { |f| File.file?(f) } + if (count.nonzero?) + paths << Dir.glob("#{path}/*") + names << "#{File.basename(path)}/* (#{count} files)" + end + elsif (File.file?(path)) + paths << path + names << File.basename(path) + end + end + + if (paths.empty?) + puts "Clean has nothing to delete." + else + puts "\e[1m\e[31mClean will delete the following files:\e[0m" + names.each { |name| puts " \e[31m#{name}\e[0m"} + print "\e[1m\e[31mConfirm (y/n)?\e[0m " + + input = ENV["CONFIRM"] || $stdin.gets || "" + if (ENV["CONFIRM"] or not $stdin.tty?) + puts input # Echo when not already written to STDOUT + end + + $start_time = Time.now # Reset to cut out wait time on the user prompt + if (input.strip =~ /^y/i) + puts "Cleaning files..." + FileUtils.rm_rf(paths) + else + puts "Task canceled." + end + end +end + + +desc "Generate site files (site.pxt)" +multitask :sites => site_paths + + +desc "Compose input files" +multitask :compose => compose_idf_paths + + +# Generate size input files +multitask :"size-idf" => size_idf_paths + + +# Run size input files +multitask :"size-sql" => size_sql_paths + + +# Extract size data +multitask :"size-json" => size_json_paths + + +desc "Apply hard sizes to input files" +multitask :hardsize => hardsize_idf_paths + + +desc "Run input files" +multitask :run => run_sql_paths + + +file query_path do + puts "Query file not found.\n" + query = +"AnnualBuildingUtilityPerformanceSummary/Entire Facility/Site and Source Energy/Energy Per Total Building Area/Net Site Energy, Net Site EUI +AnnualBuildingUtilityPerformanceSummary/Entire Facility/Site and Source Energy/Total Energy/Net Site Energy, Net Site Energy +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Electricity/Total End Uses, Electricity +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Natural Gas/Total End Uses, Natural Gas\n" + File.write(query_path, query) + puts "Writing default query file: #{query_path}\n" +end + + +file results_summary_path => [*run_sql_paths, query_path] do + pathname = Pathname.new(results_summary_path).relative_path_from(Pathname.new(study_dir)) + puts "Processing: #{pathname}\n" + + short_paths = run_sql_paths.map { |path| Pathname.new(path).relative_path_from(runs_pathname) } + Modelkit::EnergyPlus.sql(short_paths, query_path, :dir => runs_dir, :output => results_summary_path) +end + + +file results_profile_elec_path => run_csv_paths do + aggregate_profiles("Electricity:Facility", results_profile_elec_path, run_csv_paths, runs_pathname, study_dir) +end + + +file results_profile_gas_path => run_csv_paths do + aggregate_profiles("NaturalGas:Facility", results_profile_gas_path, run_csv_paths, runs_pathname, study_dir) +end + + +desc "Aggregate the simulation results" +task :results => results_paths + + +task :default => :results + + +def aggregate_profiles(column_name, output_path, run_csv_paths, runs_pathname, study_dir) + pathname = Pathname.new(output_path).relative_path_from(Pathname.new(study_dir)) + puts "Processing: #{pathname}\n" + + short_paths = run_csv_paths.map { |path| Pathname.new(path).relative_path_from(runs_pathname) } + + columns = [] + column_header = nil + date_time = true + short_paths.each do |short_path| + csv_path = "#{runs_pathname}/#{short_path}" + if (File.exist?(csv_path)) + csv = CSV.read(csv_path, :headers=>true) + if (date_time) + column = csv["Date/Time"] + column.unshift("Date/Time") # Add header + columns << column + date_time = false + end + if (not column_header) + # Match column name to the header while ignoring units/interval, i.e., [J](Hourly). + column_header = csv.headers.find { |header| header.match(column_name) } + end + column = csv[column_header] + column.unshift(short_path) # Add header + columns << column + else + puts "warning: file not found: #{csv_path}\n" + end + end + + File.open(output_path, "w") do |file| + columns.transpose.each { |row| file.puts(row.join(",")) } + end +end + + +# NOPUB consider building this into modelkit-energyplus. +# basically caches IDD path and avoids concurrent openings. + +# Open the EnergyPlus IDD if needed, but only do it once. +def open_data_dictionary + MUTEX.synchronize do # Lock to prevent opening multiple times concurrently + if (@idd.nil?) + puts "Opening Energy+.idd...\n" + + if (path = CONFIG["energyplus-run.engine"]) + path = File.expand_path(path.gsub(/\\/, "/")) # Resolve path and normalize + if (File.exist?(path)) + idd_path = "#{path}/Energy+.idd" + if (not File.exist?(idd_path)) + raise("Energy+.idd not found in specified EnergyPlus directory: #{path}") + end + else + raise("EnergyPlus directory not found: #{path}") + end + else + raise("energyplus-run.engine field missing in .modelkit-config") + end + + @idd = OpenStudio::DataDictionary.open(idd_path) + end + end + return(@idd) +end + + +# NICE, works +#require "rake/cpu_counter" +#puts "cpu=#{Rake::CpuCounter.count}" + +# Almost works but not quite: + +# shows what command was invoked from CLI +# if blank (even with -T), it's "default". +#puts "top level:" +# cli_tasks = Rake.application.top_level_tasks +# cli_task_name = cli_tasks.first # could be more than one; just grab first for now +# puts "cli_task_name=#{cli_task_name}" # returns String + +# cli_task = Rake.application.tasks.find { |t| t.name == cli_task_name } # returns Rake::Task +# puts "cli_task=#{cli_task}" +# + +# +## Rake has this builtin: +# Rake.application.lookup(task_name) => task + +# work_to_do = false +# if (cli_task.needed?) +# # Just because needed doesn't mean there is any work to do--check prereqs! +# cli_task.prerequisite_tasks.each do |prereq| +# if (prereq.needed?) +# work_to_do = true +# break +# end +# end +# end +# +# if (work_to_do) +# puts "Work to do!" +# else +# puts "Up to date; nothing to do." +# end + + +$start_time = Time.now +#$bar = RakeProgressbar.new(run_sql_paths.length) + +at_exit do + #$bar.finished + if (not rake_task_name =~ /^none$/) + puts "Elapsed task duration: #{Time.now - $start_time} sec" + end +end From f65fee5ebca4631ee001d3aeff925935bd7e32ff Mon Sep 17 00:00:00 2001 From: Shaojie Wang <55248793+wsjsxn@users.noreply.github.com> Date: Sat, 29 Nov 2025 21:06:09 -0600 Subject: [PATCH 14/23] Create test --- .../SWHC043 Multi_Cap_Com_Htl_ACEx_Ex/cases/test | 1 + 1 file changed, 1 insertion(+) create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_Htl_ACEx/SWHC043 Multi_Cap_Com_Htl_ACEx_Ex/cases/test diff --git a/commercial measures/SWHC043 Multi_Cap_Com_Htl_ACEx/SWHC043 Multi_Cap_Com_Htl_ACEx_Ex/cases/test b/commercial measures/SWHC043 Multi_Cap_Com_Htl_ACEx/SWHC043 Multi_Cap_Com_Htl_ACEx_Ex/cases/test new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_Htl_ACEx/SWHC043 Multi_Cap_Com_Htl_ACEx_Ex/cases/test @@ -0,0 +1 @@ + From 9e3c45ebf0d7157478d46f1f6691b935ade123cd Mon Sep 17 00:00:00 2001 From: Shaojie Wang <55248793+wsjsxn@users.noreply.github.com> Date: Sat, 29 Nov 2025 21:06:31 -0600 Subject: [PATCH 15/23] Add files via upload --- .../cases/Htl&0&cDXGF&Ex&dxAC_equip.csv | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_Htl_ACEx/SWHC043 Multi_Cap_Com_Htl_ACEx_Ex/cases/Htl&0&cDXGF&Ex&dxAC_equip.csv diff --git a/commercial measures/SWHC043 Multi_Cap_Com_Htl_ACEx/SWHC043 Multi_Cap_Com_Htl_ACEx_Ex/cases/Htl&0&cDXGF&Ex&dxAC_equip.csv b/commercial measures/SWHC043 Multi_Cap_Com_Htl_ACEx/SWHC043 Multi_Cap_Com_Htl_ACEx_Ex/cases/Htl&0&cDXGF&Ex&dxAC_equip.csv new file mode 100644 index 00000000..94a4f4a6 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_Htl_ACEx/SWHC043 Multi_Cap_Com_Htl_ACEx_Ex/cases/Htl&0&cDXGF&Ex&dxAC_equip.csv @@ -0,0 +1,7 @@ +skip,case_name,:main_hvac_type,:main_atu_reheat_coil_type,:main_atu_reheat_control,:main_fan_rise,:main_cool_coil_type,:main_heat_coil_type,:main_dx_type,:main_sat_reset_type,:main_sat_temp_max,:main_design_peak_load,:main_oa_econ_type,:main_cool_coil_cop,:main_dx_comp_speed,:main_fan_speed,:main_fan_motor_eff,:main_heat_coil_eff,:main_cool_coil_cop2,:main_cool_coil_cop3,:main_cool_coil_cop4 +,NE-dxAC-PkgAC-65to134-Ex-EER-11.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.8,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-Ex-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.19,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-Ex-EER-13.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.62,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-10.8,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.81,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.29,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-Ex-EER-12.5,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.51,CONSTANT,CONSTANT,0.9,0.8,,, From ae9d78bcb20a07cfec89e0ce778aa84c77ffcd6f Mon Sep 17 00:00:00 2001 From: Shaojie Wang <55248793+wsjsxn@users.noreply.github.com> Date: Sat, 29 Nov 2025 21:06:52 -0600 Subject: [PATCH 16/23] Delete commercial measures/SWHC043 Multi_Cap_Com_Htl_ACEx/SWHC043 Multi_Cap_Com_Htl_ACEx_Ex/cases/test --- .../SWHC043 Multi_Cap_Com_Htl_ACEx_Ex/cases/test | 1 - 1 file changed, 1 deletion(-) delete mode 100644 commercial measures/SWHC043 Multi_Cap_Com_Htl_ACEx/SWHC043 Multi_Cap_Com_Htl_ACEx_Ex/cases/test diff --git a/commercial measures/SWHC043 Multi_Cap_Com_Htl_ACEx/SWHC043 Multi_Cap_Com_Htl_ACEx_Ex/cases/test b/commercial measures/SWHC043 Multi_Cap_Com_Htl_ACEx/SWHC043 Multi_Cap_Com_Htl_ACEx_Ex/cases/test deleted file mode 100644 index 8b137891..00000000 --- a/commercial measures/SWHC043 Multi_Cap_Com_Htl_ACEx/SWHC043 Multi_Cap_Com_Htl_ACEx_Ex/cases/test +++ /dev/null @@ -1 +0,0 @@ - From 79ab46a99af328c64e66a34648d3405a45d4dc16 Mon Sep 17 00:00:00 2001 From: Shaojie Wang <55248793+wsjsxn@users.noreply.github.com> Date: Sat, 29 Nov 2025 21:07:19 -0600 Subject: [PATCH 17/23] Add files via upload --- .../climates.csv | 17 ++++++++++ .../cohorts.csv | 26 +++++++++++++++ .../query.txt | 32 +++++++++++++++++++ 3 files changed, 75 insertions(+) create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_Htl_ACEx/SWHC043 Multi_Cap_Com_Htl_ACEx_Ex/climates.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_Htl_ACEx/SWHC043 Multi_Cap_Com_Htl_ACEx_Ex/cohorts.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_Htl_ACEx/SWHC043 Multi_Cap_Com_Htl_ACEx_Ex/query.txt diff --git a/commercial measures/SWHC043 Multi_Cap_Com_Htl_ACEx/SWHC043 Multi_Cap_Com_Htl_ACEx_Ex/climates.csv b/commercial measures/SWHC043 Multi_Cap_Com_Htl_ACEx/SWHC043 Multi_Cap_Com_Htl_ACEx_Ex/climates.csv new file mode 100644 index 00000000..9f5cc7a8 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_Htl_ACEx/SWHC043 Multi_Cap_Com_Htl_ACEx_Ex/climates.csv @@ -0,0 +1,17 @@ +skip,climate,weather_file,climate_zone,codes_file +,CZ01,CA_EUREKA_725940S_CZ2022.epw,1,T24_weight_averaged_ex_Htl.csv +,CZ02,CA_NAPA-CO_724955S_CZ2022.epw,2,T24_weight_averaged_ex_Htl.csv +,CZ03,CA_OAKLAND-METRO-AP_724930S_CZ2022.epw,3,T24_weight_averaged_ex_Htl.csv +,CZ04,CA_SAN-JOSE-IAP_724945S_CZ2022.epw,4,T24_weight_averaged_ex_Htl.csv +,CZ05,CA_SANTA-MARIA-PUBLIC-AP_723940S_CZ2022.epw,5,T24_weight_averaged_ex_Htl.csv +,CZ06,CA_LOS-ANGELES-IAP_722950S_CZ2022.epw,6,T24_weight_averaged_ex_Htl.csv +,CZ07,CA_SAN-DIEGO-LINDBERGH-FLD_722900S_CZ2022.epw,7,T24_weight_averaged_ex_Htl.csv +,CZ08,CA_LONG-BEACH-DAUGHERTY-FLD_722970S_CZ2022.epw,8,T24_weight_averaged_ex_Htl.csv +,CZ09,CA_LOS-ANGELES-DOWNTOWN-USC_722874S_CZ2022.epw,9,T24_weight_averaged_ex_Htl.csv +,CZ10,CA_RIVERSIDE-MUNI_722869S_CZ2022.epw,10,T24_weight_averaged_ex_Htl.csv +,CZ11,CA_RED-BLUFF-MUNI-AP_725910S_CZ2022.epw,11,T24_weight_averaged_ex_Htl.csv +,CZ12,CA_STOCKTON-METRO-AP_724920S_CZ2022.epw,12,T24_weight_averaged_ex_Htl.csv +,CZ13,CA_FRESNO-YOSEMITE-IAP_723890S_CZ2022.epw,13,T24_weight_averaged_ex_Htl.csv +,CZ14,CA_DAGGETT-BARSTOW-AP_723815S_CZ2022.epw,14,T24_weight_averaged_ex_Htl.csv +,CZ15,CA_EL-CENTRO-NAF_722810S_CZ2022.epw,15,T24_weight_averaged_ex_Htl.csv +,CZ16,CA_BISHOP-AP_724800S_CZ2022.epw,16,T24_weight_averaged_ex_Htl.csv diff --git a/commercial measures/SWHC043 Multi_Cap_Com_Htl_ACEx/SWHC043 Multi_Cap_Com_Htl_ACEx_Ex/cohorts.csv b/commercial measures/SWHC043 Multi_Cap_Com_Htl_ACEx/SWHC043 Multi_Cap_Com_Htl_ACEx_Ex/cohorts.csv new file mode 100644 index 00000000..b4331c94 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_Htl_ACEx/SWHC043 Multi_Cap_Com_Htl_ACEx_Ex/cohorts.csv @@ -0,0 +1,26 @@ +skip,cohort,root,wall_type,:wall_base_cavity_insul,:wall_base_cont_insul,:roof_base_cont_insul,:window_u,:window_shgc,:window_transmittance,:floor_base_cont_insul,:main_oa_econ_max_temp +#,Asm&0&cDXGF&Ex&dxAC_equip,Asm/templates/root.pxt,Mass Heavy,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Metal Framed"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Metal Buildings"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +#,ECC&0&cDXGF&Ex&dxAC_equip,ECC/templates/root.pxt,Mass Heavy,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Metal Buildings"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +#,EPr&0&cDXGF&Ex&dxAC_equip,EPr/templates/root.pxt,Wood Frame,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Wood Framed and Other"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Wood Framed and Other"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Wood Framed and Other"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +#,ERC&0&cDXGF&Ex&dxAC_equip,ERC/templates/root.pxt,Wood Frame,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Wood Framed and Other"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Wood Framed and Other"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Wood Framed and Other"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +#,ESe&0&cDXGF&Ex&dxAC_equip,ESe/templates/root.pxt,Mass Heavy,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Wood Framed and Other"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +#,EUn&0&cDXGF&Ex&dxAC_equip,EUn/templates/root.pxt,Mass Heavy,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Metal Framed"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Metal Buildings"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +#,Fin&0&cDXGF&Ex&dxAC_equip,Fin/templates/root.pxt,steel-frame,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Metal Framed"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Metal Framed"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Wood Framed and Other"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +#,Gro&0&cDXGF&Ex&dxAC_equip,Gro/templates/root.pxt,Mass Heavy,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Metal Framed"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Metal Buildings"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +#,Hsp&0&cDXGF&Ex&dxAC_equip,Hsp/templates/root.pxt,Mass Heavy,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Metal Buildings"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +,Htl&0&cDXGF&Ex&dxAC_equip,Htl/templates/root.pxt,Mass Heavy,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Metal Framed"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Metal Buildings"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +#,Lib&0&cDXGF&Ex&dxAC_equip,Lib/templates/root.pxt,steel-frame,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Metal Framed"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Metal Framed"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Wood Framed and Other"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +#,MBT&0&cDXGF&Ex&dxAC_equip,MBT/templates/root.pxt,Metal Frame,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Metal Framed"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Metal Framed"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Metal Buildings"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +#,MLI&0&cDXGF&Ex&dxAC_equip,MLI/templates/root.pxt,Mass Heavy,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Metal Framed"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Metal Buildings"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +#,Mtl&0&cDXGF&Ex&dxAC_equip,Mtl/templates/root.pxt,Wood Frame,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Wood Framed and Other"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Wood Framed and Other"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Wood Framed and Other"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +#,Nrs&0&cDXGF&Ex&dxAC_equip,Nrs/templates/root.pxt,Wood Frame,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Wood Framed and Other"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Wood Framed and Other"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Wood Framed and Other"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +#,OfL&0&cDXGF&Ex&dxAC_equip,OfL/templates/root.pxt,Metal Frame,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Metal Framed"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Metal Framed"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Metal Buildings"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +#,OfS&0&cDXGF&Ex&dxAC_equip,OfS/templates/root.pxt,Wood Frame,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Wood Framed and Other"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Wood Framed and Other"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Wood Framed and Other"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +#,Rel&0&cDXGF&Ex&dxAC_equip,Rel/templates/root.pxt,steel-frame,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Metal Framed"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Metal Framed"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Wood Framed and Other"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +#,RFF&0&cDXGF&Ex&dxAC_equip,RFF/templates/root.pxt,Mass Heavy,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Wood Framed and Other"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +#,RSD&0&cDXGF&Ex&dxAC_equip,RSD/templates/root.pxt,Wood Frame,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Wood Framed and Other"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Wood Framed and Other"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Wood Framed and Other"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +#,Rt3&0&cDXGF&Ex&dxAC_equip,Rt3/templates/root.pxt,Mass Heavy,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Metal Buildings"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +#,RtL&0&cDXGF&Ex&dxAC_equip,RtL/templates/root.pxt,Mass Heavy,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Metal Framed"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Metal Buildings"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +#,RtS&0&cDXGF&Ex&dxAC_equip,RtS/templates/root.pxt,Mass Heavy,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Wood Framed and Other"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +#,SCn&0&cDXGF&Ex&dxAC_equip,SCn/templates/root.pxt,Mass Heavy,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Metal Framed"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Metal Buildings"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +#,SUn&0&cDXGF&Ex&dxAC_equip,SUn/templates/root.pxt,Mass Heavy,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Wood Framed and Other"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" diff --git a/commercial measures/SWHC043 Multi_Cap_Com_Htl_ACEx/SWHC043 Multi_Cap_Com_Htl_ACEx_Ex/query.txt b/commercial measures/SWHC043 Multi_Cap_Com_Htl_ACEx/SWHC043 Multi_Cap_Com_Htl_ACEx_Ex/query.txt new file mode 100644 index 00000000..f16ea16a --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_Htl_ACEx/SWHC043 Multi_Cap_Com_Htl_ACEx_Ex/query.txt @@ -0,0 +1,32 @@ +AnnualBuildingUtilityPerformanceSummary/Entire Facility/Site and Source Energy/Energy Per Total Building Area/Net Site Energy, Net Site EUI +AnnualBuildingUtilityPerformanceSummary/Entire Facility/Site and Source Energy/Total Energy/Net Site Energy, Net Site Energy +AnnualBuildingUtilityPerformanceSummary/Entire Facility/Site and Source Energy/Energy Per Total Building Area/Net Source Energy, Net Source EUI +AnnualBuildingUtilityPerformanceSummary/Entire Facility/Site and Source Energy/Total Energy/Net Source Energy, Net Source Energy + +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Total End Uses, Total +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Heating, Heating +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Cooling, Cooling +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Interior Lighting, Interior Lighting +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Exterior Lighting, Exterior Lighting +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Interior Equipment, Interior Equipment +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Exterior Equipment, Exterior Equipment +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Fans, Fans +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Pumps, Pumps +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Heat Rejection, Heat Rejection +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Humidification, Humidification +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Heat Recovery, Heat Recovery +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Water Systems, Water Systems +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Refrigeration, Refrigeration +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Generators, Generators +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Electricity/Heating, Heating Elec +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Electricity/Cooling, Cooling Elec +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Natural Gas/Heating, Heating NG +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Natural Gas/Cooling, Cooling NG +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Electricity/Interior Equipment, Interior Equipment Elec +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Natural Gas/Interior Equipment, Interior Equipment NG + +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Electricity/Total End Uses, Electricity +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Natural Gas/Total End Uses, Natural Gas + +AnnualBuildingUtilityPerformanceSummary/Entire Facility/Comfort and Setpoint Not Met Summary/Facility/Time Setpoint Not Met During Occupied Heating, Unmet Heating +AnnualBuildingUtilityPerformanceSummary/Entire Facility/Comfort and Setpoint Not Met Summary/Facility/Time Setpoint Not Met During Occupied Cooling, Unmet Cooling From 1382d6f4cf833143d7d3d1cf750b0c1ae6b8ac46 Mon Sep 17 00:00:00 2001 From: Shaojie Wang <55248793+wsjsxn@users.noreply.github.com> Date: Sat, 29 Nov 2025 21:07:52 -0600 Subject: [PATCH 18/23] Add files via upload --- .../.modelkit-config | 24 + .../SWHC043 Multi_Cap_Com_Htl_ACEx/global.pxv | 2 + .../rakefile.rb | 1010 +++++++++++++++++ 3 files changed, 1036 insertions(+) create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_Htl_ACEx/.modelkit-config create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_Htl_ACEx/global.pxv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_Htl_ACEx/rakefile.rb diff --git a/commercial measures/SWHC043 Multi_Cap_Com_Htl_ACEx/.modelkit-config b/commercial measures/SWHC043 Multi_Cap_Com_Htl_ACEx/.modelkit-config new file mode 100644 index 00000000..3045867c --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_Htl_ACEx/.modelkit-config @@ -0,0 +1,24 @@ + +# Paths are expanded relative to this modelkit-config file. + +prototypes-dir = '../../prototypes' +templates-dir = '../../templates/energyplus/templates' +weather-dir = '../../weather' +codes-dir = '../../codes' + +max-workers = 100 # Maximum number of simulations to run in parallel + + +[template-compose] +annotate = true +indent = " " +esc-line = "! " +dirs = '~\Documents\Modelkit Caboodle\templates\energyplus\templates' # Must be an absolute path + +[energyplus-run] +engine = 'C:\EnergyPlusV22-2-0' # Must be an absolute path +#engine = '/Applications/EnergyPlus-22-2-0' # Must be an absolute path +#engine = '/Applications/EnergyPlus-9-2-0' # Must be an absolute path +readvars = true +keep = false +output-files = "eplusout.err; eplusout.sql; eplustbl.htm; eplusvar.csv" diff --git a/commercial measures/SWHC043 Multi_Cap_Com_Htl_ACEx/global.pxv b/commercial measures/SWHC043 Multi_Cap_Com_Htl_ACEx/global.pxv new file mode 100644 index 00000000..c707bb60 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_Htl_ACEx/global.pxv @@ -0,0 +1,2 @@ +:timestep => 6, +:run_control => "ANNUAL" # ANNUAL | SIZING diff --git a/commercial measures/SWHC043 Multi_Cap_Com_Htl_ACEx/rakefile.rb b/commercial measures/SWHC043 Multi_Cap_Com_Htl_ACEx/rakefile.rb new file mode 100644 index 00000000..1e850689 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_Htl_ACEx/rakefile.rb @@ -0,0 +1,1010 @@ +# Copyright (c) 2011-2020 Big Ladder Software LLC. All rights reserved. +# See the file "license.txt" for additional terms and conditions. + +if (not defined?(Modelkit)) + begin + require("modelkit") + rescue LoadError => exception + args = ARGV.join(" ") + puts exception + puts "\e[1m\e[31mERROR: This rakefile requires the Modelkit library. Make sure that you have the\nModelkit gem installed in your local Rubygems environment, or try running the\nrakefile using your stand-alone installation of Modelkit by typing:\e[0m\n \e[1mmodelkit rake #{args}\e[0m" + exit + end +end + + +require("pathname") +require("json") + +require("modelkit/config") +require("modelkit/multitable") +require("modelkit/parametrics") +require("modelkit/parametrics/worksheet") +require("modelkit/energyplus") + + +# Add to modelkit-energyplus: +# other args: +# - which design days +# - water mains temp? +# - daylight saving time? +def generate_site_pxt(idd, ddy_path, site_path) + site_file = File.open(site_path, "w") + + if (File.exists?(ddy_path)) + input_file = OpenStudio::InputFile.open(idd, ddy_path) + else + raise("file not found: #{ddy_path.inspect}") + end + + site_locations = input_file.find_objects_by_class_name("Site:Location").to_a + + if (site_locations.empty?) + raise("could not find Site:Location object in #{ddy_path.inspect}") + else + site_file.puts(site_locations.first.to_idf) + end + + all_design_days = input_file.find_objects_by_class_name("SizingPeriod:DesignDay").to_a + selected_design_days = all_design_days.select { |dd| dd.name[/Ann Htg 99.6% Condns DB|Ann Clg 0?.4% Condns DB/i] } + + if (selected_design_days.length < 2) + puts "warning: could not find requested design days; including all design days\n" + selected_design_days = all_design_days + end + + # Write design days to site file. + selected_design_days.each { |dd| site_file.puts(dd.to_idf) } + + +# 'CorrelationFromWeatherFile' is available starting in EP 9.0. + +# Does this work for design-day only runs? +# Seems to work for annual. + site_file.puts("\n\nSite:WaterMainsTemperature,\n CorrelationFromWeatherFile;\n") + + daylight_saving_time = input_file.find_objects_by_class_name("RunPeriodControl:DaylightSavingTime").to_a + if (not daylight_saving_time.empty?) + site_file.puts + site_file.puts(daylight_saving_time.first.to_idf) + end + + site_file.close +end + + +# NOPUB Should move into Modelkit somewhere. +# Support for running simulations in parallel. +require("open3") +require("set") + +$child_pids = Set.new # Global tracking of child PIDs + +# Return PID? +def run_process(command, dir) + # NOTE: Separate processes are required to make the EnergyPlus runs thread safe! + Open3.popen3(command, :chdir => dir) do |stdin, stdout, stderr, thread| + $child_pids.add(thread.pid) + # This might work with just an instance variable or similar. + + stdin.close # All input already sent with command + + file_out = File.open("#{dir}/stdout", "w") + file_err = File.open("#{dir}/stderr", "w") + + while (line = stdout.gets) + file_out.puts(line) + #@proc_out.call(line) if (@proc_out) + end + + # This is probably not right. + while (line = stderr.gets) + file_err.puts(line) + #@proc_err.call(line) if (@proc_err) + end + + stdout.close + stderr.close + + file_out.close + file_err.close + + #print "Completed: #{File.basename(dir)}\n" + $child_pids.delete(thread.pid) + end +end + +# Search up through parent directories for one or more possible file names. +def search_parent_dirs(start_dir, *file_names) + path = nil + dir_names = start_dir.to_s.split("/") + while (not dir_names.empty?) do + file_names.each do |file_name| + test_path = "#{dir_names.join("/")}/#{file_name}" + if (File.exist?(test_path)) + path = test_path + break + end + end + break if (path) + dir_names.pop + end + return(path) +end + +# Search for a file name or partial path in an array of provided directories. +# Directories are expected to already be absolute paths. +def resolve_path(path, dirs) + resolved_path = nil + dirs.each do |dir| + expanded_path = File.expand_path(path, dir) + if (File.exist?(expanded_path)) + resolved_path = expanded_path + break + end + end + return(resolved_path) +end + +# Clean up any previous output files left behind if 'compose' or 'run' fails. +# Leftover files can be processed unintentionally by downstream tasks and +# ultimately generate false results. +def clean_energyplus_output_files(dir) + # Not all of these files might be present. Others might be present and unhandled. + paths = [ + "#{dir}/instance-out.err", + "#{dir}/instance-out.rdd", + "#{dir}/instance-out.sql", # Most important for downstream tasks + "#{dir}/instance-tbl.htm", + "#{dir}/instance-var.csv", + "#{dir}/stderr", + "#{dir}/stdout" + ] + FileUtils.rm_f(paths) +end + + +# Rake stubbornly sets the working directory to wherever the Rakefile is located. +# The target directory could optionally be set from a CLI option instead. +study_dir = Rake.application.original_dir + +climates_csv_path = "#{study_dir}/climates.csv" +cohorts_csv_path = "#{study_dir}/cohorts.csv" + +query_path = "#{study_dir}/query.txt" +results_summary_path = "#{study_dir}/results-summary.csv" +results_profile_elec_path = "#{study_dir}/results-profile-elec.csv" +results_profile_gas_path = "#{study_dir}/results-profile-gas.csv" +results_paths = [results_summary_path, results_profile_elec_path, results_profile_gas_path] + +cases_dir = "#{study_dir}/cases" +runs_dir = "#{study_dir}/runs" +runs_pathname = Pathname.new(runs_dir) + +MUTEX = Mutex.new # Thread lock for when something needs to run in a single thread + +config_path = search_parent_dirs(study_dir, ".modelkit-config") +if (not config_path) + raise("modelkit-config file not found in working directory or any parent directory") +else + CONFIG = Modelkit::Config.new(config_path) + puts "Using modelkit-config at #{config_path}\n" +end + +config = Hash.new +[:prototypes_dir, :templates_dir, :weather_dir, :codes_dir].each do |key| + config[key] = [] + field = key.to_s.gsub(/_/, "-") + if (not CONFIG[field]) + raise("#{field} variable missing in modelkit-config") + else + config_paths = CONFIG[field].split(/\s*;\s*/) # Split string with semicolons into array of paths + config_paths.each do |path| + # Resolve path relative to modelkit-config file and normalize the slashes. + config[key] << File.expand_path(path.strip.gsub(/\\/, "/"), File.dirname(config_path)) + end + end +end + +max_workers = CONFIG["max-workers"] +if (max_workers.nil?) + max_workers = 1 +end + +global_pxv_path = search_parent_dirs(study_dir, "global.pxv") +if (global_pxv_path) + puts "Using global.pxv at #{global_pxv_path}\n" +end + +rake_tasks = Rake.application.top_level_tasks +rake_task_name = rake_tasks.first # Multiple tasks are allowed, but assume one + +rake_options = Rake.application.options +rake_options.always_multitask = true # --multitask, -m +#rake_options.job_stats = true # --job-stats true | :history +rake_options.thread_pool_size = max_workers - 1 # --jobs, -j (default 12 on Mac) + +if (rake_options.dryrun or rake_options.show_all_tasks or + rake_options.show_prereqs or rake_options.show_tasks) + # These are information-only requests. Rake nonetheless registers as invoked + # with the "default" task name but nothing actually gets run. + rake_task_name = "none" +end + + +# Show threads message and info about how to change +# Running with 8 threads (edit .modelkit-config to change). +# Type Ctrl+C to cancel all tasks. + +require "io/console" # need this anyway for progress bar + +#$stdin.echo = false # turn off echo; in Mac shows a cursor with a key icon +# This prevents the user from over-typing the output stream. + +# also try switching to raw mode--should also block user input; maybe no key icon? + +#print "\e[?25l" # hide the cursor; MUST remember to show it again on exit or else it's permanent for the session! + + +trap("INT") do # Ctrl+C (polite kill) + puts "Canceling all tasks.\n" + if ($child_pids) + $child_pids.each { |pid| Process.kill("KILL", pid) } + end + exit +end + +if (Modelkit::Platform.unix?) + trap("TSTP") do # Ctrl+Z (suspend) + puts "Suspending all tasks. Type 'fg' to resume.\n" + exit + end +end + +if (not rake_task_name =~ /^(prune|clean|none)$/) + +# If possible, detect if any tasks will be run before showing this message: +puts "\e[1mType Ctrl+C to cancel all tasks.\e[0m\n" + +end + +# modelkit rake -A crashes for some reason + +# NOPUB Some of above could be included here too. +# Don't evaluate worksheets and generate file tasks if not necessary! +# NOTE: prune does need to evaluate worksheets. +if (not rake_task_name =~ /^(clean|none)$/) + + pxv_paths = [] + site_paths = [] + + compose_idf_paths = [] + + + #rename size_ to sizerun_ size_run_ sizing_run_ + size_ref_paths = [] + size_idf_paths = [] + size_sql_paths = [] + size_json_paths = [] + + hardsize_idf_paths = [] + + run_sql_paths = [] + run_csv_paths = [] + + + + old_site_paths = Dir.glob("#{runs_dir}/*/site.pxt") + old_pxv_paths = Dir.glob("#{runs_dir}/**/instance.pxv") + + climates = Modelkit::Worksheet.open(climates_csv_path) + cohorts = Modelkit::Worksheet.open(cohorts_csv_path) + + climate_pattern = ENV["CLIMATE"] || "" + + new_case_csv = "skip,case_name\n,defaults\n" # Could be read from config instead + + cohorts_first_pass = true + + puts "Evaluating worksheets...\n" + + csv_table = climates.each_row do |row1, index1, variables1, parameters1| + #puts "climate_index = #{index1}" + + if (not variables1.key?(:climate)) + raise("required column \"climate\" is missing in #{File.basename(climates_csv_path)}") + end + + climate_name = variables1[:climate].to_s.strip # Could have been converted to non-string by Util.value_from_string + if (climate_name.empty?) + raise("climate field cannot be blank for row #{index1 + 2} of #{File.basename(climates_csv_path)}") + end + + next if (not climate_name =~ Regexp.new(climate_pattern)) + + FileUtils.mkdir_p("#{runs_dir}/#{climate_name}") + + site_path = "#{runs_dir}/#{climate_name}/site.pxt" + if (site_paths.include?(site_path)) + puts "warning: duplicate name #{climate_name.inspect} in climate column at row #{index1 + 2} in #{File.basename(climates_csv_path)}; row will be skipped" + next + end + + site_paths << site_path + + if (not variables1.key?(:weather_file)) + raise("required column \"weather_file\" is missing in #{File.basename(climates_csv_path)}") + end + + weather_name = variables1[:weather_file].to_s.strip # Could have been converted to non-string by Util.value_from_string + if (weather_name.empty?) + raise("weather_file field cannot be blank for row #{index1 + 2} of #{File.basename(climates_csv_path)}") + end + + epw_path = resolve_path(weather_name, config[:weather_dir]) + if (not epw_path) + puts "Could not resolve path #{weather_name.inspect} from possible paths:\n" + config[:weather_dir].each { |dir| puts " #{File.expand_path(weather_name, dir).inspect}\n" } + puts "Check the weather-dir variable in modelkit-config file.\n" + raise("weather file #{weather_name.inspect} not found for row #{index1 + 2} of #{File.basename(climates_csv_path)}") + end + + if (not File.file?(epw_path)) + raise("weather file #{epw_path.inspect} is not a file for row #{index1 + 2} of #{File.basename(climates_csv_path)}") + end + + ddy_path = "#{File.dirname(epw_path)}/#{File.basename(epw_path, ".*")}.ddy" # Ensure ddy is from same directory as resolved epw file + if (not File.exist?(ddy_path)) + puts "Weather file path resolved to #{epw_path.inspect}\n" + raise("ddy file #{ddy_path.inspect} not found for row #{index1 + 2} of #{File.basename(climates_csv_path)}") + end + + # This file only exists to indicate if the weather file changes for dependency purposes. + # The weather file is the one input that is separate from instance parameters. + weather_path = "#{runs_dir}/#{climate_name}/weather" + pathname = Pathname.new(weather_path).relative_path_from(runs_pathname) + + if (File.exist?(weather_path)) + old_epw_path = File.read(weather_path) + if (epw_path != old_epw_path) + puts "Updating: #{pathname}\n" + File.write(weather_path, epw_path) + end + else + puts "Writing: #{pathname}\n" + File.write(weather_path, epw_path) + end + + # generate site.pxt from .ddy file + file site_path => [weather_path, ddy_path] do + idd = open_data_dictionary + pathname = Pathname.new(site_path).relative_path_from(runs_pathname) + puts "Generating: #{pathname}\n" + generate_site_pxt(idd, ddy_path, site_path) + end + + if (variables1.key?(:codes_file)) # NOTE: codes_file is an optional column + codes_name = variables1[:codes_file].to_s.strip # Could have been converted to non-string by Util.value_from_string + if (codes_name.empty?) + raise("codes_file field cannot be blank for row #{index1 + 2} of #{File.basename(climates_csv_path)}") + end + + codes_path = resolve_path(codes_name, config[:codes_dir]) + if (not codes_path) + puts "Could not resolve path #{codes_name.inspect} from possible paths:\n" + config[:codes_dir].each { |dir| puts " #{File.expand_path(codes_name, dir).inspect}\n" } + puts "Check the codes-dir variable in modelkit-config file.\n" + raise("codes file #{codes_name.inspect} not found for row #{index1 + 2} of #{File.basename(climates_csv_path)}") + end + + if (not File.file?(codes_path)) + raise("codes file #{codes_path.inspect} is not a file for row #{index1 + 2} of #{File.basename(climates_csv_path)}") + end + + codes_table = Modelkit::MultiTable.new(codes_path) + + else + codes_table = nil # Must set something to pass to next worksheet + end + + variables1[:codes] = codes_table # For backwards compatibility + + # Make sure objects passed in are not mutated by the Worksheet. Make dupes? + + cohort_names = [] # Accumulate names to check for duplicates + + cohorts.each_row(variables1) do |_, index2, variables2, parameters2| + #puts " cohort_index = #{index2}" + + # NOTE: Variables from outer worksheet (variables1) are copied into this worksheet. + # Changes to the variables here (variables2) do not propagate back up. + + if (not variables2.key?(:cohort)) + raise("required column \"cohort\" is missing in #{File.basename(cohorts_csv_path)}") + end + + cohort_name = variables2[:cohort].to_s.strip # Could have been converted to non-string by Util.value_from_string + if (cohort_name.empty?) + raise("cohort field cannot be blank for row #{index2 + 2} of #{File.basename(cohorts_csv_path)}") + end + + if (cohort_names.include?(cohort_name)) + if (cohorts_first_pass) # Only warn about this row once + puts "warning: duplicate name #{cohort_name.inspect} in cohort column at row #{index2 + 2} in #{File.basename(cohorts_csv_path)}; row will be skipped" + end + next + end + + cohort_names << cohort_name + + cases_csv_path = "#{cases_dir}/#{cohort_name}.csv" + cases_csv_short_path = "#{File.basename(cases_dir)}/#{cohort_name}.csv" + if (not File.exist?(cases_csv_path)) + puts("Cases worksheet #{cases_csv_short_path.inspect} not found for row #{index2 + 2} of #{File.basename(cohorts_csv_path)}\n") + puts("Creating: #{cases_csv_short_path}\n") + FileUtils.mkdir_p(cases_dir) + File.write(cases_csv_path, new_case_csv) + end + + if (not variables2.key?(:root)) + raise("required column \"root\" is missing in #{File.basename(cohorts_csv_path)}") + end + + root_name = variables2[:root].to_s.strip # Could have been converted to non-string by Util.value_from_string + if (root_name.empty?) + raise("root field cannot be blank for row #{index2 + 2} of #{File.basename(cohorts_csv_path)}") + end + + root_path = resolve_path(root_name, config[:prototypes_dir]) + if (not root_path) + puts "Could not resolve path #{root_name.inspect} from possible paths:\n" + config[:prototypes_dir].each { |dir| puts " #{File.expand_path(root_name, dir).inspect}\n" } + puts "Check the prototypes-dir variable in modelkit-config file.\n" + raise("root template #{root_name.inspect} not found for row #{index2 + 2} of #{File.basename(cohorts_csv_path)}") + end + + if (not File.file?(root_path)) + raise("root template #{root_path.inspect} is not a file for row #{index2 + 2} of #{File.basename(cohorts_csv_path)}") + end + + case_names = [] # Accumulate names to check for duplicates + + # Better to pre-read and cache this outside the looping? + # There are only N worksheets...1 per building type. + cases = Modelkit::Worksheet.open(cases_csv_path) + + cases.each_row(variables2) do |_, index3, variables3, parameters3| + #puts " case_index = #{index3}" + + # NOTE: Variables from outer worksheet (variables2) are copied into this worksheet. + # Changes to the variables here (variables3) do not propagate back up. + + if (not variables3.key?(:case_name)) + raise("required column \"case_name\" is missing in #{File.basename(cases_dir)}/#{File.basename(cases_csv_path)}") + end + + case_name = variables3[:case_name].to_s.strip # Could have been converted to non-string by Util.value_from_string + if (case_name.empty?) + raise("case_name field cannot be blank for row #{index3 + 2} of #{File.basename(cases_dir)}/#{File.basename(cases_csv_path)}") + end + + if (case_names.include?(case_name)) + if (cohorts_first_pass) # Only warn about this row once + puts "warning: duplicate name #{case_name.inspect} in case_name column at row #{index3 + 2} in #{File.basename(cases_dir)}/#{File.basename(cases_csv_path)}; row will be skipped" + end + next + end + + case_names << case_name + run_name = "#{climate_name}/#{cohort_name}/#{case_name}" + case_dir = "#{runs_dir}/#{run_name}" + FileUtils.mkdir_p(case_dir) + + # better to create this dynamically in cases.csv by combining variables from other layers. + # all variables need to be propagated first from layer to layer. + # for example: + # :run_name + # %= "My Prefix Something: #{climate}/#{cohort}/#{case_name}" + pxv_string = ":run_name => #{run_name.inspect},\n" + + parameters = parameters1 | parameters2 | parameters3 + parameters.each do |key, value| + value_inspect = value.inspect + if (value.kind_of?(String)) + # Using `inspect` on strings is useful because it reveals invisible + # characters and invalid byte sequences. The downside is that the + # string must be unescaped. + value_inspect.gsub!(/\\\\/, "\\") + end + pxv_string << ":#{key} => #{value_inspect},\n" + end + + pxv_path = "#{case_dir}/instance.pxv" + pxv_paths << pxv_path + + pathname = Pathname.new(pxv_path).relative_path_from(runs_pathname) + + if (File.exist?(pxv_path)) + old_pxv_string = File.read(pxv_path) + if (pxv_string != old_pxv_string) + puts "Updating: #{pathname}\n" + File.write(pxv_path, pxv_string) + end + else + puts "Writing: #{pathname}\n" + File.write(pxv_path, pxv_string) + end + + compose_idf_path = "#{case_dir}/instance.idf" + compose_idf_paths << compose_idf_path + + if (variables3[:sizing_case]) + size_name = "#{climate_name}/#{cohort_name}/#{variables3[:sizing_case]}" + size_dir = "#{runs_dir}/#{size_name}" + size_ref_path = "#{size_dir}/instance.idf" + + size_idf_path = "#{size_dir}/instance-size.idf" + size_sql_path = "#{size_dir}/instance-size-out.sql" + size_json_path = "#{size_dir}/instance-size-out.json" + + if (size_ref_paths.include?(size_ref_path)) + # Avoid creating redundant tasks when multiple cases reference same sizing case. + create_sizing_tasks = false + else + create_sizing_tasks = true + + size_ref_paths << size_ref_path + size_idf_paths << size_idf_path + size_sql_paths << size_sql_path + size_json_paths << size_json_path + end + + hardsize_idf_path = "#{case_dir}/instance-hardsize.idf" + hardsize_idf_paths << hardsize_idf_path + + run_idf_path = hardsize_idf_path # Which input file to run + + run_sql_path = "#{case_dir}/instance-hardsize-out.sql" + run_sql_paths << run_sql_path + + run_csv_path = "#{case_dir}/instance-hardsize-var.csv" + run_csv_paths << run_csv_path + + else + # Autosize-only run. + size_ref_path = nil + + run_idf_path = compose_idf_path # Which input file to run + + run_sql_path = "#{case_dir}/instance-out.sql" + run_sql_paths << run_sql_path + + run_csv_path = "#{case_dir}/instance-var.csv" + run_csv_paths << run_csv_path + end + + # Compose input file from parameter file. + # need more dependencies here: template files + file compose_idf_path => [site_path, root_path, pxv_path, global_pxv_path].compact do # If no path for global.pxv, remove nil element + pathname = Pathname.new(compose_idf_path).relative_path_from(runs_pathname) + puts "Composing: #{pathname}\n" + + clean_energyplus_output_files(File.dirname(compose_idf_path)) + + site_dir = File.dirname(site_path) + + begin + Modelkit::Parametrics.template_compose(root_path, + :annotate => CONFIG["template-compose.annotate"], + :indent => CONFIG["template-compose.indent"], + :esc_line => CONFIG["template-compose.esc-line"], + :dirs => [site_dir, *config[:templates_dir]], + :files => [global_pxv_path, pxv_path].compact, # If no path for global.pxv, remove nil element + :output => compose_idf_path) + rescue Exception => exception + puts "#{exception.class.name}: #{exception.message}\n" + puts "#{exception.backtrace.first}\n" if (not SyntaxError === exception) + puts "Skipping: #{pathname}\n" + end + end + + if (create_sizing_tasks) + # Generate a modified input file in order to run a design-day-only simulation. + # NOTE: This can be eliminated if a design-day option is added to energyplus-run. + file size_idf_path => size_ref_path do + pathname = Pathname.new(size_idf_path).relative_path_from(runs_pathname) + puts "Generating size run: #{pathname}\n" + + FileUtils.cp(size_ref_path, size_idf_path) + + idd = open_data_dictionary + input_file = OpenStudio::InputFile.open(idd, size_idf_path) + + sc_objs = input_file.find_objects_by_class_name("SimulationControl") + if sc_objs.length != 1 + raise "More than one SimulationControl object found" + end + sc = sc_objs[0] + sc.fields[1] = "Yes" + sc.fields[2] = "Yes" + sc.fields[3] = "Yes" + sc.fields[4] = "Yes" + sc.fields[5] = "No" + + input_file.write(size_idf_path) + end + + # Run sizing input files for design days only. + file size_sql_path => size_idf_path do + pathname = Pathname.new(size_idf_path).relative_path_from(runs_pathname) + puts "Running size run: #{pathname}\n" + + command = "modelkit-energyplus energyplus-run --weather=\"#{epw_path}\" \"#{size_idf_path}\"" + run_process(command, size_dir) + end + + # Generate size data file (instance-size-out.json). + file size_json_path => size_sql_path do + pathname = Pathname.new(size_json_path).relative_path_from(runs_pathname) + puts "Extracting size data: #{pathname}\n" + + # Make a copy to work on because the original gets overwritten by EnergyPlus.size. + temp_path = "#{File.dirname(size_idf_path)}/instance-temp.idf" + FileUtils.cp(size_idf_path, temp_path) + + idd = open_data_dictionary + input_file = OpenStudio::InputFile.open(idd, temp_path) + sql = Modelkit::EnergyPlus::SQLOutput.new(size_sql_path) + + # This will be fixed to only generate JSON and not modify the input file. + _, count, output_file = Modelkit::EnergyPlus.size( + sql, input_file, {json: size_json_path, version: "9-2"}) + #puts("#{count} modifications made") + + FileUtils.rm_f(temp_path) + end + end + + if (hardsize_idf_path) + # This would be a reasonable place to use `multitask` because compose_idf_path and + # size_json_path are independent and can be run concurrently. However, it seems + # like `multitask` doesn't compare timestamps like `file` does. Instead it + # always runs like a regular `task`. + file hardsize_idf_path => [compose_idf_path, size_json_path] do + pathname = Pathname.new(hardsize_idf_path).relative_path_from(runs_pathname) + puts "Applying hard sizes: #{pathname}\n" + + idd = open_data_dictionary + input_file = OpenStudio::InputFile.open(idd, compose_idf_path) + + json_string = File.read(size_json_path) + value_map = JSON.parse(json_string, {:symbolize_names=>true}) + output_file, count = Modelkit::EnergyPlus.modify_objects(input_file, value_map) + #puts("#{count} modifications made") + + # Set SimulationControl fields 1, 2, and 3 to "No", "No", and "No" + sc_objs = output_file.find_objects_by_class_name("SimulationControl") + if sc_objs.length != 1 + raise "More than one SimulationControl object found" + end + sc = sc_objs[0] + sc.fields[1] = "No" + sc.fields[2] = "No" + sc.fields[3] = "No" + # Remove Sizing:Zone and Sizing:System objects + sizing_zones = output_file.find_objects_by_class_name("Sizing:Zone") + sizing_systems = output_file.find_objects_by_class_name("Sizing:System") + sizing_plants = output_file.find_objects_by_class_name("Sizing:Plant") + (sizing_zones + sizing_systems + sizing_plants).each {|x| output_file.delete_object(x)} + + output_file.write(hardsize_idf_path) + end + end + + # Run input file in a separate process. + file run_sql_path => [epw_path, run_idf_path] do + # Not sure why this check is needed; seems to try to run if even IDF does not exist. + # May need in other places, like sizing run. + next if (not File.exist?(run_idf_path)) + + pathname = Pathname.new(run_idf_path).relative_path_from(runs_pathname) + puts "Running: #{pathname}\n" + + # Because this is spawned to the shell, .modelkit-config options will be + # automatically applied. + # NOTE: If modelkit-energyplus was thread safe, would not have to run this + # as a separate process. + command = "modelkit-energyplus energyplus-run --weather=\"#{epw_path}\" \"#{run_idf_path}\"" + run_process(command, case_dir) + #$bar.inc + end + + + # see discussion with Michael + file run_csv_path => run_sql_path + + # deleting instance-out.csv breaks it; doesn't know how to recover + + end + end + + cohorts_first_pass = false + end + + + prune_paths = (old_site_paths - site_paths) + (old_pxv_paths - pxv_paths) + + if (not prune_paths.empty? and not rake_task_name =~ /^(prune|clean|none)$/) + puts "\e[1m\e[33mNote: There are cases in the runs directory that are not referenced by any\n" \ + "worksheet. You may want to delete them by typing:\e[0m\n \e[1mmodelkit rake prune\e[0m\n" + end + +end + + +desc "Generate case files" +task :cases do + # No operation; cases are generated when worksheets are evaluated. +end + + +desc "Delete unreferenced files" +task :prune do + if (prune_paths.empty?) + puts "Prune has nothing to delete." + else + prune_dirs = [] + puts "\e[1m\e[31mPrune will delete the following files:\e[0m" + +# show each as: dirname/* (106 files) + + prune_paths.each do |path| + dir = File.dirname(path) + prune_dirs << dir + pathname = Pathname.new(dir).relative_path_from(runs_pathname) + puts " \e[31m#{pathname}\e[0m" + end + print "\e[1m\e[31mConfirm (y/n)?\e[0m " + + input = ENV["CONFIRM"] || $stdin.gets || "" + if (ENV["CONFIRM"] or not $stdin.tty?) + puts input # Echo when not already written to STDOUT + end + + $start_time = Time.now # Reset to cut out wait time on the user prompt + if (input.strip =~ /^y/i) + puts "Pruning files..." + + # maybe don't have to repeat this--already said what was to be deleted + prune_dirs.each do |dir| + pathname = Pathname.new(dir).relative_path_from(runs_pathname) + puts "Deleting: #{pathname}" + FileUtils.rm_rf(dir) + end + else + puts "Task canceled." + end + end +end + + +desc "Delete all files and results" +task :clean do + paths = []; names = [] + [runs_dir, *results_paths].each do |path| + if (File.directory?(path)) + count = Dir.glob("#{path}/**/*").count { |f| File.file?(f) } + if (count.nonzero?) + paths << Dir.glob("#{path}/*") + names << "#{File.basename(path)}/* (#{count} files)" + end + elsif (File.file?(path)) + paths << path + names << File.basename(path) + end + end + + if (paths.empty?) + puts "Clean has nothing to delete." + else + puts "\e[1m\e[31mClean will delete the following files:\e[0m" + names.each { |name| puts " \e[31m#{name}\e[0m"} + print "\e[1m\e[31mConfirm (y/n)?\e[0m " + + input = ENV["CONFIRM"] || $stdin.gets || "" + if (ENV["CONFIRM"] or not $stdin.tty?) + puts input # Echo when not already written to STDOUT + end + + $start_time = Time.now # Reset to cut out wait time on the user prompt + if (input.strip =~ /^y/i) + puts "Cleaning files..." + FileUtils.rm_rf(paths) + else + puts "Task canceled." + end + end +end + + +desc "Generate site files (site.pxt)" +multitask :sites => site_paths + + +desc "Compose input files" +multitask :compose => compose_idf_paths + + +# Generate size input files +multitask :"size-idf" => size_idf_paths + + +# Run size input files +multitask :"size-sql" => size_sql_paths + + +# Extract size data +multitask :"size-json" => size_json_paths + + +desc "Apply hard sizes to input files" +multitask :hardsize => hardsize_idf_paths + + +desc "Run input files" +multitask :run => run_sql_paths + + +file query_path do + puts "Query file not found.\n" + query = +"AnnualBuildingUtilityPerformanceSummary/Entire Facility/Site and Source Energy/Energy Per Total Building Area/Net Site Energy, Net Site EUI +AnnualBuildingUtilityPerformanceSummary/Entire Facility/Site and Source Energy/Total Energy/Net Site Energy, Net Site Energy +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Electricity/Total End Uses, Electricity +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Natural Gas/Total End Uses, Natural Gas\n" + File.write(query_path, query) + puts "Writing default query file: #{query_path}\n" +end + + +file results_summary_path => [*run_sql_paths, query_path] do + pathname = Pathname.new(results_summary_path).relative_path_from(Pathname.new(study_dir)) + puts "Processing: #{pathname}\n" + + short_paths = run_sql_paths.map { |path| Pathname.new(path).relative_path_from(runs_pathname) } + Modelkit::EnergyPlus.sql(short_paths, query_path, :dir => runs_dir, :output => results_summary_path) +end + + +file results_profile_elec_path => run_csv_paths do + aggregate_profiles("Electricity:Facility", results_profile_elec_path, run_csv_paths, runs_pathname, study_dir) +end + + +file results_profile_gas_path => run_csv_paths do + aggregate_profiles("NaturalGas:Facility", results_profile_gas_path, run_csv_paths, runs_pathname, study_dir) +end + + +desc "Aggregate the simulation results" +task :results => results_paths + + +task :default => :results + + +def aggregate_profiles(column_name, output_path, run_csv_paths, runs_pathname, study_dir) + pathname = Pathname.new(output_path).relative_path_from(Pathname.new(study_dir)) + puts "Processing: #{pathname}\n" + + short_paths = run_csv_paths.map { |path| Pathname.new(path).relative_path_from(runs_pathname) } + + columns = [] + column_header = nil + date_time = true + short_paths.each do |short_path| + csv_path = "#{runs_pathname}/#{short_path}" + if (File.exist?(csv_path)) + csv = CSV.read(csv_path, :headers=>true) + if (date_time) + column = csv["Date/Time"] + column.unshift("Date/Time") # Add header + columns << column + date_time = false + end + if (not column_header) + # Match column name to the header while ignoring units/interval, i.e., [J](Hourly). + column_header = csv.headers.find { |header| header.match(column_name) } + end + column = csv[column_header] + column.unshift(short_path) # Add header + columns << column + else + puts "warning: file not found: #{csv_path}\n" + end + end + + File.open(output_path, "w") do |file| + columns.transpose.each { |row| file.puts(row.join(",")) } + end +end + + +# NOPUB consider building this into modelkit-energyplus. +# basically caches IDD path and avoids concurrent openings. + +# Open the EnergyPlus IDD if needed, but only do it once. +def open_data_dictionary + MUTEX.synchronize do # Lock to prevent opening multiple times concurrently + if (@idd.nil?) + puts "Opening Energy+.idd...\n" + + if (path = CONFIG["energyplus-run.engine"]) + path = File.expand_path(path.gsub(/\\/, "/")) # Resolve path and normalize + if (File.exist?(path)) + idd_path = "#{path}/Energy+.idd" + if (not File.exist?(idd_path)) + raise("Energy+.idd not found in specified EnergyPlus directory: #{path}") + end + else + raise("EnergyPlus directory not found: #{path}") + end + else + raise("energyplus-run.engine field missing in .modelkit-config") + end + + @idd = OpenStudio::DataDictionary.open(idd_path) + end + end + return(@idd) +end + + +# NICE, works +#require "rake/cpu_counter" +#puts "cpu=#{Rake::CpuCounter.count}" + +# Almost works but not quite: + +# shows what command was invoked from CLI +# if blank (even with -T), it's "default". +#puts "top level:" +# cli_tasks = Rake.application.top_level_tasks +# cli_task_name = cli_tasks.first # could be more than one; just grab first for now +# puts "cli_task_name=#{cli_task_name}" # returns String + +# cli_task = Rake.application.tasks.find { |t| t.name == cli_task_name } # returns Rake::Task +# puts "cli_task=#{cli_task}" +# + +# +## Rake has this builtin: +# Rake.application.lookup(task_name) => task + +# work_to_do = false +# if (cli_task.needed?) +# # Just because needed doesn't mean there is any work to do--check prereqs! +# cli_task.prerequisite_tasks.each do |prereq| +# if (prereq.needed?) +# work_to_do = true +# break +# end +# end +# end +# +# if (work_to_do) +# puts "Work to do!" +# else +# puts "Up to date; nothing to do." +# end + + +$start_time = Time.now +#$bar = RakeProgressbar.new(run_sql_paths.length) + +at_exit do + #$bar.finished + if (not rake_task_name =~ /^none$/) + puts "Elapsed task duration: #{Time.now - $start_time} sec" + end +end From f03fb2c1357f38df12c3d3f90c225f031f1e5075 Mon Sep 17 00:00:00 2001 From: Shaojie Wang <55248793+wsjsxn@users.noreply.github.com> Date: Sat, 29 Nov 2025 21:08:44 -0600 Subject: [PATCH 19/23] Create test --- .../SWHC043 Multi_Cap_Com_Htl_ACNew_New/cases/test | 1 + 1 file changed, 1 insertion(+) create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_Htl_ACNew/SWHC043 Multi_Cap_Com_Htl_ACNew_New/cases/test diff --git a/commercial measures/SWHC043 Multi_Cap_Com_Htl_ACNew/SWHC043 Multi_Cap_Com_Htl_ACNew_New/cases/test b/commercial measures/SWHC043 Multi_Cap_Com_Htl_ACNew/SWHC043 Multi_Cap_Com_Htl_ACNew_New/cases/test new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_Htl_ACNew/SWHC043 Multi_Cap_Com_Htl_ACNew_New/cases/test @@ -0,0 +1 @@ + From 11269f084ab271ccbcc6a4ab737897fd958f1eb8 Mon Sep 17 00:00:00 2001 From: Shaojie Wang <55248793+wsjsxn@users.noreply.github.com> Date: Sat, 29 Nov 2025 21:09:02 -0600 Subject: [PATCH 20/23] Add files via upload --- .../cases/Htl&0&cDXGF&New&dxAC_equip.csv | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_Htl_ACNew/SWHC043 Multi_Cap_Com_Htl_ACNew_New/cases/Htl&0&cDXGF&New&dxAC_equip.csv diff --git a/commercial measures/SWHC043 Multi_Cap_Com_Htl_ACNew/SWHC043 Multi_Cap_Com_Htl_ACNew_New/cases/Htl&0&cDXGF&New&dxAC_equip.csv b/commercial measures/SWHC043 Multi_Cap_Com_Htl_ACNew/SWHC043 Multi_Cap_Com_Htl_ACNew_New/cases/Htl&0&cDXGF&New&dxAC_equip.csv new file mode 100644 index 00000000..2c23a38a --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_Htl_ACNew/SWHC043 Multi_Cap_Com_Htl_ACNew_New/cases/Htl&0&cDXGF&New&dxAC_equip.csv @@ -0,0 +1,7 @@ +skip,case_name,:main_hvac_type,:main_atu_reheat_coil_type,:main_atu_reheat_control,:main_fan_rise,:main_cool_coil_type,:main_heat_coil_type,:main_dx_type,:main_sat_reset_type,:main_sat_temp_max,:main_design_peak_load,:main_oa_econ_type,:main_cool_coil_cop,:main_dx_comp_speed,:main_fan_speed,:main_fan_motor_eff,:main_heat_coil_eff,:main_cool_coil_cop2,:main_cool_coil_cop3,:main_cool_coil_cop4 +,NE-dxAC-PkgAC-65to134-New-EER-11.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.8,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-New-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.19,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-65to134-New-EER-13.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.62,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-10.8,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,3.81,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-12.0,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.29,CONSTANT,CONSTANT,0.9,0.8,,, +,NE-dxAC-PkgAC-135to240-New-EER-12.5,SZ-CAV,NONE,nil,3.877['in H2O'],DX-AIR,COMBUSTION,PNNL,FLOATING,95['F'],NONCOINCIDENT,FIXED-DRY-BULB,5.51,CONSTANT,CONSTANT,0.9,0.8,,, From 562f7f6622ae48e398d51bace267ba08000f3333 Mon Sep 17 00:00:00 2001 From: Shaojie Wang <55248793+wsjsxn@users.noreply.github.com> Date: Sat, 29 Nov 2025 21:09:20 -0600 Subject: [PATCH 21/23] Delete commercial measures/SWHC043 Multi_Cap_Com_Htl_ACNew/SWHC043 Multi_Cap_Com_Htl_ACNew_New/cases/test --- .../SWHC043 Multi_Cap_Com_Htl_ACNew_New/cases/test | 1 - 1 file changed, 1 deletion(-) delete mode 100644 commercial measures/SWHC043 Multi_Cap_Com_Htl_ACNew/SWHC043 Multi_Cap_Com_Htl_ACNew_New/cases/test diff --git a/commercial measures/SWHC043 Multi_Cap_Com_Htl_ACNew/SWHC043 Multi_Cap_Com_Htl_ACNew_New/cases/test b/commercial measures/SWHC043 Multi_Cap_Com_Htl_ACNew/SWHC043 Multi_Cap_Com_Htl_ACNew_New/cases/test deleted file mode 100644 index 8b137891..00000000 --- a/commercial measures/SWHC043 Multi_Cap_Com_Htl_ACNew/SWHC043 Multi_Cap_Com_Htl_ACNew_New/cases/test +++ /dev/null @@ -1 +0,0 @@ - From 53006dab98bd692b2e36d587f00bdf3ca277de85 Mon Sep 17 00:00:00 2001 From: Shaojie Wang <55248793+wsjsxn@users.noreply.github.com> Date: Sat, 29 Nov 2025 21:09:45 -0600 Subject: [PATCH 22/23] Add files via upload --- .../climates.csv | 17 ++++++++++ .../cohorts.csv | 26 +++++++++++++++ .../query.txt | 32 +++++++++++++++++++ 3 files changed, 75 insertions(+) create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_Htl_ACNew/SWHC043 Multi_Cap_Com_Htl_ACNew_New/climates.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_Htl_ACNew/SWHC043 Multi_Cap_Com_Htl_ACNew_New/cohorts.csv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_Htl_ACNew/SWHC043 Multi_Cap_Com_Htl_ACNew_New/query.txt diff --git a/commercial measures/SWHC043 Multi_Cap_Com_Htl_ACNew/SWHC043 Multi_Cap_Com_Htl_ACNew_New/climates.csv b/commercial measures/SWHC043 Multi_Cap_Com_Htl_ACNew/SWHC043 Multi_Cap_Com_Htl_ACNew_New/climates.csv new file mode 100644 index 00000000..d7027d82 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_Htl_ACNew/SWHC043 Multi_Cap_Com_Htl_ACNew_New/climates.csv @@ -0,0 +1,17 @@ +skip,climate,weather_file,climate_zone,codes_file +,CZ01,CA_EUREKA_725940S_CZ2022.epw,1,T24_2025_new.csv +,CZ02,CA_NAPA-CO_724955S_CZ2022.epw,2,T24_2025_new.csv +,CZ03,CA_OAKLAND-METRO-AP_724930S_CZ2022.epw,3,T24_2025_new.csv +,CZ04,CA_SAN-JOSE-IAP_724945S_CZ2022.epw,4,T24_2025_new.csv +,CZ05,CA_SANTA-MARIA-PUBLIC-AP_723940S_CZ2022.epw,5,T24_2025_new.csv +,CZ06,CA_LOS-ANGELES-IAP_722950S_CZ2022.epw,6,T24_2025_new.csv +,CZ07,CA_SAN-DIEGO-LINDBERGH-FLD_722900S_CZ2022.epw,7,T24_2025_new.csv +,CZ08,CA_LONG-BEACH-DAUGHERTY-FLD_722970S_CZ2022.epw,8,T24_2025_new.csv +,CZ09,CA_LOS-ANGELES-DOWNTOWN-USC_722874S_CZ2022.epw,9,T24_2025_new.csv +,CZ10,CA_RIVERSIDE-MUNI_722869S_CZ2022.epw,10,T24_2025_new.csv +,CZ11,CA_RED-BLUFF-MUNI-AP_725910S_CZ2022.epw,11,T24_2025_new.csv +,CZ12,CA_STOCKTON-METRO-AP_724920S_CZ2022.epw,12,T24_2025_new.csv +,CZ13,CA_FRESNO-YOSEMITE-IAP_723890S_CZ2022.epw,13,T24_2025_new.csv +,CZ14,CA_DAGGETT-BARSTOW-AP_723815S_CZ2022.epw,14,T24_2025_new.csv +,CZ15,CA_EL-CENTRO-NAF_722810S_CZ2022.epw,15,T24_2025_new.csv +,CZ16,CA_BISHOP-AP_724800S_CZ2022.epw,16,T24_2025_new.csv diff --git a/commercial measures/SWHC043 Multi_Cap_Com_Htl_ACNew/SWHC043 Multi_Cap_Com_Htl_ACNew_New/cohorts.csv b/commercial measures/SWHC043 Multi_Cap_Com_Htl_ACNew/SWHC043 Multi_Cap_Com_Htl_ACNew_New/cohorts.csv new file mode 100644 index 00000000..19a55ccd --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_Htl_ACNew/SWHC043 Multi_Cap_Com_Htl_ACNew_New/cohorts.csv @@ -0,0 +1,26 @@ +skip,cohort,root,wall_type,:wall_base_cavity_insul,:wall_base_cont_insul,:roof_base_cont_insul,:window_u,:window_shgc,:window_transmittance,:floor_base_cont_insul,:main_oa_econ_max_temp +#,Asm&0&cDXGF&New&dxAC_equip,Asm/templates/root.pxt,Mass Heavy,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Metal Framed"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Metal Buildings"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +#,ECC&0&cDXGF&New&dxAC_equip,ECC/templates/root.pxt,Mass Heavy,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Metal Buildings"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +#,EPr&0&cDXGF&New&dxAC_equip,EPr/templates/root.pxt,Wood Frame,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Wood Framed and Other"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Wood Framed and Other"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Wood Framed and Other"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +#,ERC&0&cDXGF&New&dxAC_equip,ERC/templates/root.pxt,Wood Frame,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Wood Framed and Other"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Wood Framed and Other"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Wood Framed and Other"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +#,ESe&0&cDXGF&New&dxAC_equip,ESe/templates/root.pxt,Mass Heavy,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Wood Framed and Other"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +#,EUn&0&cDXGF&New&dxAC_equip,EUn/templates/root.pxt,Mass Heavy,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Metal Framed"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Metal Buildings"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +#,Fin&0&cDXGF&New&dxAC_equip,Fin/templates/root.pxt,steel-frame,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Metal Framed"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Metal Framed"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Wood Framed and Other"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +#,Gro&0&cDXGF&New&dxAC_equip,Gro/templates/root.pxt,Mass Heavy,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Metal Framed"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Metal Buildings"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +#,Hsp&0&cDXGF&New&dxAC_equip,Hsp/templates/root.pxt,Mass Heavy,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Metal Buildings"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +,Htl&0&cDXGF&New&dxAC_equip,Htl/templates/root.pxt,Mass Heavy,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Metal Framed"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Metal Buildings"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +#,Lib&0&cDXGF&New&dxAC_equip,Lib/templates/root.pxt,steel-frame,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Metal Framed"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Metal Framed"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Wood Framed and Other"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +#,MBT&0&cDXGF&New&dxAC_equip,MBT/templates/root.pxt,Metal Frame,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Metal Framed"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Metal Framed"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Metal Buildings"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +#,MLI&0&cDXGF&New&dxAC_equip,MLI/templates/root.pxt,Mass Heavy,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Metal Framed"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Metal Buildings"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +#,Mtl&0&cDXGF&New&dxAC_equip,Mtl/templates/root.pxt,Wood Frame,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Wood Framed and Other"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Wood Framed and Other"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Wood Framed and Other"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +#,Nrs&0&cDXGF&New&dxAC_equip,Nrs/templates/root.pxt,Wood Frame,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Wood Framed and Other"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Wood Framed and Other"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Wood Framed and Other"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +#,OfL&0&cDXGF&New&dxAC_equip,OfL/templates/root.pxt,Metal Frame,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Metal Framed"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Metal Framed"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Metal Buildings"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +#,OfS&0&cDXGF&New&dxAC_equip,OfS/templates/root.pxt,Wood Frame,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Wood Framed and Other"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Wood Framed and Other"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Wood Framed and Other"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +#,Rel&0&cDXGF&New&dxAC_equip,Rel/templates/root.pxt,steel-frame,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Metal Framed"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Metal Framed"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Wood Framed and Other"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +#,RFF&0&cDXGF&New&dxAC_equip,RFF/templates/root.pxt,Mass Heavy,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Wood Framed and Other"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +#,RSD&0&cDXGF&New&dxAC_equip,RSD/templates/root.pxt,Wood Frame,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Wood Framed and Other"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Wood Framed and Other"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Wood Framed and Other"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +#,Rt3&0&cDXGF&New&dxAC_equip,Rt3/templates/root.pxt,Mass Heavy,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Metal Buildings"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +#,RtL&0&cDXGF&New&dxAC_equip,RtL/templates/root.pxt,Mass Heavy,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Metal Framed"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Metal Buildings"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +#,RtS&0&cDXGF&New&dxAC_equip,RtS/templates/root.pxt,Mass Heavy,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Wood Framed and Other"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +#,SCn&0&cDXGF&New&dxAC_equip,SCn/templates/root.pxt,Mass Heavy,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Metal Framed"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Metal Buildings"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" +#,SUn&0&cDXGF&New&dxAC_equip,SUn/templates/root.pxt,Mass Heavy,"%= codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Cavity R-Value"")['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Walls Above Grade | Mass Heavy"", ""Maximum U-Factor"")-1.49)['R-IP']","%= (1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Roofs | Wood Framed and Other"", ""Maximum U-Factor"")-0.78)['R-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""U-Factor""))['U-IP']","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""SHGC""))","%= (codes.lookup(""Fenestration Requirements | Climate Zone #{climate_zone}"", ""Fixed Window"", ""VT""))","%= ((1/codes.lookup(""Opaque Envelope Requirements | Climate Zone #{climate_zone}"", ""Floors | Other"", ""Maximum U-Factor""))-4.261)['R-IP']","%= codes.lookup(""Economizer Setpoints"", ""#{climate_zone}"", ""Fixed Drybulb"")['F']" diff --git a/commercial measures/SWHC043 Multi_Cap_Com_Htl_ACNew/SWHC043 Multi_Cap_Com_Htl_ACNew_New/query.txt b/commercial measures/SWHC043 Multi_Cap_Com_Htl_ACNew/SWHC043 Multi_Cap_Com_Htl_ACNew_New/query.txt new file mode 100644 index 00000000..f16ea16a --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_Htl_ACNew/SWHC043 Multi_Cap_Com_Htl_ACNew_New/query.txt @@ -0,0 +1,32 @@ +AnnualBuildingUtilityPerformanceSummary/Entire Facility/Site and Source Energy/Energy Per Total Building Area/Net Site Energy, Net Site EUI +AnnualBuildingUtilityPerformanceSummary/Entire Facility/Site and Source Energy/Total Energy/Net Site Energy, Net Site Energy +AnnualBuildingUtilityPerformanceSummary/Entire Facility/Site and Source Energy/Energy Per Total Building Area/Net Source Energy, Net Source EUI +AnnualBuildingUtilityPerformanceSummary/Entire Facility/Site and Source Energy/Total Energy/Net Source Energy, Net Source Energy + +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Total End Uses, Total +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Heating, Heating +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Cooling, Cooling +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Interior Lighting, Interior Lighting +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Exterior Lighting, Exterior Lighting +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Interior Equipment, Interior Equipment +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Exterior Equipment, Exterior Equipment +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Fans, Fans +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Pumps, Pumps +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Heat Rejection, Heat Rejection +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Humidification, Humidification +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Heat Recovery, Heat Recovery +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Water Systems, Water Systems +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Refrigeration, Refrigeration +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Total Energy/Generators, Generators +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Electricity/Heating, Heating Elec +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Electricity/Cooling, Cooling Elec +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Natural Gas/Heating, Heating NG +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Natural Gas/Cooling, Cooling NG +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Electricity/Interior Equipment, Interior Equipment Elec +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Natural Gas/Interior Equipment, Interior Equipment NG + +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Electricity/Total End Uses, Electricity +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Natural Gas/Total End Uses, Natural Gas + +AnnualBuildingUtilityPerformanceSummary/Entire Facility/Comfort and Setpoint Not Met Summary/Facility/Time Setpoint Not Met During Occupied Heating, Unmet Heating +AnnualBuildingUtilityPerformanceSummary/Entire Facility/Comfort and Setpoint Not Met Summary/Facility/Time Setpoint Not Met During Occupied Cooling, Unmet Cooling From 0e8b282eff893fe901c4030c0c9774e100110e59 Mon Sep 17 00:00:00 2001 From: Shaojie Wang <55248793+wsjsxn@users.noreply.github.com> Date: Sat, 29 Nov 2025 21:10:09 -0600 Subject: [PATCH 23/23] Add files via upload --- .../.modelkit-config | 24 + .../global.pxv | 2 + .../rakefile.rb | 1010 +++++++++++++++++ 3 files changed, 1036 insertions(+) create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_Htl_ACNew/.modelkit-config create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_Htl_ACNew/global.pxv create mode 100644 commercial measures/SWHC043 Multi_Cap_Com_Htl_ACNew/rakefile.rb diff --git a/commercial measures/SWHC043 Multi_Cap_Com_Htl_ACNew/.modelkit-config b/commercial measures/SWHC043 Multi_Cap_Com_Htl_ACNew/.modelkit-config new file mode 100644 index 00000000..b11027e5 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_Htl_ACNew/.modelkit-config @@ -0,0 +1,24 @@ + +# Paths are expanded relative to this modelkit-config file. + +prototypes-dir = '../../prototypes' +templates-dir = '../../templates/energyplus/templates' +weather-dir = '../../weather' +codes-dir = '../../codes' + +max-workers = 12 # Maximum number of simulations to run in parallel + + +[template-compose] +annotate = true +indent = " " +esc-line = "! " +dirs = '~\Documents\Modelkit Caboodle\templates\energyplus\templates' # Must be an absolute path + +[energyplus-run] +engine = 'C:\EnergyPlusV22-2-0' # Must be an absolute path +#engine = '/Applications/EnergyPlus-22-2-0' # Must be an absolute path +#engine = '/Applications/EnergyPlus-9-2-0' # Must be an absolute path +readvars = true +keep = false +output-files = "eplusout.err; eplusout.sql; eplustbl.htm; eplusvar.csv" diff --git a/commercial measures/SWHC043 Multi_Cap_Com_Htl_ACNew/global.pxv b/commercial measures/SWHC043 Multi_Cap_Com_Htl_ACNew/global.pxv new file mode 100644 index 00000000..c707bb60 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_Htl_ACNew/global.pxv @@ -0,0 +1,2 @@ +:timestep => 6, +:run_control => "ANNUAL" # ANNUAL | SIZING diff --git a/commercial measures/SWHC043 Multi_Cap_Com_Htl_ACNew/rakefile.rb b/commercial measures/SWHC043 Multi_Cap_Com_Htl_ACNew/rakefile.rb new file mode 100644 index 00000000..1e850689 --- /dev/null +++ b/commercial measures/SWHC043 Multi_Cap_Com_Htl_ACNew/rakefile.rb @@ -0,0 +1,1010 @@ +# Copyright (c) 2011-2020 Big Ladder Software LLC. All rights reserved. +# See the file "license.txt" for additional terms and conditions. + +if (not defined?(Modelkit)) + begin + require("modelkit") + rescue LoadError => exception + args = ARGV.join(" ") + puts exception + puts "\e[1m\e[31mERROR: This rakefile requires the Modelkit library. Make sure that you have the\nModelkit gem installed in your local Rubygems environment, or try running the\nrakefile using your stand-alone installation of Modelkit by typing:\e[0m\n \e[1mmodelkit rake #{args}\e[0m" + exit + end +end + + +require("pathname") +require("json") + +require("modelkit/config") +require("modelkit/multitable") +require("modelkit/parametrics") +require("modelkit/parametrics/worksheet") +require("modelkit/energyplus") + + +# Add to modelkit-energyplus: +# other args: +# - which design days +# - water mains temp? +# - daylight saving time? +def generate_site_pxt(idd, ddy_path, site_path) + site_file = File.open(site_path, "w") + + if (File.exists?(ddy_path)) + input_file = OpenStudio::InputFile.open(idd, ddy_path) + else + raise("file not found: #{ddy_path.inspect}") + end + + site_locations = input_file.find_objects_by_class_name("Site:Location").to_a + + if (site_locations.empty?) + raise("could not find Site:Location object in #{ddy_path.inspect}") + else + site_file.puts(site_locations.first.to_idf) + end + + all_design_days = input_file.find_objects_by_class_name("SizingPeriod:DesignDay").to_a + selected_design_days = all_design_days.select { |dd| dd.name[/Ann Htg 99.6% Condns DB|Ann Clg 0?.4% Condns DB/i] } + + if (selected_design_days.length < 2) + puts "warning: could not find requested design days; including all design days\n" + selected_design_days = all_design_days + end + + # Write design days to site file. + selected_design_days.each { |dd| site_file.puts(dd.to_idf) } + + +# 'CorrelationFromWeatherFile' is available starting in EP 9.0. + +# Does this work for design-day only runs? +# Seems to work for annual. + site_file.puts("\n\nSite:WaterMainsTemperature,\n CorrelationFromWeatherFile;\n") + + daylight_saving_time = input_file.find_objects_by_class_name("RunPeriodControl:DaylightSavingTime").to_a + if (not daylight_saving_time.empty?) + site_file.puts + site_file.puts(daylight_saving_time.first.to_idf) + end + + site_file.close +end + + +# NOPUB Should move into Modelkit somewhere. +# Support for running simulations in parallel. +require("open3") +require("set") + +$child_pids = Set.new # Global tracking of child PIDs + +# Return PID? +def run_process(command, dir) + # NOTE: Separate processes are required to make the EnergyPlus runs thread safe! + Open3.popen3(command, :chdir => dir) do |stdin, stdout, stderr, thread| + $child_pids.add(thread.pid) + # This might work with just an instance variable or similar. + + stdin.close # All input already sent with command + + file_out = File.open("#{dir}/stdout", "w") + file_err = File.open("#{dir}/stderr", "w") + + while (line = stdout.gets) + file_out.puts(line) + #@proc_out.call(line) if (@proc_out) + end + + # This is probably not right. + while (line = stderr.gets) + file_err.puts(line) + #@proc_err.call(line) if (@proc_err) + end + + stdout.close + stderr.close + + file_out.close + file_err.close + + #print "Completed: #{File.basename(dir)}\n" + $child_pids.delete(thread.pid) + end +end + +# Search up through parent directories for one or more possible file names. +def search_parent_dirs(start_dir, *file_names) + path = nil + dir_names = start_dir.to_s.split("/") + while (not dir_names.empty?) do + file_names.each do |file_name| + test_path = "#{dir_names.join("/")}/#{file_name}" + if (File.exist?(test_path)) + path = test_path + break + end + end + break if (path) + dir_names.pop + end + return(path) +end + +# Search for a file name or partial path in an array of provided directories. +# Directories are expected to already be absolute paths. +def resolve_path(path, dirs) + resolved_path = nil + dirs.each do |dir| + expanded_path = File.expand_path(path, dir) + if (File.exist?(expanded_path)) + resolved_path = expanded_path + break + end + end + return(resolved_path) +end + +# Clean up any previous output files left behind if 'compose' or 'run' fails. +# Leftover files can be processed unintentionally by downstream tasks and +# ultimately generate false results. +def clean_energyplus_output_files(dir) + # Not all of these files might be present. Others might be present and unhandled. + paths = [ + "#{dir}/instance-out.err", + "#{dir}/instance-out.rdd", + "#{dir}/instance-out.sql", # Most important for downstream tasks + "#{dir}/instance-tbl.htm", + "#{dir}/instance-var.csv", + "#{dir}/stderr", + "#{dir}/stdout" + ] + FileUtils.rm_f(paths) +end + + +# Rake stubbornly sets the working directory to wherever the Rakefile is located. +# The target directory could optionally be set from a CLI option instead. +study_dir = Rake.application.original_dir + +climates_csv_path = "#{study_dir}/climates.csv" +cohorts_csv_path = "#{study_dir}/cohorts.csv" + +query_path = "#{study_dir}/query.txt" +results_summary_path = "#{study_dir}/results-summary.csv" +results_profile_elec_path = "#{study_dir}/results-profile-elec.csv" +results_profile_gas_path = "#{study_dir}/results-profile-gas.csv" +results_paths = [results_summary_path, results_profile_elec_path, results_profile_gas_path] + +cases_dir = "#{study_dir}/cases" +runs_dir = "#{study_dir}/runs" +runs_pathname = Pathname.new(runs_dir) + +MUTEX = Mutex.new # Thread lock for when something needs to run in a single thread + +config_path = search_parent_dirs(study_dir, ".modelkit-config") +if (not config_path) + raise("modelkit-config file not found in working directory or any parent directory") +else + CONFIG = Modelkit::Config.new(config_path) + puts "Using modelkit-config at #{config_path}\n" +end + +config = Hash.new +[:prototypes_dir, :templates_dir, :weather_dir, :codes_dir].each do |key| + config[key] = [] + field = key.to_s.gsub(/_/, "-") + if (not CONFIG[field]) + raise("#{field} variable missing in modelkit-config") + else + config_paths = CONFIG[field].split(/\s*;\s*/) # Split string with semicolons into array of paths + config_paths.each do |path| + # Resolve path relative to modelkit-config file and normalize the slashes. + config[key] << File.expand_path(path.strip.gsub(/\\/, "/"), File.dirname(config_path)) + end + end +end + +max_workers = CONFIG["max-workers"] +if (max_workers.nil?) + max_workers = 1 +end + +global_pxv_path = search_parent_dirs(study_dir, "global.pxv") +if (global_pxv_path) + puts "Using global.pxv at #{global_pxv_path}\n" +end + +rake_tasks = Rake.application.top_level_tasks +rake_task_name = rake_tasks.first # Multiple tasks are allowed, but assume one + +rake_options = Rake.application.options +rake_options.always_multitask = true # --multitask, -m +#rake_options.job_stats = true # --job-stats true | :history +rake_options.thread_pool_size = max_workers - 1 # --jobs, -j (default 12 on Mac) + +if (rake_options.dryrun or rake_options.show_all_tasks or + rake_options.show_prereqs or rake_options.show_tasks) + # These are information-only requests. Rake nonetheless registers as invoked + # with the "default" task name but nothing actually gets run. + rake_task_name = "none" +end + + +# Show threads message and info about how to change +# Running with 8 threads (edit .modelkit-config to change). +# Type Ctrl+C to cancel all tasks. + +require "io/console" # need this anyway for progress bar + +#$stdin.echo = false # turn off echo; in Mac shows a cursor with a key icon +# This prevents the user from over-typing the output stream. + +# also try switching to raw mode--should also block user input; maybe no key icon? + +#print "\e[?25l" # hide the cursor; MUST remember to show it again on exit or else it's permanent for the session! + + +trap("INT") do # Ctrl+C (polite kill) + puts "Canceling all tasks.\n" + if ($child_pids) + $child_pids.each { |pid| Process.kill("KILL", pid) } + end + exit +end + +if (Modelkit::Platform.unix?) + trap("TSTP") do # Ctrl+Z (suspend) + puts "Suspending all tasks. Type 'fg' to resume.\n" + exit + end +end + +if (not rake_task_name =~ /^(prune|clean|none)$/) + +# If possible, detect if any tasks will be run before showing this message: +puts "\e[1mType Ctrl+C to cancel all tasks.\e[0m\n" + +end + +# modelkit rake -A crashes for some reason + +# NOPUB Some of above could be included here too. +# Don't evaluate worksheets and generate file tasks if not necessary! +# NOTE: prune does need to evaluate worksheets. +if (not rake_task_name =~ /^(clean|none)$/) + + pxv_paths = [] + site_paths = [] + + compose_idf_paths = [] + + + #rename size_ to sizerun_ size_run_ sizing_run_ + size_ref_paths = [] + size_idf_paths = [] + size_sql_paths = [] + size_json_paths = [] + + hardsize_idf_paths = [] + + run_sql_paths = [] + run_csv_paths = [] + + + + old_site_paths = Dir.glob("#{runs_dir}/*/site.pxt") + old_pxv_paths = Dir.glob("#{runs_dir}/**/instance.pxv") + + climates = Modelkit::Worksheet.open(climates_csv_path) + cohorts = Modelkit::Worksheet.open(cohorts_csv_path) + + climate_pattern = ENV["CLIMATE"] || "" + + new_case_csv = "skip,case_name\n,defaults\n" # Could be read from config instead + + cohorts_first_pass = true + + puts "Evaluating worksheets...\n" + + csv_table = climates.each_row do |row1, index1, variables1, parameters1| + #puts "climate_index = #{index1}" + + if (not variables1.key?(:climate)) + raise("required column \"climate\" is missing in #{File.basename(climates_csv_path)}") + end + + climate_name = variables1[:climate].to_s.strip # Could have been converted to non-string by Util.value_from_string + if (climate_name.empty?) + raise("climate field cannot be blank for row #{index1 + 2} of #{File.basename(climates_csv_path)}") + end + + next if (not climate_name =~ Regexp.new(climate_pattern)) + + FileUtils.mkdir_p("#{runs_dir}/#{climate_name}") + + site_path = "#{runs_dir}/#{climate_name}/site.pxt" + if (site_paths.include?(site_path)) + puts "warning: duplicate name #{climate_name.inspect} in climate column at row #{index1 + 2} in #{File.basename(climates_csv_path)}; row will be skipped" + next + end + + site_paths << site_path + + if (not variables1.key?(:weather_file)) + raise("required column \"weather_file\" is missing in #{File.basename(climates_csv_path)}") + end + + weather_name = variables1[:weather_file].to_s.strip # Could have been converted to non-string by Util.value_from_string + if (weather_name.empty?) + raise("weather_file field cannot be blank for row #{index1 + 2} of #{File.basename(climates_csv_path)}") + end + + epw_path = resolve_path(weather_name, config[:weather_dir]) + if (not epw_path) + puts "Could not resolve path #{weather_name.inspect} from possible paths:\n" + config[:weather_dir].each { |dir| puts " #{File.expand_path(weather_name, dir).inspect}\n" } + puts "Check the weather-dir variable in modelkit-config file.\n" + raise("weather file #{weather_name.inspect} not found for row #{index1 + 2} of #{File.basename(climates_csv_path)}") + end + + if (not File.file?(epw_path)) + raise("weather file #{epw_path.inspect} is not a file for row #{index1 + 2} of #{File.basename(climates_csv_path)}") + end + + ddy_path = "#{File.dirname(epw_path)}/#{File.basename(epw_path, ".*")}.ddy" # Ensure ddy is from same directory as resolved epw file + if (not File.exist?(ddy_path)) + puts "Weather file path resolved to #{epw_path.inspect}\n" + raise("ddy file #{ddy_path.inspect} not found for row #{index1 + 2} of #{File.basename(climates_csv_path)}") + end + + # This file only exists to indicate if the weather file changes for dependency purposes. + # The weather file is the one input that is separate from instance parameters. + weather_path = "#{runs_dir}/#{climate_name}/weather" + pathname = Pathname.new(weather_path).relative_path_from(runs_pathname) + + if (File.exist?(weather_path)) + old_epw_path = File.read(weather_path) + if (epw_path != old_epw_path) + puts "Updating: #{pathname}\n" + File.write(weather_path, epw_path) + end + else + puts "Writing: #{pathname}\n" + File.write(weather_path, epw_path) + end + + # generate site.pxt from .ddy file + file site_path => [weather_path, ddy_path] do + idd = open_data_dictionary + pathname = Pathname.new(site_path).relative_path_from(runs_pathname) + puts "Generating: #{pathname}\n" + generate_site_pxt(idd, ddy_path, site_path) + end + + if (variables1.key?(:codes_file)) # NOTE: codes_file is an optional column + codes_name = variables1[:codes_file].to_s.strip # Could have been converted to non-string by Util.value_from_string + if (codes_name.empty?) + raise("codes_file field cannot be blank for row #{index1 + 2} of #{File.basename(climates_csv_path)}") + end + + codes_path = resolve_path(codes_name, config[:codes_dir]) + if (not codes_path) + puts "Could not resolve path #{codes_name.inspect} from possible paths:\n" + config[:codes_dir].each { |dir| puts " #{File.expand_path(codes_name, dir).inspect}\n" } + puts "Check the codes-dir variable in modelkit-config file.\n" + raise("codes file #{codes_name.inspect} not found for row #{index1 + 2} of #{File.basename(climates_csv_path)}") + end + + if (not File.file?(codes_path)) + raise("codes file #{codes_path.inspect} is not a file for row #{index1 + 2} of #{File.basename(climates_csv_path)}") + end + + codes_table = Modelkit::MultiTable.new(codes_path) + + else + codes_table = nil # Must set something to pass to next worksheet + end + + variables1[:codes] = codes_table # For backwards compatibility + + # Make sure objects passed in are not mutated by the Worksheet. Make dupes? + + cohort_names = [] # Accumulate names to check for duplicates + + cohorts.each_row(variables1) do |_, index2, variables2, parameters2| + #puts " cohort_index = #{index2}" + + # NOTE: Variables from outer worksheet (variables1) are copied into this worksheet. + # Changes to the variables here (variables2) do not propagate back up. + + if (not variables2.key?(:cohort)) + raise("required column \"cohort\" is missing in #{File.basename(cohorts_csv_path)}") + end + + cohort_name = variables2[:cohort].to_s.strip # Could have been converted to non-string by Util.value_from_string + if (cohort_name.empty?) + raise("cohort field cannot be blank for row #{index2 + 2} of #{File.basename(cohorts_csv_path)}") + end + + if (cohort_names.include?(cohort_name)) + if (cohorts_first_pass) # Only warn about this row once + puts "warning: duplicate name #{cohort_name.inspect} in cohort column at row #{index2 + 2} in #{File.basename(cohorts_csv_path)}; row will be skipped" + end + next + end + + cohort_names << cohort_name + + cases_csv_path = "#{cases_dir}/#{cohort_name}.csv" + cases_csv_short_path = "#{File.basename(cases_dir)}/#{cohort_name}.csv" + if (not File.exist?(cases_csv_path)) + puts("Cases worksheet #{cases_csv_short_path.inspect} not found for row #{index2 + 2} of #{File.basename(cohorts_csv_path)}\n") + puts("Creating: #{cases_csv_short_path}\n") + FileUtils.mkdir_p(cases_dir) + File.write(cases_csv_path, new_case_csv) + end + + if (not variables2.key?(:root)) + raise("required column \"root\" is missing in #{File.basename(cohorts_csv_path)}") + end + + root_name = variables2[:root].to_s.strip # Could have been converted to non-string by Util.value_from_string + if (root_name.empty?) + raise("root field cannot be blank for row #{index2 + 2} of #{File.basename(cohorts_csv_path)}") + end + + root_path = resolve_path(root_name, config[:prototypes_dir]) + if (not root_path) + puts "Could not resolve path #{root_name.inspect} from possible paths:\n" + config[:prototypes_dir].each { |dir| puts " #{File.expand_path(root_name, dir).inspect}\n" } + puts "Check the prototypes-dir variable in modelkit-config file.\n" + raise("root template #{root_name.inspect} not found for row #{index2 + 2} of #{File.basename(cohorts_csv_path)}") + end + + if (not File.file?(root_path)) + raise("root template #{root_path.inspect} is not a file for row #{index2 + 2} of #{File.basename(cohorts_csv_path)}") + end + + case_names = [] # Accumulate names to check for duplicates + + # Better to pre-read and cache this outside the looping? + # There are only N worksheets...1 per building type. + cases = Modelkit::Worksheet.open(cases_csv_path) + + cases.each_row(variables2) do |_, index3, variables3, parameters3| + #puts " case_index = #{index3}" + + # NOTE: Variables from outer worksheet (variables2) are copied into this worksheet. + # Changes to the variables here (variables3) do not propagate back up. + + if (not variables3.key?(:case_name)) + raise("required column \"case_name\" is missing in #{File.basename(cases_dir)}/#{File.basename(cases_csv_path)}") + end + + case_name = variables3[:case_name].to_s.strip # Could have been converted to non-string by Util.value_from_string + if (case_name.empty?) + raise("case_name field cannot be blank for row #{index3 + 2} of #{File.basename(cases_dir)}/#{File.basename(cases_csv_path)}") + end + + if (case_names.include?(case_name)) + if (cohorts_first_pass) # Only warn about this row once + puts "warning: duplicate name #{case_name.inspect} in case_name column at row #{index3 + 2} in #{File.basename(cases_dir)}/#{File.basename(cases_csv_path)}; row will be skipped" + end + next + end + + case_names << case_name + run_name = "#{climate_name}/#{cohort_name}/#{case_name}" + case_dir = "#{runs_dir}/#{run_name}" + FileUtils.mkdir_p(case_dir) + + # better to create this dynamically in cases.csv by combining variables from other layers. + # all variables need to be propagated first from layer to layer. + # for example: + # :run_name + # %= "My Prefix Something: #{climate}/#{cohort}/#{case_name}" + pxv_string = ":run_name => #{run_name.inspect},\n" + + parameters = parameters1 | parameters2 | parameters3 + parameters.each do |key, value| + value_inspect = value.inspect + if (value.kind_of?(String)) + # Using `inspect` on strings is useful because it reveals invisible + # characters and invalid byte sequences. The downside is that the + # string must be unescaped. + value_inspect.gsub!(/\\\\/, "\\") + end + pxv_string << ":#{key} => #{value_inspect},\n" + end + + pxv_path = "#{case_dir}/instance.pxv" + pxv_paths << pxv_path + + pathname = Pathname.new(pxv_path).relative_path_from(runs_pathname) + + if (File.exist?(pxv_path)) + old_pxv_string = File.read(pxv_path) + if (pxv_string != old_pxv_string) + puts "Updating: #{pathname}\n" + File.write(pxv_path, pxv_string) + end + else + puts "Writing: #{pathname}\n" + File.write(pxv_path, pxv_string) + end + + compose_idf_path = "#{case_dir}/instance.idf" + compose_idf_paths << compose_idf_path + + if (variables3[:sizing_case]) + size_name = "#{climate_name}/#{cohort_name}/#{variables3[:sizing_case]}" + size_dir = "#{runs_dir}/#{size_name}" + size_ref_path = "#{size_dir}/instance.idf" + + size_idf_path = "#{size_dir}/instance-size.idf" + size_sql_path = "#{size_dir}/instance-size-out.sql" + size_json_path = "#{size_dir}/instance-size-out.json" + + if (size_ref_paths.include?(size_ref_path)) + # Avoid creating redundant tasks when multiple cases reference same sizing case. + create_sizing_tasks = false + else + create_sizing_tasks = true + + size_ref_paths << size_ref_path + size_idf_paths << size_idf_path + size_sql_paths << size_sql_path + size_json_paths << size_json_path + end + + hardsize_idf_path = "#{case_dir}/instance-hardsize.idf" + hardsize_idf_paths << hardsize_idf_path + + run_idf_path = hardsize_idf_path # Which input file to run + + run_sql_path = "#{case_dir}/instance-hardsize-out.sql" + run_sql_paths << run_sql_path + + run_csv_path = "#{case_dir}/instance-hardsize-var.csv" + run_csv_paths << run_csv_path + + else + # Autosize-only run. + size_ref_path = nil + + run_idf_path = compose_idf_path # Which input file to run + + run_sql_path = "#{case_dir}/instance-out.sql" + run_sql_paths << run_sql_path + + run_csv_path = "#{case_dir}/instance-var.csv" + run_csv_paths << run_csv_path + end + + # Compose input file from parameter file. + # need more dependencies here: template files + file compose_idf_path => [site_path, root_path, pxv_path, global_pxv_path].compact do # If no path for global.pxv, remove nil element + pathname = Pathname.new(compose_idf_path).relative_path_from(runs_pathname) + puts "Composing: #{pathname}\n" + + clean_energyplus_output_files(File.dirname(compose_idf_path)) + + site_dir = File.dirname(site_path) + + begin + Modelkit::Parametrics.template_compose(root_path, + :annotate => CONFIG["template-compose.annotate"], + :indent => CONFIG["template-compose.indent"], + :esc_line => CONFIG["template-compose.esc-line"], + :dirs => [site_dir, *config[:templates_dir]], + :files => [global_pxv_path, pxv_path].compact, # If no path for global.pxv, remove nil element + :output => compose_idf_path) + rescue Exception => exception + puts "#{exception.class.name}: #{exception.message}\n" + puts "#{exception.backtrace.first}\n" if (not SyntaxError === exception) + puts "Skipping: #{pathname}\n" + end + end + + if (create_sizing_tasks) + # Generate a modified input file in order to run a design-day-only simulation. + # NOTE: This can be eliminated if a design-day option is added to energyplus-run. + file size_idf_path => size_ref_path do + pathname = Pathname.new(size_idf_path).relative_path_from(runs_pathname) + puts "Generating size run: #{pathname}\n" + + FileUtils.cp(size_ref_path, size_idf_path) + + idd = open_data_dictionary + input_file = OpenStudio::InputFile.open(idd, size_idf_path) + + sc_objs = input_file.find_objects_by_class_name("SimulationControl") + if sc_objs.length != 1 + raise "More than one SimulationControl object found" + end + sc = sc_objs[0] + sc.fields[1] = "Yes" + sc.fields[2] = "Yes" + sc.fields[3] = "Yes" + sc.fields[4] = "Yes" + sc.fields[5] = "No" + + input_file.write(size_idf_path) + end + + # Run sizing input files for design days only. + file size_sql_path => size_idf_path do + pathname = Pathname.new(size_idf_path).relative_path_from(runs_pathname) + puts "Running size run: #{pathname}\n" + + command = "modelkit-energyplus energyplus-run --weather=\"#{epw_path}\" \"#{size_idf_path}\"" + run_process(command, size_dir) + end + + # Generate size data file (instance-size-out.json). + file size_json_path => size_sql_path do + pathname = Pathname.new(size_json_path).relative_path_from(runs_pathname) + puts "Extracting size data: #{pathname}\n" + + # Make a copy to work on because the original gets overwritten by EnergyPlus.size. + temp_path = "#{File.dirname(size_idf_path)}/instance-temp.idf" + FileUtils.cp(size_idf_path, temp_path) + + idd = open_data_dictionary + input_file = OpenStudio::InputFile.open(idd, temp_path) + sql = Modelkit::EnergyPlus::SQLOutput.new(size_sql_path) + + # This will be fixed to only generate JSON and not modify the input file. + _, count, output_file = Modelkit::EnergyPlus.size( + sql, input_file, {json: size_json_path, version: "9-2"}) + #puts("#{count} modifications made") + + FileUtils.rm_f(temp_path) + end + end + + if (hardsize_idf_path) + # This would be a reasonable place to use `multitask` because compose_idf_path and + # size_json_path are independent and can be run concurrently. However, it seems + # like `multitask` doesn't compare timestamps like `file` does. Instead it + # always runs like a regular `task`. + file hardsize_idf_path => [compose_idf_path, size_json_path] do + pathname = Pathname.new(hardsize_idf_path).relative_path_from(runs_pathname) + puts "Applying hard sizes: #{pathname}\n" + + idd = open_data_dictionary + input_file = OpenStudio::InputFile.open(idd, compose_idf_path) + + json_string = File.read(size_json_path) + value_map = JSON.parse(json_string, {:symbolize_names=>true}) + output_file, count = Modelkit::EnergyPlus.modify_objects(input_file, value_map) + #puts("#{count} modifications made") + + # Set SimulationControl fields 1, 2, and 3 to "No", "No", and "No" + sc_objs = output_file.find_objects_by_class_name("SimulationControl") + if sc_objs.length != 1 + raise "More than one SimulationControl object found" + end + sc = sc_objs[0] + sc.fields[1] = "No" + sc.fields[2] = "No" + sc.fields[3] = "No" + # Remove Sizing:Zone and Sizing:System objects + sizing_zones = output_file.find_objects_by_class_name("Sizing:Zone") + sizing_systems = output_file.find_objects_by_class_name("Sizing:System") + sizing_plants = output_file.find_objects_by_class_name("Sizing:Plant") + (sizing_zones + sizing_systems + sizing_plants).each {|x| output_file.delete_object(x)} + + output_file.write(hardsize_idf_path) + end + end + + # Run input file in a separate process. + file run_sql_path => [epw_path, run_idf_path] do + # Not sure why this check is needed; seems to try to run if even IDF does not exist. + # May need in other places, like sizing run. + next if (not File.exist?(run_idf_path)) + + pathname = Pathname.new(run_idf_path).relative_path_from(runs_pathname) + puts "Running: #{pathname}\n" + + # Because this is spawned to the shell, .modelkit-config options will be + # automatically applied. + # NOTE: If modelkit-energyplus was thread safe, would not have to run this + # as a separate process. + command = "modelkit-energyplus energyplus-run --weather=\"#{epw_path}\" \"#{run_idf_path}\"" + run_process(command, case_dir) + #$bar.inc + end + + + # see discussion with Michael + file run_csv_path => run_sql_path + + # deleting instance-out.csv breaks it; doesn't know how to recover + + end + end + + cohorts_first_pass = false + end + + + prune_paths = (old_site_paths - site_paths) + (old_pxv_paths - pxv_paths) + + if (not prune_paths.empty? and not rake_task_name =~ /^(prune|clean|none)$/) + puts "\e[1m\e[33mNote: There are cases in the runs directory that are not referenced by any\n" \ + "worksheet. You may want to delete them by typing:\e[0m\n \e[1mmodelkit rake prune\e[0m\n" + end + +end + + +desc "Generate case files" +task :cases do + # No operation; cases are generated when worksheets are evaluated. +end + + +desc "Delete unreferenced files" +task :prune do + if (prune_paths.empty?) + puts "Prune has nothing to delete." + else + prune_dirs = [] + puts "\e[1m\e[31mPrune will delete the following files:\e[0m" + +# show each as: dirname/* (106 files) + + prune_paths.each do |path| + dir = File.dirname(path) + prune_dirs << dir + pathname = Pathname.new(dir).relative_path_from(runs_pathname) + puts " \e[31m#{pathname}\e[0m" + end + print "\e[1m\e[31mConfirm (y/n)?\e[0m " + + input = ENV["CONFIRM"] || $stdin.gets || "" + if (ENV["CONFIRM"] or not $stdin.tty?) + puts input # Echo when not already written to STDOUT + end + + $start_time = Time.now # Reset to cut out wait time on the user prompt + if (input.strip =~ /^y/i) + puts "Pruning files..." + + # maybe don't have to repeat this--already said what was to be deleted + prune_dirs.each do |dir| + pathname = Pathname.new(dir).relative_path_from(runs_pathname) + puts "Deleting: #{pathname}" + FileUtils.rm_rf(dir) + end + else + puts "Task canceled." + end + end +end + + +desc "Delete all files and results" +task :clean do + paths = []; names = [] + [runs_dir, *results_paths].each do |path| + if (File.directory?(path)) + count = Dir.glob("#{path}/**/*").count { |f| File.file?(f) } + if (count.nonzero?) + paths << Dir.glob("#{path}/*") + names << "#{File.basename(path)}/* (#{count} files)" + end + elsif (File.file?(path)) + paths << path + names << File.basename(path) + end + end + + if (paths.empty?) + puts "Clean has nothing to delete." + else + puts "\e[1m\e[31mClean will delete the following files:\e[0m" + names.each { |name| puts " \e[31m#{name}\e[0m"} + print "\e[1m\e[31mConfirm (y/n)?\e[0m " + + input = ENV["CONFIRM"] || $stdin.gets || "" + if (ENV["CONFIRM"] or not $stdin.tty?) + puts input # Echo when not already written to STDOUT + end + + $start_time = Time.now # Reset to cut out wait time on the user prompt + if (input.strip =~ /^y/i) + puts "Cleaning files..." + FileUtils.rm_rf(paths) + else + puts "Task canceled." + end + end +end + + +desc "Generate site files (site.pxt)" +multitask :sites => site_paths + + +desc "Compose input files" +multitask :compose => compose_idf_paths + + +# Generate size input files +multitask :"size-idf" => size_idf_paths + + +# Run size input files +multitask :"size-sql" => size_sql_paths + + +# Extract size data +multitask :"size-json" => size_json_paths + + +desc "Apply hard sizes to input files" +multitask :hardsize => hardsize_idf_paths + + +desc "Run input files" +multitask :run => run_sql_paths + + +file query_path do + puts "Query file not found.\n" + query = +"AnnualBuildingUtilityPerformanceSummary/Entire Facility/Site and Source Energy/Energy Per Total Building Area/Net Site Energy, Net Site EUI +AnnualBuildingUtilityPerformanceSummary/Entire Facility/Site and Source Energy/Total Energy/Net Site Energy, Net Site Energy +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Electricity/Total End Uses, Electricity +AnnualBuildingUtilityPerformanceSummary/Entire Facility/End Uses/Natural Gas/Total End Uses, Natural Gas\n" + File.write(query_path, query) + puts "Writing default query file: #{query_path}\n" +end + + +file results_summary_path => [*run_sql_paths, query_path] do + pathname = Pathname.new(results_summary_path).relative_path_from(Pathname.new(study_dir)) + puts "Processing: #{pathname}\n" + + short_paths = run_sql_paths.map { |path| Pathname.new(path).relative_path_from(runs_pathname) } + Modelkit::EnergyPlus.sql(short_paths, query_path, :dir => runs_dir, :output => results_summary_path) +end + + +file results_profile_elec_path => run_csv_paths do + aggregate_profiles("Electricity:Facility", results_profile_elec_path, run_csv_paths, runs_pathname, study_dir) +end + + +file results_profile_gas_path => run_csv_paths do + aggregate_profiles("NaturalGas:Facility", results_profile_gas_path, run_csv_paths, runs_pathname, study_dir) +end + + +desc "Aggregate the simulation results" +task :results => results_paths + + +task :default => :results + + +def aggregate_profiles(column_name, output_path, run_csv_paths, runs_pathname, study_dir) + pathname = Pathname.new(output_path).relative_path_from(Pathname.new(study_dir)) + puts "Processing: #{pathname}\n" + + short_paths = run_csv_paths.map { |path| Pathname.new(path).relative_path_from(runs_pathname) } + + columns = [] + column_header = nil + date_time = true + short_paths.each do |short_path| + csv_path = "#{runs_pathname}/#{short_path}" + if (File.exist?(csv_path)) + csv = CSV.read(csv_path, :headers=>true) + if (date_time) + column = csv["Date/Time"] + column.unshift("Date/Time") # Add header + columns << column + date_time = false + end + if (not column_header) + # Match column name to the header while ignoring units/interval, i.e., [J](Hourly). + column_header = csv.headers.find { |header| header.match(column_name) } + end + column = csv[column_header] + column.unshift(short_path) # Add header + columns << column + else + puts "warning: file not found: #{csv_path}\n" + end + end + + File.open(output_path, "w") do |file| + columns.transpose.each { |row| file.puts(row.join(",")) } + end +end + + +# NOPUB consider building this into modelkit-energyplus. +# basically caches IDD path and avoids concurrent openings. + +# Open the EnergyPlus IDD if needed, but only do it once. +def open_data_dictionary + MUTEX.synchronize do # Lock to prevent opening multiple times concurrently + if (@idd.nil?) + puts "Opening Energy+.idd...\n" + + if (path = CONFIG["energyplus-run.engine"]) + path = File.expand_path(path.gsub(/\\/, "/")) # Resolve path and normalize + if (File.exist?(path)) + idd_path = "#{path}/Energy+.idd" + if (not File.exist?(idd_path)) + raise("Energy+.idd not found in specified EnergyPlus directory: #{path}") + end + else + raise("EnergyPlus directory not found: #{path}") + end + else + raise("energyplus-run.engine field missing in .modelkit-config") + end + + @idd = OpenStudio::DataDictionary.open(idd_path) + end + end + return(@idd) +end + + +# NICE, works +#require "rake/cpu_counter" +#puts "cpu=#{Rake::CpuCounter.count}" + +# Almost works but not quite: + +# shows what command was invoked from CLI +# if blank (even with -T), it's "default". +#puts "top level:" +# cli_tasks = Rake.application.top_level_tasks +# cli_task_name = cli_tasks.first # could be more than one; just grab first for now +# puts "cli_task_name=#{cli_task_name}" # returns String + +# cli_task = Rake.application.tasks.find { |t| t.name == cli_task_name } # returns Rake::Task +# puts "cli_task=#{cli_task}" +# + +# +## Rake has this builtin: +# Rake.application.lookup(task_name) => task + +# work_to_do = false +# if (cli_task.needed?) +# # Just because needed doesn't mean there is any work to do--check prereqs! +# cli_task.prerequisite_tasks.each do |prereq| +# if (prereq.needed?) +# work_to_do = true +# break +# end +# end +# end +# +# if (work_to_do) +# puts "Work to do!" +# else +# puts "Up to date; nothing to do." +# end + + +$start_time = Time.now +#$bar = RakeProgressbar.new(run_sql_paths.length) + +at_exit do + #$bar.finished + if (not rake_task_name =~ /^none$/) + puts "Elapsed task duration: #{Time.now - $start_time} sec" + end +end

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�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�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 j$gqE_~q_I@N=+-sMuJxR}$j!zk1jfCL@# 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