@@ -132,59 +132,43 @@ def self.apply(model, weather, living_space,
132132 end
133133
134134 if not dist_type . nil?
135- # Fixtures (showers, sinks, baths) + distribution losses
135+ # Fixtures (showers, sinks, baths) + distribution waste
136136 fx_gpd = get_fixtures_gpd ( eri_version , nbeds , fixtures_all_low_flow , daily_mw_fractions )
137- w_gpd = get_dist_waste_gpd ( eri_version , nbeds , has_uncond_bsmnt , cfa , ncfl , dist_type , pipe_r , std_pipe_length , recirc_branch_length , fixtures_all_low_flow )
138- fx_sens_btu , fx_lat_btu = get_fixtures_gains_sens_lat ( nbeds )
139-
140137 fx_gpd *= fixtures_usage_multiplier
141- w_gpd *= fixtures_usage_multiplier
142- fx_sens_btu *= fixtures_usage_multiplier
143- fx_lat_btu *= fixtures_usage_multiplier
144-
145- disaggregate_sinks_showers_baths = false
146- if disaggregate_sinks_showers_baths
147- fx_names = [ Constants . ObjectNameShower ,
148- Constants . ObjectNameSink ,
149- Constants . ObjectNameBath ]
150- else
151- fx_names = [ Constants . ObjectNameFixtures ]
152- end
153-
154- fx_schedules = { }
155- fx_names . each do |fx_name |
156- fx_schedules [ fx_name ] = HotWaterSchedule . new ( model , fx_name , nbeds )
157- end
158-
159- # Calculate sum_total_flow
160- sum_total_flow = 0.0
161- fx_schedules . each do |fx_name , fx_schedule |
162- sum_total_flow += fx_schedule . totalFlow
163- end
138+ w_gpd = get_dist_waste_gpd ( eri_version , nbeds , has_uncond_bsmnt , cfa , ncfl , dist_type , pipe_r , std_pipe_length , recirc_branch_length , fixtures_all_low_flow )
139+ w_gpd *= fixtures_usage_multiplier # Fixture draws are the reason for most distribution waste, so scale this too
164140
165141 mw_schedule = OpenStudio ::Model ::ScheduleConstant . new ( model )
166142 mw_schedule . setValue ( UnitConversions . convert ( t_mix , 'F' , 'C' ) )
167143 Schedule . set_schedule_type_limits ( model , mw_schedule , Constants . ScheduleTypeLimitsTemperature )
168144
169- fx_schedules . each do |fx_name , fx_schedule |
170- fx_name_sens = "#{ fx_name } Sensible"
171- fx_name_lat = "#{ fx_name } Latent"
172-
173- fx_schedule = fx_schedules [ fx_name ]
174- fx_frac = fx_schedule . totalFlow / sum_total_flow
145+ water_name = Constants . ObjectNameWater
146+ water_schedule = HotWaterSchedule . new ( model , Constants . ObjectNameFixtures , nbeds )
175147
176- fx_peak_flow = fx_schedule . calcPeakFlowFromDailygpm ( ( fx_gpd + w_gpd ) * fx_frac )
177- fx_design_level_sens = fx_schedule . calcDesignLevelFromDailykWh ( UnitConversions . convert ( fx_sens_btu * fx_frac , 'Btu' , 'kWh' ) / 365.0 )
178- fx_design_level_lat = fx_schedule . calcDesignLevelFromDailykWh ( UnitConversions . convert ( fx_lat_btu * fx_frac , 'Btu' , 'kWh' ) / 365.0 )
148+ # Fixtures
149+ fx_name = Constants . ObjectNameFixtures
150+ fx_peak_flow = water_schedule . calcPeakFlowFromDailygpm ( fx_gpd )
151+ dhw_loop_fracs . each do |sys_id , dhw_load_frac |
152+ dhw_loop = dhw_loops [ sys_id ]
153+ add_water_use_equipment ( model , fx_name , fx_peak_flow * dhw_load_frac , water_schedule . schedule , mw_schedule , water_use_connections [ dhw_loop ] )
154+ end
179155
180- dhw_loop_fracs . each do | sys_id , dhw_load_frac |
181- dhw_loop = dhw_loops [ sys_id ]
182- add_water_use_equipment ( model , fx_name , fx_peak_flow * dhw_load_frac , fx_schedule . schedule , mw_schedule , water_use_connections [ dhw_loop ] )
183- end
184- add_other_equipment ( model , fx_name_sens , living_space , fx_design_level_sens , 1.0 , 0.0 , fx_schedule . schedule , nil )
185- add_other_equipment ( model , fx_name_lat , living_space , fx_design_level_lat , 0.0 , 1.0 , fx_schedule . schedule , nil )
156+ # Distribution waste
157+ dist_water_name = Constants . ObjectNameDistributionWaste
158+ dist_water_peak_flow = water_schedule . calcPeakFlowFromDailygpm ( w_gpd )
159+ dhw_loop_fracs . each do | sys_id , dhw_load_frac |
160+ dhw_loop = dhw_loops [ sys_id ]
161+ add_water_use_equipment ( model , dist_water_name , dist_water_peak_flow * dhw_load_frac , water_schedule . schedule , mw_schedule , water_use_connections [ dhw_loop ] )
186162 end
187163
164+ # Internal gains
165+ # Floor mopping, shower evaporation, water films on showers, tubs & sinks surfaces, plant watering, etc.
166+ water_sens_btu , water_lat_btu = get_water_gains_sens_lat ( nbeds )
167+ water_design_level_sens = water_schedule . calcDesignLevelFromDailykWh ( UnitConversions . convert ( water_sens_btu , 'Btu' , 'kWh' ) / 365.0 )
168+ water_design_level_lat = water_schedule . calcDesignLevelFromDailykWh ( UnitConversions . convert ( water_lat_btu , 'Btu' , 'kWh' ) / 365.0 )
169+ add_other_equipment ( model , "#{ water_name } Sensible" , living_space , water_design_level_sens , 1.0 , 0.0 , water_schedule . schedule , nil )
170+ add_other_equipment ( model , "#{ water_name } Latent" , living_space , water_design_level_lat , 0.0 , 1.0 , water_schedule . schedule , nil )
171+
188172 # Recirculation pump
189173 dist_pump_annual_kwh = get_hwdist_recirc_pump_energy ( dist_type , recirc_control_type , recirc_pump_power )
190174 if dist_pump_annual_kwh > 0
@@ -700,7 +684,7 @@ def self.get_fixtures_gpd(eri_version, nbeds, fixtures_all_low_flow, daily_mw_fr
700684 return f_eff * ref_f_gpd
701685 end
702686
703- def self . get_fixtures_gains_sens_lat ( nbeds )
687+ def self . get_water_gains_sens_lat ( nbeds )
704688 # Table 4.2.2(3). Internal Gains for Reference Homes
705689 sens_gains = -1227.0 - 409.0 * nbeds # Btu/day
706690 lat_gains = 1245.0 + 415.0 * nbeds # Btu/day
0 commit comments