openstudio-standards 0.8.3 → 0.8.4
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/lib/openstudio-standards/btap/costing/README.md +502 -0
- data/lib/openstudio-standards/btap/costing/btap_costing.rb +473 -0
- data/lib/openstudio-standards/btap/costing/btap_measure_helper.rb +359 -0
- data/lib/openstudio-standards/btap/costing/btap_workflow.rb +117 -0
- data/lib/openstudio-standards/btap/costing/common_paths.rb +78 -0
- data/lib/openstudio-standards/btap/costing/common_resources/ConstructionProperties.csv +52 -0
- data/lib/openstudio-standards/btap/costing/common_resources/Constructions.csv +37 -0
- data/lib/openstudio-standards/btap/costing/common_resources/construction_sets.csv +1270 -0
- data/lib/openstudio-standards/btap/costing/common_resources/constructions_glazing.csv +61 -0
- data/lib/openstudio-standards/btap/costing/common_resources/constructions_opaque.csv +2256 -0
- data/lib/openstudio-standards/btap/costing/common_resources/costs.csv +1904 -0
- data/lib/openstudio-standards/btap/costing/common_resources/costs_local_factors.csv +2315 -0
- data/lib/openstudio-standards/btap/costing/common_resources/hvac_vent_ahu.csv +925 -0
- data/lib/openstudio-standards/btap/costing/common_resources/lighting.csv +364 -0
- data/lib/openstudio-standards/btap/costing/common_resources/lighting_sets.csv +2667 -0
- data/lib/openstudio-standards/btap/costing/common_resources/locations.csv +75 -0
- data/lib/openstudio-standards/btap/costing/common_resources/materials_glazing.csv +35 -0
- data/lib/openstudio-standards/btap/costing/common_resources/materials_hvac.csv +1699 -0
- data/lib/openstudio-standards/btap/costing/common_resources/materials_lighting.csv +267 -0
- data/lib/openstudio-standards/btap/costing/common_resources/materials_opaque.csv +164 -0
- data/lib/openstudio-standards/btap/costing/copy_test_results_files_to_expected_results.rb +11 -0
- data/lib/openstudio-standards/btap/costing/cost_building_from_file.rb +136 -0
- data/lib/openstudio-standards/btap/costing/costing_database_wrapper.rb +177 -0
- data/lib/openstudio-standards/btap/costing/daylighting_sensor_control_costing.rb +353 -0
- data/lib/openstudio-standards/btap/costing/dcv_costing.rb +314 -0
- data/lib/openstudio-standards/btap/costing/dummy.epw +8768 -0
- data/lib/openstudio-standards/btap/costing/dummy.osm +5320 -0
- data/lib/openstudio-standards/btap/costing/envelope_costing.rb +284 -0
- data/lib/openstudio-standards/btap/costing/heating_cooling_costing.rb +2584 -0
- data/lib/openstudio-standards/btap/costing/led_lighting_costing.rb +155 -0
- data/lib/openstudio-standards/btap/costing/lighting_costing.rb +209 -0
- data/lib/openstudio-standards/btap/costing/mech_sizing.json +502 -0
- data/lib/openstudio-standards/btap/costing/neb_end_use_prices.csv +42 -0
- data/lib/openstudio-standards/btap/costing/necb_2011_spacetype_info.csv +225 -0
- data/lib/openstudio-standards/btap/costing/necb_reference_runs.csv +28705 -0
- data/lib/openstudio-standards/btap/costing/nv_costing.rb +547 -0
- data/lib/openstudio-standards/btap/costing/parallel_tests.rb +92 -0
- data/lib/openstudio-standards/btap/costing/pv_ground_costing.rb +687 -0
- data/lib/openstudio-standards/btap/costing/shw_costing.rb +705 -0
- data/lib/openstudio-standards/btap/costing/test_list.txt +17 -0
- data/lib/openstudio-standards/btap/costing/test_run_all_test_locally.rb +26 -0
- data/lib/openstudio-standards/btap/costing/test_run_costing_tests.rb +80 -0
- data/lib/openstudio-standards/btap/costing/ventilation_costing.rb +2616 -0
- data/lib/openstudio-standards/constructions/modify.rb +2 -1
- data/lib/openstudio-standards/standards/Standards.Model.rb +39 -9
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/ashrae_90_1_prm.Model.rb +2 -2
- data/lib/openstudio-standards/standards/ashrae_90_1_prm/userdata_csv/ashrae_90_1_prm.UserData.rb +6 -1
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/btap_pre1980.rb +2 -27
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_3_and_8_single_speed.rb +68 -27
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_4.rb +64 -25
- data/lib/openstudio-standards/standards/necb/BTAPPRE1980/hvac_system_6.rb +9 -14
- data/lib/openstudio-standards/standards/necb/ECMS/hvac_systems.rb +46 -20
- data/lib/openstudio-standards/standards/necb/NECB2011/autozone.rb +635 -248
- data/lib/openstudio-standards/standards/necb/NECB2011/data/constants.json +43 -7
- data/lib/openstudio-standards/standards/necb/NECB2011/data/fuel_type_sets.json +7 -1
- data/lib/openstudio-standards/standards/necb/NECB2011/data/geometry/HighriseApartmentMult.osm +14272 -0
- data/lib/openstudio-standards/standards/necb/NECB2011/data/necb_2015_table_c1.json +1 -1
- data/lib/openstudio-standards/standards/necb/NECB2011/data/space_types.json +437 -437
- data/lib/openstudio-standards/standards/necb/NECB2011/data/systems.json +516 -0
- data/lib/openstudio-standards/standards/necb/NECB2011/data/systems_including_sys5.json +588 -0
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_namer.rb +489 -0
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_1_single_speed.rb +16 -6
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_2_and_5.rb +48 -5
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_3_and_8_multi_speed.rb +2 -2
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_3_and_8_single_speed.rb +35 -27
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_4.rb +34 -23
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_system_6.rb +8 -6
- data/lib/openstudio-standards/standards/necb/NECB2011/hvac_systems.rb +42 -13
- data/lib/openstudio-standards/standards/necb/NECB2011/necb_2011.rb +214 -25
- data/lib/openstudio-standards/standards/necb/NECB2011/system_fuels.rb +61 -1
- data/lib/openstudio-standards/standards/necb/NECB2015/data/space_types.json +636 -636
- data/lib/openstudio-standards/standards/necb/NECB2015/data/unitary_acs.json +38 -38
- data/lib/openstudio-standards/standards/necb/NECB2015/hvac_systems.rb +15 -6
- data/lib/openstudio-standards/standards/necb/NECB2017/data/space_types.json +636 -636
- data/lib/openstudio-standards/standards/necb/NECB2020/data/chillers.json +71 -71
- data/lib/openstudio-standards/standards/necb/README.md +343 -0
- data/lib/openstudio-standards/standards/necb/common/btap_data.rb +190 -28
- data/lib/openstudio-standards/standards/necb/common/btap_datapoint.rb +14 -5
- data/lib/openstudio-standards/standards/necb/common/eccc_electric_grid_intensity_20250311.csv +14 -0
- data/lib/openstudio-standards/standards/necb/common/nir_gas_grid_intensity_20250311.csv +14 -0
- data/lib/openstudio-standards/standards/necb/common/system_types.yaml +0 -0
- data/lib/openstudio-standards/utilities/logging.rb +18 -14
- data/lib/openstudio-standards/version.rb +1 -1
- data/lib/openstudio-standards/weather/modify.rb +2 -2
- data/lib/openstudio-standards.rb +12 -0
- metadata +53 -2
@@ -0,0 +1,343 @@
|
|
1
|
+
# NECB (National Energy Code for Buildings) Standards
|
2
|
+
|
3
|
+
## Overview
|
4
|
+
|
5
|
+
The NECB (National Energy Code for Buildings) standards module provides comprehensive implementation of Canadian building energy codes. This module represents one of the most complete implementations of a national building energy standard, covering multiple versions of the Canadian National Energy Code for Buildings, vintage building standards, and energy conservation measures.
|
6
|
+
|
7
|
+
## Architecture
|
8
|
+
|
9
|
+
The NECB module is organized into four main categories:
|
10
|
+
|
11
|
+
1. **NECB Standard Versions** (2011, 2015, 2017, 2020)
|
12
|
+
2. **BTAP Vintage Standards** (Pre-1980, 1980-2010)
|
13
|
+
3. **Energy Conservation Measures (ECMS)**
|
14
|
+
4. **Shared Resources** (Common data, documentation, QAQC)
|
15
|
+
|
16
|
+
## NECB Standard Versions
|
17
|
+
|
18
|
+
### NECB2011 - Foundation Implementation
|
19
|
+
|
20
|
+
#### Core Module: `necb_2011.rb`
|
21
|
+
**Most comprehensive NECB implementation with full building system coverage**
|
22
|
+
|
23
|
+
**Key Features:**
|
24
|
+
- Complete climate zone implementation for Canada (8 climate zones)
|
25
|
+
- All 8 HVAC system types with both single-speed and multi-speed variants
|
26
|
+
- Comprehensive building envelope requirements
|
27
|
+
- LED lighting compliance and occupancy sensor controls
|
28
|
+
- Service water heating system requirements
|
29
|
+
- BEPS (Building Energy Performance Standards) compliance pathways
|
30
|
+
- Thermal bridging calculations (TBD integration)
|
31
|
+
- Quality assurance and quality control (QAQC) framework
|
32
|
+
|
33
|
+
**Major Subsystems:**
|
34
|
+
|
35
|
+
##### HVAC Systems (`hvac_system_*.rb`)
|
36
|
+
- **System 1**: Single Zone systems (`hvac_system_1_single_speed.rb`, `hvac_system_1_multi_speed.rb`)
|
37
|
+
- **Systems 2 & 5**: Multi-zone VAV systems (`hvac_system_2_and_5.rb`)
|
38
|
+
- **Systems 3 & 8**: Single zone heat pumps (`hvac_system_3_and_8_single_speed.rb`, `hvac_system_3_and_8_multi_speed.rb`)
|
39
|
+
- **System 4**: Multi-zone VAV with reheat (`hvac_system_4.rb`)
|
40
|
+
- **System 6**: Multi-zone VAV with PFP boxes (`hvac_system_6.rb`)
|
41
|
+
- **General**: `hvac_systems.rb`, `hvac_namer.rb`
|
42
|
+
|
43
|
+
##### Building Systems
|
44
|
+
- **Envelope**: `building_envelope.rb` - Comprehensive building envelope requirements
|
45
|
+
- **Lighting**: `lighting.rb` - Interior lighting power density and controls
|
46
|
+
- **Service Water Heating**: `service_water_heating.rb` - Hot water system efficiency requirements
|
47
|
+
- **Electrical**: `electrical_power_systems_and_motors.rb` - Motor efficiency requirements
|
48
|
+
|
49
|
+
##### Specialized Features
|
50
|
+
- **Auto-zoning**: `autozone.rb` - Automated thermal zone creation
|
51
|
+
- **System Fuels**: `system_fuels.rb` - Fuel type selection and mapping
|
52
|
+
- **BEPS Compliance**: `beps_compliance_path.rb` - Building Energy Performance Standards
|
53
|
+
|
54
|
+
##### Data Resources (`data/`)
|
55
|
+
**Extensive JSON database covering:**
|
56
|
+
- **Climate & Geography**: `climate_zone_sets.json`, `province_map.json`
|
57
|
+
- **Building Envelope**: `materials.json`, `surface_thermal_transmittance.json`
|
58
|
+
- **HVAC Equipment**: `boilers.json`, `chillers.json`, `furnaces.json`, `heat_pumps.json`, `unitary_acs.json`
|
59
|
+
- **System Selection**: `systems.json`, `necb_hvac_system_selection_type.json`
|
60
|
+
- **Energy Efficiency**: `motors.json`, `heat_rejection.json`, `erv.json`
|
61
|
+
- **Building Types**: `space_types.json`, `prototype_inputs.json`
|
62
|
+
- **Lighting**: `led_lighting_data.json`
|
63
|
+
- **Economics**: `regional_fuel_use.json`
|
64
|
+
- **Reference Data**: `necb_2015_table_c1.json`, `constants.json`, `formulas.json`
|
65
|
+
|
66
|
+
##### Quality Assurance (`qaqc/`)
|
67
|
+
- **Main Module**: `necb_qaqc.rb` - Comprehensive model validation
|
68
|
+
- **Resources**: `qaqc_resources/` - Reference data for validation
|
69
|
+
- **Data**: `qaqc_data/` - Expected results for testing
|
70
|
+
|
71
|
+
### NECB2015 - Enhanced Version
|
72
|
+
|
73
|
+
#### Core Module: `necb_2015.rb`
|
74
|
+
**Updated NECB implementation with enhanced lighting and HVAC systems**
|
75
|
+
|
76
|
+
**Key Improvements over 2011:**
|
77
|
+
- Enhanced lighting power density requirements
|
78
|
+
- Updated HVAC system efficiency requirements
|
79
|
+
- Refined control strategies
|
80
|
+
|
81
|
+
**Modules:**
|
82
|
+
- **Lighting**: `lighting.rb` - Updated lighting requirements
|
83
|
+
- **HVAC**: `hvac_systems.rb` - Enhanced system implementations
|
84
|
+
- **QAQC**: `qaqc/necb_2015_qaqc.rb` - Version-specific validation
|
85
|
+
|
86
|
+
### NECB2017 - System Updates
|
87
|
+
|
88
|
+
#### Core Module: `necb_2017.rb`
|
89
|
+
**Newer version focusing on HVAC system improvements**
|
90
|
+
|
91
|
+
**Key Features:**
|
92
|
+
- Updated HVAC system requirements
|
93
|
+
- Enhanced system control strategies
|
94
|
+
- Refined equipment efficiency requirements
|
95
|
+
|
96
|
+
**Modules:**
|
97
|
+
- **HVAC**: `hvac_systems.rb` - Updated system implementations
|
98
|
+
|
99
|
+
### NECB2020 - Latest Version
|
100
|
+
|
101
|
+
#### Core Module: `necb_2020.rb`
|
102
|
+
**Latest NECB implementation with building envelope and service water heating improvements**
|
103
|
+
|
104
|
+
**Key Features:**
|
105
|
+
- Enhanced building envelope performance requirements
|
106
|
+
- Updated service water heating efficiency standards
|
107
|
+
- Latest building code compliance requirements
|
108
|
+
|
109
|
+
**Modules:**
|
110
|
+
- **Envelope**: `building_envelope.rb` - Updated envelope requirements
|
111
|
+
- **Service Water Heating**: `service_water_heating.rb` - Enhanced efficiency requirements
|
112
|
+
|
113
|
+
## BTAP Vintage Standards
|
114
|
+
|
115
|
+
### BTAPPRE1980 - Pre-1980 Building Standards
|
116
|
+
|
117
|
+
#### Core Module: `btap_pre1980.rb`
|
118
|
+
**Building performance standards for buildings constructed before 1980**
|
119
|
+
|
120
|
+
**Purpose:** Historical building analysis and retrofit potential assessment
|
121
|
+
|
122
|
+
**Key Features:**
|
123
|
+
- Legacy building envelope performance levels
|
124
|
+
- Historical HVAC system types and efficiencies
|
125
|
+
- Vintage building infiltration rates
|
126
|
+
- Baseline performance for retrofit analysis
|
127
|
+
|
128
|
+
**Modules:**
|
129
|
+
- **Envelope**: `building_envelope.rb` - Pre-1980 construction standards
|
130
|
+
- **HVAC Systems**: Multiple system files for historical equipment types
|
131
|
+
- **Data**: `data/` - Historical performance data
|
132
|
+
|
133
|
+
### BTAP1980TO2010 - Transitional Period Standards
|
134
|
+
|
135
|
+
#### Core Module: `btap_1980to2010.rb`
|
136
|
+
**Building standards for the 1980-2010 construction period**
|
137
|
+
|
138
|
+
**Purpose:** Bridge between historical and modern building standards
|
139
|
+
|
140
|
+
**Key Features:**
|
141
|
+
- Transitional building envelope requirements
|
142
|
+
- Equipment efficiency improvements over pre-1980 era
|
143
|
+
- Building code evolution tracking
|
144
|
+
|
145
|
+
## Energy Conservation Measures (ECMS)
|
146
|
+
|
147
|
+
### ECMS Framework (`ECMS/`)
|
148
|
+
|
149
|
+
#### Core Module: `ecms.rb`
|
150
|
+
**Energy Conservation Measures implementation framework**
|
151
|
+
|
152
|
+
**Purpose:** Systematic evaluation and implementation of building energy efficiency measures
|
153
|
+
|
154
|
+
**Key ECM Categories:**
|
155
|
+
|
156
|
+
##### HVAC ECMs (`hvac_systems.rb`)
|
157
|
+
- Advanced HVAC system configurations
|
158
|
+
- High-efficiency equipment options
|
159
|
+
- System optimization strategies
|
160
|
+
|
161
|
+
##### Energy Recovery Ventilation (`erv.rb`)
|
162
|
+
- Energy recovery ventilator implementation
|
163
|
+
- Heat recovery system integration
|
164
|
+
- Ventilation system optimization
|
165
|
+
|
166
|
+
##### Natural Ventilation (`nv.rb`)
|
167
|
+
- Natural ventilation strategies
|
168
|
+
- Mixed-mode system implementation
|
169
|
+
- Climate-responsive ventilation control
|
170
|
+
|
171
|
+
##### Renewable Energy (`pv_ground.rb`)
|
172
|
+
- Ground-mounted photovoltaic systems
|
173
|
+
- Solar energy integration
|
174
|
+
- On-site renewable energy generation
|
175
|
+
|
176
|
+
##### Load Optimization (`loads.rb`)
|
177
|
+
- Building load reduction strategies
|
178
|
+
- Equipment efficiency improvements
|
179
|
+
- Operational optimization measures
|
180
|
+
|
181
|
+
##### Data Resources (`data/`)
|
182
|
+
- ECM performance data
|
183
|
+
- Cost-benefit analysis parameters
|
184
|
+
- Implementation guidelines
|
185
|
+
|
186
|
+
## Shared Resources
|
187
|
+
|
188
|
+
### Common Data and Utilities (`common/`)
|
189
|
+
|
190
|
+
#### BTAP Integration
|
191
|
+
- **`btap_datapoint.rb`**: Large-scale building analysis utilities
|
192
|
+
- **`btap_data.rb`**: Common BTAP data handling functions
|
193
|
+
|
194
|
+
#### Economic and Environmental Data
|
195
|
+
- **`national_carbon_price_sched_feb_2025.json`**: Canadian carbon pricing schedules
|
196
|
+
- **`utility_pricing_2025-02-20.csv`**: Canadian utility rate data
|
197
|
+
- **`neb_end_use_prices.csv`**: End-use energy pricing
|
198
|
+
- **`eccc_electric_grid_intensity_20250311.csv`**: Electric grid emissions factors
|
199
|
+
- **`nir_gas_grid_intensity_20250311.csv`**: Natural gas grid emissions factors
|
200
|
+
|
201
|
+
#### Reference Data
|
202
|
+
- **`necb_reference_runs.csv`**: Reference building performance data
|
203
|
+
- **`space_type_upgrade_map.json`**: Space type transformation mappings
|
204
|
+
- **`system_types.yaml`**: HVAC system type definitions
|
205
|
+
- **`construction_defaults.osm`**: Default construction assemblies
|
206
|
+
|
207
|
+
#### Documentation (`docs/`)
|
208
|
+
- **`air_system_names_method.md`**: Air system naming conventions
|
209
|
+
|
210
|
+
#### Specialized Resources
|
211
|
+
- **`phius.md`**: Passive House Institute US integration notes
|
212
|
+
- **`bc_step_code_indicators.md`**: British Columbia Step Code compliance
|
213
|
+
|
214
|
+
## Key Features and Capabilities
|
215
|
+
|
216
|
+
### Climate Zone Implementation
|
217
|
+
- **8 Canadian Climate Zones**: Complete implementation from Zone 4 (warmest) to Zone 8 (coldest)
|
218
|
+
- **Provincial Mapping**: Automatic climate zone determination by province and city
|
219
|
+
- **Weather Data Integration**: Seamless integration with Canadian weather files
|
220
|
+
|
221
|
+
### HVAC System Types
|
222
|
+
**Complete implementation of all 8 NECB system types:**
|
223
|
+
|
224
|
+
1. **System 1**: Residential/Small Commercial (≤ 25,000 ft²)
|
225
|
+
2. **System 2**: Multi-zone VAV with reheat
|
226
|
+
3. **System 3**: Single-zone heat pump
|
227
|
+
4. **System 4**: VAV with reheat (large buildings)
|
228
|
+
5. **System 5**: Packaged VAV with reheat
|
229
|
+
6. **System 6**: VAV with PFP boxes and reheat
|
230
|
+
7. **System 7**: VAV with hot water reheat
|
231
|
+
8. **System 8**: VAV with electric reheat
|
232
|
+
|
233
|
+
**Each system type includes:**
|
234
|
+
- Single-speed and multi-speed equipment options
|
235
|
+
- Appropriate control strategies
|
236
|
+
- Equipment sizing and selection
|
237
|
+
- Energy efficiency requirements
|
238
|
+
|
239
|
+
### Building Performance Standards (BEPS)
|
240
|
+
- **Performance Path Compliance**: Alternative compliance using energy modeling
|
241
|
+
- **Prescriptive Path Integration**: Seamless integration with prescriptive requirements
|
242
|
+
- **Trade-off Analysis**: Building component performance trade-offs
|
243
|
+
- **Compliance Reporting**: Automated compliance documentation
|
244
|
+
|
245
|
+
### Advanced Features
|
246
|
+
|
247
|
+
#### Thermal Bridging Integration
|
248
|
+
- **TBD Integration**: Heat transfer through thermal bridges
|
249
|
+
- **Detailed Heat Transfer**: Beyond simple assembly U-values
|
250
|
+
- **Whole Building Performance**: Complete thermal performance assessment
|
251
|
+
|
252
|
+
#### LED Lighting Compliance
|
253
|
+
- **Power Density Requirements**: Automatic lighting power density calculations
|
254
|
+
- **Control Integration**: Occupancy sensor and daylight dimming controls
|
255
|
+
- **Compliance Verification**: Automated lighting compliance checking
|
256
|
+
|
257
|
+
#### Quality Assurance Framework
|
258
|
+
- **Comprehensive QAQC**: Model validation and quality checking
|
259
|
+
- **Expected Results Testing**: Comparison against reference buildings
|
260
|
+
- **Performance Verification**: Energy use intensity and component performance validation
|
261
|
+
|
262
|
+
### Canadian-Specific Features
|
263
|
+
|
264
|
+
#### Provincial Integration
|
265
|
+
- **Provincial Fuel Mapping**: Province-specific fuel type availability
|
266
|
+
- **Utility Rate Integration**: Provincial electricity and gas rate structures
|
267
|
+
- **Climate Data**: Canadian weather station integration
|
268
|
+
|
269
|
+
#### Economic Analysis
|
270
|
+
- **Regional Cost Factors**: Provincial and regional cost adjustments
|
271
|
+
- **Carbon Pricing**: Integration with Canadian carbon pricing policies
|
272
|
+
- **Lifecycle Cost Analysis**: Complete economic analysis framework
|
273
|
+
|
274
|
+
## Usage Patterns
|
275
|
+
|
276
|
+
### Typical Implementation Workflow
|
277
|
+
|
278
|
+
1. **Standard Selection**: Choose appropriate NECB version (2011, 2015, 2017, 2020)
|
279
|
+
2. **Climate Zone Determination**: Automatic based on building location
|
280
|
+
3. **System Type Selection**: Based on building type and size
|
281
|
+
4. **Component Specification**: Apply standard-specific requirements
|
282
|
+
5. **Performance Verification**: QAQC validation and compliance checking
|
283
|
+
|
284
|
+
### ECM Evaluation Process
|
285
|
+
|
286
|
+
1. **Baseline Model**: Create NECB-compliant baseline
|
287
|
+
2. **ECM Selection**: Choose from available energy conservation measures
|
288
|
+
3. **Performance Modeling**: Model ECM implementation
|
289
|
+
4. **Economic Analysis**: Cost-benefit analysis using Canadian data
|
290
|
+
5. **Optimization**: Identify optimal ECM combinations
|
291
|
+
|
292
|
+
### Integration Points
|
293
|
+
|
294
|
+
- **BTAP Framework**: Complete integration with BTAP costing and analysis
|
295
|
+
- **OpenStudio Standards**: Seamless integration with base standards framework
|
296
|
+
- **Canadian Data**: Weather, utility, and economic data integration
|
297
|
+
|
298
|
+
## Dependencies
|
299
|
+
|
300
|
+
### Internal Dependencies
|
301
|
+
- **Base Standards Framework**: Inherits from OpenStudio-Standards base classes
|
302
|
+
- **BTAP Integration**: Extensive integration with BTAP utilities and costing
|
303
|
+
- **Common Utilities**: Uses shared utility functions and data structures
|
304
|
+
|
305
|
+
### External Dependencies
|
306
|
+
- **OpenStudio SDK**: Building energy modeling capabilities
|
307
|
+
- **EnergyPlus**: Energy simulation engine
|
308
|
+
- **TBD**: Thermal bridging analysis (optional)
|
309
|
+
|
310
|
+
### Data Dependencies
|
311
|
+
- **Canadian Weather Data**: Environment and Climate Change Canada weather files
|
312
|
+
- **Economic Data**: Statistics Canada and provincial utility data
|
313
|
+
- **Building Code Data**: National Research Council of Canada standards
|
314
|
+
|
315
|
+
## Development and Maintenance
|
316
|
+
|
317
|
+
### Version Evolution
|
318
|
+
- **NECB2011**: Foundation implementation (most complete)
|
319
|
+
- **NECB2015**: Lighting and HVAC updates
|
320
|
+
- **NECB2017**: System control improvements
|
321
|
+
- **NECB2020**: Envelope and service water heating updates
|
322
|
+
|
323
|
+
### Testing Framework
|
324
|
+
- **Reference Buildings**: Comprehensive test suite using Canadian reference buildings
|
325
|
+
- **Regression Testing**: Automated testing against expected results
|
326
|
+
- **Compliance Verification**: Validation against published code requirements
|
327
|
+
|
328
|
+
### Maintenance Considerations
|
329
|
+
- **Code Updates**: Regular updates to reflect changes in Canadian building codes
|
330
|
+
- **Data Updates**: Annual updates to utility rates, carbon pricing, and cost data
|
331
|
+
- **Weather Data**: Updates to Canadian weather files as available
|
332
|
+
|
333
|
+
## Canadian Building Code Context
|
334
|
+
|
335
|
+
The NECB standards module provides the most comprehensive implementation of Canadian building energy requirements available in any building energy modeling tool. It reflects the unique aspects of Canadian building codes:
|
336
|
+
|
337
|
+
- **Climate-Based Requirements**: Robust climate zone implementation
|
338
|
+
- **System Type Flexibility**: Complete range of HVAC system options
|
339
|
+
- **Performance-Based Compliance**: Both prescriptive and performance path options
|
340
|
+
- **Provincial Variations**: Accommodation of provincial building code differences
|
341
|
+
- **Economic Integration**: Canadian-specific cost and economic data
|
342
|
+
|
343
|
+
This makes the NECB module essential for any building energy analysis work in Canada.
|
@@ -20,6 +20,8 @@ class BTAPData
|
|
20
20
|
@neb_prices_csv_file_name = File.join(__dir__, 'neb_end_use_prices.csv')
|
21
21
|
@neb_prices_csv_file_name = File.join(__dir__, 'utility_pricing_2025-02-20.csv') if oerd_utility_pricing.to_bool
|
22
22
|
@necb_reference_runs_csv_file_name = File.join(__dir__, 'necb_reference_runs.csv')
|
23
|
+
@eccc_ghg_electricity = File.join(__dir__, 'eccc_electric_grid_intensity_20250311.csv') #REF (Retrieved March 11, 2025) for ECCC's emissions factors for the current and future years for GHG "without Biomass and RNG CO2 emissions": https://data-donnees.az.ec.gc.ca/data/substances/monitor/canada-s-greenhouse-gas-emissions-projections/Current-Projections-Actuelles/Energy-Energie/AM%20Scenario%20AMS/Grid-O%26G-Intensities-Intensites-Reseau-Delectricite-P%26G?lang=en
|
24
|
+
@nir_ghg_gas = File.join(__dir__, 'nir_gas_grid_intensity_20250311.csv') #REF (Retrieved March 11, 2025) for Year 2022 of "Table A6.1–1 CO2 Emission Factors for Marketable Natural Gas" of National Inventory Report: https://data-donnees.az.ec.gc.ca/api/file?path=%2Fsubstances%2Fmonitor%2Fcanada-s-official-greenhouse-gas-inventory%2FD-Emission-Factors%2FEN_Annex6_Emission_Factors.pdf
|
23
25
|
|
24
26
|
# Conditioned floor area is used so much. May as well make it a object variable.
|
25
27
|
# setup the queries
|
@@ -159,8 +161,8 @@ class BTAPData
|
|
159
161
|
|
160
162
|
def building_costing_data(cost_result)
|
161
163
|
building_data = {}
|
162
|
-
building_data['
|
163
|
-
building_data['
|
164
|
+
building_data['cost_province_state'] = cost_result['province_state']
|
165
|
+
building_data['cost_city'] = cost_result['city']
|
164
166
|
building_data['cost_equipment_envelope_total_cost_per_m_sq'] = (cost_result['totals']['envelope']) / @conditioned_floor_area_m_sq
|
165
167
|
building_data['cost_equipment_thermal_bridging_total_cost_per_m_sq'] = (cost_result['totals']['thermal_bridging']) / @conditioned_floor_area_m_sq
|
166
168
|
building_data['cost_equipment_lighting_total_cost_per_m_sq'] = (cost_result['totals']['lighting']) / @conditioned_floor_area_m_sq
|
@@ -228,6 +230,9 @@ class BTAPData
|
|
228
230
|
# Create a hash of the neb data.
|
229
231
|
neb_data = CSV.parse(File.read(@neb_prices_csv_file_name), headers: true, converters: :numeric).map(&:to_h)
|
230
232
|
|
233
|
+
# Create a hash of the ECCC's electricity emissions factors for the current and future years for GHG "without Biomass and RNG CO2 emissions".
|
234
|
+
eccc_ghg_elec_emission_factors = CSV.parse(File.read(@eccc_ghg_electricity), headers: true, converters: :numeric).map(&:to_h)
|
235
|
+
|
231
236
|
# Find which province the proposed building is located in
|
232
237
|
building_type = 'Commercial'
|
233
238
|
geography_data = climate_data
|
@@ -245,17 +250,14 @@ class BTAPData
|
|
245
250
|
onsite_elec_generation = @btap_data['total_site_eui_gj_per_m_sq'] - @btap_data['net_site_eui_gj_per_m_sq']
|
246
251
|
if onsite_elec_generation > 0.0
|
247
252
|
eui_elec = @btap_data['energy_eui_electricity_gj_per_m_sq'] - onsite_elec_generation
|
248
|
-
# Calculate the saved GHG emissions from onsite electricity generatation (assume it does not emmit GHGs)
|
249
|
-
ghg_saved = get_utility_ghg_kg_per_gj(province: province_abbreviation, fuel_type: "Electricity") * onsite_elec_generation
|
250
|
-
# Convert to tonnes of ghg/m^2
|
251
|
-
ghg_elec = (@btap_data['cost_utility_ghg_electricity_kg_per_m_sq'].to_f - ghg_saved.to_f)/1000.0
|
252
253
|
else
|
253
254
|
eui_elec = @btap_data['energy_eui_electricity_gj_per_m_sq']
|
254
|
-
# Convert to tonnes of ghg/m^2
|
255
|
-
ghg_elec = @btap_data['cost_utility_ghg_electricity_kg_per_m_sq'].to_f/1000.0
|
256
255
|
end
|
257
|
-
#
|
258
|
-
|
256
|
+
# Find the appropriate row for electricity GHG emmission factors
|
257
|
+
row_emm_factor = eccc_ghg_elec_emission_factors.detect do |data|
|
258
|
+
(data['province'] == province)
|
259
|
+
end
|
260
|
+
# Find the appropriate row for electricity pricing
|
259
261
|
row = neb_data.detect do |data|
|
260
262
|
(data['building_type'] == building_type) && (data['province'] == province) && (data['fuel_type'] == 'Electricity')
|
261
263
|
end
|
@@ -269,16 +271,15 @@ class BTAPData
|
|
269
271
|
year_index = 1.0
|
270
272
|
npv_elec_ghg = 0.0
|
271
273
|
npv_elec_peak = 0.0
|
274
|
+
emm_factor_conv = 3600.0 #GWH to GJ
|
272
275
|
if eui_elec > 0.0
|
273
276
|
for year in npv_start_year.to_int..npv_end_year.to_int
|
274
|
-
# puts "year, #{year}, #{row[year.to_s]}, year_index, #{year_index}"
|
275
277
|
npv_elec += (eui_elec * row[year.to_s]) / (1+npv_discount_rate)**year_index
|
276
|
-
npv_elec_ghg += (
|
277
|
-
npv_elec_peak += (annual_peak_kW_per_m_sq * row_peak[year.to_s]) / (1+npv_discount_rate)**year_index unless row_peak.nil? || annual_peak_kW_per_m_sq.nil?
|
278
|
+
npv_elec_ghg += (((eui_elec * row_emm_factor[year.to_i.to_s].to_f) / emm_factor_conv) * get_national_ghg_cost(year: year.to_i)) / (1+npv_discount_rate_carbon)**year_index
|
279
|
+
npv_elec_peak += (annual_peak_kW_per_m_sq * row_peak[year.to_i.to_s]).to_f / (1+npv_discount_rate)**year_index unless row_peak.nil? || annual_peak_kW_per_m_sq.nil?
|
278
280
|
year_index += 1.0
|
279
281
|
end
|
280
282
|
end
|
281
|
-
# puts "npv_elec is #{npv_elec}"
|
282
283
|
|
283
284
|
# Calculate npv of natural gas
|
284
285
|
eui_ngas= @btap_data['energy_eui_natural_gas_gj_per_m_sq']
|
@@ -740,7 +741,16 @@ class BTAPData
|
|
740
741
|
economics_data["cost_utility_neb_#{neb_fuel.downcase}_cost_per_m_sq"] = fuel_consumption_gj * neb_fuel_cost.to_f / @conditioned_floor_area_m_sq
|
741
742
|
economics_data['cost_utility_neb_total_cost_per_m_sq'] += economics_data["cost_utility_neb_#{neb_fuel.downcase}_cost_per_m_sq"]
|
742
743
|
# Determine cost in GHG kg of CO2
|
743
|
-
|
744
|
+
if neb_fuel.downcase == 'electricity' # Use ECCC data for utility emission factors rather than NEB data.
|
745
|
+
# Create a hash of the ECCC's electricity emissions factors for the current and future years for GHG "without Biomass and RNG CO2 emissions".
|
746
|
+
eccc_ghg_elec_emission_factors = CSV.parse(File.read(@eccc_ghg_electricity), headers: true, converters: :numeric).map(&:to_h)
|
747
|
+
# Find the appropriate row for electricity GHG emmission factors
|
748
|
+
row_emm_factor = eccc_ghg_elec_emission_factors.detect { |data| (data['province'] == province) }
|
749
|
+
emm_factor_conv = 3600.0
|
750
|
+
economics_data["cost_utility_ghg_#{neb_fuel.downcase}_kg_per_m_sq"] = ((fuel_consumption_gj * row_emm_factor[utility_pricing_year.to_i.to_s].to_f) / emm_factor_conv) * 1000 / @conditioned_floor_area_m_sq
|
751
|
+
else
|
752
|
+
economics_data["cost_utility_ghg_#{neb_fuel.downcase}_kg_per_m_sq"] = fuel_consumption_gj * get_utility_ghg_kg_per_gj(province: model.getWeatherFile.stateProvinceRegion, fuel_type: ep_fuel[:eplus_fuel_name]) / @conditioned_floor_area_m_sq
|
753
|
+
end
|
744
754
|
economics_data['cost_utility_ghg_total_kg_per_m_sq'] += economics_data["cost_utility_ghg_#{neb_fuel.downcase}_kg_per_m_sq"]
|
745
755
|
end
|
746
756
|
# Commenting out block charge rates for now....
|
@@ -1582,6 +1592,142 @@ class BTAPData
|
|
1582
1592
|
cooling_peak_w = [cooling_peak_w_electricity.to_f, cooling_peak_w_gas.to_f].max
|
1583
1593
|
data['cooling_peak_w_per_m_sq'] = cooling_peak_w / @conditioned_floor_area_m_sq
|
1584
1594
|
|
1595
|
+
# Peak water system load # @todo IMPORTANT NOTE: Peak water system load must be updated if a combination of fuel types is used in a building model.
|
1596
|
+
command = "SELECT Value
|
1597
|
+
FROM TabularDataWithStrings
|
1598
|
+
WHERE ReportName='EnergyMeters'
|
1599
|
+
AND ReportForString='Entire Facility'
|
1600
|
+
AND TableName='Annual and Peak Values - Electricity'
|
1601
|
+
AND RowName='WaterSystems:Electricity'
|
1602
|
+
AND ColumnName='Electricity Maximum Value'
|
1603
|
+
AND Units='W'"
|
1604
|
+
water_heating_peak_w_electricity = @sqlite_file.get.execAndReturnFirstDouble(command)
|
1605
|
+
command = "SELECT Value
|
1606
|
+
FROM TabularDataWithStrings
|
1607
|
+
WHERE ReportName='EnergyMeters'
|
1608
|
+
AND ReportForString='Entire Facility'
|
1609
|
+
AND TableName='Annual and Peak Values - Natural Gas'
|
1610
|
+
AND RowName='WaterSystems:NaturalGas'
|
1611
|
+
AND ColumnName='Natural Gas Maximum Value'
|
1612
|
+
AND Units='W'"
|
1613
|
+
water_heating_peak_w_gas = @sqlite_file.get.execAndReturnFirstDouble(command)
|
1614
|
+
water_heating_peak_w = [water_heating_peak_w_electricity.to_f, water_heating_peak_w_gas.to_f].max
|
1615
|
+
data['energy_peak_water_systems_w_per_m_sq'] = water_heating_peak_w / @conditioned_floor_area_m_sq
|
1616
|
+
|
1617
|
+
#===================================================================================================================
|
1618
|
+
# Winter peak values
|
1619
|
+
### Get number of timesteps from the model
|
1620
|
+
number_of_timesteps_per_hour = 1
|
1621
|
+
timestep_second = 3600 / number_of_timesteps_per_hour
|
1622
|
+
#===================================================================================================================
|
1623
|
+
### Calculate number of timesteps of the whole year, and create dates/times for the whole year
|
1624
|
+
number_of_timesteps_of_year = 365 * 24 * number_of_timesteps_per_hour
|
1625
|
+
timesteps_of_year = []
|
1626
|
+
d = Time.new(2006, 1, 1, 0)
|
1627
|
+
(0...number_of_timesteps_of_year).each do |increment|
|
1628
|
+
timesteps_of_year << (d + (60 * 60 / number_of_timesteps_per_hour) * increment).strftime('%Y-%m-%d %H:%M')
|
1629
|
+
end
|
1630
|
+
# Find month of each timestep
|
1631
|
+
keys_month = timesteps_of_year.map{ |timestep| DateTime.parse(timestep).to_date.month }
|
1632
|
+
# Peak electricity in winter
|
1633
|
+
query = "
|
1634
|
+
SELECT ReportDataDictionaryIndex
|
1635
|
+
FROM ReportDataDictionary
|
1636
|
+
WHERE Name=='Electricity:Facility' AND ReportingFrequency == 'Hourly' AND Units == 'J'
|
1637
|
+
"
|
1638
|
+
index_timestep_electricity = @model.sqlFile.get.execAndReturnVectorOfInt(query).get[0]
|
1639
|
+
number_of_timesteps_per_hour = 1
|
1640
|
+
if index_timestep_electricity.nil?
|
1641
|
+
puts "No hourly or timestep data available. Peak data not available"
|
1642
|
+
data['energy_peak_electric_w_per_m_sq_winter'] = 0
|
1643
|
+
else
|
1644
|
+
### Get timestep output for Electricity:Facility output.
|
1645
|
+
query = "
|
1646
|
+
Select VariableValue
|
1647
|
+
FROM ReportVariableData
|
1648
|
+
WHERE
|
1649
|
+
ReportVariableDataDictionaryIndex = #{index_timestep_electricity}
|
1650
|
+
"
|
1651
|
+
timestep_values = @model.sqlFile.get.execAndReturnVectorOfDouble(query).get
|
1652
|
+
# Create a hash where its keys are months and values for eahc month are electricity energy use (J) of all timesteps for that month
|
1653
|
+
hash_months_electricity = keys_month.zip(timestep_values).group_by(&:first).map{|key, value| [key, value.map(&:last)]}.to_h
|
1654
|
+
# Find maximum of electricity energy use (J) among all timesteps for each month of the year
|
1655
|
+
monthly_peak_J = hash_months_electricity.map { |key, value| [key, value.max()] }.to_h
|
1656
|
+
### Convert J to W of maximum electricity energy use (J)
|
1657
|
+
monthly_peak_W = monthly_peak_J.map { |key, value| [key, value / timestep_second] }.to_h
|
1658
|
+
# Get winter peak
|
1659
|
+
winter_peak_W = [monthly_peak_W[12].to_f, monthly_peak_W[1].to_f, monthly_peak_W[2].to_f].max
|
1660
|
+
### Normalize by building floor area
|
1661
|
+
annual_peak_W_per_m_sq = winter_peak_W / @btap_data['bldg_conditioned_floor_area_m_sq'].to_f
|
1662
|
+
data['energy_peak_electric_w_per_m_sq_winter'] = annual_peak_W_per_m_sq
|
1663
|
+
end
|
1664
|
+
|
1665
|
+
# Peak electricity heating in winter
|
1666
|
+
query = "
|
1667
|
+
SELECT ReportDataDictionaryIndex
|
1668
|
+
FROM ReportDataDictionary
|
1669
|
+
WHERE Name=='Heating:Electricity' AND ReportingFrequency == 'Hourly' AND Units == 'J'
|
1670
|
+
"
|
1671
|
+
index_timestep_electricity = @model.sqlFile.get.execAndReturnVectorOfInt(query).get[0]
|
1672
|
+
number_of_timesteps_per_hour = 1
|
1673
|
+
if index_timestep_electricity.nil?
|
1674
|
+
puts "No hourly or timestep data available. Peak data not available"
|
1675
|
+
data['energy_peak_electric_heating_w_per_m_sq_winter'] = 0
|
1676
|
+
else
|
1677
|
+
### Get timestep output for Electricity:Facility output.
|
1678
|
+
query = "
|
1679
|
+
Select VariableValue
|
1680
|
+
FROM ReportVariableData
|
1681
|
+
WHERE
|
1682
|
+
ReportVariableDataDictionaryIndex = #{index_timestep_electricity}
|
1683
|
+
"
|
1684
|
+
timestep_values = @model.sqlFile.get.execAndReturnVectorOfDouble(query).get
|
1685
|
+
# Create a hash where its keys are months and values for eahc month are electricity energy use (J) of all timesteps for that month
|
1686
|
+
hash_months_electricity = keys_month.zip(timestep_values).group_by(&:first).map{|key, value| [key, value.map(&:last)]}.to_h
|
1687
|
+
# Find maximum of electricity energy use (J) among all timesteps for each month of the year
|
1688
|
+
monthly_peak_J = hash_months_electricity.map { |key, value| [key, value.max()] }.to_h
|
1689
|
+
### Convert J to W of maximum electricity energy use (J)
|
1690
|
+
monthly_peak_W = monthly_peak_J.map { |key, value| [key, value / timestep_second] }.to_h
|
1691
|
+
# Get winter peak
|
1692
|
+
winter_peak_W = [monthly_peak_W[12].to_f, monthly_peak_W[1].to_f, monthly_peak_W[2].to_f].max
|
1693
|
+
### Normalize by building floor area
|
1694
|
+
annual_peak_W_per_m_sq = winter_peak_W / @btap_data['bldg_conditioned_floor_area_m_sq'].to_f
|
1695
|
+
data['energy_peak_electric_heating_w_per_m_sq_winter'] = annual_peak_W_per_m_sq
|
1696
|
+
end
|
1697
|
+
|
1698
|
+
# Peak water system electricity heating in winter
|
1699
|
+
query = "
|
1700
|
+
SELECT ReportDataDictionaryIndex
|
1701
|
+
FROM ReportDataDictionary
|
1702
|
+
WHERE Name=='WaterSystems:Electricity' AND ReportingFrequency == 'Hourly' AND Units == 'J'
|
1703
|
+
"
|
1704
|
+
index_timestep_electricity = @model.sqlFile.get.execAndReturnVectorOfInt(query).get[0]
|
1705
|
+
number_of_timesteps_per_hour = 1
|
1706
|
+
if index_timestep_electricity.nil?
|
1707
|
+
puts "No hourly or timestep data available. Peak data not available"
|
1708
|
+
data['energy_peak_electric_water_systems_w_per_m_sq_winter'] = 0
|
1709
|
+
else
|
1710
|
+
### Get timestep output for Electricity:Facility output.
|
1711
|
+
query = "
|
1712
|
+
Select VariableValue
|
1713
|
+
FROM ReportVariableData
|
1714
|
+
WHERE
|
1715
|
+
ReportVariableDataDictionaryIndex = #{index_timestep_electricity}
|
1716
|
+
"
|
1717
|
+
timestep_values = @model.sqlFile.get.execAndReturnVectorOfDouble(query).get
|
1718
|
+
# Create a hash where its keys are months and values for eahc month are electricity energy use (J) of all timesteps for that month
|
1719
|
+
hash_months_electricity = keys_month.zip(timestep_values).group_by(&:first).map{|key, value| [key, value.map(&:last)]}.to_h
|
1720
|
+
# Find maximum of electricity energy use (J) among all timesteps for each month of the year
|
1721
|
+
monthly_peak_J = hash_months_electricity.map { |key, value| [key, value.max()] }.to_h
|
1722
|
+
### Convert J to W of maximum electricity energy use (J)
|
1723
|
+
monthly_peak_W = monthly_peak_J.map { |key, value| [key, value / timestep_second] }.to_h
|
1724
|
+
# Get winter peak
|
1725
|
+
winter_peak_W = [monthly_peak_W[12].to_f, monthly_peak_W[1].to_f, monthly_peak_W[2].to_f].max
|
1726
|
+
### Normalize by building floor area
|
1727
|
+
annual_peak_W_per_m_sq = winter_peak_W / @btap_data['bldg_conditioned_floor_area_m_sq'].to_f
|
1728
|
+
data['energy_peak_electric_water_systems_w_per_m_sq_winter'] = annual_peak_W_per_m_sq
|
1729
|
+
end
|
1730
|
+
|
1585
1731
|
return data
|
1586
1732
|
end
|
1587
1733
|
|
@@ -2081,20 +2227,36 @@ class BTAPData
|
|
2081
2227
|
def get_utility_ghg_kg_per_gj(province:, fuel_type:)
|
2082
2228
|
ghg_data = [
|
2083
2229
|
# Obtained from Portfolio Manager https://portfoliomanager.energystar.gov/pdf/reference/Emissions.pdf 10/10/2020
|
2084
|
-
{ "province": 'AB', "fuel_type": 'NaturalGas', "CO2eq Emissions (kg/MBtu)": 53.24, "CO2eq Emissions (g/m3)": 1939.0 },
|
2085
|
-
{ "province": 'BC', "fuel_type": 'NaturalGas', "CO2eq Emissions (kg/MBtu)": 53.19, "CO2eq Emissions (g/m3)": 1937.0 },
|
2086
|
-
{ "province": 'MB', "fuel_type": 'NaturalGas', "CO2eq Emissions (kg/MBtu)": 52.09, "CO2eq Emissions (g/m3)": 1897.0 },
|
2087
|
-
{ "province": 'NB', "fuel_type": 'NaturalGas', "CO2eq Emissions (kg/MBtu)": 52.50, "CO2eq Emissions (g/m3)": 1912.0 },
|
2088
|
-
{ "province": 'NL', "fuel_type": 'NaturalGas', "CO2eq Emissions (kg/MBtu)": 52.50, "CO2eq Emissions (g/m3)": 1912.0 },
|
2089
|
-
{ "province": 'NT', "fuel_type": 'NaturalGas', "CO2eq Emissions (kg/MBtu)": 52.50, "CO2eq Emissions (g/m3)": 1912.0 },
|
2090
|
-
{ "province": 'NS', "fuel_type": 'NaturalGas', "CO2eq Emissions (kg/MBtu)": 52.50, "CO2eq Emissions (g/m3)": 1912.0 },
|
2091
|
-
{ "province": 'NU', "fuel_type": 'NaturalGas', "CO2eq Emissions (kg/MBtu)": 52.50, "CO2eq Emissions (g/m3)": 1912.0 },
|
2092
|
-
{ "province": 'ON', "fuel_type": 'NaturalGas', "CO2eq Emissions (kg/MBtu)": 52.14, "CO2eq Emissions (g/m3)": 1912.0 },
|
2093
|
-
{ "province": 'PE', "fuel_type": 'NaturalGas', "CO2eq Emissions (kg/MBtu)": 52.50, "CO2eq Emissions (g/m3)": 1912.0 },
|
2094
|
-
{ "province": 'QC', "fuel_type": 'NaturalGas', "CO2eq Emissions (kg/MBtu)": 52.12, "CO2eq Emissions (g/m3)": 1898.0 },
|
2095
|
-
{ "province": 'SK', "fuel_type": 'NaturalGas', "CO2eq Emissions (kg/MBtu)": 50.53, "CO2eq Emissions (g/m3)": 1840.0 },
|
2096
|
-
{ "province": 'YT', "fuel_type": 'NaturalGas', "CO2eq Emissions (kg/MBtu)": 52.50, "CO2eq Emissions (g/m3)": 1912.0 },
|
2230
|
+
#{ "province": 'AB', "fuel_type": 'NaturalGas', "CO2eq Emissions (kg/MBtu)": 53.24, "CO2eq Emissions (g/m3)": 1939.0 },
|
2231
|
+
#{ "province": 'BC', "fuel_type": 'NaturalGas', "CO2eq Emissions (kg/MBtu)": 53.19, "CO2eq Emissions (g/m3)": 1937.0 },
|
2232
|
+
#{ "province": 'MB', "fuel_type": 'NaturalGas', "CO2eq Emissions (kg/MBtu)": 52.09, "CO2eq Emissions (g/m3)": 1897.0 },
|
2233
|
+
#{ "province": 'NB', "fuel_type": 'NaturalGas', "CO2eq Emissions (kg/MBtu)": 52.50, "CO2eq Emissions (g/m3)": 1912.0 },
|
2234
|
+
#{ "province": 'NL', "fuel_type": 'NaturalGas', "CO2eq Emissions (kg/MBtu)": 52.50, "CO2eq Emissions (g/m3)": 1912.0 },
|
2235
|
+
#{ "province": 'NT', "fuel_type": 'NaturalGas', "CO2eq Emissions (kg/MBtu)": 52.50, "CO2eq Emissions (g/m3)": 1912.0 },
|
2236
|
+
#{ "province": 'NS', "fuel_type": 'NaturalGas', "CO2eq Emissions (kg/MBtu)": 52.50, "CO2eq Emissions (g/m3)": 1912.0 },
|
2237
|
+
#{ "province": 'NU', "fuel_type": 'NaturalGas', "CO2eq Emissions (kg/MBtu)": 52.50, "CO2eq Emissions (g/m3)": 1912.0 },
|
2238
|
+
#{ "province": 'ON', "fuel_type": 'NaturalGas', "CO2eq Emissions (kg/MBtu)": 52.14, "CO2eq Emissions (g/m3)": 1912.0 },
|
2239
|
+
#{ "province": 'PE', "fuel_type": 'NaturalGas', "CO2eq Emissions (kg/MBtu)": 52.50, "CO2eq Emissions (g/m3)": 1912.0 },
|
2240
|
+
#{ "province": 'QC', "fuel_type": 'NaturalGas', "CO2eq Emissions (kg/MBtu)": 52.12, "CO2eq Emissions (g/m3)": 1898.0 },
|
2241
|
+
#{ "province": 'SK', "fuel_type": 'NaturalGas', "CO2eq Emissions (kg/MBtu)": 50.53, "CO2eq Emissions (g/m3)": 1840.0 },
|
2242
|
+
#{ "province": 'YT', "fuel_type": 'NaturalGas', "CO2eq Emissions (kg/MBtu)": 52.50, "CO2eq Emissions (g/m3)": 1912.0 },
|
2243
|
+
|
2244
|
+
#REF (Retrieved March 11, 2025) for Year 2022 of "Table A6.1–1 CO2 Emission Factors for Marketable Natural Gas" of National Inventory Report: https://data-donnees.az.ec.gc.ca/api/file?path=%2Fsubstances%2Fmonitor%2Fcanada-s-official-greenhouse-gas-inventory%2FD-Emission-Factors%2FEN_Annex6_Emission_Factors.pdf
|
2245
|
+
{ "province": 'AB', "fuel_type": 'NaturalGas', "CO2eq Emissions (kg/MBtu)": 53.87, "CO2eq Emissions (g/m3)": 1962.0 },
|
2246
|
+
{ "province": 'BC', "fuel_type": 'NaturalGas', "CO2eq Emissions (kg/MBtu)": 53.98, "CO2eq Emissions (g/m3)": 1966.0 },
|
2247
|
+
{ "province": 'MB', "fuel_type": 'NaturalGas', "CO2eq Emissions (kg/MBtu)": 52.58, "CO2eq Emissions (g/m3)": 1915.0 },
|
2248
|
+
{ "province": 'NB', "fuel_type": 'NaturalGas', "CO2eq Emissions (kg/MBtu)": 52.69, "CO2eq Emissions (g/m3)": 1919.0 },
|
2249
|
+
{ "province": 'NL', "fuel_type": 'NaturalGas', "CO2eq Emissions (kg/MBtu)": 52.69, "CO2eq Emissions (g/m3)": 1919.0 },
|
2250
|
+
{ "province": 'NT', "fuel_type": 'NaturalGas', "CO2eq Emissions (kg/MBtu)": 53.98, "CO2eq Emissions (g/m3)": 1966.0 },
|
2251
|
+
{ "province": 'NS', "fuel_type": 'NaturalGas', "CO2eq Emissions (kg/MBtu)": 52.69, "CO2eq Emissions (g/m3)": 1919.0 },
|
2252
|
+
{ "province": 'NU', "fuel_type": 'NaturalGas', "CO2eq Emissions (kg/MBtu)": 53.98, "CO2eq Emissions (g/m3)": 1966.0 },
|
2253
|
+
{ "province": 'ON', "fuel_type": 'NaturalGas', "CO2eq Emissions (kg/MBtu)": 52.75, "CO2eq Emissions (g/m3)": 1921.0 },
|
2254
|
+
{ "province": 'PE', "fuel_type": 'NaturalGas', "CO2eq Emissions (kg/MBtu)": 52.69, "CO2eq Emissions (g/m3)": 1919.0 },
|
2255
|
+
{ "province": 'QC', "fuel_type": 'NaturalGas', "CO2eq Emissions (kg/MBtu)": 52.88, "CO2eq Emissions (g/m3)": 1926.0 },
|
2256
|
+
{ "province": 'SK', "fuel_type": 'NaturalGas', "CO2eq Emissions (kg/MBtu)": 52.72, "CO2eq Emissions (g/m3)": 1920.0 },
|
2257
|
+
{ "province": 'YT', "fuel_type": 'NaturalGas', "CO2eq Emissions (kg/MBtu)": 56.98, "CO2eq Emissions (g/m3)": 1966.0 },
|
2097
2258
|
|
2259
|
+
# Obtained from Portfolio Manager https://portfoliomanager.energystar.gov/pdf/reference/Emissions.pdf 10/10/2020
|
2098
2260
|
{ "province": 'AB', "fuel_type": 'FuelOilNo2', "CO2eq Emissions (kg/MBtu)": 75.13, "CO2eq Emissions (g/m3)": 2763.0 },
|
2099
2261
|
{ "province": 'BC', "fuel_type": 'FuelOilNo2', "CO2eq Emissions (kg/MBtu)": 75.13, "CO2eq Emissions (g/m3)": 2763.0 },
|
2100
2262
|
{ "province": 'MB', "fuel_type": 'FuelOilNo2', "CO2eq Emissions (kg/MBtu)": 75.13, "CO2eq Emissions (g/m3)": 2763.0 },
|