10
11
12
13
14
15
16
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
# File 'lib/meeting/carbon_model.rb', line 10
def self.included(base)
base.decide :emission, :with => :characteristics do
committee :emission do quorum 'from duration, area, and emission factor', :needs => [:duration, :area, :emission_factor] do |characteristics|
characteristics[:duration] * characteristics[:area] * characteristics[:emission_factor]
end
quorum 'default' do
raise "The emission committee's default quorum should never be called"
end
end
committee :emission_factor do quorum 'from eGRID subregion and fuel intensities', :needs => [:egrid_subregion, :natural_gas_intensity, :fuel_oil_intensity, :electricity_intensity, :district_heat_intensity] do |characteristics|
natural_gas = FuelType.find_by_name "Commercial Natural Gas"
fuel_oil = FuelType.find_by_name "Distillate Fuel Oil 2"
natural_gas_energy_ef = natural_gas.emission_factor / 38_339_000
fuel_oil_energy_ef = fuel_oil.emission_factor / 38_655_000
district_heat_emission_factor = (((natural_gas_energy_ef / 0.817) / 2) + ((fuel_oil_energy_ef / 0.846) / 2)) / 0.95
(characteristics[:natural_gas_intensity] * natural_gas.emission_factor) +
(characteristics[:fuel_oil_intensity] * fuel_oil.emission_factor) +
(characteristics[:electricity_intensity] * characteristics[:egrid_subregion].electricity_emission_factor) +
(characteristics[:district_heat_intensity] * district_heat_emission_factor)
end
end
committee :natural_gas_intensity do quorum 'from census division', :needs => :census_division do |characteristics|
characteristics[:census_division].meeting_building_natural_gas_intensity
end
quorum 'default' do
CensusDivision.fallback.meeting_building_natural_gas_intensity
end
end
committee :fuel_oil_intensity do quorum 'from census division', :needs => :census_division do |characteristics|
characteristics[:census_division].meeting_building_fuel_oil_intensity
end
quorum 'default' do
CensusDivision.fallback.meeting_building_fuel_oil_intensity
end
end
committee :electricity_intensity do quorum 'from eGRID region and census division', :needs => [:egrid_region, :census_division] do |characteristics|
characteristics[:census_division].meeting_building_electricity_intensity / (1 - characteristics[:egrid_region].loss_factor)
end
quorum 'from eGRID region', :needs => :egrid_region do |characteristics|
CensusDivision.fallback.meeting_building_electricity_intensity / (1 - characteristics[:egrid_region].loss_factor)
end
end
committee :district_heat_intensity do quorum 'from census division', :needs => :census_division do |characteristics|
characteristics[:census_division].meeting_building_district_heat_intensity
end
quorum 'default' do
CensusDivision.fallback.meeting_building_district_heat_intensity
end
end
committee :egrid_region do quorum 'from eGRID subregion', :needs => :egrid_subregion do |characteristics|
characteristics[:egrid_subregion].egrid_region
end
end
committee :egrid_subregion do quorum 'from zip code', :needs => :zip_code do |characteristics|
characteristics[:zip_code].egrid_subregion
end
quorum 'default' do
EgridSubregion.find_by_abbreviation 'US'
end
end
committee :census_division do quorum 'from state', :needs => :state do |characteristics|
characteristics[:state].census_division
end
end
committee :state do quorum 'from zip code', :needs => :zip_code do |characteristics|
characteristics[:zip_code].state
end
end
committee :area do quorum 'default' do
base.fallback.area
end
end
committee :duration do quorum 'default' do
base.fallback.duration
end
end
end
end
|