openstudio-standards 0.8.5 → 0.8.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/data/standards/test_performance_expected_dd_results.csv +90 -90
- data/lib/openstudio-standards/btap/activity.rb +858 -61
- data/lib/openstudio-standards/btap/attributes.rb +297 -103
- data/lib/openstudio-standards/btap/bridging.rb +1335 -593
- data/lib/openstudio-standards/btap/btap.rb +60 -181
- data/lib/openstudio-standards/btap/carbon/btap_carbon.rb +199 -142
- data/lib/openstudio-standards/btap/common/constructions.json +1275 -0
- data/lib/openstudio-standards/btap/common/costs.csv +1969 -0
- data/lib/openstudio-standards/btap/common/costs_local_factors.csv +2315 -0
- data/lib/openstudio-standards/btap/common/materials_glazing.csv +61 -0
- data/lib/openstudio-standards/btap/{common_resources → common}/materials_hvac.csv +1685 -1685
- data/lib/openstudio-standards/btap/{common_resources → common}/materials_lighting.csv +266 -266
- data/lib/openstudio-standards/btap/common/materials_opaque.csv +214 -0
- data/lib/openstudio-standards/btap/common/necb_building_types.csv +35 -0
- data/lib/openstudio-standards/btap/common/necb_space_types.csv +110 -0
- data/lib/openstudio-standards/btap/common/thermal_bridging.csv +73 -0
- data/lib/openstudio-standards/btap/costing/btap_costing.rb +346 -429
- data/lib/openstudio-standards/btap/costing/database.rb +104 -0
- data/lib/openstudio-standards/btap/costing/daylighting_sensor_control_costing.rb +356 -344
- data/lib/openstudio-standards/btap/costing/dcv_costing.rb +282 -296
- data/lib/openstudio-standards/btap/costing/envelope_costing.rb +179 -192
- data/lib/openstudio-standards/btap/costing/heating_cooling_costing.rb +2477 -2316
- data/lib/openstudio-standards/btap/costing/led_lighting_costing.rb +127 -142
- data/lib/openstudio-standards/btap/costing/lighting_costing.rb +216 -198
- data/lib/openstudio-standards/btap/costing/nv_costing.rb +522 -523
- data/lib/openstudio-standards/btap/costing/pv_ground_costing.rb +649 -649
- data/lib/openstudio-standards/btap/costing/shw_costing.rb +626 -625
- data/lib/openstudio-standards/btap/costing/thermal_bridging_costing.rb +72 -0
- data/lib/openstudio-standards/btap/costing/ventilation_costing.rb +2363 -2361
- data/lib/openstudio-standards/btap/deprecated.rb +1033 -0
- data/lib/openstudio-standards/btap/envelope.rb +313 -572
- data/lib/openstudio-standards/btap/fileio.rb +152 -1070
- data/lib/openstudio-standards/btap/geometry.rb +486 -766
- data/lib/openstudio-standards/btap/linear_regression.rb +130 -0
- data/lib/openstudio-standards/btap/paths.rb +46 -0
- data/lib/openstudio-standards/btap/qaqc/analysis.rb +163 -0
- data/lib/openstudio-standards/btap/qaqc/data.rb +2293 -0
- data/lib/openstudio-standards/btap/qaqc/datapoint.rb +641 -0
- data/lib/openstudio-standards/btap/schedules.rb +11 -611
- data/lib/openstudio-standards/btap/structure.rb +574 -189
- data/lib/openstudio-standards/constructions/materials/information.rb +1 -1
- data/lib/openstudio-standards/create_typical/create_typical.rb +1 -1
- data/lib/openstudio-standards/exterior_lighting/create.rb +135 -85
- data/lib/openstudio-standards/exterior_lighting/data/typical_exterior_lighting.json +20 -0
- data/lib/openstudio-standards/exterior_lighting/information.rb +23 -2
- data/lib/openstudio-standards/geometry/create.rb +7 -3
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.Model.rb +3 -2
- data/lib/openstudio-standards/prototypes/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.Model.rb +3 -2
- data/lib/openstudio-standards/prototypes/common/data/thermostat_schedule_lookup.json +84 -84
- data/lib/openstudio-standards/prototypes/common/objects/Prototype.hvac_systems.rb +4 -4
- data/lib/openstudio-standards/refrigeration/create_walkin.rb +45 -5
- data/lib/openstudio-standards/refrigeration/data/refrigerated_walkins.csv +75 -75
- data/lib/openstudio-standards/schedules/parametric.rb +6 -0
- data/lib/openstudio-standards/service_water_heating/create_typical.rb +10 -3
- data/lib/openstudio-standards/service_water_heating/create_water_heating_loop.rb +30 -14
- data/lib/openstudio-standards/service_water_heating/information.rb +4 -1
- data/lib/openstudio-standards/sql_file/unmet_hours.rb +2 -1
- data/lib/openstudio-standards/standards/Standards.CoilCoolingDXSingleSpeed.rb +3 -1
- data/lib/openstudio-standards/standards/Standards.CoilHeatingDXSingleSpeed.rb +3 -1
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.boilers.json +12 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2004/data/ashrae_90_1_2004.construction_properties.json +18432 -3072
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.boilers.json +26 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2007/data/ashrae_90_1_2007.construction_properties.json +8532 -1422
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.boilers.json +26 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2010/data/ashrae_90_1_2010.construction_properties.json +8532 -1422
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.boilers.json +16 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.computer_room_acs.json +30 -30
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2013/data/ashrae_90_1_2013.construction_properties.json +7560 -1260
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/ashrae_90_1_2016.PumpVariableSpeed.rb +1 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.boilers.json +16 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2016/data/ashrae_90_1_2016.construction_properties.json +7560 -1260
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.AirLoopHVAC.rb +3 -3
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/ashrae_90_1_2019.PumpVariableSpeed.rb +1 -2
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.boilers.json +22 -0
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.construction_properties.json +7236 -1206
- data/lib/openstudio-standards/standards/ashrae_90_1/ashrae_90_1_2019/data/ashrae_90_1_2019.furnaces.json +223 -19
- data/lib/openstudio-standards/standards/ashrae_90_1/data/ashrae_90_1.schedules.json +37 -1
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.boilers.json +3 -0
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm_2019/data/ashrae_90_1_prm_2019.construction_properties.json +6900 -1150
- data/lib/openstudio-standards/standards/cbes/data/cbes.schedules.json +1 -1
- data/lib/openstudio-standards/standards/deer/data/deer.schedules.json +1 -1
- data/lib/openstudio-standards/standards/necb/BTAP1980TO2010/data/surface_thermal_transmittance.json +76 -40
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/data/surface_thermal_transmittance.json +76 -40
- data/lib/openstudio-standards/standards/necb/ECMS/hvac_systems.rb +6 -4
- data/lib/openstudio-standards/standards/necb/NECB2011/NECB2011_QAQC.json +2988 -0
- data/lib/openstudio-standards/standards/necb/NECB2011/autozone.rb +25 -3
- data/lib/openstudio-standards/standards/necb/NECB2011/building_envelope.rb +672 -534
- data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/Hospital.osm +1791 -1792
- data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/LEEPMultiTower.osm +7 -1
- data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/LEEPTownHouse.osm +7 -1
- data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/LargeHotel.osm +5 -6
- data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/LargeOffice.osm +8 -9
- data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/NorthernEducation.osm +10 -4
- data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/NorthernHealthCare.osm +14 -15
- data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/Outpatient.osm +7 -1
- data/lib/openstudio-standards/standards/necb/NECB2011/data/surface_thermal_transmittance.json +76 -40
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb +14 -6
- data/lib/openstudio-standards/standards/necb/NECB2011/necb_2011.rb +542 -130
- data/lib/openstudio-standards/standards/necb/NECB2011/qaqc/necb_qaqc.rb +30 -63
- data/lib/openstudio-standards/standards/necb/NECB2011/service_water_heating.rb +7 -2
- data/lib/openstudio-standards/standards/necb/NECB2015/data/surface_thermal_transmittance.json +90 -0
- data/lib/openstudio-standards/standards/necb/NECB2015/necb_2015.rb +8 -6
- data/lib/openstudio-standards/standards/necb/NECB2017/data/surface_thermal_transmittance.json +76 -40
- data/lib/openstudio-standards/standards/necb/NECB2017/necb_2017.rb +2 -1
- data/lib/openstudio-standards/standards/necb/NECB2020/building_envelope.rb +0 -117
- data/lib/openstudio-standards/standards/necb/NECB2020/data/surface_thermal_transmittance.json +76 -45
- data/lib/openstudio-standards/standards/necb/NECB2020/necb_2020.rb +218 -0
- data/lib/openstudio-standards/standards/necb/common/construction_defaults.osm +12 -7
- data/lib/openstudio-standards/standards/standard.rb +1 -1
- data/lib/openstudio-standards/version.rb +1 -1
- data/lib/openstudio-standards.rb +9 -4
- metadata +59 -66
- data/data/inventory/thermal_bridging.csv +0 -90
- data/data/standards/OpenStudio_Standards-ashrae_90_1-ALL-comstock(space_types).xlsx +0 -0
- data/data/standards/openstudio_standards_duplicates_log.csv +0 -7962
- data/lib/openstudio-standards/btap/NECB_building_types.csv +0 -35
- data/lib/openstudio-standards/btap/NECB_space_types.csv +0 -109
- data/lib/openstudio-standards/btap/WeatherData1.json +0 -2110
- data/lib/openstudio-standards/btap/WeatherData1.xlsx +0 -0
- data/lib/openstudio-standards/btap/btap_result.rb +0 -1144
- data/lib/openstudio-standards/btap/btap_test_helper.rb +0 -86
- data/lib/openstudio-standards/btap/common_paths.rb +0 -81
- data/lib/openstudio-standards/btap/common_resources/ConstructionProperties.csv +0 -52
- data/lib/openstudio-standards/btap/common_resources/Constructions.csv +0 -37
- data/lib/openstudio-standards/btap/common_resources/construction_sets.csv +0 -1270
- data/lib/openstudio-standards/btap/common_resources/constructions_glazing.csv +0 -121
- data/lib/openstudio-standards/btap/common_resources/constructions_opaque.csv +0 -2256
- data/lib/openstudio-standards/btap/common_resources/costs.csv +0 -1897
- data/lib/openstudio-standards/btap/common_resources/costs_local_factors.csv +0 -2315
- data/lib/openstudio-standards/btap/common_resources/materials_glazing.csv +0 -35
- data/lib/openstudio-standards/btap/common_resources/materials_opaque.csv +0 -164
- data/lib/openstudio-standards/btap/costing/btap_measure_helper.rb +0 -359
- data/lib/openstudio-standards/btap/costing/btap_workflow.rb +0 -117
- data/lib/openstudio-standards/btap/costing/copy_test_results_files_to_expected_results.rb +0 -11
- data/lib/openstudio-standards/btap/costing/cost_building_from_file.rb +0 -136
- data/lib/openstudio-standards/btap/costing/costing_database_wrapper.rb +0 -173
- data/lib/openstudio-standards/btap/costing/dummy.epw +0 -8768
- data/lib/openstudio-standards/btap/costing/dummy.osm +0 -5320
- data/lib/openstudio-standards/btap/costing/neb_end_use_prices.csv +0 -42
- data/lib/openstudio-standards/btap/costing/necb_2011_spacetype_info.csv +0 -225
- data/lib/openstudio-standards/btap/costing/necb_reference_runs.csv +0 -28705
- data/lib/openstudio-standards/btap/costing/parallel_tests.rb +0 -92
- data/lib/openstudio-standards/btap/costing/test_list.txt +0 -15
- data/lib/openstudio-standards/btap/costing/test_run_all_test_locally.rb +0 -27
- data/lib/openstudio-standards/btap/costing/test_run_costing_tests.rb +0 -80
- data/lib/openstudio-standards/btap/necb_2011_spacetype_info.csv +0 -225
- data/lib/openstudio-standards/btap/utilities/Add_template_field_to_json.rb +0 -22
- data/lib/openstudio-standards/btap/utilities/convert_surfaces_to_adiabatic_necb_8426.rb +0 -204
- data/lib/openstudio-standards/btap/utilities/generate_space_types.rb +0 -8
- data/lib/openstudio-standards/btap/utilities/necb_to_epw_map.rb +0 -50
- data/lib/openstudio-standards/btap/utilities/os_sim_extract.rb +0 -48
- data/lib/openstudio-standards/btap/utilities/rename_surfaces.rb +0 -24
- data/lib/openstudio-standards/btap/utilities/round_surf_coords.rb +0 -32
- data/lib/openstudio-standards/btap/utilities/sched_create.rb +0 -145
- data/lib/openstudio-standards/btap/utilities/set_mult_to_adiabatic.rb +0 -53
- data/lib/openstudio-standards/btap/utilities/space_type.rb +0 -78
- data/lib/openstudio-standards/btap/utilities/weatherData1_xlsx_to_json.rb +0 -56
- data/lib/openstudio-standards/btap/vintagizer.rb +0 -161
- data/lib/openstudio-standards/btap/visualization.rb +0 -72
- data/lib/openstudio-standards/standards/necb/NECB2011/data/necb_2011_spacetype_info.csv +0 -225
- data/lib/openstudio-standards/standards/necb/common/btap_analysis.rb +0 -79
- data/lib/openstudio-standards/standards/necb/common/btap_data.rb +0 -2656
- data/lib/openstudio-standards/standards/necb/common/btap_datapoint.rb +0 -653
- data/lib/openstudio-standards/standards/necb/common/necb_reference_runs.csv +0 -28705
- data/lib/openstudio-standards/standards/necb/common/utility_pricing_2025-02-20.csv +0 -92
- /data/lib/openstudio-standards/btap/{common_resources → common}/carbon_frame.csv +0 -0
- /data/lib/openstudio-standards/btap/{common_resources → common}/carbon_glazing.csv +0 -0
- /data/lib/openstudio-standards/btap/{common_resources → common}/carbon_opaque.csv +0 -0
- /data/lib/openstudio-standards/btap/{common_resources → common}/hvac_vent_ahu.csv +0 -0
- /data/lib/openstudio-standards/btap/{common_resources → common}/lighting.csv +0 -0
- /data/lib/openstudio-standards/btap/{common_resources → common}/lighting_sets.csv +0 -0
- /data/lib/openstudio-standards/btap/{common_resources → common}/locations.csv +0 -0
- /data/lib/openstudio-standards/btap/{costing → common}/mech_sizing.json +0 -0
|
@@ -300,7 +300,7 @@ class NECB2011
|
|
|
300
300
|
1 => province,
|
|
301
301
|
2 => neb_fuel
|
|
302
302
|
}
|
|
303
|
-
row = look_up_csv_data(neb_prices_csv_file_name, search_info)
|
|
303
|
+
row = BTAP::Data.look_up_csv_data(neb_prices_csv_file_name, search_info)
|
|
304
304
|
neb_fuel_cost = row['2020']
|
|
305
305
|
fuel_consumption_gj = 0.0
|
|
306
306
|
if neb_fuel == 'Electricity' || neb_fuel == 'Natural Gas'
|
|
@@ -325,7 +325,7 @@ class NECB2011
|
|
|
325
325
|
# Fuel cost based local utility rates
|
|
326
326
|
costing_rownames = model.sqlFile.get.execAndReturnVectorOfString("SELECT RowName FROM TabularDataWithStrings WHERE ReportName='LEEDsummary' AND ReportForString='Entire Facility' AND TableName='EAp2-7. Energy Cost Summary' AND ColumnName='Total Energy Cost'")
|
|
327
327
|
#==> ["Electricity", "Natural Gas", "Additional", "Total"]
|
|
328
|
-
costing_rownames = validate_optional(costing_rownames, model, 'N/A')
|
|
328
|
+
costing_rownames = BTAP::Data.validate_optional(costing_rownames, model, 'N/A')
|
|
329
329
|
if costing_rownames != 'N/A'
|
|
330
330
|
costing_rownames.each do |rowname|
|
|
331
331
|
case rowname
|
|
@@ -418,22 +418,22 @@ class NECB2011
|
|
|
418
418
|
qaqc[:service_water_heating] = {}
|
|
419
419
|
qaqc[:service_water_heating][:total_nominal_occupancy] = -1
|
|
420
420
|
# qaqc[:service_water_heating][:total_nominal_occupancy]=model.sqlFile().get().execAndReturnVectorOfDouble("SELECT Value FROM TabularDataWithStrings WHERE ReportName='OutdoorAirSummary' AND ReportForString='Entire Facility' AND TableName='Average Outdoor Air During Occupied Hours' AND ColumnName='Nominal Number of Occupants'").get.inject(0, :+)
|
|
421
|
-
qaqc[:service_water_heating][:total_nominal_occupancy] = get_total_nominal_capacity(model)
|
|
421
|
+
qaqc[:service_water_heating][:total_nominal_occupancy] = BTAP::Data.get_total_nominal_capacity(model)
|
|
422
422
|
|
|
423
423
|
qaqc[:service_water_heating][:electricity_per_year] = model.sqlFile.get.execAndReturnFirstDouble("SELECT Value FROM TabularDataWithStrings WHERE ReportName='AnnualBuildingUtilityPerformanceSummary' AND ReportForString='Entire Facility' AND TableName='End Uses' AND ColumnName='Electricity' AND RowName='Water Systems'")
|
|
424
|
-
qaqc[:service_water_heating][:electricity_per_year] = validate_optional(qaqc[:service_water_heating][:electricity_per_year], model, -1)
|
|
424
|
+
qaqc[:service_water_heating][:electricity_per_year] = BTAP::Data.validate_optional(qaqc[:service_water_heating][:electricity_per_year], model, -1)
|
|
425
425
|
|
|
426
426
|
qaqc[:service_water_heating][:electricity_per_day] = qaqc[:service_water_heating][:electricity_per_year] / 365.5
|
|
427
427
|
qaqc[:service_water_heating][:electricity_per_day_per_occupant] = qaqc[:service_water_heating][:electricity_per_day] / qaqc[:service_water_heating][:total_nominal_occupancy]
|
|
428
428
|
|
|
429
429
|
qaqc[:service_water_heating][:natural_gas_per_year] = model.sqlFile.get.execAndReturnFirstDouble("SELECT Value FROM TabularDataWithStrings WHERE ReportName='AnnualBuildingUtilityPerformanceSummary' AND ReportForString='Entire Facility' AND TableName='End Uses' AND ColumnName='Natural Gas' AND RowName='Water Systems'")
|
|
430
|
-
qaqc[:service_water_heating][:natural_gas_per_year] = validate_optional(qaqc[:service_water_heating][:natural_gas_per_year], model, -1)
|
|
430
|
+
qaqc[:service_water_heating][:natural_gas_per_year] = BTAP::Data.validate_optional(qaqc[:service_water_heating][:natural_gas_per_year], model, -1)
|
|
431
431
|
|
|
432
432
|
qaqc[:service_water_heating][:additional_fuel_per_year] = model.sqlFile.get.execAndReturnFirstDouble("SELECT Value FROM TabularDataWithStrings WHERE ReportName='AnnualBuildingUtilityPerformanceSummary' AND ReportForString='Entire Facility' AND TableName='End Uses' AND ColumnName='Additional Fuel' AND RowName='Water Systems'")
|
|
433
|
-
qaqc[:service_water_heating][:additional_fuel_per_year] = validate_optional(qaqc[:service_water_heating][:additional_fuel_per_year], model, -1)
|
|
433
|
+
qaqc[:service_water_heating][:additional_fuel_per_year] = BTAP::Data.validate_optional(qaqc[:service_water_heating][:additional_fuel_per_year], model, -1)
|
|
434
434
|
|
|
435
435
|
qaqc[:service_water_heating][:water_m3_per_year] = model.sqlFile.get.execAndReturnFirstDouble("SELECT Value FROM TabularDataWithStrings WHERE ReportName='AnnualBuildingUtilityPerformanceSummary' AND ReportForString='Entire Facility' AND TableName='End Uses' AND ColumnName='Water' AND RowName='Water Systems'")
|
|
436
|
-
qaqc[:service_water_heating][:water_m3_per_year] = validate_optional(qaqc[:service_water_heating][:water_m3_per_year], model, -1)
|
|
436
|
+
qaqc[:service_water_heating][:water_m3_per_year] = BTAP::Data.validate_optional(qaqc[:service_water_heating][:water_m3_per_year], model, -1)
|
|
437
437
|
|
|
438
438
|
qaqc[:service_water_heating][:water_m3_per_day] = qaqc[:service_water_heating][:water_m3_per_year] / 365.5
|
|
439
439
|
qaqc[:service_water_heating][:water_m3_per_day_per_occupant] = qaqc[:service_water_heating][:water_m3_per_day] / qaqc[:service_water_heating][:total_nominal_occupancy]
|
|
@@ -636,7 +636,7 @@ class NECB2011
|
|
|
636
636
|
error_warning << "space.spaceType.get.lights[0] is nil for Space:[#{space.name.get}] Space Type:[#{spaceinfo[:space_type_name]}]"
|
|
637
637
|
else
|
|
638
638
|
spaceinfo[:lighting_w_per_m2] = space.spaceType.get.lights[0].lightsDefinition.wattsperSpaceFloorArea # .get.round(3) unless space.spaceType.get.lights[0].nil?
|
|
639
|
-
spaceinfo[:lighting_w_per_m2] = validate_optional(spaceinfo[:lighting_w_per_m2], model, -1.0)
|
|
639
|
+
spaceinfo[:lighting_w_per_m2] = BTAP::Data.validate_optional(spaceinfo[:lighting_w_per_m2], model, -1.0)
|
|
640
640
|
unless spaceinfo[:lighting_w_per_m2].nil?
|
|
641
641
|
spaceinfo[:lighting_w_per_m2] = spaceinfo[:lighting_w_per_m2].round(3)
|
|
642
642
|
end
|
|
@@ -655,7 +655,7 @@ class NECB2011
|
|
|
655
655
|
spaceinfo[:waterUseEquipment] << waterUseEquipment_info
|
|
656
656
|
waterUseEquipment_info[:peak_flow_rate] = space.waterUseEquipment[0].waterUseEquipmentDefinition.peakFlowRate
|
|
657
657
|
waterUseEquipment_info[:peak_flow_rate_per_area] = waterUseEquipment_info[:peak_flow_rate] / space.floorArea
|
|
658
|
-
area_per_occ = space.spaceType.get.people[0].nil? ? 0.0 : validate_optional(space.spaceType.get.people[0].spaceFloorAreaPerPerson, model, -1.0)
|
|
658
|
+
area_per_occ = space.spaceType.get.people[0].nil? ? 0.0 : BTAP::Data.validate_optional(space.spaceType.get.people[0].spaceFloorAreaPerPerson, model, -1.0)
|
|
659
659
|
# Watt per person = m3/s/m3 * 1000W/kW * (specific heat * dT) * m2/person
|
|
660
660
|
waterUseEquipment_info[:shw_watts_per_person] = waterUseEquipment_info[:peak_flow_rate_per_area] * 1000 * (4.19 * 44.4) * 1000 * area_per_occ
|
|
661
661
|
# puts waterUseEquipment_info[:shw_watts_per_ponce the erson]
|
|
@@ -727,12 +727,12 @@ class NECB2011
|
|
|
727
727
|
air_loop.thermalZones.sort.each do |zone|
|
|
728
728
|
air_loop_info[:thermal_zones] << zone.name.get
|
|
729
729
|
vbz = model.sqlFile.get.execAndReturnFirstDouble("SELECT Value FROM TabularDataWithStrings WHERE ReportName='Standard62.1Summary' AND ReportForString='Entire Facility' AND TableName='Zone Ventilation Parameters' AND ColumnName='Breathing Zone Outdoor Airflow - Vbz' AND Units='m3/s' AND RowName='#{zone.name.get.to_s.upcase}' ")
|
|
730
|
-
vbz = validate_optional(vbz, model, 0)
|
|
730
|
+
vbz = BTAP::Data.validate_optional(vbz, model, 0)
|
|
731
731
|
air_loop_info[:total_breathing_zone_outdoor_airflow_vbz] += vbz
|
|
732
732
|
air_loop_info[:total_floor_area_served] += zone.floorArea * zone.multiplier.to_f
|
|
733
733
|
end
|
|
734
734
|
air_loop_info[:area_outdoor_air_rate_m3_per_s_m2] = model.sqlFile.get.execAndReturnFirstDouble("SELECT Value FROM TabularDataWithStrings WHERE ReportName='Standard62.1Summary' AND ReportForString='Entire Facility' AND TableName='System Ventilation Parameters' AND ColumnName='Area Outdoor Air Rate - Ra' AND Units='m3/s-m2' AND RowName='#{air_loop_info[:name].to_s.upcase}' ")
|
|
735
|
-
air_loop_info[:area_outdoor_air_rate_m3_per_s_m2] = validate_optional(air_loop_info[:area_outdoor_air_rate_m3_per_s_m2], model, -1.0)
|
|
735
|
+
air_loop_info[:area_outdoor_air_rate_m3_per_s_m2] = BTAP::Data.validate_optional(air_loop_info[:area_outdoor_air_rate_m3_per_s_m2], model, -1.0)
|
|
736
736
|
|
|
737
737
|
air_loop_info[:outdoor_air_L_per_s] = -1.0
|
|
738
738
|
unless air_loop_info[:area_outdoor_air_rate_m3_per_s_m2] == -1.0
|
|
@@ -757,7 +757,7 @@ class NECB2011
|
|
|
757
757
|
air_loop_info[:supply_fan][:max_air_flow_rate_m3_per_s] = -1.0
|
|
758
758
|
|
|
759
759
|
max_air_flow_info = model.sqlFile.get.execAndReturnVectorOfString("SELECT RowName FROM TabularDataWithStrings WHERE ReportName='EquipmentSummary' AND ReportForString='Entire Facility' AND TableName='Fans' AND ColumnName='Max Air Flow Rate' AND Units='m3/s' ")
|
|
760
|
-
max_air_flow_info = validate_optional(max_air_flow_info, model, 'N/A')
|
|
760
|
+
max_air_flow_info = BTAP::Data.validate_optional(max_air_flow_info, model, 'N/A')
|
|
761
761
|
if max_air_flow_info == 'N/A'
|
|
762
762
|
error_warning << "max_air_flow_info is nil because the following sql statement returned nil: RowName FROM TabularDataWithStrings WHERE ReportName='EquipmentSummary' AND ReportForString='Entire Facility' AND TableName='Fans' AND ColumnName='Max Air Flow Rate' AND Units='m3/s' "
|
|
763
763
|
else
|
|
@@ -804,7 +804,7 @@ class NECB2011
|
|
|
804
804
|
coil[:efficency] = gas.gasBurnerEfficiency
|
|
805
805
|
# coil[:nominal_capacity]= gas.nominalCapacity()
|
|
806
806
|
coil[:nominal_capacity] = model.sqlFile.get.execAndReturnFirstDouble("SELECT Value FROM TabularDataWithStrings WHERE ReportName='EquipmentSummary' AND ReportForString='Entire Facility' AND TableName='Heating Coils' AND ColumnName='Nominal Total Capacity' AND RowName='#{coil[:name].to_s.upcase}'")
|
|
807
|
-
coil[:nominal_capacity] = validate_optional(coil[:nominal_capacity], model, -1.0)
|
|
807
|
+
coil[:nominal_capacity] = BTAP::Data.validate_optional(coil[:nominal_capacity], model, -1.0)
|
|
808
808
|
end
|
|
809
809
|
if supply_comp.to_CoilHeatingElectric.is_initialized
|
|
810
810
|
coil = {}
|
|
@@ -813,7 +813,7 @@ class NECB2011
|
|
|
813
813
|
coil[:name] = electric.name.get
|
|
814
814
|
coil[:type] = 'Electric'
|
|
815
815
|
coil[:nominal_capacity] = model.sqlFile.get.execAndReturnFirstDouble("SELECT Value FROM TabularDataWithStrings WHERE ReportName='EquipmentSummary' AND ReportForString='Entire Facility' AND TableName='Heating Coils' AND ColumnName='Nominal Total Capacity' AND RowName='#{coil[:name].to_s.upcase}'")
|
|
816
|
-
coil[:nominal_capacity] = validate_optional(coil[:nominal_capacity], model, -1.0)
|
|
816
|
+
coil[:nominal_capacity] = BTAP::Data.validate_optional(coil[:nominal_capacity], model, -1.0)
|
|
817
817
|
end
|
|
818
818
|
if supply_comp.to_CoilHeatingWater.is_initialized
|
|
819
819
|
coil = {}
|
|
@@ -822,7 +822,7 @@ class NECB2011
|
|
|
822
822
|
coil[:name] = water.name.get
|
|
823
823
|
coil[:type] = 'Water'
|
|
824
824
|
coil[:nominal_capacity] = model.sqlFile.get.execAndReturnFirstDouble("SELECT Value FROM TabularDataWithStrings WHERE ReportName='EquipmentSummary' AND ReportForString='Entire Facility' AND TableName='Heating Coils' AND ColumnName='Nominal Total Capacity' AND RowName='#{coil[:name].to_s.upcase}'")
|
|
825
|
-
coil[:nominal_capacity] = validate_optional(coil[:nominal_capacity], model, -1.0)
|
|
825
|
+
coil[:nominal_capacity] = BTAP::Data.validate_optional(coil[:nominal_capacity], model, -1.0)
|
|
826
826
|
end
|
|
827
827
|
if supply_comp.to_HeatExchangerAirToAirSensibleAndLatent.is_initialized
|
|
828
828
|
heatExchanger = supply_comp.to_HeatExchangerAirToAirSensibleAndLatent.get
|
|
@@ -841,7 +841,7 @@ class NECB2011
|
|
|
841
841
|
coil[:name] = single_speed.name.get
|
|
842
842
|
coil[:cop] = single_speed.ratedCOP.to_f
|
|
843
843
|
coil[:nominal_total_capacity_w] = model.sqlFile.get.execAndReturnFirstDouble("SELECT Value FROM TabularDataWithStrings WHERE ReportName='EquipmentSummary' AND ReportForString='Entire Facility' AND TableName='Cooling Coils' AND ColumnName='Nominal Total Capacity' AND RowName='#{coil[:name].upcase}' ")
|
|
844
|
-
coil[:nominal_total_capacity_w] = validate_optional(coil[:nominal_total_capacity_w], model, -1.0)
|
|
844
|
+
coil[:nominal_total_capacity_w] = BTAP::Data.validate_optional(coil[:nominal_total_capacity_w], model, -1.0)
|
|
845
845
|
end
|
|
846
846
|
if supply_comp.to_CoilCoolingDXTwoSpeed.is_initialized
|
|
847
847
|
coil = {}
|
|
@@ -851,7 +851,7 @@ class NECB2011
|
|
|
851
851
|
coil[:cop_low] = two_speed.ratedLowSpeedCOP.to_f
|
|
852
852
|
coil[:cop_high] = two_speed.ratedHighSpeedCOP.to_f
|
|
853
853
|
coil[:nominal_total_capacity_w] = model.sqlFile.get.execAndReturnFirstDouble("SELECT Value FROM TabularDataWithStrings WHERE ReportName='EquipmentSummary' AND ReportForString='Entire Facility' AND TableName='Cooling Coils' AND ColumnName='Nominal Total Capacity' AND RowName='#{coil[:name].upcase}' ")
|
|
854
|
-
coil[:nominal_total_capacity_w] = validate_optional(coil[:nominal_total_capacity_w], model, -1.0)
|
|
854
|
+
coil[:nominal_total_capacity_w] = BTAP::Data.validate_optional(coil[:nominal_total_capacity_w], model, -1.0)
|
|
855
855
|
end
|
|
856
856
|
if supply_comp.to_CoilCoolingWater.is_initialized
|
|
857
857
|
coil = {}
|
|
@@ -859,9 +859,9 @@ class NECB2011
|
|
|
859
859
|
coil_cooling_water = supply_comp.to_CoilCoolingWater.get
|
|
860
860
|
coil[:name] = coil_cooling_water.name.get
|
|
861
861
|
coil[:nominal_total_capacity_w] = model.sqlFile.get.execAndReturnFirstDouble("SELECT Value FROM TabularDataWithStrings WHERE ReportName='EquipmentSummary' AND ReportForString='Entire Facility' AND TableName='Cooling Coils' AND ColumnName='Nominal Total Capacity' AND RowName='#{coil[:name].upcase}' ")
|
|
862
|
-
coil[:nominal_total_capacity_w] = validate_optional(coil[:nominal_total_capacity_w], model, -1.0)
|
|
862
|
+
coil[:nominal_total_capacity_w] = BTAP::Data.validate_optional(coil[:nominal_total_capacity_w], model, -1.0)
|
|
863
863
|
coil[:nominal_sensible_heat_ratio] = model.sqlFile.get.execAndReturnFirstDouble("SELECT Value FROM TabularDataWithStrings WHERE ReportName='EquipmentSummary' AND ReportForString='Entire Facility' AND TableName='Cooling Coils' AND ColumnName='Nominal Sensible Heat Ratio' AND RowName='#{coil[:name].upcase}' ")
|
|
864
|
-
coil[:nominal_sensible_heat_ratio] = validate_optional(coil[:nominal_sensible_heat_ratio], model, -1.0)
|
|
864
|
+
coil[:nominal_sensible_heat_ratio] = BTAP::Data.validate_optional(coil[:nominal_sensible_heat_ratio], model, -1.0)
|
|
865
865
|
end
|
|
866
866
|
end
|
|
867
867
|
qaqc[:air_loops] << air_loop_info
|
|
@@ -892,11 +892,11 @@ class NECB2011
|
|
|
892
892
|
pump_info[:name] = pump.name.get
|
|
893
893
|
pump_info[:type] = 'Pump:ConstantSpeed'
|
|
894
894
|
pump_info[:head_pa] = model.sqlFile.get.execAndReturnFirstDouble("SELECT Value FROM TabularDataWithStrings WHERE ReportName='EquipmentSummary' AND ReportForString='Entire Facility' AND TableName='Pumps' AND ColumnName='Head' AND RowName='#{pump_info[:name].upcase}' ")
|
|
895
|
-
pump_info[:head_pa] = validate_optional(pump_info[:head_pa], model, -1.0)
|
|
895
|
+
pump_info[:head_pa] = BTAP::Data.validate_optional(pump_info[:head_pa], model, -1.0)
|
|
896
896
|
pump_info[:water_flow_m3_per_s] = model.sqlFile.get.execAndReturnFirstDouble("SELECT Value FROM TabularDataWithStrings WHERE ReportName='EquipmentSummary' AND ReportForString='Entire Facility' AND TableName='Pumps' AND ColumnName='Water Flow' AND RowName='#{pump_info[:name].upcase}' ")
|
|
897
|
-
pump_info[:water_flow_m3_per_s] = validate_optional(pump_info[:water_flow_m3_per_s], model, -1.0)
|
|
897
|
+
pump_info[:water_flow_m3_per_s] = BTAP::Data.validate_optional(pump_info[:water_flow_m3_per_s], model, -1.0)
|
|
898
898
|
pump_info[:electric_power_w] = model.sqlFile.get.execAndReturnFirstDouble("SELECT Value FROM TabularDataWithStrings WHERE ReportName='EquipmentSummary' AND ReportForString='Entire Facility' AND TableName='Pumps' AND ColumnName='Electric Power' AND RowName='#{pump_info[:name].upcase}' ")
|
|
899
|
-
pump_info[:electric_power_w] = validate_optional(pump_info[:electric_power_w], model, -1.0)
|
|
899
|
+
pump_info[:electric_power_w] = BTAP::Data.validate_optional(pump_info[:electric_power_w], model, -1.0)
|
|
900
900
|
pump_info[:motor_efficency] = pump.motorEfficiency
|
|
901
901
|
end
|
|
902
902
|
|
|
@@ -908,11 +908,11 @@ class NECB2011
|
|
|
908
908
|
pump_info[:name] = pump.name.get
|
|
909
909
|
pump_info[:type] = 'Pump:VariableSpeed'
|
|
910
910
|
pump_info[:head_pa] = model.sqlFile.get.execAndReturnFirstDouble("SELECT Value FROM TabularDataWithStrings WHERE ReportName='EquipmentSummary' AND ReportForString='Entire Facility' AND TableName='Pumps' AND ColumnName='Head' AND RowName='#{pump_info[:name].upcase}' ")
|
|
911
|
-
pump_info[:head_pa] = validate_optional(pump_info[:head_pa], model, -1.0)
|
|
911
|
+
pump_info[:head_pa] = BTAP::Data.validate_optional(pump_info[:head_pa], model, -1.0)
|
|
912
912
|
pump_info[:water_flow_m3_per_s] = model.sqlFile.get.execAndReturnFirstDouble("SELECT Value FROM TabularDataWithStrings WHERE ReportName='EquipmentSummary' AND ReportForString='Entire Facility' AND TableName='Pumps' AND ColumnName='Water Flow' AND RowName='#{pump_info[:name].upcase}' ")
|
|
913
|
-
pump_info[:water_flow_m3_per_s] = validate_optional(pump_info[:water_flow_m3_per_s], model, -1.0)
|
|
913
|
+
pump_info[:water_flow_m3_per_s] = BTAP::Data.validate_optional(pump_info[:water_flow_m3_per_s], model, -1.0)
|
|
914
914
|
pump_info[:electric_power_w] = model.sqlFile.get.execAndReturnFirstDouble("SELECT Value FROM TabularDataWithStrings WHERE ReportName='EquipmentSummary' AND ReportForString='Entire Facility' AND TableName='Pumps' AND ColumnName='Electric Power' AND RowName='#{pump_info[:name].upcase}' ")
|
|
915
|
-
pump_info[:electric_power_w] = validate_optional(pump_info[:electric_power_w], model, -1.0)
|
|
915
|
+
pump_info[:electric_power_w] = BTAP::Data.validate_optional(pump_info[:electric_power_w], model, -1.0)
|
|
916
916
|
pump_info[:motor_efficency] = pump.motorEfficiency
|
|
917
917
|
end
|
|
918
918
|
|
|
@@ -925,7 +925,7 @@ class NECB2011
|
|
|
925
925
|
boiler_info[:type] = 'Boiler:HotWater'
|
|
926
926
|
boiler_info[:fueltype] = boiler.fuelType
|
|
927
927
|
boiler_info[:nominal_capacity] = boiler.nominalCapacity
|
|
928
|
-
boiler_info[:nominal_capacity] = validate_optional(boiler_info[:nominal_capacity], model, -1.0)
|
|
928
|
+
boiler_info[:nominal_capacity] = BTAP::Data.validate_optional(boiler_info[:nominal_capacity], model, -1.0)
|
|
929
929
|
end
|
|
930
930
|
|
|
931
931
|
# Collect ChillerElectricEIR
|
|
@@ -935,7 +935,7 @@ class NECB2011
|
|
|
935
935
|
plant_loop_info[:chiller_electric_eir] << chiller_info
|
|
936
936
|
chiller_info[:name] = chiller.name.get
|
|
937
937
|
chiller_info[:type] = 'Chiller:Electric:EIR'
|
|
938
|
-
chiller_info[:reference_capacity] = validate_optional(chiller.referenceCapacity, model, -1.0)
|
|
938
|
+
chiller_info[:reference_capacity] = BTAP::Data.validate_optional(chiller.referenceCapacity, model, -1.0)
|
|
939
939
|
chiller_info[:reference_leaving_chilled_water_temperature] = chiller.referenceLeavingChilledWaterTemperature
|
|
940
940
|
end
|
|
941
941
|
|
|
@@ -946,7 +946,7 @@ class NECB2011
|
|
|
946
946
|
plant_loop_info[:cooling_tower_single_speed] << coolingTower_info
|
|
947
947
|
coolingTower_info[:name] = coolingTower.name.get
|
|
948
948
|
coolingTower_info[:type] = 'CoolingTower:SingleSpeed'
|
|
949
|
-
coolingTower_info[:fan_power_at_design_air_flow_rate] = validate_optional(coolingTower.fanPoweratDesignAirFlowRate, model, -1.0)
|
|
949
|
+
coolingTower_info[:fan_power_at_design_air_flow_rate] = BTAP::Data.validate_optional(coolingTower.fanPoweratDesignAirFlowRate, model, -1.0)
|
|
950
950
|
|
|
951
951
|
end
|
|
952
952
|
|
|
@@ -964,7 +964,7 @@ class NECB2011
|
|
|
964
964
|
|
|
965
965
|
qaqc[:eplusout_err] = {}
|
|
966
966
|
warnings = model.sqlFile.get.execAndReturnVectorOfString("SELECT ErrorMessage FROM Errors WHERE ErrorType='0' ")
|
|
967
|
-
warnings = validate_optional(warnings, model, 'N/A')
|
|
967
|
+
warnings = BTAP::Data.validate_optional(warnings, model, 'N/A')
|
|
968
968
|
unless warnings == 'N/A'
|
|
969
969
|
qaqc[:eplusout_err][:warnings] = model.sqlFile.get.execAndReturnVectorOfString("SELECT ErrorMessage FROM Errors WHERE ErrorType='0' ").get
|
|
970
970
|
qaqc[:eplusout_err][:fatal] = model.sqlFile.get.execAndReturnVectorOfString("SELECT ErrorMessage FROM Errors WHERE ErrorType='2' ").get
|
|
@@ -1667,7 +1667,7 @@ class NECB2011
|
|
|
1667
1667
|
spaces = zone.spaces()
|
|
1668
1668
|
spaces.each do |z_space|
|
|
1669
1669
|
spacetype = z_space.spaceType
|
|
1670
|
-
spacetype = validate_optional(spacetype, model, nil)
|
|
1670
|
+
spacetype = BTAP::Data.validate_optional(spacetype, model, nil)
|
|
1671
1671
|
if spacetype.nil?
|
|
1672
1672
|
qaqc[:warnings] << "[necb_murb_hrv_compliance] Space [#{z_space.name}] does not have a SpaceType"
|
|
1673
1673
|
else
|
|
@@ -1911,37 +1911,4 @@ class NECB2011
|
|
|
1911
1911
|
|
|
1912
1912
|
raise ArgumentError, "invalid value for #{varname}: #{value}"
|
|
1913
1913
|
end
|
|
1914
|
-
|
|
1915
|
-
def look_up_csv_data(csv_fname, search_criteria)
|
|
1916
|
-
options = { headers: :first_row,
|
|
1917
|
-
converters: [:numeric] }
|
|
1918
|
-
unless File.exist?(csv_fname)
|
|
1919
|
-
raise "File: [#{csv_fname}] Does not exist"
|
|
1920
|
-
end
|
|
1921
|
-
|
|
1922
|
-
# we'll save the matches here
|
|
1923
|
-
matches = nil
|
|
1924
|
-
# save a copy of the headers
|
|
1925
|
-
headers = nil
|
|
1926
|
-
CSV.open(csv_fname, 'r', **options) do |csv|
|
|
1927
|
-
# Since CSV includes Enumerable we can use 'find_all'
|
|
1928
|
-
# which will return all the elements of the Enumerble for
|
|
1929
|
-
# which the block returns true
|
|
1930
|
-
|
|
1931
|
-
matches = csv.find_all do |row|
|
|
1932
|
-
match = true
|
|
1933
|
-
search_criteria.keys.each do |key|
|
|
1934
|
-
match &&= (row[key].strip == search_criteria[key].strip)
|
|
1935
|
-
end
|
|
1936
|
-
match
|
|
1937
|
-
end
|
|
1938
|
-
headers = csv.headers
|
|
1939
|
-
end
|
|
1940
|
-
# puts matches
|
|
1941
|
-
raise('More than one match') if matches.size > 1
|
|
1942
|
-
|
|
1943
|
-
puts "Zero matches found for [#{search_criteria}]" if matches.empty?
|
|
1944
|
-
# return matches[0]
|
|
1945
|
-
return matches[0]
|
|
1946
|
-
end
|
|
1947
1914
|
end
|
|
@@ -250,10 +250,11 @@ class NECB2011
|
|
|
250
250
|
space_peak_flow = 0
|
|
251
251
|
data = nil
|
|
252
252
|
space_type_name = space.spaceType.get.standardsSpaceType.get.to_s
|
|
253
|
+
space_type_building = space.spaceType.get.standardsBuildingType.get.to_s
|
|
253
254
|
tank_temperature = 60
|
|
254
255
|
# find the specific space_type properties from standard.json
|
|
255
256
|
space_types_table.each do |space_type|
|
|
256
|
-
if (
|
|
257
|
+
if (space_type_building + ' ' + space_type_name) == (space_type['building_type'] + ' ' + space_type['space_type'])
|
|
257
258
|
break if space_type['necb_hvac_system_selection_type'] == '- undefined -'
|
|
258
259
|
# If there is no service hot water load.. Don't bother adding anything.
|
|
259
260
|
break if (space_type['service_water_heating_peak_flow_per_area'].to_f == 0.0 && space_type['service_water_heating_peak_flow_rate'].to_f == 0.0) || space_type['service_water_heating_schedule'].nil?
|
|
@@ -360,7 +361,11 @@ class NECB2011
|
|
|
360
361
|
# the hourly shw demand is for the following hour. It is meant to determine, of the peak hourly shw times, which has
|
|
361
362
|
# the highest shw demand the following hour. This is used to determine shw capacity and volume.
|
|
362
363
|
weekly_peak_flow.sort.each do |day_peak_sched|
|
|
363
|
-
day_peak_sched[1].sort
|
|
364
|
+
# NOTE: this previously iterated `day_peak_sched[1].sort` — the SORTED
|
|
365
|
+
# hourly array — while using the (sorted) index against the UNSORTED
|
|
366
|
+
# arrays below, so the "hour after the peak" was effectively an arbitrary
|
|
367
|
+
# hour. The hourly array is now iterated in hour order.
|
|
368
|
+
day_peak_sched[1].each_with_index do |hour_flow, hour_index|
|
|
364
369
|
if hour_flow == peak_flow_sched
|
|
365
370
|
if hour_index == 23
|
|
366
371
|
next_hour_test = 0
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
{
|
|
2
|
+
"tables": {
|
|
3
|
+
"surface_thermal_transmittance": {
|
|
4
|
+
"data_type": "table",
|
|
5
|
+
"notes": "Requires hdd to be defined to be evaluated in code. Never have ground windows or doors.",
|
|
6
|
+
"refs": [
|
|
7
|
+
|
|
8
|
+
],
|
|
9
|
+
"units": "W_per_m2_K",
|
|
10
|
+
"table": {
|
|
11
|
+
"outdoors": {
|
|
12
|
+
"wall": {
|
|
13
|
+
"3000": 0.315,
|
|
14
|
+
"4000": 0.278,
|
|
15
|
+
"5000": 0.247,
|
|
16
|
+
"6000": 0.21,
|
|
17
|
+
"7000": 0.21,
|
|
18
|
+
"9999": 0.183
|
|
19
|
+
},
|
|
20
|
+
"roofceiling": {
|
|
21
|
+
"3000": 0.227,
|
|
22
|
+
"4000": 0.183,
|
|
23
|
+
"5000": 0.183,
|
|
24
|
+
"6000": 0.162,
|
|
25
|
+
"7000": 0.162,
|
|
26
|
+
"9999": 0.142
|
|
27
|
+
},
|
|
28
|
+
"floor": {
|
|
29
|
+
"3000": 0.227,
|
|
30
|
+
"4000": 0.183,
|
|
31
|
+
"5000": 0.183,
|
|
32
|
+
"6000": 0.162,
|
|
33
|
+
"7000": 0.162,
|
|
34
|
+
"9999": 0.142
|
|
35
|
+
},
|
|
36
|
+
"window": {
|
|
37
|
+
"3000": 2.4,
|
|
38
|
+
"4000": 2.2,
|
|
39
|
+
"5000": 2.2,
|
|
40
|
+
"6000": 2.2,
|
|
41
|
+
"7000": 2.2,
|
|
42
|
+
"9999": 1.6
|
|
43
|
+
},
|
|
44
|
+
"skylight": {
|
|
45
|
+
"3000": 2.4,
|
|
46
|
+
"4000": 2.2,
|
|
47
|
+
"5000": 2.2,
|
|
48
|
+
"6000": 2.2,
|
|
49
|
+
"7000": 2.2,
|
|
50
|
+
"9999": 1.6
|
|
51
|
+
},
|
|
52
|
+
"door": {
|
|
53
|
+
"3000": 2.4,
|
|
54
|
+
"4000": 2.2,
|
|
55
|
+
"5000": 2.2,
|
|
56
|
+
"6000": 2.2,
|
|
57
|
+
"7000": 2.2,
|
|
58
|
+
"9999": 1.6
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
"ground": {
|
|
62
|
+
"wall": {
|
|
63
|
+
"3000": 0.568,
|
|
64
|
+
"4000": 0.379,
|
|
65
|
+
"5000": 0.284,
|
|
66
|
+
"6000": 0.284,
|
|
67
|
+
"7000": 0.284,
|
|
68
|
+
"9999": 0.21
|
|
69
|
+
},
|
|
70
|
+
"roofceiling": {
|
|
71
|
+
"3000": 0.568,
|
|
72
|
+
"4000": 0.379,
|
|
73
|
+
"5000": 0.284,
|
|
74
|
+
"6000": 0.284,
|
|
75
|
+
"7000": 0.284,
|
|
76
|
+
"9999": 0.21
|
|
77
|
+
},
|
|
78
|
+
"floor": {
|
|
79
|
+
"3000": 0.757,
|
|
80
|
+
"4000": 0.757,
|
|
81
|
+
"5000": 0.757,
|
|
82
|
+
"6000": 0.757,
|
|
83
|
+
"7000": 0.757,
|
|
84
|
+
"9999": 0.379
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
@@ -51,17 +51,18 @@ class NECB2015 < NECB2011
|
|
|
51
51
|
|
|
52
52
|
def apply_loop_pump_power(model:, sizing_run_dir:)
|
|
53
53
|
# NECB2015 Custom code
|
|
54
|
-
# Do another sizing run to take into account adjustments to equipment
|
|
55
|
-
#
|
|
56
|
-
#
|
|
57
|
-
#
|
|
54
|
+
# Do another sizing run to take into account adjustments to equipment
|
|
55
|
+
# efficiency etc. on capacities. This was done primarily because the cooling
|
|
56
|
+
# tower loop capacity is affected by the chiller COP. If the chiller COP is
|
|
57
|
+
# not properly set then the cooling tower loop capacity can be significantly
|
|
58
|
+
# off which will affect the NECB 2015 maximum loop pump capacity. Found all
|
|
59
|
+
# sizing was off somewhat if the additional sizing run was not done.
|
|
58
60
|
if model_run_sizing_run(model, "#{sizing_run_dir}/SR2") == false
|
|
59
61
|
raise('sizing run 2 failed!')
|
|
60
62
|
end
|
|
61
63
|
|
|
62
64
|
# Apply maxmimum loop pump power normalized by peak demand by served spaces as per NECB2015 5.2.6.3.(1)
|
|
63
65
|
apply_maximum_loop_pump_power(model)
|
|
64
|
-
# model = BTAP::FileIO::remove_duplicate_materials_and_constructions(model)
|
|
65
66
|
return model
|
|
66
67
|
end
|
|
67
68
|
|
|
@@ -73,7 +74,8 @@ class NECB2015 < NECB2011
|
|
|
73
74
|
if standards_space_type.include? 'Atrium' # @todo Note that since none of the archetypes has Atrium, this was tested for 'Dining'. #Atrium
|
|
74
75
|
puts "#{standards_space_type} - has atrium" # space_type.name.to_s
|
|
75
76
|
# puts space_height
|
|
76
|
-
|
|
77
|
+
space_height = get_max_space_height_for_space_type(space_type: space_type)
|
|
78
|
+
if space_height < 12.0
|
|
77
79
|
# @todo Regarding the below equations, identify which version of ASHRAE 90.1 was used in NECB2015.
|
|
78
80
|
atrium_lpd_eq_smaller_12_intercept = 0
|
|
79
81
|
atrium_lpd_eq_smaller_12_slope = 1.06
|
data/lib/openstudio-standards/standards/necb/NECB2017/data/surface_thermal_transmittance.json
CHANGED
|
@@ -10,48 +10,84 @@
|
|
|
10
10
|
"NECB2017_S_3.2.3.1"
|
|
11
11
|
],
|
|
12
12
|
"units": "W_per_m2_K",
|
|
13
|
-
"table":
|
|
14
|
-
{
|
|
15
|
-
"
|
|
16
|
-
|
|
17
|
-
|
|
13
|
+
"table": {
|
|
14
|
+
"outdoors": {
|
|
15
|
+
"wall": {
|
|
16
|
+
"3000": 0.315,
|
|
17
|
+
"4000": 0.278,
|
|
18
|
+
"5000": 0.247,
|
|
19
|
+
"6000": 0.21,
|
|
20
|
+
"7000": 0.21,
|
|
21
|
+
"9999": 0.183
|
|
22
|
+
},
|
|
23
|
+
"roofceiling": {
|
|
24
|
+
"3000": 0.193,
|
|
25
|
+
"4000": 0.156,
|
|
26
|
+
"5000": 0.156,
|
|
27
|
+
"6000": 0.138,
|
|
28
|
+
"7000": 0.138,
|
|
29
|
+
"9999": 0.121
|
|
30
|
+
},
|
|
31
|
+
"floor": {
|
|
32
|
+
"3000": 0.227,
|
|
33
|
+
"4000": 0.183,
|
|
34
|
+
"5000": 0.183,
|
|
35
|
+
"6000": 0.162,
|
|
36
|
+
"7000": 0.162,
|
|
37
|
+
"9999": 0.142
|
|
38
|
+
},
|
|
39
|
+
"window": {
|
|
40
|
+
"3000": 2.1,
|
|
41
|
+
"4000": 1.9,
|
|
42
|
+
"5000": 1.9,
|
|
43
|
+
"6000": 1.9,
|
|
44
|
+
"7000": 1.9,
|
|
45
|
+
"9999": 1.4
|
|
46
|
+
},
|
|
47
|
+
"skylight": {
|
|
48
|
+
"3000": 2.1,
|
|
49
|
+
"4000": 1.9,
|
|
50
|
+
"5000": 1.9,
|
|
51
|
+
"6000": 1.9,
|
|
52
|
+
"7000": 1.9,
|
|
53
|
+
"9999": 1.4
|
|
54
|
+
},
|
|
55
|
+
"door": {
|
|
56
|
+
"3000": 2.1,
|
|
57
|
+
"4000": 1.9,
|
|
58
|
+
"5000": 1.9,
|
|
59
|
+
"6000": 1.9,
|
|
60
|
+
"7000": 1.9,
|
|
61
|
+
"9999": 1.4
|
|
62
|
+
}
|
|
18
63
|
},
|
|
19
|
-
{
|
|
20
|
-
"
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
"
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
{
|
|
45
|
-
"boundary_condition": "Ground",
|
|
46
|
-
"surface": "RoofCeiling",
|
|
47
|
-
"formula": "( hdd < 3000) ? 0.568 : ( hdd < 4000) ? 0.379 : ( hdd < 7000) ? 0.284 : 0.210"
|
|
48
|
-
},
|
|
49
|
-
{
|
|
50
|
-
"boundary_condition": "Ground",
|
|
51
|
-
"surface": "Floor",
|
|
52
|
-
"formula": "( hdd < 7000) ? 0.757 : 0.379"
|
|
64
|
+
"ground": {
|
|
65
|
+
"wall": {
|
|
66
|
+
"3000": 0.568,
|
|
67
|
+
"4000": 0.379,
|
|
68
|
+
"5000": 0.284,
|
|
69
|
+
"6000": 0.284,
|
|
70
|
+
"7000": 0.284,
|
|
71
|
+
"9999": 0.21
|
|
72
|
+
},
|
|
73
|
+
"roofceiling": {
|
|
74
|
+
"3000": 0.568,
|
|
75
|
+
"4000": 0.379,
|
|
76
|
+
"5000": 0.284,
|
|
77
|
+
"6000": 0.284,
|
|
78
|
+
"7000": 0.284,
|
|
79
|
+
"9999": 0.21
|
|
80
|
+
},
|
|
81
|
+
"floor": {
|
|
82
|
+
"3000": 0.757,
|
|
83
|
+
"4000": 0.757,
|
|
84
|
+
"5000": 0.757,
|
|
85
|
+
"6000": 0.757,
|
|
86
|
+
"7000": 0.757,
|
|
87
|
+
"9999": 0.379
|
|
88
|
+
}
|
|
53
89
|
}
|
|
54
|
-
|
|
90
|
+
}
|
|
55
91
|
}
|
|
56
92
|
}
|
|
57
93
|
}
|
|
@@ -52,7 +52,8 @@ class NECB2017 < NECB2015
|
|
|
52
52
|
if standards_space_type.include? 'Atrium' # @todo Note that since none of the archetypes has Atrium, this was tested for 'Dining'. #Atrium
|
|
53
53
|
puts "#{standards_space_type} - has atrium" # space_type.name.to_s
|
|
54
54
|
# puts space_height
|
|
55
|
-
|
|
55
|
+
space_height = get_max_space_height_for_space_type(space_type: space_type)
|
|
56
|
+
if space_height < 12.0
|
|
56
57
|
# @todo Regarding the below equations, identify which version of ASHRAE 90.1 was used in NECB2017.
|
|
57
58
|
atrium_lpd_eq_smaller_12_intercept = 0
|
|
58
59
|
atrium_lpd_eq_smaller_12_slope = 1.06
|