diff --git a/.gitignore b/.gitignore index 64aeb706..eace49af 100644 --- a/.gitignore +++ b/.gitignore @@ -19,4 +19,10 @@ sim_hourly_wb.csv ######### stderr scripts/data transformation/sfm_annual.csv -scripts/data transformation/sfm_hourly_wb.csv \ No newline at end of file +scripts/data transformation/sfm_hourly_wb.csv +scripts/data transformation/CEDARS_long_ls_SFm.csv +scripts/data transformation/CEDARS_long_ls_MFm.csv +scripts/data transformation/CEDARS_long_ls_DMo.csv +scripts/data transformation/CEDARS_long_ls_Com.csv +scripts/data transformation/CEDARS_long_ls_*.csv +scripts/data transformation/CEDARS_long_ls_*.zip \ No newline at end of file diff --git a/commercial measures/SWXX111-00 Example_SEER_AC/SWXX111-00 Example_SEER_AC_Ex/climates.csv b/commercial measures/SWXX111-00 Example_SEER_AC/SWXX111-00 Example_SEER_AC_Ex/climates.csv index 2b7ad0aa..95474a26 100644 --- a/commercial measures/SWXX111-00 Example_SEER_AC/SWXX111-00 Example_SEER_AC_Ex/climates.csv +++ b/commercial measures/SWXX111-00 Example_SEER_AC/SWXX111-00 Example_SEER_AC_Ex/climates.csv @@ -1,17 +1,17 @@ skip,climate,weather_file,climate_zone,codes_file -,CZ01,CA_EUREKA_725940S_CZ2022.epw,1,T24_weight_averaged_ex.csv +#,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 +#,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/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_DMo/cases/DMo&0&rDXGF&Ex&dxAC_equip.csv b/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_DMo/cases/DMo&0&rDXGF&Ex&dxAC_equip.csv index a8f3200c..2ad4f4f4 100644 --- a/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_DMo/cases/DMo&0&rDXGF&Ex&dxAC_equip.csv +++ b/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_DMo/cases/DMo&0&rDXGF&Ex&dxAC_equip.csv @@ -1,11 +1,11 @@ skip,case_name,:vfd_curve_name,:supplyfan_total_eff,:motor_eff,:cooling_coil_cop,:cooling_coil_cop2,:coil_type,:hvac_type ,dxAC-Res-SEER-13.0,,0.12,0.24,3.23,,,unitary_system -,dxAC-Res-SEER-14.0,,0.12,0.24,3.23,,,unitary_system -,dxAC-Res-SEER-14.5,,0.12,0.24,3.43,,,unitary_system -,dxAC-Res-SEER-15.0,,0.12,0.24,3.58,,,unitary_system +#,dxAC-Res-SEER-14.0,,0.12,0.24,3.23,,,unitary_system +#,dxAC-Res-SEER-14.5,,0.12,0.24,3.43,,,unitary_system +#,dxAC-Res-SEER-15.0,,0.12,0.24,3.58,,,unitary_system ,dxAC-Res-SEER-16.0,VFD_Fan_Curve,0.25,0.5,3.58,3.75,multispeed,unitary_system -,dxAC-Res-SEER-17.0,VFD_Fan_Curve,0.25,0.5,3.58,3.89,multispeed,unitary_system -,dxAC-Res-SEER-18.0,VFD_Fan_Curve,0.25,0.5,3.58,4.01,multispeed,unitary_system -,dxAC-Res-SEER-19.0,VFD_Fan_Curve,0.25,0.5,3.72,4.12,multispeed,unitary_system -,dxAC-Res-SEER-20.0,VFD_Fan_Curve,0.25,0.5,3.82,4.22,multispeed,unitary_system -,dxAC-Res-SEER-21.0,VFD_Fan_Curve,0.25,0.5,3.94,4.31,multispeed,unitary_system +#,dxAC-Res-SEER-17.0,VFD_Fan_Curve,0.25,0.5,3.58,3.89,multispeed,unitary_system +#,dxAC-Res-SEER-18.0,VFD_Fan_Curve,0.25,0.5,3.58,4.01,multispeed,unitary_system +#,dxAC-Res-SEER-19.0,VFD_Fan_Curve,0.25,0.5,3.72,4.12,multispeed,unitary_system +#,dxAC-Res-SEER-20.0,VFD_Fan_Curve,0.25,0.5,3.82,4.22,multispeed,unitary_system +#,dxAC-Res-SEER-21.0,VFD_Fan_Curve,0.25,0.5,3.94,4.31,multispeed,unitary_system diff --git a/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_DMo/cases/DMo&0&rDXHP&Ex&dxHP_equip.csv b/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_DMo/cases/DMo&0&rDXHP&Ex&dxHP_equip.csv index 137c764c..b624de60 100644 --- a/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_DMo/cases/DMo&0&rDXHP&Ex&dxHP_equip.csv +++ b/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_DMo/cases/DMo&0&rDXHP&Ex&dxHP_equip.csv @@ -1,11 +1,11 @@ skip,case_name,:vfd_curve_name,:supplyfan_total_eff,:motor_eff,:cooling_coil_cop,:cooling_coil_cop2,:coil_type,:hvac_type,:heating_coil_cop ,HSPF_7p0_SEER_13_Pre,,0.12,0.24,3.23,,,unitary_system,2.05 -,HSPF_8p0_SEER_14_Std,,0.12,0.24,3.23,,,unitary_system,2.34 -,HSPF_8p2_SEER_14.5_Std,,0.12,0.24,3.43,,,unitary_system,2.4 -,HSPF_8p8_SEER_15_Std,,0.12,0.24,3.58,,,unitary_system,2.58 +#,HSPF_8p0_SEER_14_Std,,0.12,0.24,3.23,,,unitary_system,2.34 +#,HSPF_8p2_SEER_14.5_Std,,0.12,0.24,3.43,,,unitary_system,2.4 +#,HSPF_8p8_SEER_15_Std,,0.12,0.24,3.58,,,unitary_system,2.58 ,HSPF_9p0_SEER_16_Msr,VFD_Fan_Curve,0.25,0.5,3.58,3.75,multispeed,unitary_system,2.64 -,HSPF_9p4_SEER_17_Msr,VFD_Fan_Curve,0.25,0.5,3.58,3.89,multispeed,unitary_system,2.75 -,HSPF_9p5_SEER_18_Msr,VFD_Fan_Curve,0.25,0.5,3.58,4.01,multispeed,unitary_system,2.79 -,HSPF_9p5_SEER_19_Msr,VFD_Fan_Curve,0.25,0.5,3.72,4.12,multispeed,unitary_system,2.79 -,HSPF_10p0_SEER_20_Msr,VFD_Fan_Curve,0.25,0.5,3.82,4.22,multispeed,unitary_system,2.92 -,HSPF_10p5_SEER_21_Msr,VFD_Fan_Curve,0.25,0.5,3.94,4.31,multispeed,unitary_system,3.09 +#,HSPF_9p4_SEER_17_Msr,VFD_Fan_Curve,0.25,0.5,3.58,3.89,multispeed,unitary_system,2.75 +#,HSPF_9p5_SEER_18_Msr,VFD_Fan_Curve,0.25,0.5,3.58,4.01,multispeed,unitary_system,2.79 +#,HSPF_9p5_SEER_19_Msr,VFD_Fan_Curve,0.25,0.5,3.72,4.12,multispeed,unitary_system,2.79 +#,HSPF_10p0_SEER_20_Msr,VFD_Fan_Curve,0.25,0.5,3.82,4.22,multispeed,unitary_system,2.92 +#,HSPF_10p5_SEER_21_Msr,VFD_Fan_Curve,0.25,0.5,3.94,4.31,multispeed,unitary_system,3.09 diff --git a/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_DMo/climates.csv b/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_DMo/climates.csv index 3ed71738..6dabae43 100644 --- a/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_DMo/climates.csv +++ b/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_DMo/climates.csv @@ -1,17 +1,17 @@ skip,climate,hz_cz,weather_file,climate_zone,codes_file -,CZ01,,CA_EUREKA_725940S_CZ2022.epw,1,deer-dmo-1972-1985.csv +#,CZ01,,CA_EUREKA_725940S_CZ2022.epw,1,deer-dmo-1972-1985.csv ,CZ02,,CA_NAPA-CO_724955S_CZ2022.epw,2,deer-dmo-1972-1985.csv ,CZ03,,CA_OAKLAND-METRO-AP_724930S_CZ2022.epw,3,deer-dmo-1972-1985.csv -,CZ04,,CA_SAN-JOSE-IAP_724945S_CZ2022.epw,4,deer-dmo-1972-1985.csv -,CZ05,,CA_SANTA-MARIA-PUBLIC-AP_723940S_CZ2022.epw,5,deer-dmo-1972-1985.csv -,CZ06,,CA_LOS-ANGELES-IAP_722950S_CZ2022.epw,6,deer-dmo-1972-1985.csv -,CZ07,,CA_SAN-DIEGO-LINDBERGH-FLD_722900S_CZ2022.epw,7,deer-dmo-1972-1985.csv -,CZ08,,CA_LONG-BEACH-DAUGHERTY-FLD_722970S_CZ2022.epw,8,deer-dmo-1972-1985.csv -,CZ09,,CA_LOS-ANGELES-DOWNTOWN-USC_722874S_CZ2022.epw,9,deer-dmo-1972-1985.csv -,CZ10,,CA_RIVERSIDE-MUNI_722869S_CZ2022.epw,10,deer-dmo-1972-1985.csv -,CZ11,,CA_RED-BLUFF-MUNI-AP_725910S_CZ2022.epw,11,deer-dmo-1972-1985.csv -,CZ12,,CA_STOCKTON-METRO-AP_724920S_CZ2022.epw,12,deer-dmo-1972-1985.csv -,CZ13,,CA_FRESNO-YOSEMITE-IAP_723890S_CZ2022.epw,13,deer-dmo-1972-1985.csv -,CZ14,,CA_DAGGETT-BARSTOW-AP_723815S_CZ2022.epw,14,deer-dmo-1972-1985.csv -,CZ15,,CA_EL-CENTRO-NAF_722810S_CZ2022.epw,15,deer-dmo-1972-1985.csv -,CZ16,,CA_BISHOP-AP_724800S_CZ2022.epw,16,deer-dmo-1972-1985.csv +#,CZ04,,CA_SAN-JOSE-IAP_724945S_CZ2022.epw,4,deer-dmo-1972-1985.csv +#,CZ05,,CA_SANTA-MARIA-PUBLIC-AP_723940S_CZ2022.epw,5,deer-dmo-1972-1985.csv +#,CZ06,,CA_LOS-ANGELES-IAP_722950S_CZ2022.epw,6,deer-dmo-1972-1985.csv +#,CZ07,,CA_SAN-DIEGO-LINDBERGH-FLD_722900S_CZ2022.epw,7,deer-dmo-1972-1985.csv +#,CZ08,,CA_LONG-BEACH-DAUGHERTY-FLD_722970S_CZ2022.epw,8,deer-dmo-1972-1985.csv +#,CZ09,,CA_LOS-ANGELES-DOWNTOWN-USC_722874S_CZ2022.epw,9,deer-dmo-1972-1985.csv +#,CZ10,,CA_RIVERSIDE-MUNI_722869S_CZ2022.epw,10,deer-dmo-1972-1985.csv +#,CZ11,,CA_RED-BLUFF-MUNI-AP_725910S_CZ2022.epw,11,deer-dmo-1972-1985.csv +#,CZ12,,CA_STOCKTON-METRO-AP_724920S_CZ2022.epw,12,deer-dmo-1972-1985.csv +#,CZ13,,CA_FRESNO-YOSEMITE-IAP_723890S_CZ2022.epw,13,deer-dmo-1972-1985.csv +#,CZ14,,CA_DAGGETT-BARSTOW-AP_723815S_CZ2022.epw,14,deer-dmo-1972-1985.csv +#,CZ15,,CA_EL-CENTRO-NAF_722810S_CZ2022.epw,15,deer-dmo-1972-1985.csv +#,CZ16,,CA_BISHOP-AP_724800S_CZ2022.epw,16,deer-dmo-1972-1985.csv diff --git a/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_DMo/cohorts.csv b/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_DMo/cohorts.csv index 4483d33e..25b3097c 100644 --- a/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_DMo/cohorts.csv +++ b/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_DMo/cohorts.csv @@ -1,5 +1,5 @@ skip,cohort,root,:wall_consol_layer_thickness,:wall_consol_layer_conductivity,:floor_consol_layer_thickness,:floor_consol_layer_conductivity,:ceil_consol_layer_thickness,:ceil_consol_layer_conductivity,:door_thermal_resistance,:climate_zone,:infiltration_ACH,:shading_control,:cool_coil_capacity,:heating_coil_capacity ,DMo&0&rDXGF&Ex&dxAC_equip,DMo/templates/root.pxt,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""wall_consol_layer_thickness"", ""Value"")['m']","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""wall_consol_layer_conductivity"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""floor_consol_layer_thickness"", ""Value"")['m']",,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""ceil_consol_layer_thickness"", ""Value"")['m']","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""ceil_consol_layer_conductivity"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""door_thermal_resistance"", ""R-Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""climate_zone"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""Infiltration"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""shading_control"", ""Value"")",, ,DMo&0&rDXHP&Ex&dxHP_equip,Dmo-HP/templates/root.pxt,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""wall_consol_layer_thickness"", ""Value"")['m']","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""wall_consol_layer_conductivity"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""floor_consol_layer_thickness"", ""Value"")['m']",,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""ceil_consol_layer_thickness"", ""Value"")['m']","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""ceil_consol_layer_conductivity"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""door_thermal_resistance"", ""R-Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""climate_zone"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""Infiltration"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""shading_control"", ""Value"")",, -,DMo&0&rDXGF&New&dxAC_equip,Dmo-DXGF-New/templates/root.pxt,,,,,,,,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""climate_zone"", ""Value"")",,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""shading_control"", ""Value"")",, -,DMo&0&rDXHP&New&dxHP_equip,Dmo-HP-New/templates/root.pxt,,,,,,,,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""climate_zone"", ""Value"")",,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""shading_control"", ""Value"")",, +#,DMo&0&rDXGF&New&dxAC_equip,Dmo-DXGF-New/templates/root.pxt,,,,,,,,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""climate_zone"", ""Value"")",,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""shading_control"", ""Value"")",, +#,DMo&0&rDXHP&New&dxHP_equip,Dmo-HP-New/templates/root.pxt,,,,,,,,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""climate_zone"", ""Value"")",,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""shading_control"", ""Value"")",, diff --git a/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_MFm_Ex/cases/MFm&0&rDXHP&Ex&dxHP_equip.csv b/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_MFm_Ex/cases/MFm&0&rDXHP&Ex&dxHP_equip.csv index 137c764c..4e2fd101 100644 --- a/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_MFm_Ex/cases/MFm&0&rDXHP&Ex&dxHP_equip.csv +++ b/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_MFm_Ex/cases/MFm&0&rDXHP&Ex&dxHP_equip.csv @@ -1,11 +1,11 @@ skip,case_name,:vfd_curve_name,:supplyfan_total_eff,:motor_eff,:cooling_coil_cop,:cooling_coil_cop2,:coil_type,:hvac_type,:heating_coil_cop ,HSPF_7p0_SEER_13_Pre,,0.12,0.24,3.23,,,unitary_system,2.05 -,HSPF_8p0_SEER_14_Std,,0.12,0.24,3.23,,,unitary_system,2.34 -,HSPF_8p2_SEER_14.5_Std,,0.12,0.24,3.43,,,unitary_system,2.4 +#,HSPF_8p0_SEER_14_Std,,0.12,0.24,3.23,,,unitary_system,2.34 +#,HSPF_8p2_SEER_14.5_Std,,0.12,0.24,3.43,,,unitary_system,2.4 ,HSPF_8p8_SEER_15_Std,,0.12,0.24,3.58,,,unitary_system,2.58 ,HSPF_9p0_SEER_16_Msr,VFD_Fan_Curve,0.25,0.5,3.58,3.75,multispeed,unitary_system,2.64 -,HSPF_9p4_SEER_17_Msr,VFD_Fan_Curve,0.25,0.5,3.58,3.89,multispeed,unitary_system,2.75 -,HSPF_9p5_SEER_18_Msr,VFD_Fan_Curve,0.25,0.5,3.58,4.01,multispeed,unitary_system,2.79 -,HSPF_9p5_SEER_19_Msr,VFD_Fan_Curve,0.25,0.5,3.72,4.12,multispeed,unitary_system,2.79 -,HSPF_10p0_SEER_20_Msr,VFD_Fan_Curve,0.25,0.5,3.82,4.22,multispeed,unitary_system,2.92 -,HSPF_10p5_SEER_21_Msr,VFD_Fan_Curve,0.25,0.5,3.94,4.31,multispeed,unitary_system,3.09 +#,HSPF_9p4_SEER_17_Msr,VFD_Fan_Curve,0.25,0.5,3.58,3.89,multispeed,unitary_system,2.75 +#,HSPF_9p5_SEER_18_Msr,VFD_Fan_Curve,0.25,0.5,3.58,4.01,multispeed,unitary_system,2.79 +#,HSPF_9p5_SEER_19_Msr,VFD_Fan_Curve,0.25,0.5,3.72,4.12,multispeed,unitary_system,2.79 +#,HSPF_10p0_SEER_20_Msr,VFD_Fan_Curve,0.25,0.5,3.82,4.22,multispeed,unitary_system,2.92 +#,HSPF_10p5_SEER_21_Msr,VFD_Fan_Curve,0.25,0.5,3.94,4.31,multispeed,unitary_system,3.09 diff --git a/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_MFm_Ex/climates.csv b/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_MFm_Ex/climates.csv index d7a1be52..ddd51782 100644 --- a/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_MFm_Ex/climates.csv +++ b/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_MFm_Ex/climates.csv @@ -1,17 +1,17 @@ skip,climate,hz_cz,weather_file,climate_zone,codes_file -,CZ01,,CA_EUREKA_725940S_CZ2022.epw,1,deer-mfm-1985.csv +#,CZ01,,CA_EUREKA_725940S_CZ2022.epw,1,deer-mfm-1985.csv ,CZ02,,CA_NAPA-CO_724955S_CZ2022.epw,2,deer-mfm-1985.csv ,CZ03,,CA_OAKLAND-METRO-AP_724930S_CZ2022.epw,3,deer-mfm-1985.csv ,CZ04,,CA_SAN-JOSE-IAP_724945S_CZ2022.epw,4,deer-mfm-1985.csv -,CZ05,,CA_SANTA-MARIA-PUBLIC-AP_723940S_CZ2022.epw,5,deer-mfm-1985.csv -,CZ06,,CA_LOS-ANGELES-IAP_722950S_CZ2022.epw,6,deer-mfm-1985.csv -,CZ07,,CA_SAN-DIEGO-LINDBERGH-FLD_722900S_CZ2022.epw,7,deer-mfm-1985.csv -,CZ08,,CA_LONG-BEACH-DAUGHERTY-FLD_722970S_CZ2022.epw,8,deer-mfm-1985.csv -,CZ09,,CA_LOS-ANGELES-DOWNTOWN-USC_722874S_CZ2022.epw,9,deer-mfm-1985.csv -,CZ10,,CA_RIVERSIDE-MUNI_722869S_CZ2022.epw,10,deer-mfm-1985.csv -,CZ11,,CA_RED-BLUFF-MUNI-AP_725910S_CZ2022.epw,11,deer-mfm-1985.csv -,CZ12,,CA_STOCKTON-METRO-AP_724920S_CZ2022.epw,12,deer-mfm-1985.csv -,CZ13,,CA_FRESNO-YOSEMITE-IAP_723890S_CZ2022.epw,13,deer-mfm-1985.csv -,CZ14,,CA_DAGGETT-BARSTOW-AP_723815S_CZ2022.epw,14,deer-mfm-1985.csv -,CZ15,,CA_EL-CENTRO-NAF_722810S_CZ2022.epw,15,deer-mfm-1985.csv -,CZ16,,CA_BISHOP-AP_724800S_CZ2022.epw,16,deer-mfm-1985.csv +#,CZ05,,CA_SANTA-MARIA-PUBLIC-AP_723940S_CZ2022.epw,5,deer-mfm-1985.csv +#,CZ06,,CA_LOS-ANGELES-IAP_722950S_CZ2022.epw,6,deer-mfm-1985.csv +#,CZ07,,CA_SAN-DIEGO-LINDBERGH-FLD_722900S_CZ2022.epw,7,deer-mfm-1985.csv +#,CZ08,,CA_LONG-BEACH-DAUGHERTY-FLD_722970S_CZ2022.epw,8,deer-mfm-1985.csv +#,CZ09,,CA_LOS-ANGELES-DOWNTOWN-USC_722874S_CZ2022.epw,9,deer-mfm-1985.csv +#,CZ10,,CA_RIVERSIDE-MUNI_722869S_CZ2022.epw,10,deer-mfm-1985.csv +#,CZ11,,CA_RED-BLUFF-MUNI-AP_725910S_CZ2022.epw,11,deer-mfm-1985.csv +#,CZ12,,CA_STOCKTON-METRO-AP_724920S_CZ2022.epw,12,deer-mfm-1985.csv +#,CZ13,,CA_FRESNO-YOSEMITE-IAP_723890S_CZ2022.epw,13,deer-mfm-1985.csv +#,CZ14,,CA_DAGGETT-BARSTOW-AP_723815S_CZ2022.epw,14,deer-mfm-1985.csv +#,CZ15,,CA_EL-CENTRO-NAF_722810S_CZ2022.epw,15,deer-mfm-1985.csv +#,CZ16,,CA_BISHOP-AP_724800S_CZ2022.epw,16,deer-mfm-1985.csv diff --git a/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_MFm_Ex/cohorts.csv b/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_MFm_Ex/cohorts.csv index 301b00b0..db53ecf5 100644 --- a/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_MFm_Ex/cohorts.csv +++ b/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_MFm_Ex/cohorts.csv @@ -1,3 +1,3 @@ skip,cohort,root,:glass_u,:glass_shgc,:wall_consol_layer_thickness,:wall_consol_layer_conductivity,:ceil_consol_layer_thickness,:ceil_consol_layer_conductivity,:heating_sch_DEER_mrn,:heating_sch_DEER_day,:heating_sch_DEER_eve,:heating_sch_DEER_nit,:cooling_sch_DEER_mrn,:cooling_sch_DEER_day,:cooling_sch_DEER_eve,:cooling_sch_DEER_nit,:climate_zone,:infiltration_ACH,:total_leakage_ratio,:shading_control -,MFm&0&rDXGF&Ex&dxAC_equip,MFm-1985/templates/root_highSEER.pxt,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""Vertical Fenestration U-Factor"", ""Value"")['U-IP']","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""Vertical Fenestration SHGC"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""wall_consol_layer_thickness"", ""Value"")['m']","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""wall_consol_layer_conductivity"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""ceil_consol_layer_thickness"", ""Value"")['m']","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""ceil_consol_layer_conductivity"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_mrn"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_day"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_eve"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_nit"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_mrn"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_day"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_eve"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_nit"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""climate_zone"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""Infiltration"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""total_leakage_ratio"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""shading_control"", ""Value"")" +#,MFm&0&rDXGF&Ex&dxAC_equip,MFm-1985/templates/root_highSEER.pxt,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""Vertical Fenestration U-Factor"", ""Value"")['U-IP']","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""Vertical Fenestration SHGC"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""wall_consol_layer_thickness"", ""Value"")['m']","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""wall_consol_layer_conductivity"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""ceil_consol_layer_thickness"", ""Value"")['m']","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""ceil_consol_layer_conductivity"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_mrn"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_day"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_eve"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_nit"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_mrn"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_day"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_eve"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_nit"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""climate_zone"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""Infiltration"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""total_leakage_ratio"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""shading_control"", ""Value"")" ,MFm&0&rDXHP&Ex&dxHP_equip,MFm-1985-HP/templates/root.pxt,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""Vertical Fenestration U-Factor"", ""Value"")['U-IP']","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""Vertical Fenestration SHGC"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""wall_consol_layer_thickness"", ""Value"")['m']","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""wall_consol_layer_conductivity"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""ceil_consol_layer_thickness"", ""Value"")['m']","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""ceil_consol_layer_conductivity"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_mrn"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_day"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_eve"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_nit"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_mrn"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_day"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_eve"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_nit"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""climate_zone"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""Infiltration"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""total_leakage_ratio"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""shading_control"", ""Value"")" diff --git a/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_SFm_1975/cases/SFm&1&rDXHP&Ex&dxHP_equip.csv b/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_SFm_1975/cases/SFm&1&rDXHP&Ex&dxHP_equip.csv index 137c764c..4e2fd101 100644 --- a/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_SFm_1975/cases/SFm&1&rDXHP&Ex&dxHP_equip.csv +++ b/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_SFm_1975/cases/SFm&1&rDXHP&Ex&dxHP_equip.csv @@ -1,11 +1,11 @@ skip,case_name,:vfd_curve_name,:supplyfan_total_eff,:motor_eff,:cooling_coil_cop,:cooling_coil_cop2,:coil_type,:hvac_type,:heating_coil_cop ,HSPF_7p0_SEER_13_Pre,,0.12,0.24,3.23,,,unitary_system,2.05 -,HSPF_8p0_SEER_14_Std,,0.12,0.24,3.23,,,unitary_system,2.34 -,HSPF_8p2_SEER_14.5_Std,,0.12,0.24,3.43,,,unitary_system,2.4 +#,HSPF_8p0_SEER_14_Std,,0.12,0.24,3.23,,,unitary_system,2.34 +#,HSPF_8p2_SEER_14.5_Std,,0.12,0.24,3.43,,,unitary_system,2.4 ,HSPF_8p8_SEER_15_Std,,0.12,0.24,3.58,,,unitary_system,2.58 ,HSPF_9p0_SEER_16_Msr,VFD_Fan_Curve,0.25,0.5,3.58,3.75,multispeed,unitary_system,2.64 -,HSPF_9p4_SEER_17_Msr,VFD_Fan_Curve,0.25,0.5,3.58,3.89,multispeed,unitary_system,2.75 -,HSPF_9p5_SEER_18_Msr,VFD_Fan_Curve,0.25,0.5,3.58,4.01,multispeed,unitary_system,2.79 -,HSPF_9p5_SEER_19_Msr,VFD_Fan_Curve,0.25,0.5,3.72,4.12,multispeed,unitary_system,2.79 -,HSPF_10p0_SEER_20_Msr,VFD_Fan_Curve,0.25,0.5,3.82,4.22,multispeed,unitary_system,2.92 -,HSPF_10p5_SEER_21_Msr,VFD_Fan_Curve,0.25,0.5,3.94,4.31,multispeed,unitary_system,3.09 +#,HSPF_9p4_SEER_17_Msr,VFD_Fan_Curve,0.25,0.5,3.58,3.89,multispeed,unitary_system,2.75 +#,HSPF_9p5_SEER_18_Msr,VFD_Fan_Curve,0.25,0.5,3.58,4.01,multispeed,unitary_system,2.79 +#,HSPF_9p5_SEER_19_Msr,VFD_Fan_Curve,0.25,0.5,3.72,4.12,multispeed,unitary_system,2.79 +#,HSPF_10p0_SEER_20_Msr,VFD_Fan_Curve,0.25,0.5,3.82,4.22,multispeed,unitary_system,2.92 +#,HSPF_10p5_SEER_21_Msr,VFD_Fan_Curve,0.25,0.5,3.94,4.31,multispeed,unitary_system,3.09 diff --git a/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_SFm_1975/cases/SFm&2&rDXHP&Ex&dxHP_equip.csv b/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_SFm_1975/cases/SFm&2&rDXHP&Ex&dxHP_equip.csv index 137c764c..4e2fd101 100644 --- a/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_SFm_1975/cases/SFm&2&rDXHP&Ex&dxHP_equip.csv +++ b/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_SFm_1975/cases/SFm&2&rDXHP&Ex&dxHP_equip.csv @@ -1,11 +1,11 @@ skip,case_name,:vfd_curve_name,:supplyfan_total_eff,:motor_eff,:cooling_coil_cop,:cooling_coil_cop2,:coil_type,:hvac_type,:heating_coil_cop ,HSPF_7p0_SEER_13_Pre,,0.12,0.24,3.23,,,unitary_system,2.05 -,HSPF_8p0_SEER_14_Std,,0.12,0.24,3.23,,,unitary_system,2.34 -,HSPF_8p2_SEER_14.5_Std,,0.12,0.24,3.43,,,unitary_system,2.4 +#,HSPF_8p0_SEER_14_Std,,0.12,0.24,3.23,,,unitary_system,2.34 +#,HSPF_8p2_SEER_14.5_Std,,0.12,0.24,3.43,,,unitary_system,2.4 ,HSPF_8p8_SEER_15_Std,,0.12,0.24,3.58,,,unitary_system,2.58 ,HSPF_9p0_SEER_16_Msr,VFD_Fan_Curve,0.25,0.5,3.58,3.75,multispeed,unitary_system,2.64 -,HSPF_9p4_SEER_17_Msr,VFD_Fan_Curve,0.25,0.5,3.58,3.89,multispeed,unitary_system,2.75 -,HSPF_9p5_SEER_18_Msr,VFD_Fan_Curve,0.25,0.5,3.58,4.01,multispeed,unitary_system,2.79 -,HSPF_9p5_SEER_19_Msr,VFD_Fan_Curve,0.25,0.5,3.72,4.12,multispeed,unitary_system,2.79 -,HSPF_10p0_SEER_20_Msr,VFD_Fan_Curve,0.25,0.5,3.82,4.22,multispeed,unitary_system,2.92 -,HSPF_10p5_SEER_21_Msr,VFD_Fan_Curve,0.25,0.5,3.94,4.31,multispeed,unitary_system,3.09 +#,HSPF_9p4_SEER_17_Msr,VFD_Fan_Curve,0.25,0.5,3.58,3.89,multispeed,unitary_system,2.75 +#,HSPF_9p5_SEER_18_Msr,VFD_Fan_Curve,0.25,0.5,3.58,4.01,multispeed,unitary_system,2.79 +#,HSPF_9p5_SEER_19_Msr,VFD_Fan_Curve,0.25,0.5,3.72,4.12,multispeed,unitary_system,2.79 +#,HSPF_10p0_SEER_20_Msr,VFD_Fan_Curve,0.25,0.5,3.82,4.22,multispeed,unitary_system,2.92 +#,HSPF_10p5_SEER_21_Msr,VFD_Fan_Curve,0.25,0.5,3.94,4.31,multispeed,unitary_system,3.09 diff --git a/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_SFm_1975/climates.csv b/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_SFm_1975/climates.csv index 9b41ce07..03329c98 100644 --- a/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_SFm_1975/climates.csv +++ b/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_SFm_1975/climates.csv @@ -1,10 +1,10 @@ skip,climate,hz_cz,weather_file,climate_zone,codes_file -,CZ01,,CA_EUREKA_725940S_CZ2022.epw,1,deer-sfm-1975-1985.csv -,CZ02,,CA_NAPA-CO_724955S_CZ2022.epw,2,deer-sfm-1975-1985.csv -,CZ03,,CA_OAKLAND-METRO-AP_724930S_CZ2022.epw,3,deer-sfm-1975-1985.csv -,CZ04,,CA_SAN-JOSE-IAP_724945S_CZ2022.epw,4,deer-sfm-1975-1985.csv -,CZ05,,CA_SANTA-MARIA-PUBLIC-AP_723940S_CZ2022.epw,5,deer-sfm-1975-1985.csv -,CZ06,,CA_LOS-ANGELES-IAP_722950S_CZ2022.epw,6,deer-sfm-1975-1985.csv -,CZ07,,CA_SAN-DIEGO-LINDBERGH-FLD_722900S_CZ2022.epw,7,deer-sfm-1975-1985.csv +#,CZ01,,CA_EUREKA_725940S_CZ2022.epw,1,deer-sfm-1975-1985.csv +#,CZ02,,CA_NAPA-CO_724955S_CZ2022.epw,2,deer-sfm-1975-1985.csv +#,CZ03,,CA_OAKLAND-METRO-AP_724930S_CZ2022.epw,3,deer-sfm-1975-1985.csv +#,CZ04,,CA_SAN-JOSE-IAP_724945S_CZ2022.epw,4,deer-sfm-1975-1985.csv +#,CZ05,,CA_SANTA-MARIA-PUBLIC-AP_723940S_CZ2022.epw,5,deer-sfm-1975-1985.csv +#,CZ06,,CA_LOS-ANGELES-IAP_722950S_CZ2022.epw,6,deer-sfm-1975-1985.csv +#,CZ07,,CA_SAN-DIEGO-LINDBERGH-FLD_722900S_CZ2022.epw,7,deer-sfm-1975-1985.csv ,CZ08,,CA_LONG-BEACH-DAUGHERTY-FLD_722970S_CZ2022.epw,8,deer-sfm-1975-1985.csv ,CZ09,,CA_LOS-ANGELES-DOWNTOWN-USC_722874S_CZ2022.epw,9,deer-sfm-1975-1985.csv diff --git a/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_SFm_1975/cohorts.csv b/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_SFm_1975/cohorts.csv index 339adc8f..b50644d7 100644 --- a/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_SFm_1975/cohorts.csv +++ b/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_SFm_1975/cohorts.csv @@ -1,5 +1,5 @@ skip,cohort,root,:glass_u,:glass_shgc,:sheathing_consol_layer_thickness,:sheathing_consol_layer_conductivity,:wall_consol_layer_thickness,:wall_consol_layer_conductivity,:floor_consol_layer_thickness,:floor_consol_layer_conductivity,:ceil_consol_layer_thickness,:ceil_consol_layer_conductivity,:heating_sch_DEER_mrn,:heating_sch_DEER_day,:heating_sch_DEER_eve,:heating_sch_DEER_nit,:cooling_sch_DEER_mrn,:cooling_sch_DEER_day,:cooling_sch_DEER_eve,:cooling_sch_DEER_nit,:climate_zone,:infiltration_ACH,:total_leakage_ratio,:shading_control,:floor_abv_crawl_insulation ,SFm&1&rDXHP&Ex&dxHP_equip,SFm-1 Story-1975-HP/templates/root.pxt,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""Vertical Fenestration U-Factor"", ""Value"")['U-IP']","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""Vertical Fenestration SHGC"", ""Value"")",,,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""wall_consol_layer_thickness"", ""Value"")['m']","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""wall_consol_layer_conductivity"", ""Value"")",,,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""ceil_consol_layer_thickness"", ""Value"")['m']","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""ceil_consol_layer_conductivity"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_mrn"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_day"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_eve"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_nit"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_mrn"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_day"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_eve"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_nit"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""climate_zone"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""Infiltration"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""total_leakage_ratio"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""shading_control"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""floor_abv_crawl_insulation"", ""Value"")" ,SFm&2&rDXHP&Ex&dxHP_equip,SFm-2 Story-1975-HP/templates/root.pxt,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""Vertical Fenestration U-Factor"", ""Value"")['U-IP']","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""Vertical Fenestration SHGC"", ""Value"")",,,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""wall_consol_layer_thickness"", ""Value"")['m']","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""wall_consol_layer_conductivity"", ""Value"")",,,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""ceil_consol_layer_thickness"", ""Value"")['m']","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""ceil_consol_layer_conductivity"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_mrn"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_day"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_eve"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_nit"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_mrn"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_day"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_eve"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_nit"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""climate_zone"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""Infiltration"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""total_leakage_ratio"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""shading_control"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""floor_abv_crawl_insulation"", ""Value"")" -,SFm&1&rDXGF&Ex&dxAC_equip,SFm-1 Story-1975/templates/root.pxt,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""Vertical Fenestration U-Factor"", ""Value"")['U-IP']","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""Vertical Fenestration SHGC"", ""Value"")",,,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""wall_consol_layer_thickness"", ""Value"")['m']","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""wall_consol_layer_conductivity"", ""Value"")",,,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""ceil_consol_layer_thickness"", ""Value"")['m']","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""ceil_consol_layer_conductivity"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_mrn"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_day"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_eve"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_nit"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_mrn"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_day"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_eve"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_nit"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""climate_zone"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""Infiltration"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""total_leakage_ratio"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""shading_control"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""floor_abv_crawl_insulation"", ""Value"")" -,SFm&2&rDXGF&Ex&dxAC_equip,SFm-2 Story-1975/templates/root.pxt,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""Vertical Fenestration U-Factor"", ""Value"")['U-IP']","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""Vertical Fenestration SHGC"", ""Value"")",,,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""wall_consol_layer_thickness"", ""Value"")['m']","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""wall_consol_layer_conductivity"", ""Value"")",,,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""ceil_consol_layer_thickness"", ""Value"")['m']","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""ceil_consol_layer_conductivity"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_mrn"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_day"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_eve"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_nit"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_mrn"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_day"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_eve"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_nit"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""climate_zone"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""Infiltration"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""total_leakage_ratio"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""shading_control"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""floor_abv_crawl_insulation"", ""Value"")" +#,SFm&1&rDXGF&Ex&dxAC_equip,SFm-1 Story-1975/templates/root.pxt,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""Vertical Fenestration U-Factor"", ""Value"")['U-IP']","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""Vertical Fenestration SHGC"", ""Value"")",,,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""wall_consol_layer_thickness"", ""Value"")['m']","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""wall_consol_layer_conductivity"", ""Value"")",,,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""ceil_consol_layer_thickness"", ""Value"")['m']","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""ceil_consol_layer_conductivity"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_mrn"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_day"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_eve"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_nit"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_mrn"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_day"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_eve"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_nit"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""climate_zone"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""Infiltration"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""total_leakage_ratio"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""shading_control"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""floor_abv_crawl_insulation"", ""Value"")" +#,SFm&2&rDXGF&Ex&dxAC_equip,SFm-2 Story-1975/templates/root.pxt,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""Vertical Fenestration U-Factor"", ""Value"")['U-IP']","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""Vertical Fenestration SHGC"", ""Value"")",,,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""wall_consol_layer_thickness"", ""Value"")['m']","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""wall_consol_layer_conductivity"", ""Value"")",,,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""ceil_consol_layer_thickness"", ""Value"")['m']","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""ceil_consol_layer_conductivity"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_mrn"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_day"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_eve"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_nit"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_mrn"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_day"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_eve"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_nit"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""climate_zone"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""Infiltration"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""total_leakage_ratio"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""shading_control"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""floor_abv_crawl_insulation"", ""Value"")" diff --git a/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_SFm_1985/cases/SFm&1&rDXHP&Ex&dxHP_equip.csv b/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_SFm_1985/cases/SFm&1&rDXHP&Ex&dxHP_equip.csv index 137c764c..4e2fd101 100644 --- a/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_SFm_1985/cases/SFm&1&rDXHP&Ex&dxHP_equip.csv +++ b/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_SFm_1985/cases/SFm&1&rDXHP&Ex&dxHP_equip.csv @@ -1,11 +1,11 @@ skip,case_name,:vfd_curve_name,:supplyfan_total_eff,:motor_eff,:cooling_coil_cop,:cooling_coil_cop2,:coil_type,:hvac_type,:heating_coil_cop ,HSPF_7p0_SEER_13_Pre,,0.12,0.24,3.23,,,unitary_system,2.05 -,HSPF_8p0_SEER_14_Std,,0.12,0.24,3.23,,,unitary_system,2.34 -,HSPF_8p2_SEER_14.5_Std,,0.12,0.24,3.43,,,unitary_system,2.4 +#,HSPF_8p0_SEER_14_Std,,0.12,0.24,3.23,,,unitary_system,2.34 +#,HSPF_8p2_SEER_14.5_Std,,0.12,0.24,3.43,,,unitary_system,2.4 ,HSPF_8p8_SEER_15_Std,,0.12,0.24,3.58,,,unitary_system,2.58 ,HSPF_9p0_SEER_16_Msr,VFD_Fan_Curve,0.25,0.5,3.58,3.75,multispeed,unitary_system,2.64 -,HSPF_9p4_SEER_17_Msr,VFD_Fan_Curve,0.25,0.5,3.58,3.89,multispeed,unitary_system,2.75 -,HSPF_9p5_SEER_18_Msr,VFD_Fan_Curve,0.25,0.5,3.58,4.01,multispeed,unitary_system,2.79 -,HSPF_9p5_SEER_19_Msr,VFD_Fan_Curve,0.25,0.5,3.72,4.12,multispeed,unitary_system,2.79 -,HSPF_10p0_SEER_20_Msr,VFD_Fan_Curve,0.25,0.5,3.82,4.22,multispeed,unitary_system,2.92 -,HSPF_10p5_SEER_21_Msr,VFD_Fan_Curve,0.25,0.5,3.94,4.31,multispeed,unitary_system,3.09 +#,HSPF_9p4_SEER_17_Msr,VFD_Fan_Curve,0.25,0.5,3.58,3.89,multispeed,unitary_system,2.75 +#,HSPF_9p5_SEER_18_Msr,VFD_Fan_Curve,0.25,0.5,3.58,4.01,multispeed,unitary_system,2.79 +#,HSPF_9p5_SEER_19_Msr,VFD_Fan_Curve,0.25,0.5,3.72,4.12,multispeed,unitary_system,2.79 +#,HSPF_10p0_SEER_20_Msr,VFD_Fan_Curve,0.25,0.5,3.82,4.22,multispeed,unitary_system,2.92 +#,HSPF_10p5_SEER_21_Msr,VFD_Fan_Curve,0.25,0.5,3.94,4.31,multispeed,unitary_system,3.09 diff --git a/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_SFm_1985/cases/SFm&2&rDXHP&Ex&dxHP_equip.csv b/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_SFm_1985/cases/SFm&2&rDXHP&Ex&dxHP_equip.csv index 137c764c..4e2fd101 100644 --- a/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_SFm_1985/cases/SFm&2&rDXHP&Ex&dxHP_equip.csv +++ b/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_SFm_1985/cases/SFm&2&rDXHP&Ex&dxHP_equip.csv @@ -1,11 +1,11 @@ skip,case_name,:vfd_curve_name,:supplyfan_total_eff,:motor_eff,:cooling_coil_cop,:cooling_coil_cop2,:coil_type,:hvac_type,:heating_coil_cop ,HSPF_7p0_SEER_13_Pre,,0.12,0.24,3.23,,,unitary_system,2.05 -,HSPF_8p0_SEER_14_Std,,0.12,0.24,3.23,,,unitary_system,2.34 -,HSPF_8p2_SEER_14.5_Std,,0.12,0.24,3.43,,,unitary_system,2.4 +#,HSPF_8p0_SEER_14_Std,,0.12,0.24,3.23,,,unitary_system,2.34 +#,HSPF_8p2_SEER_14.5_Std,,0.12,0.24,3.43,,,unitary_system,2.4 ,HSPF_8p8_SEER_15_Std,,0.12,0.24,3.58,,,unitary_system,2.58 ,HSPF_9p0_SEER_16_Msr,VFD_Fan_Curve,0.25,0.5,3.58,3.75,multispeed,unitary_system,2.64 -,HSPF_9p4_SEER_17_Msr,VFD_Fan_Curve,0.25,0.5,3.58,3.89,multispeed,unitary_system,2.75 -,HSPF_9p5_SEER_18_Msr,VFD_Fan_Curve,0.25,0.5,3.58,4.01,multispeed,unitary_system,2.79 -,HSPF_9p5_SEER_19_Msr,VFD_Fan_Curve,0.25,0.5,3.72,4.12,multispeed,unitary_system,2.79 -,HSPF_10p0_SEER_20_Msr,VFD_Fan_Curve,0.25,0.5,3.82,4.22,multispeed,unitary_system,2.92 -,HSPF_10p5_SEER_21_Msr,VFD_Fan_Curve,0.25,0.5,3.94,4.31,multispeed,unitary_system,3.09 +#,HSPF_9p4_SEER_17_Msr,VFD_Fan_Curve,0.25,0.5,3.58,3.89,multispeed,unitary_system,2.75 +#,HSPF_9p5_SEER_18_Msr,VFD_Fan_Curve,0.25,0.5,3.58,4.01,multispeed,unitary_system,2.79 +#,HSPF_9p5_SEER_19_Msr,VFD_Fan_Curve,0.25,0.5,3.72,4.12,multispeed,unitary_system,2.79 +#,HSPF_10p0_SEER_20_Msr,VFD_Fan_Curve,0.25,0.5,3.82,4.22,multispeed,unitary_system,2.92 +#,HSPF_10p5_SEER_21_Msr,VFD_Fan_Curve,0.25,0.5,3.94,4.31,multispeed,unitary_system,3.09 diff --git a/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_SFm_1985/climates.csv b/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_SFm_1985/climates.csv index 5a6f725e..bea237b5 100644 --- a/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_SFm_1985/climates.csv +++ b/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_SFm_1985/climates.csv @@ -1,17 +1,8 @@ skip,climate,hz_cz,weather_file,climate_zone,codes_file -,CZ01,,CA_EUREKA_725940S_CZ2022.epw,1,deer-sfm-1975-1985.csv -,CZ02,,CA_NAPA-CO_724955S_CZ2022.epw,2,deer-sfm-1975-1985.csv -,CZ03,,CA_OAKLAND-METRO-AP_724930S_CZ2022.epw,3,deer-sfm-1975-1985.csv -,CZ04,,CA_SAN-JOSE-IAP_724945S_CZ2022.epw,4,deer-sfm-1975-1985.csv -,CZ05,,CA_SANTA-MARIA-PUBLIC-AP_723940S_CZ2022.epw,5,deer-sfm-1975-1985.csv -,CZ06,,CA_LOS-ANGELES-IAP_722950S_CZ2022.epw,6,deer-sfm-1975-1985.csv -,CZ07,,CA_SAN-DIEGO-LINDBERGH-FLD_722900S_CZ2022.epw,7,deer-sfm-1975-1985.csv -,CZ08,,CA_LONG-BEACH-DAUGHERTY-FLD_722970S_CZ2022.epw,8,deer-sfm-1975-1985.csv -,CZ09,,CA_LOS-ANGELES-DOWNTOWN-USC_722874S_CZ2022.epw,9,deer-sfm-1975-1985.csv ,CZ10,,CA_RIVERSIDE-MUNI_722869S_CZ2022.epw,10,deer-sfm-1975-1985.csv ,CZ11,,CA_RED-BLUFF-MUNI-AP_725910S_CZ2022.epw,11,deer-sfm-1975-1985.csv -,CZ12,,CA_STOCKTON-METRO-AP_724920S_CZ2022.epw,12,deer-sfm-1975-1985.csv -,CZ13,,CA_FRESNO-YOSEMITE-IAP_723890S_CZ2022.epw,13,deer-sfm-1975-1985.csv -,CZ14,,CA_DAGGETT-BARSTOW-AP_723815S_CZ2022.epw,14,deer-sfm-1975-1985.csv -,CZ15,,CA_EL-CENTRO-NAF_722810S_CZ2022.epw,15,deer-sfm-1975-1985.csv -,CZ16,,CA_BISHOP-AP_724800S_CZ2022.epw,16,deer-sfm-1975-1985.csv +#,CZ12,,CA_STOCKTON-METRO-AP_724920S_CZ2022.epw,12,deer-sfm-1975-1985.csv +#,CZ13,,CA_FRESNO-YOSEMITE-IAP_723890S_CZ2022.epw,13,deer-sfm-1975-1985.csv +#,CZ14,,CA_DAGGETT-BARSTOW-AP_723815S_CZ2022.epw,14,deer-sfm-1975-1985.csv +#,CZ15,,CA_EL-CENTRO-NAF_722810S_CZ2022.epw,15,deer-sfm-1975-1985.csv +#,CZ16,,CA_BISHOP-AP_724800S_CZ2022.epw,16,deer-sfm-1975-1985.csv diff --git a/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_SFm_1985/cohorts.csv b/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_SFm_1985/cohorts.csv index 86811679..d3a12908 100644 --- a/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_SFm_1985/cohorts.csv +++ b/residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_SFm_1985/cohorts.csv @@ -1,5 +1,5 @@ skip,cohort,root,:roof_base_cavity_insul,:wall_base_type,:wall_base_cavity_insul,:wall_base_cont_insul,:glass_u,:glass_shgc,:sheathing_consol_layer_thickness,:sheathing_consol_layer_conductivity,:wall_consol_layer_thickness,:wall_consol_layer_conductivity,:floor_consol_layer_thickness,:floor_consol_layer_conductivity,:ceil_consol_layer_thickness,:ceil_consol_layer_conductivity,:heating_sch_DEER_mrn,:heating_sch_DEER_day,:heating_sch_DEER_eve,:heating_sch_DEER_nit,:cooling_sch_DEER_mrn,:cooling_sch_DEER_day,:cooling_sch_DEER_eve,:cooling_sch_DEER_nit,:climate_zone,:infiltration_ACH,:total_leakage_ratio,:shading_control,:floor_abv_crawl_insulation ,SFm&1&rDXHP&Ex&dxHP_equip,SFm-1 Story-1985-HP/templates/root.pxt,,,,,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""Vertical Fenestration U-Factor"", ""Value"")['U-IP']","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""Vertical Fenestration SHGC"", ""Value"")",,,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""wall_consol_layer_thickness"", ""Value"")['m']","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""wall_consol_layer_conductivity"", ""Value"")",,,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""ceil_consol_layer_thickness"", ""Value"")['m']","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""ceil_consol_layer_conductivity"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_mrn"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_day"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_eve"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_nit"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_mrn"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_day"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_eve"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_nit"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""climate_zone"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""Infiltration"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""total_leakage_ratio"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""shading_control"", ""Value"")", ,SFm&2&rDXHP&Ex&dxHP_equip,SFm-2 Story-1985-HP/templates/root.pxt,,,,,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""Vertical Fenestration U-Factor"", ""Value"")['U-IP']","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""Vertical Fenestration SHGC"", ""Value"")",,,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""wall_consol_layer_thickness"", ""Value"")['m']","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""wall_consol_layer_conductivity"", ""Value"")",,,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""ceil_consol_layer_thickness"", ""Value"")['m']","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""ceil_consol_layer_conductivity"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_mrn"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_day"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_eve"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_nit"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_mrn"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_day"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_eve"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_nit"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""climate_zone"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""Infiltration"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""total_leakage_ratio"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""shading_control"", ""Value"")", -,SFm&1&rDXGF&Ex&dxAC_equip,SFm-1 Story-1985/templates/root.pxt,,,,,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""Vertical Fenestration U-Factor"", ""Value"")['U-IP']","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""Vertical Fenestration SHGC"", ""Value"")",,,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""wall_consol_layer_thickness"", ""Value"")['m']","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""wall_consol_layer_conductivity"", ""Value"")",,,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""ceil_consol_layer_thickness"", ""Value"")['m']","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""ceil_consol_layer_conductivity"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_mrn"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_day"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_eve"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_nit"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_mrn"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_day"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_eve"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_nit"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""climate_zone"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""Infiltration"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""total_leakage_ratio"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""shading_control"", ""Value"")", -,SFm&2&rDXGF&Ex&dxAC_equip,SFm-2 Story-1985/templates/root.pxt,,,,,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""Vertical Fenestration U-Factor"", ""Value"")['U-IP']","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""Vertical Fenestration SHGC"", ""Value"")",,,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""wall_consol_layer_thickness"", ""Value"")['m']","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""wall_consol_layer_conductivity"", ""Value"")",,,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""ceil_consol_layer_thickness"", ""Value"")['m']","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""ceil_consol_layer_conductivity"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_mrn"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_day"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_eve"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_nit"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_mrn"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_day"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_eve"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_nit"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""climate_zone"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""Infiltration"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""total_leakage_ratio"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""shading_control"", ""Value"")", +#,SFm&1&rDXGF&Ex&dxAC_equip,SFm-1 Story-1985/templates/root.pxt,,,,,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""Vertical Fenestration U-Factor"", ""Value"")['U-IP']","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""Vertical Fenestration SHGC"", ""Value"")",,,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""wall_consol_layer_thickness"", ""Value"")['m']","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""wall_consol_layer_conductivity"", ""Value"")",,,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""ceil_consol_layer_thickness"", ""Value"")['m']","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""ceil_consol_layer_conductivity"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_mrn"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_day"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_eve"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_nit"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_mrn"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_day"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_eve"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_nit"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""climate_zone"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""Infiltration"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""total_leakage_ratio"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""shading_control"", ""Value"")", +#,SFm&2&rDXGF&Ex&dxAC_equip,SFm-2 Story-1985/templates/root.pxt,,,,,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""Vertical Fenestration U-Factor"", ""Value"")['U-IP']","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""Vertical Fenestration SHGC"", ""Value"")",,,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""wall_consol_layer_thickness"", ""Value"")['m']","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""wall_consol_layer_conductivity"", ""Value"")",,,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""ceil_consol_layer_thickness"", ""Value"")['m']","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""ceil_consol_layer_conductivity"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_mrn"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_day"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_eve"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""heating_sch_DEER_nit"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_mrn"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_day"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_eve"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""cooling_sch_DEER_nit"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""climate_zone"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""Infiltration"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""total_leakage_ratio"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""shading_control"", ""Value"")", diff --git a/residential measures/SWHC050-03 Ductless Heat Pump/SWHC050-03 Ductless Heat Pump_DMo/cases/DMo&0&rDXHP&Ex&dxHP_equip__spltHP-SEER-BA.csv b/residential measures/SWHC050-03 Ductless Heat Pump/SWHC050-03 Ductless Heat Pump_DMo/cases/DMo&0&rDXHP&Ex&dxHP_equip__spltHP-SEER-BA.csv index ff220192..6539b074 100644 --- a/residential measures/SWHC050-03 Ductless Heat Pump/SWHC050-03 Ductless Heat Pump_DMo/cases/DMo&0&rDXHP&Ex&dxHP_equip__spltHP-SEER-BA.csv +++ b/residential measures/SWHC050-03 Ductless Heat Pump/SWHC050-03 Ductless Heat Pump_DMo/cases/DMo&0&rDXHP&Ex&dxHP_equip__spltHP-SEER-BA.csv @@ -1,10 +1,10 @@ skip,case_name,:ductless,:use_dummy_return_plenum,:vfd_curve_name,:supplyfan_total_eff,:motor_eff,:cooling_coil_cop,:coil_type,:hvac_type,:heating_coil_cop ,Pre-RE-HV-DHP-13S,TRUE,FALSE,VFD_Fan_Curve,0.12,0.24,3.28,multispeed,unitary_system,2.2854 -,Std-RE-HV-DHP-15S,TRUE,FALSE,VFD_Fan_Curve,0.12,0.24,3.61,multispeed,unitary_system,2.637 +#,Std-RE-HV-DHP-15S,TRUE,FALSE,VFD_Fan_Curve,0.12,0.24,3.61,multispeed,unitary_system,2.637 ,Msr-RE-HV-DHP-16S,TRUE,FALSE,VFD_Fan_Curve,0.25,0.5,3.75,multispeed,unitary_system,2.6956 -,Msr-RE-HV-DHP-17S,TRUE,FALSE,VFD_Fan_Curve,0.25,0.5,3.89,multispeed,unitary_system,2.7835 -,Msr-RE-HV-DHP-18S,TRUE,FALSE,VFD_Fan_Curve,0.25,0.5,4.01,multispeed,unitary_system,2.8714 -,Msr-RE-HV-DHP-19S,TRUE,FALSE,VFD_Fan_Curve,0.25,0.5,4.12,multispeed,unitary_system,2.93 -,Msr-RE-HV-DHP-20S,TRUE,FALSE,VFD_Fan_Curve,0.25,0.5,4.22,multispeed,unitary_system,3.0179 -,Msr-RE-HV-DHP-21S,TRUE,FALSE,VFD_Fan_Curve,0.25,0.5,4.31,multispeed,unitary_system,3.1058 -,Msr-RE-HV-DHP-22S,TRUE,FALSE,VFD_Fan_Curve,0.25,0.5,4.39,multispeed,unitary_system,3.1937 +#,Msr-RE-HV-DHP-17S,TRUE,FALSE,VFD_Fan_Curve,0.25,0.5,3.89,multispeed,unitary_system,2.7835 +#,Msr-RE-HV-DHP-18S,TRUE,FALSE,VFD_Fan_Curve,0.25,0.5,4.01,multispeed,unitary_system,2.8714 +#,Msr-RE-HV-DHP-19S,TRUE,FALSE,VFD_Fan_Curve,0.25,0.5,4.12,multispeed,unitary_system,2.93 +#,Msr-RE-HV-DHP-20S,TRUE,FALSE,VFD_Fan_Curve,0.25,0.5,4.22,multispeed,unitary_system,3.0179 +#,Msr-RE-HV-DHP-21S,TRUE,FALSE,VFD_Fan_Curve,0.25,0.5,4.31,multispeed,unitary_system,3.1058 +#,Msr-RE-HV-DHP-22S,TRUE,FALSE,VFD_Fan_Curve,0.25,0.5,4.39,multispeed,unitary_system,3.1937 diff --git a/residential measures/SWHC050-03 Ductless Heat Pump/SWHC050-03 Ductless Heat Pump_DMo/climates.csv b/residential measures/SWHC050-03 Ductless Heat Pump/SWHC050-03 Ductless Heat Pump_DMo/climates.csv index 3ed71738..6dabae43 100644 --- a/residential measures/SWHC050-03 Ductless Heat Pump/SWHC050-03 Ductless Heat Pump_DMo/climates.csv +++ b/residential measures/SWHC050-03 Ductless Heat Pump/SWHC050-03 Ductless Heat Pump_DMo/climates.csv @@ -1,17 +1,17 @@ skip,climate,hz_cz,weather_file,climate_zone,codes_file -,CZ01,,CA_EUREKA_725940S_CZ2022.epw,1,deer-dmo-1972-1985.csv +#,CZ01,,CA_EUREKA_725940S_CZ2022.epw,1,deer-dmo-1972-1985.csv ,CZ02,,CA_NAPA-CO_724955S_CZ2022.epw,2,deer-dmo-1972-1985.csv ,CZ03,,CA_OAKLAND-METRO-AP_724930S_CZ2022.epw,3,deer-dmo-1972-1985.csv -,CZ04,,CA_SAN-JOSE-IAP_724945S_CZ2022.epw,4,deer-dmo-1972-1985.csv -,CZ05,,CA_SANTA-MARIA-PUBLIC-AP_723940S_CZ2022.epw,5,deer-dmo-1972-1985.csv -,CZ06,,CA_LOS-ANGELES-IAP_722950S_CZ2022.epw,6,deer-dmo-1972-1985.csv -,CZ07,,CA_SAN-DIEGO-LINDBERGH-FLD_722900S_CZ2022.epw,7,deer-dmo-1972-1985.csv -,CZ08,,CA_LONG-BEACH-DAUGHERTY-FLD_722970S_CZ2022.epw,8,deer-dmo-1972-1985.csv -,CZ09,,CA_LOS-ANGELES-DOWNTOWN-USC_722874S_CZ2022.epw,9,deer-dmo-1972-1985.csv -,CZ10,,CA_RIVERSIDE-MUNI_722869S_CZ2022.epw,10,deer-dmo-1972-1985.csv -,CZ11,,CA_RED-BLUFF-MUNI-AP_725910S_CZ2022.epw,11,deer-dmo-1972-1985.csv -,CZ12,,CA_STOCKTON-METRO-AP_724920S_CZ2022.epw,12,deer-dmo-1972-1985.csv -,CZ13,,CA_FRESNO-YOSEMITE-IAP_723890S_CZ2022.epw,13,deer-dmo-1972-1985.csv -,CZ14,,CA_DAGGETT-BARSTOW-AP_723815S_CZ2022.epw,14,deer-dmo-1972-1985.csv -,CZ15,,CA_EL-CENTRO-NAF_722810S_CZ2022.epw,15,deer-dmo-1972-1985.csv -,CZ16,,CA_BISHOP-AP_724800S_CZ2022.epw,16,deer-dmo-1972-1985.csv +#,CZ04,,CA_SAN-JOSE-IAP_724945S_CZ2022.epw,4,deer-dmo-1972-1985.csv +#,CZ05,,CA_SANTA-MARIA-PUBLIC-AP_723940S_CZ2022.epw,5,deer-dmo-1972-1985.csv +#,CZ06,,CA_LOS-ANGELES-IAP_722950S_CZ2022.epw,6,deer-dmo-1972-1985.csv +#,CZ07,,CA_SAN-DIEGO-LINDBERGH-FLD_722900S_CZ2022.epw,7,deer-dmo-1972-1985.csv +#,CZ08,,CA_LONG-BEACH-DAUGHERTY-FLD_722970S_CZ2022.epw,8,deer-dmo-1972-1985.csv +#,CZ09,,CA_LOS-ANGELES-DOWNTOWN-USC_722874S_CZ2022.epw,9,deer-dmo-1972-1985.csv +#,CZ10,,CA_RIVERSIDE-MUNI_722869S_CZ2022.epw,10,deer-dmo-1972-1985.csv +#,CZ11,,CA_RED-BLUFF-MUNI-AP_725910S_CZ2022.epw,11,deer-dmo-1972-1985.csv +#,CZ12,,CA_STOCKTON-METRO-AP_724920S_CZ2022.epw,12,deer-dmo-1972-1985.csv +#,CZ13,,CA_FRESNO-YOSEMITE-IAP_723890S_CZ2022.epw,13,deer-dmo-1972-1985.csv +#,CZ14,,CA_DAGGETT-BARSTOW-AP_723815S_CZ2022.epw,14,deer-dmo-1972-1985.csv +#,CZ15,,CA_EL-CENTRO-NAF_722810S_CZ2022.epw,15,deer-dmo-1972-1985.csv +#,CZ16,,CA_BISHOP-AP_724800S_CZ2022.epw,16,deer-dmo-1972-1985.csv diff --git a/residential measures/SWHC050-03 Ductless Heat Pump/SWHC050-03 Ductless Heat Pump_DMo/cohorts.csv b/residential measures/SWHC050-03 Ductless Heat Pump/SWHC050-03 Ductless Heat Pump_DMo/cohorts.csv index 6c86ebc4..55d45f4e 100644 --- a/residential measures/SWHC050-03 Ductless Heat Pump/SWHC050-03 Ductless Heat Pump_DMo/cohorts.csv +++ b/residential measures/SWHC050-03 Ductless Heat Pump/SWHC050-03 Ductless Heat Pump_DMo/cohorts.csv @@ -1,4 +1,4 @@ skip,cohort,root,:roof_base_cavity_insul,:wall_base_type,:wall_base_cavity_insul,:wall_base_cont_insul,:glass_u,:glass_shgc,:sheathing_consol_layer_thickness,:sheathing_consol_layer_conductivity,:wall_consol_layer_thickness,:wall_consol_layer_conductivity,:floor_consol_layer_thickness,:floor_consol_layer_conductivity,:ceil_consol_layer_thickness,:ceil_consol_layer_conductivity,:door_thermal_resistance,:climate_zone,:infiltration_ACH,:shading_control,:cool_coil_capacity,:heating_coil_capacity ,DMo&0&rDXHP&Ex&dxHP_equip__spltHP-SEER-BA,Dmo-HP/templates/root.pxt,,,,,,,,,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""wall_consol_layer_thickness"", ""Value"")['m']","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""wall_consol_layer_conductivity"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""floor_consol_layer_thickness"", ""Value"")['m']",,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""ceil_consol_layer_thickness"", ""Value"")['m']","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""ceil_consol_layer_conductivity"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""door_thermal_resistance"", ""R-Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""climate_zone"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""Infiltration"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""shading_control"", ""Value"")",, -,DMo&0&rDXHP&New&dxHP_equip__spltHP-SEER-BA,Dmo-HP-New/templates/root.pxt,,,,,,,,,,,,,,,,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""climate_zone"", ""Value"")",,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""shading_control"", ""Value"")",, -,DMo&0&rDXHP&Ex&dxHP_equip__spltHP-SEER-BA&dxAC_equip__RoomAC,Dmo-PTAC/templates/root.pxt,,,,,,,,,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""wall_consol_layer_thickness"", ""Value"")['m']","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""wall_consol_layer_conductivity"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""floor_consol_layer_thickness"", ""Value"")['m']",,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""ceil_consol_layer_thickness"", ""Value"")['m']","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""ceil_consol_layer_conductivity"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""door_thermal_resistance"", ""R-Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""climate_zone"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""Infiltration"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""shading_control"", ""Value"")",, +#,DMo&0&rDXHP&New&dxHP_equip__spltHP-SEER-BA,Dmo-HP-New/templates/root.pxt,,,,,,,,,,,,,,,,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""climate_zone"", ""Value"")",,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""shading_control"", ""Value"")",, +#,DMo&0&rDXHP&Ex&dxHP_equip__spltHP-SEER-BA&dxAC_equip__RoomAC,Dmo-PTAC/templates/root.pxt,,,,,,,,,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""wall_consol_layer_thickness"", ""Value"")['m']","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""wall_consol_layer_conductivity"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""floor_consol_layer_thickness"", ""Value"")['m']",,"%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""ceil_consol_layer_thickness"", ""Value"")['m']","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""ceil_consol_layer_conductivity"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""door_thermal_resistance"", ""R-Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""climate_zone"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""Infiltration"", ""Value"")","%= codes.lookup(""Res Key Prototype Values | Climate Zone #{climate_zone}"", ""shading_control"", ""Value"")",, diff --git a/scripts/Readme.md b/scripts/Readme.md index 04b0fc9d..a76c33c4 100644 --- a/scripts/Readme.md +++ b/scripts/Readme.md @@ -13,9 +13,9 @@ After the simulation is done, please make sure simulation is finished successful ### Post-processing steps for residential measures: 1. Open one of the provided .py scripts in the **data transformation** directory (either DMo.py, MFm.py, or SFm.py). The corresponding building type script should be used. 2. Open up the accompanying excel spreadsheet ***DEER_EnergyPlus_Modelkit_Measure_list_working.xlsx***, identify the corresponding measure name in column A of the sheet `Measure_list`. -3. In line 23 of the python script (line 26 for the Com script), specify the measure name identified in step 2. For example: `measure_name = 'SWSV001-05 Duct Seal_DMo'` -4. In line 33 of the python script (line 34 and 35 in the Single Family script, line 40 in Com script but that one should be automatic, double check to make sure), specify the path to the simulation directory starting with the folder Analysis. For example: `path = 'residential measures/SWSV001-05 Duct Seal_DMo'` (For Single Family, if existing vintage, assign both the 1975 and 1985 directory to path_1975 and path_1985 respectively, and leave path_new blank; if new vintage, assign the New directory to path_new ) -5. run the python script. The script should produce 3 files, ***current_msr_mat.csv***, ***sim_annual.csv***, ***sim_hourly_wb.csv*** (***sfm_annual.csv*** and ***sfm_hourly_csv*** instead for Single Family). These files should appear in the same directory as the python script. For better organization, save these files somewhere else trackable. Note that these files are part of **gitignore**, but the user can produce them in their local repo and move them to a desirable location after the process is finished. +3. In line 27 of the python script (line 31 for the Com script), specify the measure name identified in step 2. For example: `measure_name = 'SWSV001-05 Duct Seal_DMo'` +4. In line 37-38 of the python script for DMo / MFm, line 38 and 39 in the Single Family script, or line 46 in Com script, specify the path to the simulation directory starting with the folder Analysis. For example: `path = 'residential measures/SWSV001-05 Duct Seal_DMo'` (For Single Family, if existing vintage, assign both the 1975 and 1985 directory to path_1975 and path_1985 respectively, and leave path_new blank; if new vintage, assign the New directory to path_new ) +5. run the python script. The script should produce 3 files plus a zip file, ***current_msr_mat.csv***, ***sim_annual.csv***, ***sim_hourly_wb.csv*** (***sfm_annual.csv*** and ***sfm_hourly_csv*** instead for Single Family), and ***CEDARS_LoadShape_XXX.zip***. These files should appear in the same directory as the python script. The CSVs are used for DEER impact outputs workflow. The CEDARS zip is an additional output containing a CSV with annual hourly load shapes of any processed measures for CEDARS's use and the CEDARS file does not affect the DEER impacts workflow. (The CEDARS portion of the script does not alter the existing DEER impact post-processing.) For better organization, save these files somewhere else trackable. Note that these files are part of **gitignore**, but the user can produce them in their local repo and move them to a desirable location after the process is finished. 6. If tables "wts_res_bldg.csv" and "wts_res_hvac.csv" is not consistent with the DEER weights table (DEER.BldgWts), run DEER_weights_extraction.py to extract the most up-to-date weights table needed for post-procesing. Use the the most up-to-date tables during the POSTgreSQL steps. 7. In a postgreSQL database management software (such as [pgadmin4](https://www.pgadmin.org/download/)), import the csv files generated from step 5, along with the other csv tables (specifically, "NumBldgs.csv", "NumStor.csv", "peakperspec.csv", "wts_res_bldg.csv", "wts_res_hvac.csv", "FloorArea_2022.csv") provided in the **energy savings** folder. Also, run the ***ImpactProfiles.sql*** in the postgreSQL environment to create its corresponding support table. The support tables provided in the **energy savings** folder only needed to be imported once. 8. From the **energy savings** folder, run provided .sql queries labelled "R1..", "R2.." etc. in the following order: R1, R2, R3, R4, P1, P2, P3, P4, P5, P6, P7, P8. Only run P2.1A and P2.1B after P2 if processing Duct optimization or Duct seal measure. (for Commercial, a separate set of commercial scripts are provided, use those instead and run in numerical order) @@ -28,8 +28,12 @@ After the simulation is done, please make sure simulation is finished successful NOTE: the example directory **SWXX111-00 Example_SEER_AC** and all its subdirectories are only used to illustrate the workflow for post-processing. The case files and its parameter in this example directory do not reflect how an actual measure should be set up, as they are only the most basic set up for a modelkit run. Update on 3/22/2024: the example directory **SWXX111-00 Example_SEER_AC** reflects the vintage consolidation update (with only Ex and New vintages) 5. If the table "wts_com_bldg.csv" is not consistent with the DEER weights table (DEER.BldgWts), run DEER_weights_extraction.py to extract the most up-to-date weights table needed for post-procesing. Use the the most up-to-date tables during the POSTgreSQL steps. -6. Run the python script to generate three CSV files: 'current_msr_mat.csv', 'sim_annual.csv', and 'sim_hourly_wb.csv' +6. Run the python script to generate three CSV files and a zip file: ***current_msr_mat.csv***, ***sim_annual.csv***, ***sim_hourly_wb.csv*** and ***CEDARS_LoadShape_XXX.zip***. The CSVs are used for DEER impact outputs workflow. The CEDARS zip is an additional output containing a CSV with annual hourly load shapes of any processed measures for CEDARS's use and the CEDARS file does not affect the DEER impacts workflow. (The CEDARS portion of the script does not alter the existing DEER impact post-processing.) 7. Load these three CSV files into the PostgreSQL database management software (see residential section of the README, step 6) 8. Load commercial support tables 'peakperspec.csv', 'wts_com_bldg.csv' into the PostgreSQL database management software, in the same SQL schema environment as the three csv tables (current_msr_mat, sim_annual, sim_hourly_wb) above. The support tables only needed to be imported once. 9. Run the post-processing SQL queries P1 to P5 for commercial, located in 'scripts/energy savings/commercial/'. 10. Export ‘meas_impacts_2024_com” as the output. + + +### CEDARS formatted hourly Load shapes: +1. Note new outputs "CEDARS_LoadShape_XXX.zip" from the scripts, these will be the new CEDARS formatted loadshapes containing the hourly consumption data for CEDARS use. CEDARS accepts them in zip format. In the script, there is a commented-out line (line 684 for SFm.py, line 640 for Com.py, line 518 for DMo.py, line 524 for MFm.py) to allow for user to export the table as a CSV on it's own, if the user wishes to do so, uncomment that line and run the script. \ No newline at end of file diff --git a/scripts/data transformation/Com.py b/scripts/data transformation/Com.py index aa4c8f04..cfbd2c8e 100644 --- a/scripts/data transformation/Com.py +++ b/scripts/data transformation/Com.py @@ -6,10 +6,14 @@ import sys import datetime as dt os.chdir(os.path.dirname(__file__)) #resets to current script directory + +import helper_functions +from importlib import reload +reload(helper_functions) # %% -#Read master workbook for measure / tech list +#Read master workbook for measure / tech list (note example commented line for specific measures) df_master = pd.read_excel('DEER_EnergyPlus_Modelkit_Measure_list_working.xlsx', sheet_name='Measure_list', skiprows=4) - +#df_master = pd.read_excel('DEER_EnergyPlus_Modelkit_Measure_list_working_fanbelts.xlsx', sheet_name='Measure_list', skiprows=4) measure_group_names = list(df_master['Measure Group Name'].unique()) # %% @@ -22,10 +26,10 @@ #Shows list of commercial measure names (with workpaper ID) print(measures) #%% -#Define measure name here (name of the measure folder itself +#Define measure name here (name of the measure folder itself) ##NOTE: The example folder used here, 'SWXX111-00 Example_SEER_AC' is only used to illustrate an example workflow thru post-procesing measure_name = 'SWXX111-00 Example_SEER_AC' - +#measure_name = 'SWHC024-05 Fan Belt' #filter to specific measure mapping records from mapping workbook df_measure = df_com[df_com['Modelkit Folder Primary Name']== measure_name] # %% @@ -39,6 +43,8 @@ #12/20/2023 After finishing Com, try to condense Res script so one script takes care of one measure folder? #to do: use for loop to loop over each folder, using if-else to process different building types for Res filepath = f'commercial measures/{measure_name}' +#filepath = f'commercial measures/SWHC024-06 Fan Belt' #only changed this for testing + # %% #function to list all sub-directories in a directory @@ -366,6 +372,11 @@ def end_use_rearrange(df_in): #loop path of each file, read corresponding file full_path = hrly_subpath + "/" + split_meta_cols_eu.iloc[i][0] + "/" + split_meta_cols_eu.iloc[i][1] + "/" + split_meta_cols_eu.iloc[i][2] + "/instance-var.csv" + + #3/3/2026 update, extract RunPeriod Start Day from IDF file for a particular simulation + idf_path = hrly_subpath + "/" + split_meta_cols_eu.iloc[i][0] + "/" + split_meta_cols_eu.iloc[i][1] + "/" + split_meta_cols_eu.iloc[i][2] + "/instance.idf" + runperiod_start_day = helper_functions.get_runperiod_start_day(idf_path) + df = pd.read_csv(full_path, low_memory=False) #remove traling spaces on col headers df.columns = df.columns.str.rstrip() @@ -375,7 +386,7 @@ def end_use_rearrange(df_in): extracted_df = pd.DataFrame(df['Electricity:Facility [J](Hourly)']) #create the column name based on the permutations - col_name = split_meta_cols_eu.iloc[i][0] + "/" + split_meta_cols_eu.iloc[i][1] + "/" + split_meta_cols_eu.iloc[i][2] + "/instance-var.csv" + col_name = split_meta_cols_eu.iloc[i][0] + "/" + split_meta_cols_eu.iloc[i][1] + "/" + split_meta_cols_eu.iloc[i][2] + "/instance-var.csv" + "/"+runperiod_start_day #change column name extracted_df = extracted_df.set_axis([col_name],axis=1) @@ -392,8 +403,6 @@ def end_use_rearrange(df_in): print(f"no data found.") - - # %% fyr_hrly = hourly_df #rearrange 1-column 8760 format to 365x24 wide format for all runs in hourly_df @@ -468,17 +477,193 @@ def end_use_rearrange(df_in): 'hr13', 'hr14', 'hr15', 'hr16', 'hr17', 'hr18', 'hr19', 'hr20', 'hr21', 'hr22', 'hr23', 'hr24']].copy() -# %% +#%% +#3/3/2026 update: move normalizing unit conversion to here for better organization ##STEP 3: Normalizing Units bldgtype = 'Com' os.chdir(os.path.dirname(__file__)) #resets to current script directory print(os.path.abspath(os.curdir)) -# %% + df_normunits = pd.read_excel('Normunits.xlsx', sheet_name=bldgtype) -# %% normunit = df_measure['Normunit'].unique()[0] + + + + +#%% +################################################################################################ +################################################################################################ +#12/22/2025 CEDARS Hourly consumption output reformatting +# use the hourly data before long2wide pivot transform +print('reformatting hourly data for CEDARS loadshape format..') +converted_long_df = pd.DataFrame() + +for i in range(0,len(fyr_hrly.columns)): + + #isolate single column + hrly_df = pd.DataFrame(fyr_hrly.iloc[:,i]) + + #create separate metadata columns + col_names = hrly_df.columns[0].split('/') + + #create new key column for merge + hrly_df['hr in 8760'] = (hrly_df.index) + 1 + + #merge based on "hr in 8760" column, the 8760 map + hrly_mapped = pd.merge(hrly_df, annual_map, on='hr in 8760') + + cohort = parse_measure_name(col_names[1]) + + #rename / rearrange columns + hrly_mapped.rename(columns={hrly_mapped.columns[0]: 'Total_Elec_Consumption'}, inplace=True) + hrly_mapped['BldgLoc'] = col_names[0] + hrly_mapped['BldgType'] = cohort['BldgType'] + hrly_mapped['BldgHVAC'] = cohort['BldgHVAC'] + hrly_mapped['BldgVint'] = cohort['BldgVint'] + hrly_mapped['TechGroup'] = cohort['Measure'] + hrly_mapped['Measure Group Name'] =col_names[1] #use this to look up tech group tech type + hrly_mapped['TechID'] = col_names[2] + hrly_mapped['file'] = col_names[3] + #3/3/2026 update, extract RunPeriod Start Day from IDF file for a particular simulation, and add as a column in the hourly mapped df + hrly_mapped['RunPeriod Start Day'] = col_names[4] + + converted_long_df = pd.concat([converted_long_df, hrly_mapped]) + + print(f"col {i} long format loaded.") + + +#%% +#Setup a lookup using Measure Group name, to lookup for TechGroup_ee, TechType_ee +TechGroup_lookup_map = df_measure.set_index('Measure Group Name')['TechGroup_ee'].to_dict() +TechType_lookup_map = df_measure.set_index('Measure Group Name')['TechType_ee'].to_dict() + +#add corresponding TechGroup and TechType +converted_long_df['TechGroup'] = converted_long_df['Measure Group Name'].map(TechGroup_lookup_map) +converted_long_df['TechType'] = converted_long_df['Measure Group Name'].map(TechType_lookup_map) + +#%% +#convert from J to kWh +converted_long_df['Total_Elec_Consumption'] = converted_long_df['Total_Elec_Consumption']/3600000 + + +# %% +#modify this part for CEDARS +#measure specific normalizing units table +df_numunits = df_normunits[df_normunits['Normunit']==normunit] +#finalize normalizing unit and num based on measure + +if len(df_numunits) == 1: + numunits = df_numunits['Value'].unique()[0] + print('only 1 normalizing unit value across all data') +elif len(df_numunits) > 1: + #mostly applies to Com (or any measure with multiple building types) + numunit_lookup = df_numunits.set_index('BldgType')['Value'].to_dict() + print(f'building-type dependent numunits for this normalizing unit : {normunit}') +else: + normunit = 'Each' #If normalizing unit isn't anything else, put default as each + numunits = 1 + print('no other available normunits, using default Each') + + + +#%% +##Long format data norm unit field updates +#note the bldgtype specific numunit lookup +#Added ways to deal with if no normalizing unit is available for CEDARS loadshape format +try: + converted_long_df['Normunit'] = normunit + converted_long_df['Numunits'] = converted_long_df['BldgType'].map(numunit_lookup) + print(f'using normalizing unit {normunit}') +except: + #no appropriate numunit / normalizing units found + converted_long_df['Normunit'] = 'Each' + converted_long_df['Numunits'] = 1 + print('no available normunits, using default Each for long table') +#%% +#Long format final field updates +#need to divide each 8760 by its annual and its corresponding numunit +#1. grouby to find sum of each table via unique ID +#2. merge as a new col in long df +#3, divide and clean up final columns + +#convert to UEC by applying numunits +converted_long_df['UEC'] = converted_long_df['Total_Elec_Consumption'] / converted_long_df['Numunits'] + +#sort +df_long = converted_long_df.sort_values(['BldgType','BldgLoc', 'TechID', 'hr in 8760']) + +#%% +#create groupby ids for each 8760 set +df_long['set_id'] = (df_long['hr in 8760'].eq(1) + .groupby([df_long['BldgLoc'], df_long['TechID']]) + .cumsum()) +#calculate annual UEC +df_long['annual_sum'] = (df_long + .groupby(['BldgLoc', 'TechID', 'set_id'])['UEC'] + .transform('sum')) + +#%% +#Calculate unitzed 8760 values based on annual sum of 8760 +df_long['UECproportion'] = df_long['UEC'] / df_long['annual_sum'] +#%% +#rearrange / true-up columns +#source year mapping: +StartDayToSourceYear = { + "Monday": 2018, #Basis year for 2024 electric ACCs + "Tuesday": 2013, #2013 or 2019 could be used + "Wednesday": 2020, #Basis for 2022/2021 electric ACCs + "Thursday": 2009, #Per CEC's Nonres/MFm ACM Reference Manual + "Friday": 2010, #2016 is Friday but a leap year, so this should be either 2010 or 2021 + "Saturday": 2011, #Next Saturday option is 2022 because it is skipped between 2016 and 2017 because 2016 is a leap year + "Sunday": 2017 #2012 is a leap year, suggest using 2017 +} + +df_long['Sector'] = 'Com' #this is Com script, so Sector = Com +df_long['Type'] = 'Whole Building' +df_long['Source Year'] = df_long['RunPeriod Start Day'].map(StartDayToSourceYear) + +df_long.rename(columns={'hr in 8760': 'Hour of Year'}, inplace=True) + +#final table fields round-up +#note: UEC and Numunits omitted from draft long table in the final table +df_long_final = df_long[['Sector', 'BldgType','BldgVint','BldgHVAC','BldgLoc','Normunit', + 'Type', 'Source Year', 'TechGroup', 'TechType','TechID', + 'Hour of Year','UEC','UECproportion']] + + +#%% +#export CEDARS long 8760 csv + +os.chdir(os.path.dirname(__file__)) #resets to current script directory +print(os.path.abspath(os.curdir)) + +#df_long_final.to_csv('CEDARS_long_ls_Com.csv', index=False) #enable if just need csv export +#3/4/2026 Dan P. on CEDARS - need to provide as zip format +#%% +import zipfile + +zip_filename = 'CEDARS_LoadShape_Com.zip' +csv_filename_prefix = 'CEDARS_LoadShape_Com_' + +with zipfile.ZipFile(zip_filename, 'w', compression=zipfile.ZIP_DEFLATED) as zipf: + #Open a file inside the zip and write CSV to it + #Loop through each building type and write a separate CSV for each, put into the same zip file + for bldgtype in df_long_final['BldgType'].unique(): + print(f'writing {bldgtype} csv to zip...') + + csv_filename = f'{csv_filename_prefix}{bldgtype}.csv' + with zipf.open(csv_filename, 'w') as f: + df_long_final[df_long_final['BldgType'] == bldgtype].to_csv(f, index=False) + print(f'{bldgtype} csv written to zip.') + +print('CEDARS long 8760 csv exported.') +################################################################################################ +################################################################################################ #%% -##Annual Data final field fixes +############################################## +############################################## +## Here resumes the normal post-processing of DEER outputs +# Annual Data final field fixes #normunit = buildng area(conditioned) for default / example measure @@ -492,11 +677,15 @@ def end_use_rearrange(df_in): #add area based on building type #also add normunit (also the area) for the example measure #code may need to be tweaked if normalizing unit is different for a specific measure +#3/2/26 QC check - if Cap-Tons, this code + supporting tables does not address the case. Solaris produced some scripts to extract Cap-Ton, but did not get every building type. -unit_lookup = df_normunits[['BldgType', 'Normunit', 'Value']] +unit_lookup = df_normunits[['BldgType','Normunit','Value']] if normunit == 'Each': - unit_table = unit_lookup[unit_lookup['Normunit']=='Each'][['Normunit','Value']] - sim_annual_v2 = pd.merge(sim_annual_v1, unit_table, on='Normunit') + unit_table = unit_lookup[unit_lookup['Normunit']=='Each'][['BldgType','Normunit','Value']] + sim_annual_v2 = pd.merge(sim_annual_v1, unit_table, on=['BldgType','Normunit']) +elif normunit == 'Cap-Tons': + unit_table = unit_lookup[unit_lookup['Normunit']=='Cap-Tons'][['BldgType','Normunit','Value']] + sim_annual_v2 = pd.merge(sim_annual_v1, unit_table, on=['BldgType','Normunit']) else: # Revised 2025-09-25 by Nicholas Fette to resolve KeyError: 'BldgType' # Both sim_annual_v1 and unit_lookup have BldgType column when normunit != Each. diff --git a/scripts/data transformation/DEER_EnergyPlus_Modelkit_Measure_list_working.xlsx b/scripts/data transformation/DEER_EnergyPlus_Modelkit_Measure_list_working.xlsx index 7ad65bb2..6d29d898 100644 Binary files a/scripts/data transformation/DEER_EnergyPlus_Modelkit_Measure_list_working.xlsx and b/scripts/data transformation/DEER_EnergyPlus_Modelkit_Measure_list_working.xlsx differ diff --git a/scripts/data transformation/DEER_EnergyPlus_Modelkit_Measure_list_workingSP55.xlsx b/scripts/data transformation/DEER_EnergyPlus_Modelkit_Measure_list_workingSP55.xlsx new file mode 100644 index 00000000..efc20ba7 Binary files /dev/null and b/scripts/data transformation/DEER_EnergyPlus_Modelkit_Measure_list_workingSP55.xlsx differ diff --git a/scripts/data transformation/DMo.py b/scripts/data transformation/DMo.py index ab4f5812..7cd8c836 100644 --- a/scripts/data transformation/DMo.py +++ b/scripts/data transformation/DMo.py @@ -6,10 +6,14 @@ import sys import datetime as dt os.chdir(os.path.dirname(__file__)) #resets to current script directory +#%% +import helper_functions +from importlib import reload +reload(helper_functions) # %% -#Read master workbook for measure / tech list +#Read master workbook for measure / tech list (note example commented line for specific measures) df_master = pd.read_excel('DEER_EnergyPlus_Modelkit_Measure_list_working.xlsx', sheet_name='Measure_list', skiprows=4) - +#df_master = pd.read_excel('DEER_EnergyPlus_Modelkit_Measure_list_working_eff_doors.xlsx', sheet_name='Measure_list', skiprows=4) measure_group_names = list(df_master['Measure Group Name'].unique()) # %% @@ -19,9 +23,9 @@ #Shows list of measure names print(measures) #%% -#Define measure name here +#Define measure name here (note example commented line for specific measures) measure_name = 'SEER Rated AC/HP' - +#measure_name = 'Efficient Doors' # %% #DMo only script ####Define path @@ -30,10 +34,9 @@ os.chdir("../..") #go up two directory print(os.path.abspath(os.curdir)) -#12/20/2023 After finishing Com, try to condense Res script so one script takes care of one measure folder? -#to do: use for loop to loop over each folder, using if-else to process different building types for Res +#to do: use for loop to loop over each folder, using if-else to process different building types for Res (note example commented line for specific measures) path = 'residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_DMo' - +#path = 'residential measures/SWBE013-01 Efficient Doors/SWBE013-01 Efficient Doors_DMo' # %% #extract only the 5th portion of the measure group name for expected_att #split argument 4 means only split 4 times maximum @@ -218,10 +221,11 @@ def end_use_rearrange(df_in): print(f'processing all annual data that are grouped in {case}') cohort_dict = parse_measure_name(case) sim_annual_i = annual_raw_parsing(annual_df[annual_df['File Name'].str.contains(case)].copy(), cohort_dict) + sim_annual_i['Measure Group Name'] = case #add in "meaasure group name" for looking up tech type / tech groups later sim_annual_proto = pd.concat([sim_annual_proto, sim_annual_i]) print('ok.') sim_annual_proto = end_use_rearrange(sim_annual_proto) -sim_annual_v1 = sim_annual_proto[['TechID', 'BldgLoc', 'BldgType', 'BldgHVAC', 'BldgVint', 'kwh_tot', 'kwh_ltg', 'kwh_task', +sim_annual_v1 = sim_annual_proto[['TechID', 'Measure Group Name', 'BldgLoc', 'BldgType', 'BldgHVAC', 'BldgVint', 'kwh_tot', 'kwh_ltg', 'kwh_task', 'kwh_equip', 'kwh_htg', 'kwh_clg', 'kwh_twr', 'kwh_aux', 'kwh_vent', 'kwh_venthtg', 'kwh_ventclg', 'kwh_refg', 'kwh_hpsup', 'kwh_shw', 'kwh_ext', 'thm_tot', 'thm_equip', @@ -253,12 +257,16 @@ def end_use_rearrange(df_in): full_path = hrly_path + "/" + split_meta_cols_eu.iloc[i][0] + "/" + split_meta_cols_eu.iloc[i][1] + "/" + split_meta_cols_eu.iloc[i][2] + "/instance-var.csv" df = pd.read_csv(full_path, low_memory=False) + #3/3/2026 update, extract RunPeriod Start Day from IDF file for a particular simulation + idf_path = hrly_path + "/" + split_meta_cols_eu.iloc[i][0] + "/" + split_meta_cols_eu.iloc[i][1] + "/" + split_meta_cols_eu.iloc[i][2] + "/instance.idf" + runperiod_start_day = helper_functions.get_runperiod_start_day(idf_path) + #extract the last column (the total elec hrly profile) #if for enduse hourly, then extract the relevant end use column extracted_df = pd.DataFrame(df.iloc[:,-1]) #create the column name based on the permutations - col_name = split_meta_cols_eu.iloc[i][0] + "/" + split_meta_cols_eu.iloc[i][1] + "/" + split_meta_cols_eu.iloc[i][2] + "/instance-var.csv" + col_name = split_meta_cols_eu.iloc[i][0] + "/" + split_meta_cols_eu.iloc[i][1] + "/" + split_meta_cols_eu.iloc[i][2] + "/instance-var.csv" + "/"+runperiod_start_day #change column name extracted_df = extracted_df.set_axis([col_name],axis=1) @@ -342,27 +350,196 @@ def end_use_rearrange(df_in): 'hr07', 'hr08', 'hr09', 'hr10', 'hr11', 'hr12', 'hr13', 'hr14', 'hr15', 'hr16', 'hr17', 'hr18', 'hr19', 'hr20', 'hr21', 'hr22', 'hr23', 'hr24']].copy() -# %% +#%% +#3/4/2026 update: move normalizing unit conversion to here for better organization ##STEP 3: Normalizing Units bldgtype = 'DMo' os.chdir(os.path.dirname(__file__)) #resets to current script directory print(os.path.abspath(os.curdir)) df_normunits = pd.read_excel('Normunits.xlsx', sheet_name=bldgtype) numunits_vals = df_normunits[df_normunits['Normunit'] == df_measure['Normunit'].unique()[0]][['Value', 'Msr']] +normunit = df_measure['Normunit'].unique()[0] + +#%% +################################################################################################ +################################################################################################ +# 10/15/2025 CEDARS Hourly consumption output reformatting request +print('reformatting hourly data for CEDARS loadshape format..') +# use the hourly data before long2wide pivot transform +converted_long_df = pd.DataFrame() + +for i in range(0,len(fyr_hrly.columns)): + + #isolate single column + hrly_df = pd.DataFrame(fyr_hrly.iloc[:,i]) + + #create separate metadata columns + col_names = hrly_df.columns[0].split('/') + + #create new key column for merge + hrly_df['hr in 8760'] = (hrly_df.index) + 1 + + #merge based on "hr in 8760" column, the 8760 map + hrly_mapped = pd.merge(hrly_df, annual_map, on='hr in 8760') + + cohort = parse_measure_name(col_names[1]) + + #rename / rearrange columns + hrly_mapped.rename(columns={hrly_mapped.columns[0]: 'Total_Elec_Consumption'}, inplace=True) + hrly_mapped['BldgLoc'] = col_names[0] + hrly_mapped['BldgType'] = cohort['BldgType'] + hrly_mapped['BldgHVAC'] = cohort['BldgHVAC'] + hrly_mapped['BldgVint'] = cohort['BldgVint'] + hrly_mapped['TechGroup'] = cohort['Measure'] + hrly_mapped['Measure Group Name'] =col_names[1] #use this to look up tech group tech type + hrly_mapped['TechID'] = col_names[2] + hrly_mapped['file'] = col_names[3] + #3/3/2026 update, extract RunPeriod Start Day from IDF file for a particular simulation, and add as a column in the hourly mapped df + hrly_mapped['RunPeriod Start Day'] = col_names[4] + + converted_long_df = pd.concat([converted_long_df, hrly_mapped]) + + # #transform data format + # hrly_wide = long2wide_pivot(hrly_mapped, hrly_mapped.columns[0]) + + # #add meta data col + # hrly_wide['BldgLoc'] = col_names[0] + # hrly_wide['BldgType'] = col_names[1] + # hrly_wide['TechID'] = col_names[2] + # hrly_wide['file'] = col_names[3] + + # #append to master df + # #converted_df = converted_df.append(hrly_wide) #deprecated method + # converted_df = pd.concat([converted_df, hrly_wide]) + print(f"col {i} long format loaded.") + +#%% +#Setup a lookup using Measure Group name, to lookup for TechGroup_ee, TechType_ee +TechGroup_lookup_map = df_measure.set_index('Measure Group Name')['TechGroup_ee'].to_dict() +TechType_lookup_map = df_measure.set_index('Measure Group Name')['TechType_ee'].to_dict() + +#add corresponding TechGroup and TechType +converted_long_df['TechGroup'] = converted_long_df['Measure Group Name'].map(TechGroup_lookup_map) +converted_long_df['TechType'] = converted_long_df['Measure Group Name'].map(TechType_lookup_map) +#%% + +#convert from J to kWh +converted_long_df['Total_Elec_Consumption'] = converted_long_df['Total_Elec_Consumption']/3600000 +#%% +#measure specific normalizing units table +# df_numunits = df_normunits[df_normunits['Msr']==measure_name] + +# if len(df_numunits) == 1: +# normunit = df_numunits['Normunit'].unique()[0] +# numunits = df_numunits['Value'].unique()[0] +# elif len(df_numunits) > 1: +# pass #come back to this with Com (multiple building types) + +#%% if len(numunits_vals) == 1: numunits = list(numunits_vals['Value'])[0] + print(f'normunit is {normunit}, numunit is {numunits}.') elif (measure_name == 'Wall Insulation') or (measure_name == 'Ceiling Insulation'): numunits = list(numunits_vals[numunits_vals['Msr'] == measure_name]['Value'])[0] + print(f'normunit is {normunit}, numunits is varied by CZ') +elif normunit == 'Each': + numunits = 1 #added numunits for measures with normunit "each" + print('normunit is Each. Setting numunits to 1.') else: - pass + normunit = 'Each' #If normalizing unit isn't anything else, put default as each + numunits = 1 + # %% +##Long format data norm unit field updates + +#num unit will be per dwelling, so use roof area / num of dwellings (2 for SFM, DMo, 24 for MFm) +converted_long_df['Normunit'] = normunit +converted_long_df['Numunits'] = numunits/2 + +#%% +#need to divide each 8760 by its annual and its corresponding numunit +#1. grouby to find sum of each table via unique ID +#2. merge as a new col in long df +#3, divide and clean up final columns + +#convert to UEC by applying numunits +converted_long_df['UEC'] = converted_long_df['Total_Elec_Consumption'] / converted_long_df['Numunits'] + +#%% +df_long = converted_long_df.sort_values(['BldgLoc', 'BldgHVAC', 'TechID', 'hr in 8760']) + +#%% +#create groupby ids for each 8760 set +df_long['set_id'] = (df_long['hr in 8760'].eq(1) + .groupby([df_long['BldgLoc'], df_long['BldgHVAC'], df_long['TechID']]) + .cumsum()) +#calculate annual UEC +df_long['annual_sum'] = (df_long + .groupby(['BldgLoc', 'BldgHVAC', 'TechID', 'set_id'])['UEC'] + .transform('sum')) + +#%% +#Calculate unitzed 8760 values based on annual sum of 8760 +df_long['UECproportion'] = df_long['UEC'] / df_long['annual_sum'] +#%% +#rearrange / true-up columns +#source year mapping: +StartDayToSourceYear = { + "Monday": 2018, #Basis year for 2024 electric ACCs + "Tuesday": 2013, #2013 or 2019 could be used + "Wednesday": 2020, #Basis for 2022/2021 electric ACCs + "Thursday": 2009, #Per CEC's Nonres/MFm ACM Reference Manual + "Friday": 2010, #2016 is Friday but a leap year, so this should be either 2010 or 2021 + "Saturday": 2011, #Next Saturday option is 2022 because it is skipped between 2016 and 2017 because 2016 is a leap year + "Sunday": 2017 #2012 is a leap year, suggest using 2017 +} + +df_long['Sector'] = 'Res' #this is DMo script, so Sector = Res +df_long['Type'] = 'Whole Building' +df_long['Source Year'] = df_long['RunPeriod Start Day'].map(StartDayToSourceYear) + +df_long.rename(columns={'hr in 8760': 'Hour of Year'}, inplace=True) + +#final table fields round-up +#note: Numunits omitted from draft long table in the final table, kept UEC for plotting +df_long_final = df_long[['Sector', 'BldgType','BldgVint','BldgHVAC','BldgLoc','Normunit', + 'Type', 'Source Year', 'TechGroup', 'TechType','TechID', + 'Hour of Year','UEC','UECproportion']] + + + +#%% +#export CEDARS long 8760 csv + +os.chdir(os.path.dirname(__file__)) #resets to current script directory +print(os.path.abspath(os.curdir)) + +#df_long_final.to_csv('CEDARS_long_ls_DMo.csv', index=False) #enable if just need csv export +#3/4/2026 Dan P. on CEDARS - need to provide as zip format +import zipfile + +zip_filename = 'CEDARS_LoadShape_DMo.zip' +csv_filename = 'CEDARS_LoadShape_DMo.csv' + +print('writing CEDARS long 8760 csv into zip format..') +#create the zip and write the csv into it +with zipfile.ZipFile(zip_filename, 'w', compression=zipfile.ZIP_DEFLATED) as zipf: + #Open a file inside the zip and write CSV to it + with zipf.open(csv_filename, 'w') as f: + df_long_final.to_csv(f, index=False) + +print(f'Zip file {zip_filename} created with {csv_filename} inside.') +print('CEDARS long 8760 csv exported.') +################################################################################################ +################################################################################################ +#%% ##Annual Data final field fixes #note normunit = building area (conditioned) sim_annual_v1['SizingID'] = 'None' sim_annual_v1['tstat'] = 0 #now Norm unit is read from measure master table -sim_annual_v1['normunit'] = df_measure['Normunit'].unique()[0] +sim_annual_v1['normunit'] = normunit #make this automatic as well sim_annual_v1['measarea'] = 2484 #from DMo model outputs htmls @@ -477,9 +654,9 @@ def end_use_rearrange(df_in): # %% #create raw merged current_msr_mat #need to delete/drop incorrect sets -if np.NaN in list(StdTechIDs['StdTechID'].unique()): +if np.nan in list(StdTechIDs['StdTechID'].unique()): df_measure_set_full = pd.merge(metadata_pre_full, metadata_msr_full, on=['BldgLoc','BldgType','BldgVint','BldgHVAC','SizingID','tstat','normunit']) -elif np.NaN in list(PreTechIDs['PreTechID'].unique()): +elif np.nan in list(PreTechIDs['PreTechID'].unique()): df_measure_set_full = pd.merge(metadata_std_full, metadata_msr_full, on=['BldgLoc','BldgType','BldgVint','BldgHVAC','SizingID','tstat','normunit']) else: df_measure_baseline_full = pd.merge(metadata_pre_full, metadata_std_full, on=['BldgLoc','BldgType','BldgVint','BldgHVAC','SizingID','tstat','normunit']) @@ -490,9 +667,9 @@ def end_use_rearrange(df_in): TechID_triplets = df_measure[['EnergyImpactID','MeasureID', 'PreTechID', 'StdTechID','MeasTechID']].drop_duplicates() # %% #to match TechID triplets, merge on these 3 fields, keeping only valid TechID Triplets -if np.NaN in list(StdTechIDs['StdTechID'].unique()): +if np.nan in list(StdTechIDs['StdTechID'].unique()): current_msr_mat_proto = pd.merge(df_measure_set_full, TechID_triplets, on=['PreTechID','MeasTechID']) -elif np.NaN in list(PreTechIDs['PreTechID'].unique()): +elif np.nan in list(PreTechIDs['PreTechID'].unique()): current_msr_mat_proto = pd.merge(df_measure_set_full, TechID_triplets, on=['StdTechID','MeasTechID']) else: current_msr_mat_proto = pd.merge(df_measure_set_full, TechID_triplets, on=['PreTechID','StdTechID','MeasTechID']) diff --git a/scripts/data transformation/MFm.py b/scripts/data transformation/MFm.py index f2b3b01f..9b1d9bff 100644 --- a/scripts/data transformation/MFm.py +++ b/scripts/data transformation/MFm.py @@ -6,10 +6,14 @@ import sys import datetime as dt os.chdir(os.path.dirname(__file__)) #resets to current script directory +#%% +import helper_functions +from importlib import reload +reload(helper_functions) # %% -#Read master workbook for measure / tech list -df_master = pd.read_excel('DEER_EnergyPlus_Modelkit_Measure_list.xlsx', sheet_name='Measure_list', skiprows=4) - +#Read master workbook for measure / tech list (note example commented line for specific measures) +df_master = pd.read_excel('DEER_EnergyPlus_Modelkit_Measure_list_working.xlsx', sheet_name='Measure_list', skiprows=4) +#df_master = pd.read_excel('DEER_EnergyPlus_Modelkit_Measure_list_working_eff_doors.xlsx', sheet_name='Measure_list', skiprows=4) measure_group_names = list(df_master['Measure Group Name'].unique()) # %% @@ -19,18 +23,18 @@ #Shows list of measure names print(measures) #%% -#Define measure name here -measure_name = 'Wall Furnace' - +#Define measure name here (note example commented line for specific measures) +measure_name = 'SEER Rated AC/HP' +#measure_name = 'Efficient Doors' # %% -#MFm only script -####Define path +#MFm only script +####Define path (note example commented line for specific measures) os.chdir(os.path.dirname(__file__)) #resets to current script directory print(os.path.abspath(os.curdir)) os.chdir("../..") #go up two directory print(os.path.abspath(os.curdir)) - -path = 'residential measures/SWHC049-03 SEER Rated AC HP_MFm_Ex' +path = 'residential measures/SWHC049-03 SEER Rated AC HP/SWHC049-03 SEER Rated AC HP_DMo' +#path = 'residential measures/SWBE013-01 Efficient Doors/SWBE013-01 Efficient Doors_MFm_Ex' # %% #extract only the 5th portion of the measure group name for expected_att #split argument 4 means only split 4 times maximum @@ -250,13 +254,17 @@ def end_use_rearrange(df_in): #loop path of each file, read corresponding file full_path = hrly_path + "/" + split_meta_cols_eu.iloc[i][0] + "/" + split_meta_cols_eu.iloc[i][1] + "/" + split_meta_cols_eu.iloc[i][2] + "/instance-var.csv" df = pd.read_csv(full_path, low_memory=False) + + #3/3/2026 update, extract RunPeriod Start Day from IDF file for a particular simulation + idf_path = hrly_path + "/" + split_meta_cols_eu.iloc[i][0] + "/" + split_meta_cols_eu.iloc[i][1] + "/" + split_meta_cols_eu.iloc[i][2] + "/instance.idf" + runperiod_start_day = helper_functions.get_runperiod_start_day(idf_path) #extract the last column (the total elec hrly profile) #if for enduse hourly, then extract the relevant end use column extracted_df = pd.DataFrame(df.iloc[:,-1]) #create the column name based on the permutations - col_name = split_meta_cols_eu.iloc[i][0] + "/" + split_meta_cols_eu.iloc[i][1] + "/" + split_meta_cols_eu.iloc[i][2] + "/instance-var.csv" + col_name = split_meta_cols_eu.iloc[i][0] + "/" + split_meta_cols_eu.iloc[i][1] + "/" + split_meta_cols_eu.iloc[i][2] + "/instance-var.csv" + "/"+runperiod_start_day #change column name extracted_df = extracted_df.set_axis([col_name],axis=1) @@ -340,20 +348,97 @@ def end_use_rearrange(df_in): 'hr07', 'hr08', 'hr09', 'hr10', 'hr11', 'hr12', 'hr13', 'hr14', 'hr15', 'hr16', 'hr17', 'hr18', 'hr19', 'hr20', 'hr21', 'hr22', 'hr23', 'hr24']].copy() -# %% +#%% +#3/4/2026 update: move normalizing unit conversion to here for better organization ##STEP 3: Normalizing Units bldgtype = 'MFm' os.chdir(os.path.dirname(__file__)) #resets to current script directory print(os.path.abspath(os.curdir)) df_normunits = pd.read_excel('Normunits.xlsx', sheet_name=bldgtype) -numunits_vals = df_normunits[df_normunits['Normunit'] == df_measure['Normunit'].unique()[0]][['CZ','Value', 'Msr','BldgVint']] +numunits_vals = df_normunits[df_normunits['Normunit'] == df_measure['Normunit'].unique()[0]][['BldgLoc','Value', 'Msr','BldgVint']] +#measure specific normalizing units table +df_numunits = df_normunits[df_normunits['Msr']==measure_name] +normunit = df_measure['Normunit'].unique()[0] + + +#%% +################################################################################################ +################################################################################################ +# 12/23/2025 CEDARS hourly consumption output reformatting + +# use the hourly data before long2wide pivot transform +converted_long_df = pd.DataFrame() + +for i in range(0,len(fyr_hrly.columns)): + + #isolate single column + hrly_df = pd.DataFrame(fyr_hrly.iloc[:,i]) + + #create separate metadata columns + col_names = hrly_df.columns[0].split('/') + + #create new key column for merge + hrly_df['hr in 8760'] = (hrly_df.index) + 1 + + #merge based on "hr in 8760" column, the 8760 map + hrly_mapped = pd.merge(hrly_df, annual_map, on='hr in 8760') + + cohort = parse_measure_name(col_names[1]) + + #rename / rearrange columns + hrly_mapped.rename(columns={hrly_mapped.columns[0]: 'Total_Elec_Consumption'}, inplace=True) + hrly_mapped['BldgLoc'] = col_names[0] + hrly_mapped['BldgType'] = cohort['BldgType'] + hrly_mapped['BldgHVAC'] = cohort['BldgHVAC'] + hrly_mapped['BldgVint'] = cohort['BldgVint'] + hrly_mapped['TechGroup'] = cohort['Measure'] + hrly_mapped['Measure Group Name'] =col_names[1] #use this to look up tech group tech type + hrly_mapped['TechID'] = col_names[2] + hrly_mapped['file'] = col_names[3] + #3/3/2026 update, extract RunPeriod Start Day from IDF file for a particular simulation, and add as a column in the hourly mapped df + hrly_mapped['RunPeriod Start Day'] = col_names[4] + + converted_long_df = pd.concat([converted_long_df, hrly_mapped]) + + # #transform data format + # hrly_wide = long2wide_pivot(hrly_mapped, hrly_mapped.columns[0]) + + # #add meta data col + # hrly_wide['BldgLoc'] = col_names[0] + # hrly_wide['BldgType'] = col_names[1] + # hrly_wide['TechID'] = col_names[2] + # hrly_wide['file'] = col_names[3] + + # #append to master df + # #converted_df = converted_df.append(hrly_wide) #deprecated method + # converted_df = pd.concat([converted_df, hrly_wide]) + print(f"col {i} long format loaded.") + +#%% +#Setup a lookup using Measure Group name, to lookup for TechGroup_ee, TechType_ee +TechGroup_lookup_map = df_measure.set_index('Measure Group Name')['TechGroup_ee'].to_dict() +TechType_lookup_map = df_measure.set_index('Measure Group Name')['TechType_ee'].to_dict() + +#add corresponding TechGroup and TechType +converted_long_df['TechGroup'] = converted_long_df['Measure Group Name'].map(TechGroup_lookup_map) +converted_long_df['TechType'] = converted_long_df['Measure Group Name'].map(TechType_lookup_map) +#%% +#convert from J to kWh +converted_long_df['Total_Elec_Consumption'] = converted_long_df['Total_Elec_Consumption']/3600000 + #%% #create numunits object based on what normunit it uses. #numunits can be a single value, or a dictionary -if len(numunits_vals) == 1: +if len(df_numunits) == 1: numunits = list(numunits_vals['Value'])[0] +elif len(df_numunits) > 1: + #for SEER rated ACHP, CZ specific Cap-Ton + normunit = df_numunits['Normunit'].unique()[0] + numunits = df_numunits.set_index('BldgLoc')['Value'].to_dict() #numunit is a dictionary + print(f'CZ-dependent numunits for this normalizing unit {normunit}') elif (measure_name == 'Wall Insulation') or (measure_name == 'Ceiling Insulation'): numunits = list(numunits_vals[numunits_vals['Msr'] == measure_name]['Value'])[0] + print(f'normunit is {normunit}, numunits is {numunits}.') elif measure_name == 'PTAC / PTHP': #create aligned lists for numunit dictionary cz = list(numunits_vals['CZ']) @@ -361,9 +446,99 @@ def end_use_rearrange(df_in): nvals = list(numunits_vals['Value']) #create dictionary of {(cz,vintage):numunits} numunits = {(cz[i],vint[i]):nvals[i] for i in range(len(cz))} + print(f'normunit is {normunit}, numunits is varied by CZ.') +elif normunit == 'Each': + numunits = 1 #added numunits for measures with normunit "each" + print('normunit is Each. Setting numunits to 1.') +else: + normunit = 'Each' #If normalizing unit isn't anything else, put default as each + numunits = 1 + + +#%% +##Long format data norm unit field updates + +#add num unit will be per dwelling, so use numunit / num of dwellings (2 for SFM, DMo, 24 for MFm) +converted_long_df['Normunit'] = normunit +if type(numunits) == dict: + converted_long_df['Numunits'] = converted_long_df['BldgLoc'].map(numunits)/24 else: - pass + converted_long_df['Numunits'] = numunits/24 + +#%% +#Long format final field updates +#need to divide each 8760 by its annual and its corresponding numunit +#1. grouby to find sum of each table via unique ID +#2. merge as a new col in long df +#3, divide and clean up final columns + +#convert to UEC by applying numunits +converted_long_df['UEC'] = converted_long_df['Total_Elec_Consumption'] / converted_long_df['Numunits'] + +#sort +df_long = converted_long_df.sort_values(['BldgLoc', 'BldgHVAC', 'TechID', 'hr in 8760']) + +#%% +#create groupby ids for each 8760 set +df_long['set_id'] = (df_long['hr in 8760'].eq(1) + .groupby([df_long['BldgLoc'], df_long['BldgHVAC'], df_long['TechID']]) + .cumsum()) +#calculate annual UEC +df_long['annual_sum'] = (df_long + .groupby(['BldgLoc', 'BldgHVAC', 'TechID', 'set_id'])['UEC'] + .transform('sum')) + +#%% +#Calculate unitzed 8760 values based on annual sum of 8760 +df_long['UECproportion'] = df_long['UEC'] / df_long['annual_sum'] +#%% +#rearrange / true-up columns +#source year mapping: +StartDayToSourceYear = { + "Monday": 2018, #Basis year for 2024 electric ACCs + "Tuesday": 2013, #2013 or 2019 could be used + "Wednesday": 2020, #Basis for 2022/2021 electric ACCs + "Thursday": 2009, #Per CEC's Nonres/MFm ACM Reference Manual + "Friday": 2010, #2016 is Friday but a leap year, so this should be either 2010 or 2021 + "Saturday": 2011, #Next Saturday option is 2022 because it is skipped between 2016 and 2017 because 2016 is a leap year + "Sunday": 2017 #2012 is a leap year, suggest using 2017 +} + +df_long['Sector'] = 'Res' #this is MFm script, so Sector = Res +df_long['Type'] = 'Whole Building' +df_long['Source Year'] = df_long['RunPeriod Start Day'].map(StartDayToSourceYear) + +df_long.rename(columns={'hr in 8760': 'Hour of Year'}, inplace=True) + +#final table fields round-up +#note: Numunits omitted from draft long table in the final table, kept UEC for plotting +df_long_final = df_long[['Sector', 'BldgType','BldgVint','BldgHVAC','BldgLoc','Normunit', + 'Type', 'Source Year', 'TechGroup', 'TechType','TechID', + 'Hour of Year','UEC','UECproportion']] +#%% +#export CEDARS long 8760 csv + +os.chdir(os.path.dirname(__file__)) #resets to current script directory +print(os.path.abspath(os.curdir)) + +#df_long_final.to_csv('CEDARS_long_ls_MFm.csv', index=False) #enable if just need csv export +#3/4/2026 Dan P. on CEDARS - need to provide as zip format +import zipfile + +zip_filename = 'CEDARS_LoadShape_MFm.zip' +csv_filename = 'CEDARS_LoadShape_MFm.csv' +print('writing CEDARS long 8760 csv into zip format..') +#create the zip and write the csv into it +with zipfile.ZipFile(zip_filename, 'w', compression=zipfile.ZIP_DEFLATED) as zipf: + #Open a file inside the zip and write CSV to it + with zipf.open(csv_filename, 'w') as f: + df_long_final.to_csv(f, index=False) + +print(f'Zip file {zip_filename} created with {csv_filename} inside.') +print('CEDARS long 8760 csv exported.') +################################################################################################ +################################################################################################ # %% ##Annual Data final field fixes #note normunit = building area (conditioned) @@ -492,9 +667,9 @@ def end_use_rearrange(df_in): # %% #create raw merged current_msr_mat #need to delete/drop incorrect sets -if np.NaN in list(StdTechIDs['StdTechID'].unique()): +if np.nan in list(StdTechIDs['StdTechID'].unique()): df_measure_set_full = pd.merge(metadata_pre_full, metadata_msr_full, on=['BldgLoc','BldgType','BldgVint','BldgHVAC','SizingID','tstat','normunit']) -elif np.NaN in list(PreTechIDs['PreTechID'].unique()): +elif np.nan in list(PreTechIDs['PreTechID'].unique()): df_measure_set_full = pd.merge(metadata_std_full, metadata_msr_full, on=['BldgLoc','BldgType','BldgVint','BldgHVAC','SizingID','tstat','normunit']) else: df_measure_baseline_full = pd.merge(metadata_pre_full, metadata_std_full, on=['BldgLoc','BldgType','BldgVint','BldgHVAC','SizingID','tstat','normunit']) @@ -505,9 +680,9 @@ def end_use_rearrange(df_in): TechID_triplets = df_measure[['EnergyImpactID','MeasureID', 'PreTechID', 'StdTechID','MeasTechID']].drop_duplicates() # %% #to match TechID triplets, merge on these 3 fields, keeping only valid TechID Triplets -if np.NaN in list(StdTechIDs['StdTechID'].unique()): +if np.nan in list(StdTechIDs['StdTechID'].unique()): current_msr_mat_proto = pd.merge(df_measure_set_full, TechID_triplets, on=['PreTechID','MeasTechID']) -elif np.NaN in list(PreTechIDs['PreTechID'].unique()): +elif np.nan in list(PreTechIDs['PreTechID'].unique()): current_msr_mat_proto = pd.merge(df_measure_set_full, TechID_triplets, on=['StdTechID','MeasTechID']) else: current_msr_mat_proto = pd.merge(df_measure_set_full, TechID_triplets, on=['PreTechID','StdTechID','MeasTechID']) @@ -649,3 +824,5 @@ def end_use_rearrange(df_in): sim_annual_final.to_csv('sim_annual.csv', index=False) sim_hourly_final.to_csv('sim_hourly_wb.csv', index=False) + +# %% diff --git a/scripts/data transformation/Normunits.xlsx b/scripts/data transformation/Normunits.xlsx index 0473b7c7..ca3159b8 100644 Binary files a/scripts/data transformation/Normunits.xlsx and b/scripts/data transformation/Normunits.xlsx differ diff --git a/scripts/data transformation/SFm.py b/scripts/data transformation/SFm.py index 3e06e37c..bce58c60 100644 --- a/scripts/data transformation/SFm.py +++ b/scripts/data transformation/SFm.py @@ -6,10 +6,14 @@ import sys import datetime as dt os.chdir(os.path.dirname(__file__)) #resets to current script directory +#%% +import helper_functions +from importlib import reload +reload(helper_functions) # %% -#Read master workbook for measure / tech list -df_master = pd.read_excel('DEER_EnergyPlus_Modelkit_Measure_list.xlsx', sheet_name='Measure_list', skiprows=4) - +#Read master workbook for measure / tech list (note example commented line for specific measures) +df_master = pd.read_excel('DEER_EnergyPlus_Modelkit_Measure_list_working.xlsx', sheet_name='Measure_list', skiprows=4) +#df_master = pd.read_excel('DEER_EnergyPlus_Modelkit_Measure_list_working_eff_doors.xlsx', sheet_name='Measure_list', skiprows=4) measure_group_names = list(df_master['Measure Group Name'].unique()) # %% @@ -19,9 +23,9 @@ #Shows list of measure names print(measures) #%% -#Define measure name here -measure_name = 'Wall Furnace' - +#Define measure name here (note example commented line for specific measures) +measure_name = 'SEER Rated AC/HP' +#measure_name = 'Efficient Doors' # %% #SFm only script ####Define path @@ -33,6 +37,8 @@ #input the two subdirectory of SFm, one being 1975, the other 1985. If New vintage, input path at path_new and leave other blank. path_1975 = 'residential measures/SWHC049-03 SEER Rated AC HP_SFm_1975' path_1985 = 'residential measures/SWHC049-03 SEER Rated AC HP_SFm_1985' +# path_1975 = 'residential measures/SWBE013-01 Efficient Doors/SWBE013-01 Efficient Doors_SFm_1975' +# path_1985 = 'residential measures/SWBE013-01 Efficient Doors/SWBE013-01 Efficient Doors_SFm_1985' path_new = '' paths = [path_1975, path_1985] @@ -225,7 +231,7 @@ def end_use_rearrange(df): df_raw = pd.read_csv(path+'/'+'/results-summary.csv', usecols=['File Name']) num_runs = len(df_raw['File Name'].dropna().unique()) - 1 #Read annual data - annual_df = pd.read_csv(path+'/'+'/results-summary.csv', nrows=num_runs, skiprows=num_runs+2) + annual_df = pd.read_csv(path+'/results-summary.csv', nrows=num_runs, skiprows=num_runs+2) split_meta_cols_eu = annual_df['File Name'].str.split('/', expand=True) #looping over multiple folders/cohort cases, use a list @@ -265,17 +271,16 @@ def end_use_rearrange(df): print(os.path.abspath(os.curdir)) sim_hourly_raw = pd.DataFrame() - +hourly_df = pd.DataFrame(index=range(0,8760)) for path in paths: print(f'processing data in {path}') hrly_path = path + '/runs' - #extract data per bldgtype-bldghvac-bldgvint group - hourly_df = pd.DataFrame(index=range(0,8760)) + #extract data per bldgtype-bldghvac-bldgvint group #extract num_runs / split_meta_cols_eu - df_raw = pd.read_csv(path+'/'+'/results-summary.csv', usecols=['File Name']) + df_raw = pd.read_csv(path+'/'+'results-summary.csv', usecols=['File Name']) num_runs = len(df_raw['File Name'].dropna().unique()) - 1 - annual_df = pd.read_csv(path+'/'+'/results-summary.csv', nrows=num_runs, skiprows=num_runs+2) + annual_df = pd.read_csv(path+'/'+'results-summary.csv', nrows=num_runs, skiprows=num_runs+2) split_meta_cols_eu = annual_df['File Name'].str.split('/', expand=True) for i in range(0,num_runs): print(f"merging record {i}") @@ -283,13 +288,17 @@ def end_use_rearrange(df): #loop path of each file, read corresponding file full_path = hrly_path + "/" + split_meta_cols_eu.iloc[i][0] + "/" + split_meta_cols_eu.iloc[i][1] + "/" + split_meta_cols_eu.iloc[i][2] + "/instance-var.csv" df = pd.read_csv(full_path, low_memory=False) + + #3/3/2026 update, extract RunPeriod Start Day from IDF file for a particular simulation + idf_path = hrly_path + "/" + split_meta_cols_eu.iloc[i][0] + "/" + split_meta_cols_eu.iloc[i][1] + "/" + split_meta_cols_eu.iloc[i][2] + "/instance.idf" + runperiod_start_day = helper_functions.get_runperiod_start_day(idf_path) #extract the last column (the total elec hrly profile) #if for enduse hourly, then extract the relevant end use column extracted_df = pd.DataFrame(df.iloc[:,-1]) #create the column name based on the permutations - col_name = split_meta_cols_eu.iloc[i][0] + "/" + split_meta_cols_eu.iloc[i][1] + "/" + split_meta_cols_eu.iloc[i][2] + "/instance-var.csv" + col_name = split_meta_cols_eu.iloc[i][0] + "/" + split_meta_cols_eu.iloc[i][1] + "/" + split_meta_cols_eu.iloc[i][2] + "/instance-var.csv" + "/"+runperiod_start_day #change column name extracted_df = extracted_df.set_axis([col_name],axis=1) @@ -302,40 +311,40 @@ def end_use_rearrange(df): #left-merge onto big df hourly_df = hourly_df.merge(extracted_df, left_index=True, right_index=True) +#%% +fyr_hrly = hourly_df +#rearrange 1-column 8760 format to 365x24 wide format for all runs in hourly_df +converted_df = pd.DataFrame() - fyr_hrly = hourly_df - #rearrange 1-column 8760 format to 365x24 wide format for all runs in hourly_df - converted_df = pd.DataFrame() - - for i in range(0,len(fyr_hrly.columns)): - - #isolate single column - hrly_df = pd.DataFrame(fyr_hrly.iloc[:,i]) - - #create separate metadata columns - col_names = hrly_df.columns[0].split('/') - - #create new key column for merge - hrly_df['hr in 8760'] = (hrly_df.index) + 1 - - #merge based on "hr in 8760" column, the 8760 map - hrly_mapped = pd.merge(hrly_df, annual_map, on='hr in 8760') - - #transform data format - hrly_wide = long2wide_pivot(hrly_mapped, hrly_mapped.columns[0]) - - #add meta data col - hrly_wide['BldgLoc'] = col_names[0] - hrly_wide['BldgType'] = col_names[1] - hrly_wide['TechID'] = col_names[2] - hrly_wide['file'] = col_names[3] - - #append to master df - #converted_df = converted_df.append(hrly_wide) #deprecated method - converted_df = pd.concat([converted_df, hrly_wide]) - print(f"col {i} transformed.") +for i in range(0,len(fyr_hrly.columns)): + + #isolate single column + hrly_df = pd.DataFrame(fyr_hrly.iloc[:,i]) + + #create separate metadata columns + col_names = hrly_df.columns[0].split('/') + + #create new key column for merge + hrly_df['hr in 8760'] = (hrly_df.index) + 1 + + #merge based on "hr in 8760" column, the 8760 map + hrly_mapped = pd.merge(hrly_df, annual_map, on='hr in 8760') + + #transform data format + hrly_wide = long2wide_pivot(hrly_mapped, hrly_mapped.columns[0]) + + #add meta data col + hrly_wide['BldgLoc'] = col_names[0] + hrly_wide['BldgType'] = col_names[1] + hrly_wide['TechID'] = col_names[2] + hrly_wide['file'] = col_names[3] + + #append to master df + #converted_df = converted_df.append(hrly_wide) #deprecated method + converted_df = pd.concat([converted_df, hrly_wide]) + print(f"col {i} transformed.") - sim_hourly_raw = pd.concat([sim_hourly_raw, converted_df]) +sim_hourly_raw = pd.concat([sim_hourly_raw, converted_df]) # %% @@ -383,8 +392,24 @@ def end_use_rearrange(df): #separate into 1s and 2s for hourly sim_hourly_wb_1s_v1 = sim_hourly_wb_v1[sim_hourly_wb_v1['BldgType'].str.contains('&1&')].copy() sim_hourly_wb_2s_v1 = sim_hourly_wb_v1[sim_hourly_wb_v1['BldgType'].str.contains('&2&')].copy() -# %% -##STEP 3: 1-S, 2-S combination, and Normalizing Units + + +#%% +#3/4/2026 update: move normalizing unit conversion to here for better organization +##Step 3: Norm units +#Read from normunit table +bldgtype = 'SFm' +os.chdir(os.path.dirname(__file__)) #resets to current script directory +print(os.path.abspath(os.curdir)) +df_normunits = pd.read_excel('Normunits.xlsx', sheet_name=bldgtype) +numunits_vals = df_normunits[df_normunits['Normunit'] == df_measure['Normunit'].unique()[0]][['BldgLoc','Value', 'Msr','BldgVint']] +normunit = df_measure['Normunit'].unique()[0] +#measure specific normalizing units table +df_numunits = df_normunits[df_normunits['Msr']==measure_name] + + +#%% +# 1-S, 2-S combination # annual data rename_1s_fields = {'kwh_tot':'kwh_tot1', 'kwh_ltg':'kwh_ltg1', @@ -434,46 +459,250 @@ def end_use_rearrange(df): sim_annual_1s = sim_annual_1s_v1.rename(columns=rename_1s_fields) sim_annual_2s = sim_annual_2s_v1.rename(columns=rename_2s_fields) -# %% -####Finalize Norm units -#Read from normunit table -bldgtype = 'SFm' + +#%% +################################################################################################ +################################################################################################ +#12/22/2025 CEDARS Hourly consumption output reformatting request +# use the hourly data before long2wide pivot transform + +converted_long_df = pd.DataFrame() +for i in range(0,len(fyr_hrly.columns)): + + #isolate single column + hrly_df = pd.DataFrame(fyr_hrly.iloc[:,i]) + + #create separate metadata columns + col_names = hrly_df.columns[0].split('/') + + #create new key column for merge + hrly_df['hr in 8760'] = (hrly_df.index) + 1 + + #merge based on "hr in 8760" column, the 8760 map + hrly_mapped = pd.merge(hrly_df, annual_map, on='hr in 8760') + + cohort = parse_measure_name(col_names[1]) + + #rename / rearrange columns + hrly_mapped.rename(columns={hrly_mapped.columns[0]: 'Total_Elec_Consumption'}, inplace=True) + hrly_mapped['BldgLoc'] = col_names[0] + hrly_mapped['BldgType'] = cohort['BldgType'] + hrly_mapped['Story'] = cohort['Story'] #SFm exclusive flag for wt average later + hrly_mapped['BldgHVAC'] = cohort['BldgHVAC'] + hrly_mapped['BldgVint'] = cohort['BldgVint'] + hrly_mapped['TechGroup'] = cohort['Measure'] + hrly_mapped['Measure Group Name'] =col_names[1] #use this to look up tech group tech type + hrly_mapped['TechID'] = col_names[2] + hrly_mapped['file'] = col_names[3] + #3/3/2026 update, extract RunPeriod Start Day from IDF file for a particular simulation, and add as a column in the hourly mapped df + hrly_mapped['RunPeriod Start Day'] = col_names[4] + + converted_long_df = pd.concat([converted_long_df, hrly_mapped]) + + print(f"col {i} long format loaded.") + +#%% +#convert from J to kWh +converted_long_df['Total_Elec_Consumption'] = converted_long_df['Total_Elec_Consumption']/3600000 + +#%% +#Setup a lookup using Measure Group name, to lookup for TechGroup_ee, TechType_ee +TechGroup_lookup_map = df_measure.set_index('Measure Group Name')['TechGroup_ee'].to_dict() +TechType_lookup_map = df_measure.set_index('Measure Group Name')['TechType_ee'].to_dict() + + +#%% +#slim down some columns +df_long = converted_long_df[['Total_Elec_Consumption', 'hr in 8760', 'BldgLoc', 'BldgType', 'Story', 'BldgHVAC', + 'BldgVint', 'Measure Group Name', 'TechID', 'RunPeriod Start Day']] + +#separate into 1s and 2s +df_long_1s = df_long[df_long['Story'].str.contains('1')].copy() +df_long_2s = df_long[df_long['Story'].str.contains('2')].copy() + +df_long_1s.rename(columns={'Total_Elec_Consumption':'kWh_1s'},inplace=True) +df_long_2s.rename(columns={'Total_Elec_Consumption':'kWh_2s'},inplace=True) + +#%% +#create a temp-ID for merge +df_long_1s['id'] = (df_long_1s['BldgLoc']+'_' + +df_long_1s['BldgType']+'_' + +df_long_1s['BldgHVAC']+'_' + +df_long_1s['TechID']+'_' + +df_long_1s['hr in 8760'].astype(str)) + +df_long_2s['id'] = (df_long_2s['BldgLoc']+'_' + +df_long_2s['BldgType']+'_' + +df_long_2s['BldgHVAC']+'_' + +df_long_2s['TechID']+'_' + +df_long_2s['hr in 8760'].astype(str)) + +#%% +#combined 1s 2s cols side by side +df_long_1s2s_merge = df_long_1s.merge(df_long_2s, on=['id'], how='inner') + +df_long_1s2s_cleaned = df_long_1s2s_merge[['BldgLoc_x', + 'BldgType_x', + 'BldgHVAC_x', + 'BldgVint_x', + 'hr in 8760_x', + 'Measure Group Name_x', + 'RunPeriod Start Day_x', + 'TechID_x', 'id','kWh_1s','kWh_2s']].copy() + +#%% +df_long_1s2s_cleaned.rename(columns={'BldgLoc_x':'BldgLoc', + 'BldgType_x':'BldgType', + 'BldgHVAC_x':'BldgHVAC', + 'BldgVint_x':'BldgVint', + 'hr in 8760_x':'hr in 8760', + 'Measure Group Name_x':'Measure Group Name', + 'RunPeriod Start Day_x':'RunPeriod Start Day', + 'TechID_x':'TechID'}, inplace=True) +#%% +#read-in story weights for Res SFm os.chdir(os.path.dirname(__file__)) #resets to current script directory print(os.path.abspath(os.curdir)) -df_normunits = pd.read_excel('Normunits.xlsx', sheet_name=bldgtype) -numunits_vals = df_normunits[df_normunits['Normunit'] == df_measure['Normunit'].unique()[0]][['CZ','Value', 'Msr','BldgVint']] +story_wts = pd.read_excel('NumStor2.xlsx', sheet_name='NumStor') +story_wts_f = story_wts[(story_wts['BldgType']=='SFm')&(story_wts['Story-flag']==1)][['BldgType','BldgVint','BldgLoc','numstor']] +#add in corresponding story weights +df_long_1s2s_with_wts = df_long_1s2s_cleaned.merge(story_wts_f, on=['BldgType','BldgVint','BldgLoc'], how='left') #%% +#calculated 1s 2s weighted column +#Note: method referred from R1_wt_NumStories_annual.sql in the savings calculations folder +df_long_1s2s_with_wts['kWh_numstor_wted'] = ( + (df_long_1s2s_with_wts['kWh_1s']*(2 - df_long_1s2s_with_wts['numstor'])) + + (df_long_1s2s_with_wts['kWh_2s']*(df_long_1s2s_with_wts['numstor']-1)) + ) + +#%% #create numunits object based on what normunit it uses. #numunits can be a single value, or a dictionary if len(numunits_vals) == 1: numunits = numunits_vals[0] +elif measure_name == 'SEER Rated AC/HP': + #for SEER rated ACHP, CZ specific Cap-Ton + normunit = df_numunits['Normunit'].unique()[0] + numunits = df_numunits.set_index('BldgLoc')['Value'].to_dict() #numunit is a dictionary + print(f'CZ-dependent numunits for this normalizing unit {normunit}') elif df_measure['Normunit'].unique()[0] == 'Area-ft2-BA': - cz = list(numunits_vals['CZ']) + cz = list(numunits_vals['BldgLoc']) nvals = list(numunits_vals['Value']) #create dictionary of {cz:values} numunits = {cz[i]:nvals[i] for i in range(len(cz))} + print(f'CZ-dependent numunits for this normalizing unit {normunit}') elif (measure_name == 'Wall Insulation') or (measure_name == 'Ceiling Insulation'): - #filter to the corresponding measure - numunits_vals = numunits_vals[numunits_vals['Msr'] == measure_name] - #create aligned lists for numunit dictionary - cz = list(numunits_vals['CZ']) - nvals = list(numunits_vals['Value']) - #create dictionary of {cz:values} - numunits = {cz[i]:nvals[i] for i in range(len(cz))} - + #create numunit dictionary + normunit = df_numunits['Normunit'].unique()[0] + numunits = df_numunits.set_index('BldgLoc')['Value'].to_dict() #numunit is a dictionary + print(f'CZ-dependent numunits for this normalizing unit {normunit}') elif measure_name == 'PTAC / PTHP': #create aligned lists for numunit dictionary - cz = list(numunits_vals['CZ']) + cz = list(numunits_vals['BldgLoc']) vint = list(numunits_vals['BldgVint']) nvals = list(numunits_vals['Value']) #create dictionary of {(cz,vintage):numunits} numunits = {(cz[i],vint[i]):nvals[i] for i in range(len(cz))} + print(f'CZ-dependent numunits for this normalizing unit {normunit}') +elif normunit == 'Each': + numunits = 1 + print('normunit is Each. Setting numunits to 1.') else: - pass + normunit = 'Each' #If normalizing unit isn't anything else, put default as each + numunits = 1 # %% +##CEDARS Long format data norm unit field updates +#num unit will be per dwelling, so use roof area / num of dwellings (2 for SFM, DMo, 24 for MFm) +df_long_1s2s_with_wts['Normunit'] = normunit +if type(numunits) == dict: + df_long_1s2s_with_wts['Numunits'] = (df_long_1s2s_with_wts['BldgLoc'].map(numunits))/2 +else: + df_long_1s2s_with_wts['Numunits'] = numunits/2 + +#%% +#need to divide each 8760 by its annual and its corresponding numunit +#1. grouby to find sum of each table via unique ID +#2. merge as a new col in long df +#3, divide and clean up final columns + +#convert to UEC by applying numunits +df_long_1s2s_with_wts['UEC'] = df_long_1s2s_with_wts['kWh_numstor_wted'] / df_long_1s2s_with_wts['Numunits'] +#%% +df_long = df_long_1s2s_with_wts.sort_values(['BldgLoc','BldgHVAC', 'TechID', 'hr in 8760']) + +#%% +#create groupby ids for each 8760 set +df_long['set_id'] = (df_long['hr in 8760'].eq(1) + .groupby([df_long['BldgLoc'], df_long['BldgHVAC'], df_long['TechID']]) + .cumsum()) +#calculate annual UEC +df_long['annual_sum'] = (df_long + .groupby(['BldgLoc', 'BldgHVAC', 'TechID', 'set_id'])['UEC'] + .transform('sum')) + +#%% +#Calculate unitzed 8760 values based on annual sum of 8760 +df_long['UECproportion'] = df_long['UEC'] / df_long['annual_sum'] +#%% + +#%% +#rearrange / true-up columns +#source year mapping: +StartDayToSourceYear = { + "Monday": 2018, #Basis year for 2024 electric ACCs + "Tuesday": 2013, #2013 or 2019 could be used + "Wednesday": 2020, #Basis for 2022/2021 electric ACCs + "Thursday": 2009, #Per CEC's Nonres/MFm ACM Reference Manual + "Friday": 2010, #2016 is Friday but a leap year, so this should be either 2010 or 2021 + "Saturday": 2011, #Next Saturday option is 2022 because it is skipped between 2016 and 2017 because 2016 is a leap year + "Sunday": 2017 #2012 is a leap year, suggest using 2017 +} + +df_long['TechGroup'] = df_long['Measure Group Name'].map(TechGroup_lookup_map) +df_long['TechType'] = df_long['Measure Group Name'].map(TechType_lookup_map) + +df_long['Sector'] = 'Res' #this is DMo script, so Sector = Res +df_long['Type'] = 'Whole Building' +df_long['Source Year'] = df_long['RunPeriod Start Day'].map(StartDayToSourceYear) + + +df_long.rename(columns={'hr in 8760': 'Hour of Year'}, inplace=True) + +#final table fields round-up +#note: Numunits omitted from draft long table in the final table, kept UEC for plotting +df_long_final = df_long[['Sector', 'BldgType','BldgVint','BldgHVAC','BldgLoc','Normunit', + 'Type', 'Source Year', 'TechGroup', 'TechType','TechID', + 'Hour of Year','UEC','UECproportion']] + +#%% +#export CEDARS long 8760 csv + +os.chdir(os.path.dirname(__file__)) #resets to current script directory +print(os.path.abspath(os.curdir)) + +#df_long_final.to_csv('CEDARS_long_ls_SFm.csv', index=False) #enable if just need csv export +#3/4/2026 Dan P. on CEDARS - need to provide as zip format +import zipfile + +zip_filename = 'CEDARS_LoadShape_SFm.zip' +csv_filename = 'CEDARS_LoadShape_SFm.csv' + +print('writing CEDARS long 8760 csv into zip format..') +#create the zip and write the csv into it +with zipfile.ZipFile(zip_filename, 'w', compression=zipfile.ZIP_DEFLATED) as zipf: + #Open a file inside the zip and write CSV to it + with zipf.open(csv_filename, 'w') as f: + df_long_final.to_csv(f, index=False) + +print(f'Zip file {zip_filename} created with {csv_filename} inside.') +print('CEDARS long 8760 csv exported.') +################################################################################################ +################################################################################################ +#%% +#Annual data adding normalizing unit #note HVAC type of this dataset print(sim_annual_1s['BldgHVAC'].unique()) @@ -487,6 +716,8 @@ def end_use_rearrange(df): #apply numunits appropriately if (measure_name == 'Wall Insulation') or (measure_name == 'Ceiling Insulation'): sim_annual_1s['numunits'] = (sim_annual_1s['BldgLoc'].map(numunits))/2 +elif measure_name == 'SEER Rated AC/HP': + sim_annual_1s['numunits'] = (sim_annual_1s['BldgLoc'].map(numunits))/2 elif df_measure['Normunit'].unique()[0] == 'Area-ft2-BA': sim_annual_1s['numunits'] = (sim_annual_1s['BldgLoc'].map(numunits))/2 elif measure_name == 'PTAC / PTHP': @@ -503,6 +734,8 @@ def end_use_rearrange(df): #apply numunits appropriately if (measure_name == 'Wall Insulation') or (measure_name == 'Ceiling Insulation'): sim_annual_2s['numunits'] = (sim_annual_2s['BldgLoc'].map(numunits))/2 +elif measure_name == 'SEER Rated AC/HP': + sim_annual_2s['numunits'] = (sim_annual_2s['BldgLoc'].map(numunits))/2 elif df_measure['Normunit'].unique()[0] == 'Area-ft2-BA': sim_annual_2s['numunits'] = (sim_annual_2s['BldgLoc'].map(numunits))/2 elif measure_name == 'PTAC / PTHP': @@ -719,9 +952,9 @@ def end_use_rearrange(df): # %% #create raw merged current_msr_mat #need to delete/drop incorrect sets -if np.NaN in list(StdTechIDs['StdTechID'].unique()): +if np.nan in list(StdTechIDs['StdTechID'].unique()): df_measure_set_full = pd.merge(metadata_pre_full, metadata_msr_full, on=['BldgLoc','BldgType','BldgVint','BldgHVAC','SizingID','tstat','normunit']) -elif np.NaN in list(PreTechIDs['PreTechID'].unique()): +elif np.nan in list(PreTechIDs['PreTechID'].unique()): df_measure_set_full = pd.merge(metadata_std_full, metadata_msr_full, on=['BldgLoc','BldgType','BldgVint','BldgHVAC','SizingID','tstat','normunit']) else: df_measure_baseline_full = pd.merge(metadata_pre_full, metadata_std_full, on=['BldgLoc','BldgType','BldgVint','BldgHVAC','SizingID','tstat','normunit']) @@ -731,9 +964,9 @@ def end_use_rearrange(df): TechID_triplets = df_measure[['EnergyImpactID','MeasureID', 'PreTechID', 'StdTechID','MeasTechID']].drop_duplicates() # %% #to match TechID triplets, merge on these 3 fields, keeping only valid TechID Triplets -if np.NaN in list(StdTechIDs['StdTechID'].unique()): +if np.nan in list(StdTechIDs['StdTechID'].unique()): current_msr_mat_proto = pd.merge(df_measure_set_full, TechID_triplets, on=['PreTechID','MeasTechID']) -elif np.NaN in list(PreTechIDs['PreTechID'].unique()): +elif np.nan in list(PreTechIDs['PreTechID'].unique()): current_msr_mat_proto = pd.merge(df_measure_set_full, TechID_triplets, on=['StdTechID','MeasTechID']) else: current_msr_mat_proto = pd.merge(df_measure_set_full, TechID_triplets, on=['PreTechID','StdTechID','MeasTechID']) diff --git a/scripts/data transformation/helper_functions.py b/scripts/data transformation/helper_functions.py new file mode 100644 index 00000000..4759efed --- /dev/null +++ b/scripts/data transformation/helper_functions.py @@ -0,0 +1,52 @@ +#helper functions used for CEDARS long format extraction + +#Used to get "Start Day of the week" from the RunPeriod object in the IDF file, +# which is needed for determining the correct starting date of the simulation +# and thus the correct hourly distribution of consumption across the year. +def get_runperiod_start_day(idf_path): + '''Extracts the "Day of Week for Start Day" from the RunPeriod object in the IDF file. + + Args: + idf_path (str): Path to the IDF file. + + Returns: + str: The day of the week for the start day (e.g., "Monday"), or None if not found. + + ''' + with open(idf_path, "r") as f: + text = f.read() + + # Remove comments and collapse into one line + clean = [] + for line in text.splitlines(): + line = line.split("!")[0] # strip inline comments + if line.strip(): + clean.append(line) + text = " ".join(clean) + + # Split into objects and look for RunPeriod + for obj in text.split(";"): + obj = obj.strip() + if not obj: + continue + + head = obj.split(",", 1)[0].strip().lower() + if head == "runperiod": + fields = [f.strip() for f in obj.split(",")] + # fields[0] = "RunPeriod" + # fields[1] = Name + # fields[2] = Begin Month + # fields[3] = Begin Day of Month + # fields[4] = Begin Year + # fields[5] = End Month + # fields[6] = End Day of Month + # fields[7] = End Year + # fields[8] = Day of Week for Start Day <-- target + + return fields[8].strip() if len(fields) > 8 and fields[8] else None + # If the field is missing or empty, return None + + return None + + +