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
|
@@ -1,122 +1,5 @@
|
|
|
1
|
-
|
|
2
1
|
class NECB2020
|
|
3
2
|
|
|
4
|
-
# Go through the default construction sets and hard-assigned
|
|
5
|
-
# constructions. Clone the existing constructions and set their
|
|
6
|
-
# intended surface type and standards construction type per
|
|
7
|
-
# the PRM. For some standards, this will involve making
|
|
8
|
-
# modifications. For others, it will not.
|
|
9
|
-
#
|
|
10
|
-
# 90.1-2007, 90.1-2010, 90.1-2013
|
|
11
|
-
# @return [Boolean] returns true if successful, false if not
|
|
12
|
-
|
|
13
|
-
def apply_standard_construction_properties(model:,
|
|
14
|
-
necb_hdd: true,
|
|
15
|
-
runner: nil,
|
|
16
|
-
# ext surfaces
|
|
17
|
-
ext_wall_cond: nil,
|
|
18
|
-
ext_floor_cond: nil,
|
|
19
|
-
ext_roof_cond: nil,
|
|
20
|
-
# ground surfaces
|
|
21
|
-
ground_wall_cond: nil,
|
|
22
|
-
ground_floor_cond: nil,
|
|
23
|
-
ground_roof_cond: nil,
|
|
24
|
-
# fixed Windows
|
|
25
|
-
fixed_window_cond: nil,
|
|
26
|
-
fixed_wind_solar_trans: nil,
|
|
27
|
-
fixed_wind_vis_trans: nil,
|
|
28
|
-
# operable windows
|
|
29
|
-
operable_wind_solar_trans: nil,
|
|
30
|
-
operable_window_cond: nil,
|
|
31
|
-
operable_wind_vis_trans: nil,
|
|
32
|
-
# glass doors
|
|
33
|
-
glass_door_cond: nil,
|
|
34
|
-
glass_door_solar_trans: nil,
|
|
35
|
-
glass_door_vis_trans: nil,
|
|
36
|
-
# opaque doors
|
|
37
|
-
door_construction_cond: nil,
|
|
38
|
-
overhead_door_cond: nil,
|
|
39
|
-
# skylights
|
|
40
|
-
skylight_cond: nil,
|
|
41
|
-
skylight_solar_trans: nil,
|
|
42
|
-
skylight_vis_trans: nil,
|
|
43
|
-
# tubular daylight dome
|
|
44
|
-
tubular_daylight_dome_cond: nil,
|
|
45
|
-
tubular_daylight_dome_solar_trans: nil,
|
|
46
|
-
tubular_daylight_dome_vis_trans: nil,
|
|
47
|
-
# tubular daylight diffuser
|
|
48
|
-
tubular_daylight_diffuser_cond: nil,
|
|
49
|
-
tubular_daylight_diffuser_solar_trans: nil,
|
|
50
|
-
tubular_daylight_diffuser_vis_trans: nil)
|
|
51
|
-
|
|
52
|
-
model.getDefaultConstructionSets.sort.each do |default_surface_construction_set|
|
|
53
|
-
BTAP.runner_register('Info', 'apply_standard_construction_properties', runner)
|
|
54
|
-
if model.weatherFile.empty? || model.weatherFile.get.path.empty? || !File.exist?(model.weatherFile.get.path.get.to_s)
|
|
55
|
-
|
|
56
|
-
BTAP.runner_register('Error', 'Weather file is not defined. Please ensure the weather file is defined and exists.', runner)
|
|
57
|
-
return false
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
# hdd required to get correct conductance values from the json file.
|
|
61
|
-
hdd = get_necb_hdd18(model: model, necb_hdd: necb_hdd)
|
|
62
|
-
|
|
63
|
-
# Lambdas are preferred over methods in methods for small utility methods.
|
|
64
|
-
correct_cond = lambda do |conductivity, surface_type|
|
|
65
|
-
return conductivity.nil? || conductivity.to_f <= 0.0 || conductivity == "NECB_Default" ? eval(model_find_objects(@standards_data['surface_thermal_transmittance'], surface_type)[0]['formula']) : conductivity.to_f
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
# Converts trans and vis to nil if requesting default.. or casts the string to a float.
|
|
69
|
-
correct_vis_trans = lambda do |value|
|
|
70
|
-
return value.nil? || value.to_f <= 0.0 || value == "NECB_Default" ? nil : value.to_f
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
BTAP::Resources::Envelope::ConstructionSets.customize_default_surface_construction_set!(model: model,
|
|
74
|
-
name: "#{default_surface_construction_set.name.get} at hdd = #{hdd}",
|
|
75
|
-
default_surface_construction_set: default_surface_construction_set,
|
|
76
|
-
# ext surfaces
|
|
77
|
-
ext_wall_cond: correct_cond.call(ext_wall_cond, {'boundary_condition' => 'Outdoors', 'surface' => 'Wall'}),
|
|
78
|
-
ext_floor_cond: correct_cond.call(ext_floor_cond, {'boundary_condition' => 'Outdoors', 'surface' => 'Floor'}),
|
|
79
|
-
ext_roof_cond: correct_cond.call(ext_roof_cond, {'boundary_condition' => 'Outdoors', 'surface' => 'RoofCeiling'}),
|
|
80
|
-
# ground surfaces
|
|
81
|
-
ground_wall_cond: correct_cond.call(ground_wall_cond, {'boundary_condition' => 'Ground', 'surface' => 'Wall'}),
|
|
82
|
-
ground_floor_cond: correct_cond.call(ground_floor_cond, {'boundary_condition' => 'Ground', 'surface' => 'Floor'}),
|
|
83
|
-
ground_roof_cond: correct_cond.call(ground_roof_cond, {'boundary_condition' => 'Ground', 'surface' => 'RoofCeiling'}),
|
|
84
|
-
# fixed Windows
|
|
85
|
-
fixed_window_cond: correct_cond.call(fixed_window_cond, {'boundary_condition' => 'Outdoors', 'surface' => 'Window'}),
|
|
86
|
-
fixed_wind_solar_trans: correct_vis_trans.call(fixed_wind_solar_trans),
|
|
87
|
-
fixed_wind_vis_trans: correct_vis_trans.call(fixed_wind_vis_trans),
|
|
88
|
-
# operable windows
|
|
89
|
-
operable_wind_solar_trans: correct_vis_trans.call(operable_wind_solar_trans),
|
|
90
|
-
operable_window_cond: correct_cond.call(fixed_window_cond, {'boundary_condition' => 'Outdoors', 'surface' => 'Window'}),
|
|
91
|
-
operable_wind_vis_trans: correct_vis_trans.call(operable_wind_vis_trans),
|
|
92
|
-
# glass doors
|
|
93
|
-
glass_door_cond: correct_cond.call(glass_door_cond, {'boundary_condition' => 'Outdoors', 'surface' => 'Window'}),
|
|
94
|
-
glass_door_solar_trans: correct_vis_trans.call(glass_door_solar_trans),
|
|
95
|
-
glass_door_vis_trans: correct_vis_trans.call(glass_door_vis_trans),
|
|
96
|
-
# opaque doors
|
|
97
|
-
door_construction_cond: correct_cond.call(door_construction_cond, {'boundary_condition' => 'Outdoors', 'surface' => 'Door'}),
|
|
98
|
-
overhead_door_cond: correct_cond.call(overhead_door_cond, {'boundary_condition' => 'Outdoors', 'surface' => 'Door'}),
|
|
99
|
-
# skylights
|
|
100
|
-
skylight_cond: correct_cond.call(skylight_cond, {'boundary_condition' => 'Outdoors', 'surface' => 'Skylight'}),
|
|
101
|
-
skylight_solar_trans: correct_vis_trans.call(skylight_solar_trans),
|
|
102
|
-
skylight_vis_trans: correct_vis_trans.call(skylight_vis_trans),
|
|
103
|
-
# tubular daylight dome
|
|
104
|
-
tubular_daylight_dome_cond: correct_cond.call(skylight_cond, {'boundary_condition' => 'Outdoors', 'surface' => 'Skylight'}),
|
|
105
|
-
tubular_daylight_dome_solar_trans: correct_vis_trans.call(tubular_daylight_dome_solar_trans),
|
|
106
|
-
tubular_daylight_dome_vis_trans: correct_vis_trans.call(tubular_daylight_dome_vis_trans),
|
|
107
|
-
# tubular daylight diffuser
|
|
108
|
-
tubular_daylight_diffuser_cond: correct_cond.call(skylight_cond, {'boundary_condition' => 'Outdoors', 'surface' => 'Skylight'}),
|
|
109
|
-
tubular_daylight_diffuser_solar_trans: correct_vis_trans.call(tubular_daylight_diffuser_solar_trans),
|
|
110
|
-
tubular_daylight_diffuser_vis_trans: correct_vis_trans.call(tubular_daylight_diffuser_vis_trans)
|
|
111
|
-
)
|
|
112
|
-
end
|
|
113
|
-
# sets all surfaces to use default constructions sets except adiabatic, where it does a hard assignment of the interior wall construction type.
|
|
114
|
-
model.getPlanarSurfaces.sort.each(&:resetConstruction)
|
|
115
|
-
# if the default construction set is defined..try to assign the interior wall to the adiabatic surfaces
|
|
116
|
-
BTAP::Resources::Envelope.assign_interior_surface_construction_to_adiabatic_surfaces(model, nil)
|
|
117
|
-
BTAP.runner_register('Info', ' apply_standard_construction_properties was sucessful.', runner)
|
|
118
|
-
end
|
|
119
|
-
|
|
120
3
|
# Set all external subsurfaces (doors, windows, skylights) to NECB values.
|
|
121
4
|
# @author phylroy.lopez@nrcan.gc.ca
|
|
122
5
|
# @param subsurface [String]
|
data/lib/openstudio-standards/standards/necb/NECB2020/data/surface_thermal_transmittance.json
CHANGED
|
@@ -8,53 +8,84 @@
|
|
|
8
8
|
"PCF 1537"
|
|
9
9
|
],
|
|
10
10
|
"units": "W_per_m2_K",
|
|
11
|
-
"table":
|
|
12
|
-
{
|
|
13
|
-
"
|
|
14
|
-
|
|
15
|
-
|
|
11
|
+
"table": {
|
|
12
|
+
"outdoors": {
|
|
13
|
+
"wall": {
|
|
14
|
+
"3000": 0.29,
|
|
15
|
+
"4000": 0.265,
|
|
16
|
+
"5000": 0.24,
|
|
17
|
+
"6000": 0.215,
|
|
18
|
+
"7000": 0.19,
|
|
19
|
+
"9999": 0.165
|
|
20
|
+
},
|
|
21
|
+
"roofceiling": {
|
|
22
|
+
"3000": 0.164,
|
|
23
|
+
"4000": 0.156,
|
|
24
|
+
"5000": 0.138,
|
|
25
|
+
"6000": 0.121,
|
|
26
|
+
"7000": 0.117,
|
|
27
|
+
"9999": 0.11
|
|
28
|
+
},
|
|
29
|
+
"floor": {
|
|
30
|
+
"3000": 0.193,
|
|
31
|
+
"4000": 0.175,
|
|
32
|
+
"5000": 0.156,
|
|
33
|
+
"6000": 0.138,
|
|
34
|
+
"7000": 0.121,
|
|
35
|
+
"9999": 0.117
|
|
36
|
+
},
|
|
37
|
+
"window": {
|
|
38
|
+
"3000": 1.9,
|
|
39
|
+
"4000": 1.9,
|
|
40
|
+
"5000": 1.73,
|
|
41
|
+
"6000": 1.73,
|
|
42
|
+
"7000": 1.44,
|
|
43
|
+
"9999": 1.44
|
|
44
|
+
},
|
|
45
|
+
"skylight": {
|
|
46
|
+
"3000": 2.69,
|
|
47
|
+
"4000": 2.69,
|
|
48
|
+
"5000": 2.41,
|
|
49
|
+
"6000": 2.41,
|
|
50
|
+
"7000": 2.01,
|
|
51
|
+
"9999": 2.01
|
|
52
|
+
},
|
|
53
|
+
"door": {
|
|
54
|
+
"3000": 2.12,
|
|
55
|
+
"4000": 1.9,
|
|
56
|
+
"5000": 1.9,
|
|
57
|
+
"6000": 1.9,
|
|
58
|
+
"7000": 1.9,
|
|
59
|
+
"9999": 1.44
|
|
60
|
+
}
|
|
16
61
|
},
|
|
17
|
-
{
|
|
18
|
-
"
|
|
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
|
-
"boundary_condition": "Ground",
|
|
44
|
-
"surface": "Wall",
|
|
45
|
-
"formula": "( hdd < 3000) ? 0.568 : ( hdd < 4000) ? 0.379 : ( hdd < 7000) ? 0.284 : 0.210"
|
|
46
|
-
},
|
|
47
|
-
{
|
|
48
|
-
"boundary_condition": "Ground",
|
|
49
|
-
"surface": "RoofCeiling",
|
|
50
|
-
"formula": "( hdd < 3000) ? 0.568 : ( hdd < 4000) ? 0.379 : ( hdd < 7000) ? 0.284 : 0.210"
|
|
51
|
-
},
|
|
52
|
-
{
|
|
53
|
-
"boundary_condition": "Ground",
|
|
54
|
-
"surface": "Floor",
|
|
55
|
-
"formula": "( hdd < 7000) ? 0.757 : 0.379"
|
|
62
|
+
"ground": {
|
|
63
|
+
"wall": {
|
|
64
|
+
"3000": 0.568,
|
|
65
|
+
"4000": 0.379,
|
|
66
|
+
"5000": 0.284,
|
|
67
|
+
"6000": 0.284,
|
|
68
|
+
"7000": 0.284,
|
|
69
|
+
"9999": 0.21
|
|
70
|
+
},
|
|
71
|
+
"roofceiling": {
|
|
72
|
+
"3000": 0.568,
|
|
73
|
+
"4000": 0.379,
|
|
74
|
+
"5000": 0.284,
|
|
75
|
+
"6000": 0.284,
|
|
76
|
+
"7000": 0.284,
|
|
77
|
+
"9999": 0.21
|
|
78
|
+
},
|
|
79
|
+
"floor": {
|
|
80
|
+
"3000": 0.757,
|
|
81
|
+
"4000": 0.757,
|
|
82
|
+
"5000": 0.757,
|
|
83
|
+
"6000": 0.757,
|
|
84
|
+
"7000": 0.757,
|
|
85
|
+
"9999": 0.379
|
|
86
|
+
}
|
|
56
87
|
}
|
|
57
|
-
|
|
88
|
+
}
|
|
58
89
|
}
|
|
59
90
|
}
|
|
60
91
|
}
|
|
@@ -140,4 +140,222 @@ class NECB2020 < NECB2017
|
|
|
140
140
|
infiltration.setSpace(space)
|
|
141
141
|
return true
|
|
142
142
|
end
|
|
143
|
+
|
|
144
|
+
# Generate NECB 2020 Performance Path compliance models (proposed and reference)
|
|
145
|
+
#
|
|
146
|
+
# This method implements the NECB 2020 Section 8.4 Performance Path by:
|
|
147
|
+
# 1. Documenting the proposed building characteristics per Section 8.4.3
|
|
148
|
+
# 2. Generating a reference building with prescriptive requirements per Section 8.4.4
|
|
149
|
+
# 3. Optionally running simulations and validating compliance per Section 8.4.1
|
|
150
|
+
# 4. Generating detailed HTML compliance reports with before/after logging
|
|
151
|
+
#
|
|
152
|
+
# @param proposed_model [OpenStudio::Model::Model] The proposed building model (input, not modified)
|
|
153
|
+
# @param epw_file [String] Path to EPW weather file
|
|
154
|
+
# @param sizing_run_dir [String] Directory for sizing runs (default: current directory)
|
|
155
|
+
# @param output_dir [String] Directory for output files (default: current directory)
|
|
156
|
+
# @param run_simulations [Boolean] Whether to run EnergyPlus simulations (default: false)
|
|
157
|
+
# @param html_report [Boolean] Whether to generate HTML report (default: true)
|
|
158
|
+
# @return [Hash] Results hash containing:
|
|
159
|
+
# - :proposed_model - The input proposed building model (unmodified)
|
|
160
|
+
# - :reference_model - Generated reference building model
|
|
161
|
+
# - :compliance_log - Structured compliance logger with all changes
|
|
162
|
+
# - :proposed_model_path - Path to saved proposed model copy
|
|
163
|
+
# - :reference_model_path - Path to saved reference model
|
|
164
|
+
# - :html_report_path - Path to HTML compliance report (if html_report: true)
|
|
165
|
+
# - :compliance_result - Compliance validation results (if run_simulations: true)
|
|
166
|
+
# - :building_energy_target - Building energy target from reference (if run_simulations: true)
|
|
167
|
+
# - :climate_zone - Climate zone for the location
|
|
168
|
+
# - :hdd18 - Heating degree days (base 18°C)
|
|
169
|
+
#
|
|
170
|
+
# @example Basic usage without simulations
|
|
171
|
+
# standard = Standard.build('NECB2020')
|
|
172
|
+
# result = standard.model_create_necb_2020_performance_compliance(
|
|
173
|
+
# proposed_model: model,
|
|
174
|
+
# epw_file: 'path/to/weather.epw'
|
|
175
|
+
# )
|
|
176
|
+
# puts "Reference model: #{result[:reference_model_path]}"
|
|
177
|
+
# puts "HTML report: #{result[:html_report_path]}"
|
|
178
|
+
#
|
|
179
|
+
# @example With simulations and compliance validation
|
|
180
|
+
# result = standard.model_create_necb_2020_performance_compliance(
|
|
181
|
+
# proposed_model: model,
|
|
182
|
+
# epw_file: 'path/to/weather.epw',
|
|
183
|
+
# run_simulations: true
|
|
184
|
+
# )
|
|
185
|
+
# if result[:compliance_result][:compliant]
|
|
186
|
+
# puts "Building is compliant!"
|
|
187
|
+
# end
|
|
188
|
+
#
|
|
189
|
+
def model_create_necb_2020_performance_compliance(proposed_model:,
|
|
190
|
+
epw_file:,
|
|
191
|
+
sizing_run_dir: Dir.pwd,
|
|
192
|
+
output_dir: Dir.pwd,
|
|
193
|
+
run_simulations: false,
|
|
194
|
+
html_report: true)
|
|
195
|
+
|
|
196
|
+
# Load required modules
|
|
197
|
+
require_relative 'performance_compliance/compliance_logger'
|
|
198
|
+
require_relative 'performance_compliance/proposed_builder'
|
|
199
|
+
require_relative 'performance_compliance/reference_builder'
|
|
200
|
+
require_relative 'performance_compliance/reference_hvac_selector'
|
|
201
|
+
require_relative 'performance_compliance/compliance_validator'
|
|
202
|
+
require_relative 'performance_compliance/compliance_report'
|
|
203
|
+
|
|
204
|
+
# Initialize logger
|
|
205
|
+
logger = OpenstudioStandards::NECB2020::ComplianceLogger.new
|
|
206
|
+
|
|
207
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.NECB2020',
|
|
208
|
+
'Starting NECB 2020 Performance Path compliance generation')
|
|
209
|
+
|
|
210
|
+
# Get climate information
|
|
211
|
+
hdd18 = get_necb_hdd18(model: proposed_model)
|
|
212
|
+
climate_zone = get_climate_zone_name(hdd18)
|
|
213
|
+
|
|
214
|
+
logger.log_article(
|
|
215
|
+
article: '8.4.1.1',
|
|
216
|
+
action: 'Initialized NECB 2020 Performance Path compliance',
|
|
217
|
+
details: {
|
|
218
|
+
climate_zone: climate_zone,
|
|
219
|
+
hdd18: hdd18.round(0),
|
|
220
|
+
epw_file: File.basename(epw_file)
|
|
221
|
+
}
|
|
222
|
+
)
|
|
223
|
+
|
|
224
|
+
# Step 1: Document proposed building per Section 8.4.3
|
|
225
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.NECB2020',
|
|
226
|
+
'Documenting proposed building characteristics (Section 8.4.3)')
|
|
227
|
+
|
|
228
|
+
proposed_builder = OpenstudioStandards::NECB2020::ProposedBuilder.new(proposed_model, logger)
|
|
229
|
+
proposed_characteristics = proposed_builder.document_all_characteristics
|
|
230
|
+
|
|
231
|
+
# Step 2: Generate reference building per Section 8.4.4
|
|
232
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.NECB2020',
|
|
233
|
+
'Generating reference building (Section 8.4.4)')
|
|
234
|
+
|
|
235
|
+
reference_builder = OpenstudioStandards::NECB2020::ReferenceBuilder.new(
|
|
236
|
+
self, proposed_model, logger, epw_file
|
|
237
|
+
)
|
|
238
|
+
reference_model = reference_builder.generate_reference_building(sizing_run_dir: sizing_run_dir)
|
|
239
|
+
|
|
240
|
+
# Step 3: Save models
|
|
241
|
+
proposed_model_path = File.join(output_dir, 'proposed_building.osm')
|
|
242
|
+
reference_model_path = File.join(output_dir, 'reference_building.osm')
|
|
243
|
+
|
|
244
|
+
BTAP::FileIO.save_osm(proposed_model, proposed_model_path)
|
|
245
|
+
BTAP::FileIO.save_osm(reference_model, reference_model_path)
|
|
246
|
+
|
|
247
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.NECB2020',
|
|
248
|
+
"Saved proposed model to: #{proposed_model_path}")
|
|
249
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.NECB2020',
|
|
250
|
+
"Saved reference model to: #{reference_model_path}")
|
|
251
|
+
|
|
252
|
+
# Prepare results
|
|
253
|
+
results = {
|
|
254
|
+
proposed_model: proposed_model,
|
|
255
|
+
reference_model: reference_model,
|
|
256
|
+
compliance_log: logger,
|
|
257
|
+
proposed_model_path: proposed_model_path,
|
|
258
|
+
reference_model_path: reference_model_path,
|
|
259
|
+
climate_zone: climate_zone,
|
|
260
|
+
hdd18: hdd18,
|
|
261
|
+
epw_file: epw_file
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
# Step 4: Optional - Run simulations and validate compliance
|
|
265
|
+
if run_simulations
|
|
266
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.NECB2020',
|
|
267
|
+
'Running simulations and validating compliance (Section 8.4.1)')
|
|
268
|
+
|
|
269
|
+
# Run proposed building simulation
|
|
270
|
+
proposed_sql_path = run_simulation_and_get_sql(
|
|
271
|
+
proposed_model,
|
|
272
|
+
epw_file,
|
|
273
|
+
File.join(output_dir, 'proposed_sim')
|
|
274
|
+
)
|
|
275
|
+
|
|
276
|
+
# Run reference building simulation
|
|
277
|
+
reference_sql_path = run_simulation_and_get_sql(
|
|
278
|
+
reference_model,
|
|
279
|
+
epw_file,
|
|
280
|
+
File.join(output_dir, 'reference_sim')
|
|
281
|
+
)
|
|
282
|
+
|
|
283
|
+
if proposed_sql_path && reference_sql_path
|
|
284
|
+
# Load SQL files
|
|
285
|
+
proposed_sql = OpenStudio::SqlFile.new(proposed_sql_path)
|
|
286
|
+
reference_sql = OpenStudio::SqlFile.new(reference_sql_path)
|
|
287
|
+
|
|
288
|
+
# Validate compliance
|
|
289
|
+
validator = OpenstudioStandards::NECB2020::ComplianceValidator.new(logger)
|
|
290
|
+
compliance_result = validator.validate_compliance(proposed_sql, reference_sql)
|
|
291
|
+
|
|
292
|
+
results[:compliance_result] = compliance_result
|
|
293
|
+
results[:building_energy_target] = compliance_result[:annual_energy][:building_energy_target_gj]
|
|
294
|
+
|
|
295
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.NECB2020',
|
|
296
|
+
"Compliance: #{compliance_result[:compliant] ? 'PASS' : 'FAIL'}")
|
|
297
|
+
else
|
|
298
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.standards.NECB2020',
|
|
299
|
+
'Simulations failed - compliance validation not performed')
|
|
300
|
+
end
|
|
301
|
+
end
|
|
302
|
+
|
|
303
|
+
# Step 5: Generate HTML report
|
|
304
|
+
if html_report
|
|
305
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.NECB2020',
|
|
306
|
+
'Generating HTML compliance report')
|
|
307
|
+
|
|
308
|
+
report_data = {
|
|
309
|
+
climate_zone: climate_zone,
|
|
310
|
+
hdd18: hdd18,
|
|
311
|
+
epw_file: epw_file,
|
|
312
|
+
compliance_result: results[:compliance_result]
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
report_generator = OpenstudioStandards::NECB2020::ComplianceReportGenerator.new(logger, report_data)
|
|
316
|
+
report_path = File.join(output_dir, 'necb_2020_performance_compliance_report.html')
|
|
317
|
+
report_generator.save_report(report_path)
|
|
318
|
+
|
|
319
|
+
results[:html_report_path] = report_path
|
|
320
|
+
|
|
321
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.NECB2020',
|
|
322
|
+
"Saved HTML report to: #{report_path}")
|
|
323
|
+
end
|
|
324
|
+
|
|
325
|
+
# Final summary
|
|
326
|
+
summary = logger.get_summary
|
|
327
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.standards.NECB2020',
|
|
328
|
+
"Compliance generation complete. Total entries: #{summary[:total_entries]}, " \
|
|
329
|
+
"Passed: #{summary[:passed]}, Failed: #{summary[:failed]}")
|
|
330
|
+
|
|
331
|
+
results
|
|
332
|
+
end
|
|
333
|
+
|
|
334
|
+
private
|
|
335
|
+
|
|
336
|
+
# Run EnergyPlus simulation and return SQL file path
|
|
337
|
+
#
|
|
338
|
+
# @param model [OpenStudio::Model::Model] Model to simulate
|
|
339
|
+
# @param epw_file [String] Weather file path
|
|
340
|
+
# @param run_dir [String] Directory for simulation files
|
|
341
|
+
# @return [String, nil] Path to SQL file, or nil if simulation failed
|
|
342
|
+
def run_simulation_and_get_sql(model, epw_file, run_dir)
|
|
343
|
+
# Create run directory
|
|
344
|
+
FileUtils.mkdir_p(run_dir)
|
|
345
|
+
|
|
346
|
+
# Save model
|
|
347
|
+
osm_path = File.join(run_dir, 'in.osm')
|
|
348
|
+
BTAP::FileIO.save_osm(model, osm_path)
|
|
349
|
+
|
|
350
|
+
# Run simulation
|
|
351
|
+
sql_path = model_run_simulation_and_log_errors(model, run_dir)
|
|
352
|
+
|
|
353
|
+
return sql_path if sql_path
|
|
354
|
+
|
|
355
|
+
nil
|
|
356
|
+
rescue StandardError => e
|
|
357
|
+
OpenStudio.logFree(OpenStudio::Error, 'openstudio.standards.NECB2020',
|
|
358
|
+
"Simulation failed: #{e.message}")
|
|
359
|
+
nil
|
|
360
|
+
end
|
|
143
361
|
end
|
|
@@ -1344,11 +1344,14 @@ OS:DefaultConstructionSet,
|
|
|
1344
1344
|
, !- Building Shading Construction Name
|
|
1345
1345
|
; !- Site Shading Construction Name
|
|
1346
1346
|
|
|
1347
|
-
OS:Material
|
|
1347
|
+
OS:Material,
|
|
1348
1348
|
{8123ea19-659f-408b-9bbf-9d3d1a8354b5}, !- Handle
|
|
1349
1349
|
Typical Carpet Pad, !- Name
|
|
1350
|
-
|
|
1351
|
-
0.
|
|
1350
|
+
VeryRough, !- Roughness
|
|
1351
|
+
0.01, !- Thickness {m}
|
|
1352
|
+
0.06, !- Conductivity {W/m-K}
|
|
1353
|
+
200, !- Density {kg/m3}
|
|
1354
|
+
1360, !- Specific Heat {J/kg-K}
|
|
1352
1355
|
0.9, !- Thermal Absorptance
|
|
1353
1356
|
0.7, !- Solar Absorptance
|
|
1354
1357
|
0.8; !- Visible Absorptance
|
|
@@ -1399,11 +1402,14 @@ OS:StandardsInformation:Construction,
|
|
|
1399
1402
|
InteriorCeiling, !- Intended Surface Type
|
|
1400
1403
|
; !- Standards Construction Type
|
|
1401
1404
|
|
|
1402
|
-
OS:Material
|
|
1405
|
+
OS:Material,
|
|
1403
1406
|
{02547311-2903-4271-85c6-5ef37f49a4de}, !- Handle
|
|
1404
1407
|
Typical Insulation, !- Name
|
|
1405
|
-
|
|
1406
|
-
0.
|
|
1408
|
+
MediumSmooth, !- Roughness
|
|
1409
|
+
0.005, !- Thickness {m}
|
|
1410
|
+
0.038, !- Conductivity {W/m-K}
|
|
1411
|
+
29, !- Density {kg/m3}
|
|
1412
|
+
1210, !- Specific Heat {J/kg-K}
|
|
1407
1413
|
0.9, !- Thermal Absorptance
|
|
1408
1414
|
0.7, !- Solar Absorptance
|
|
1409
1415
|
0.7; !- Visible Absorptance
|
|
@@ -2884,4 +2890,3 @@ OS:Rendering:Color,
|
|
|
2884
2890
|
255, !- Rendering Red Value
|
|
2885
2891
|
140, !- Rendering Green Value
|
|
2886
2892
|
0; !- Rendering Blue Value
|
|
2887
|
-
|
|
@@ -107,7 +107,7 @@ class Standard
|
|
|
107
107
|
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.standards.standard', "Loading JSON files from #{data_dir}")
|
|
108
108
|
files = Dir.glob("#{data_dir}/data/*.json").select { |e| File.file? e }
|
|
109
109
|
files.each do |file|
|
|
110
|
-
data = JSON.parse(File.read(file))
|
|
110
|
+
data = JSON.parse(File.read(file, encoding: 'UTF-8'))
|
|
111
111
|
data.each_pair do |key, objs|
|
|
112
112
|
# Override the template in inherited files to match the instantiated template
|
|
113
113
|
objs.each do |obj|
|
data/lib/openstudio-standards.rb
CHANGED
|
@@ -141,11 +141,19 @@ module OpenstudioStandards
|
|
|
141
141
|
|
|
142
142
|
# BTAP (Natural Resources Canada)
|
|
143
143
|
require_relative 'openstudio-standards/btap/btap'
|
|
144
|
-
|
|
144
|
+
|
|
145
|
+
# BTAP QAQC
|
|
146
|
+
require_relative "openstudio-standards/btap/qaqc/analysis.rb"
|
|
147
|
+
require_relative "openstudio-standards/btap/qaqc/data.rb"
|
|
148
|
+
require_relative "openstudio-standards/btap/qaqc/datapoint.rb"
|
|
149
|
+
|
|
150
|
+
# BTAP Costing
|
|
151
|
+
require_relative 'openstudio-standards/btap/costing/database'
|
|
145
152
|
require_relative 'openstudio-standards/btap/costing/btap_costing'
|
|
146
153
|
require_relative 'openstudio-standards/btap/carbon/btap_carbon'
|
|
147
154
|
require_relative 'openstudio-standards/btap/costing/ventilation_costing'
|
|
148
155
|
require_relative 'openstudio-standards/btap/costing/envelope_costing'
|
|
156
|
+
require_relative 'openstudio-standards/btap/costing/thermal_bridging_costing'
|
|
149
157
|
require_relative 'openstudio-standards/btap/costing/lighting_costing'
|
|
150
158
|
require_relative 'openstudio-standards/btap/costing/heating_cooling_costing'
|
|
151
159
|
require_relative 'openstudio-standards/btap/costing/shw_costing'
|
|
@@ -215,9 +223,6 @@ module OpenstudioStandards
|
|
|
215
223
|
# NECB QAQC
|
|
216
224
|
require_relative "#{stds}/necb/NECB2011/qaqc/necb_qaqc.rb"
|
|
217
225
|
require_relative "#{stds}/necb/NECB2015/qaqc/necb_2015_qaqc.rb"
|
|
218
|
-
require_relative "#{stds}/necb/common/btap_analysis.rb"
|
|
219
|
-
require_relative "#{stds}/necb/common/btap_data.rb"
|
|
220
|
-
require_relative "#{stds}/necb/common/btap_datapoint.rb"
|
|
221
226
|
|
|
222
227
|
# ECM development
|
|
223
228
|
require_relative "#{stds}/necb/ECMS/ecms.rb"
|