diff --git a/hpxml-measures/BuildResidentialHPXML/README.md b/hpxml-measures/BuildResidentialHPXML/README.md
index 2f7d79059..03b5e246a 100644
--- a/hpxml-measures/BuildResidentialHPXML/README.md
+++ b/hpxml-measures/BuildResidentialHPXML/README.md
@@ -77,39 +77,37 @@ Absolute/relative paths of csv files containing user-specified detailed schedule
-**Schedules: Vacancy Period**
+**Schedules: Vacancy Periods**
-Specifies the vacancy period. Enter a date like "Dec 15 - Jan 15". Optionally, can enter hour of the day like "Dec 15 2 - Jan 15 20" (start hour can be 0 through 23 and end hour can be 1 through 24).
+Specifies the vacancy periods. Enter a date like "Dec 15 - Jan 15". Optionally, can enter hour of the day like "Dec 15 2 - Jan 15 20" (start hour can be 0 through 23 and end hour can be 1 through 24). If multiple periods, use a comma-separated list.
-- **Name:** ``schedules_vacancy_period``
+- **Name:** ``schedules_vacancy_periods``
- **Type:** ``String``
- **Required:** ``false``
-**Schedules: Power Outage Period**
+**Schedules: Power Outage Periods**
-Specifies the power outage period. Enter a date like "Dec 15 - Jan 15". Optionally, can enter hour of the day like "Dec 15 2 - Jan 15 20" (start hour can be 0 through 23 and end hour can be 1 through 24).
+Specifies the power outage periods. Enter a date like "Dec 15 - Jan 15". Optionally, can enter hour of the day like "Dec 15 2 - Jan 15 20" (start hour can be 0 through 23 and end hour can be 1 through 24). If multiple periods, use a comma-separated list.
-- **Name:** ``schedules_power_outage_period``
+- **Name:** ``schedules_power_outage_periods``
- **Type:** ``String``
- **Required:** ``false``
-**Schedules: Power Outage Period Window Natural Ventilation Availability**
+**Schedules: Power Outage Periods Window Natural Ventilation Availability**
-The availability of the natural ventilation schedule during the outage period.
+The availability of the natural ventilation schedule during the power outage periods. Valid choices are 'regular schedule', 'always available', 'always unavailable'. If multiple periods, use a comma-separated list.
-- **Name:** ``schedules_power_outage_window_natvent_availability``
-- **Type:** ``Choice``
+- **Name:** ``schedules_power_outage_periods_window_natvent_availability``
+- **Type:** ``String``
- **Required:** ``false``
-- **Choices:** `regular schedule`, `always available`, `always unavailable`
-
**Simulation Control: Timestep**
@@ -4956,9 +4954,22 @@ Whether there are any ceiling fans.
+**Ceiling Fan: Label Energy Use**
+
+The label average energy use of the ceiling fan(s). If neither Efficiency nor Label Energy Use provided, the OS-HPXML default (see HPXML Ceiling Fans) is used.
+
+- **Name:** ``ceiling_fan_label_energy_use``
+- **Type:** ``Double``
+
+- **Units:** ``W``
+
+- **Required:** ``false``
+
+
+
**Ceiling Fan: Efficiency**
-The efficiency rating of the ceiling fan(s) at medium speed. If not provided, the OS-HPXML default (see HPXML Ceiling Fans) is used.
+The efficiency rating of the ceiling fan(s) at medium speed. Only used if Label Energy Use not provided. If neither Efficiency nor Label Energy Use provided, the OS-HPXML default (see HPXML Ceiling Fans) is used.
- **Name:** ``ceiling_fan_efficiency``
- **Type:** ``Double``
diff --git a/hpxml-measures/BuildResidentialHPXML/measure.rb b/hpxml-measures/BuildResidentialHPXML/measure.rb
index ff59400d8..2784b8a28 100644
--- a/hpxml-measures/BuildResidentialHPXML/measure.rb
+++ b/hpxml-measures/BuildResidentialHPXML/measure.rb
@@ -69,24 +69,19 @@ def arguments(model) # rubocop:disable Lint/UnusedMethodArgument
arg.setDescription('Absolute/relative paths of csv files containing user-specified detailed schedules. If multiple files, use a comma-separated list.')
args << arg
- arg = OpenStudio::Measure::OSArgument.makeStringArgument('schedules_vacancy_period', false)
- arg.setDisplayName('Schedules: Vacancy Period')
- arg.setDescription('Specifies the vacancy period. Enter a date like "Dec 15 - Jan 15". Optionally, can enter hour of the day like "Dec 15 2 - Jan 15 20" (start hour can be 0 through 23 and end hour can be 1 through 24).')
+ arg = OpenStudio::Measure::OSArgument.makeStringArgument('schedules_vacancy_periods', false)
+ arg.setDisplayName('Schedules: Vacancy Periods')
+ arg.setDescription('Specifies the vacancy periods. Enter a date like "Dec 15 - Jan 15". Optionally, can enter hour of the day like "Dec 15 2 - Jan 15 20" (start hour can be 0 through 23 and end hour can be 1 through 24). If multiple periods, use a comma-separated list.')
args << arg
- arg = OpenStudio::Measure::OSArgument.makeStringArgument('schedules_power_outage_period', false)
- arg.setDisplayName('Schedules: Power Outage Period')
- arg.setDescription('Specifies the power outage period. Enter a date like "Dec 15 - Jan 15". Optionally, can enter hour of the day like "Dec 15 2 - Jan 15 20" (start hour can be 0 through 23 and end hour can be 1 through 24).')
+ arg = OpenStudio::Measure::OSArgument.makeStringArgument('schedules_power_outage_periods', false)
+ arg.setDisplayName('Schedules: Power Outage Periods')
+ arg.setDescription('Specifies the power outage periods. Enter a date like "Dec 15 - Jan 15". Optionally, can enter hour of the day like "Dec 15 2 - Jan 15 20" (start hour can be 0 through 23 and end hour can be 1 through 24). If multiple periods, use a comma-separated list.')
args << arg
- natvent_availability_choices = OpenStudio::StringVector.new
- natvent_availability_choices << HPXML::ScheduleRegular
- natvent_availability_choices << HPXML::ScheduleAvailable
- natvent_availability_choices << HPXML::ScheduleUnavailable
-
- arg = OpenStudio::Measure::OSArgument.makeChoiceArgument('schedules_power_outage_window_natvent_availability', natvent_availability_choices, false)
- arg.setDisplayName('Schedules: Power Outage Period Window Natural Ventilation Availability')
- arg.setDescription('The availability of the natural ventilation schedule during the outage period.')
+ arg = OpenStudio::Measure::OSArgument.makeStringArgument('schedules_power_outage_periods_window_natvent_availability', false)
+ arg.setDisplayName('Schedules: Power Outage Periods Window Natural Ventilation Availability')
+ arg.setDescription("The availability of the natural ventilation schedule during the power outage periods. Valid choices are '#{[HPXML::ScheduleRegular, HPXML::ScheduleAvailable, HPXML::ScheduleUnavailable].join("', '")}'. If multiple periods, use a comma-separated list.")
args << arg
arg = OpenStudio::Measure::OSArgument::makeIntegerArgument('simulation_control_timestep', false)
@@ -2917,10 +2912,16 @@ def arguments(model) # rubocop:disable Lint/UnusedMethodArgument
arg.setDefaultValue(true)
args << arg
+ arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('ceiling_fan_label_energy_use', false)
+ arg.setDisplayName('Ceiling Fan: Label Energy Use')
+ arg.setUnits('W')
+ arg.setDescription("The label average energy use of the ceiling fan(s). If neither Efficiency nor Label Energy Use provided, the OS-HPXML default (see HPXML Ceiling Fans) is used.")
+ args << arg
+
arg = OpenStudio::Measure::OSArgument::makeDoubleArgument('ceiling_fan_efficiency', false)
arg.setDisplayName('Ceiling Fan: Efficiency')
arg.setUnits('CFM/W')
- arg.setDescription("The efficiency rating of the ceiling fan(s) at medium speed. If not provided, the OS-HPXML default (see HPXML Ceiling Fans) is used.")
+ arg.setDescription("The efficiency rating of the ceiling fan(s) at medium speed. Only used if Label Energy Use not provided. If neither Efficiency nor Label Energy Use provided, the OS-HPXML default (see HPXML Ceiling Fans) is used.")
args << arg
arg = OpenStudio::Measure::OSArgument::makeIntegerArgument('ceiling_fan_quantity', false)
@@ -3490,6 +3491,22 @@ def argument_errors(args)
error = args[:rim_joist_assembly_r].is_initialized && !args[:geometry_rim_joist_height].is_initialized
errors << 'Specified a rim joist assembly R-value but no rim joist height.' if error
+ if args[:schedules_power_outage_periods].is_initialized && args[:schedules_power_outage_periods_window_natvent_availability].is_initialized
+ schedules_power_outage_periods_lengths = [args[:schedules_power_outage_periods].get.count(','),
+ args[:schedules_power_outage_periods_window_natvent_availability].get.count(',')]
+
+ error = (schedules_power_outage_periods_lengths.uniq.size != 1)
+ errors << 'One power outage periods schedule argument does not have enough comma-separated elements specified.' if error
+ end
+
+ if args[:schedules_power_outage_periods_window_natvent_availability].is_initialized
+ natvent_availabilities = args[:schedules_power_outage_periods_window_natvent_availability].get.split(',').map(&:strip)
+ natvent_availabilities.each do |natvent_availability|
+ error = ![HPXML::ScheduleRegular, HPXML::ScheduleAvailable, HPXML::ScheduleUnavailable].include?(natvent_availability)
+ errors << "Window natural ventilation availability '#{natvent_availability}' during a power outage is invalid." if error
+ end
+ end
+
hvac_perf_data_heating_args_initialized = [args[:hvac_perf_data_heating_outdoor_temperatures].is_initialized,
args[:hvac_perf_data_heating_min_speed_capacities].is_initialized,
args[:hvac_perf_data_heating_max_speed_capacities].is_initialized,
@@ -3840,22 +3857,32 @@ def self.set_header(runner, hpxml, args)
hpxml.header.whole_sfa_or_mf_building_sim = args[:whole_sfa_or_mf_building_sim].get
end
- if args[:schedules_vacancy_period].is_initialized
- begin_month, begin_day, begin_hour, end_month, end_day, end_hour = Schedule.parse_date_time_range(args[:schedules_vacancy_period].get)
+ if args[:schedules_vacancy_periods].is_initialized
+ schedules_vacancy_periods = args[:schedules_vacancy_periods].get.split(',').map(&:strip)
+ schedules_vacancy_periods.each do |schedules_vacancy_period|
+ begin_month, begin_day, begin_hour, end_month, end_day, end_hour = Schedule.parse_date_time_range(schedules_vacancy_period)
- if not unavailable_period_exists(hpxml, 'Vacancy', begin_month, begin_day, begin_hour, end_month, end_day, end_hour)
- hpxml.header.unavailable_periods.add(column_name: 'Vacancy', begin_month: begin_month, begin_day: begin_day, begin_hour: begin_hour, end_month: end_month, end_day: end_day, end_hour: end_hour, natvent_availability: HPXML::ScheduleUnavailable)
+ if not unavailable_period_exists(hpxml, 'Vacancy', begin_month, begin_day, begin_hour, end_month, end_day, end_hour)
+ hpxml.header.unavailable_periods.add(column_name: 'Vacancy', begin_month: begin_month, begin_day: begin_day, begin_hour: begin_hour, end_month: end_month, end_day: end_day, end_hour: end_hour, natvent_availability: HPXML::ScheduleUnavailable)
+ end
end
end
- if args[:schedules_power_outage_period].is_initialized
- begin_month, begin_day, begin_hour, end_month, end_day, end_hour = Schedule.parse_date_time_range(args[:schedules_power_outage_period].get)
+ if args[:schedules_power_outage_periods].is_initialized
+ schedules_power_outage_periods = args[:schedules_power_outage_periods].get.split(',').map(&:strip)
- if args[:schedules_power_outage_window_natvent_availability].is_initialized
- natvent_availability = args[:schedules_power_outage_window_natvent_availability].get
+ natvent_availabilities = []
+ if args[:schedules_power_outage_periods_window_natvent_availability].is_initialized
+ natvent_availabilities = args[:schedules_power_outage_periods_window_natvent_availability].get.split(',').map(&:strip)
end
- if not unavailable_period_exists(hpxml, 'Power Outage', begin_month, begin_day, begin_hour, end_month, end_day, end_hour, natvent_availability)
- hpxml.header.unavailable_periods.add(column_name: 'Power Outage', begin_month: begin_month, begin_day: begin_day, begin_hour: begin_hour, end_month: end_month, end_day: end_day, end_hour: end_hour, natvent_availability: natvent_availability)
+ schedules_power_outage_periods = schedules_power_outage_periods.zip(natvent_availabilities)
+ schedules_power_outage_periods.each do |schedules_power_outage_period|
+ outage_period, natvent_availability = schedules_power_outage_period
+ begin_month, begin_day, begin_hour, end_month, end_day, end_hour = Schedule.parse_date_time_range(outage_period)
+
+ if not unavailable_period_exists(hpxml, 'Power Outage', begin_month, begin_day, begin_hour, end_month, end_day, end_hour, natvent_availability)
+ hpxml.header.unavailable_periods.add(column_name: 'Power Outage', begin_month: begin_month, begin_day: begin_day, begin_hour: begin_hour, end_month: end_month, end_day: end_day, end_hour: end_hour, natvent_availability: natvent_availability)
+ end
end
end
@@ -6796,6 +6823,10 @@ def self.set_cooking_range_oven(hpxml_bldg, args)
def self.set_ceiling_fans(hpxml_bldg, args)
return unless args[:ceiling_fan_present]
+ if args[:ceiling_fan_label_energy_use].is_initialized
+ label_energy_use = args[:ceiling_fan_label_energy_use].get
+ end
+
if args[:ceiling_fan_efficiency].is_initialized
efficiency = args[:ceiling_fan_efficiency].get
end
@@ -6806,6 +6837,7 @@ def self.set_ceiling_fans(hpxml_bldg, args)
hpxml_bldg.ceiling_fans.add(id: "CeilingFan#{hpxml_bldg.ceiling_fans.size + 1}",
efficiency: efficiency,
+ label_energy_use: label_energy_use,
count: quantity)
end
diff --git a/hpxml-measures/BuildResidentialHPXML/measure.xml b/hpxml-measures/BuildResidentialHPXML/measure.xml
index 3c21717b7..70d15159f 100644
--- a/hpxml-measures/BuildResidentialHPXML/measure.xml
+++ b/hpxml-measures/BuildResidentialHPXML/measure.xml
@@ -3,8 +3,8 @@
3.1
build_residential_hpxml
a13a8983-2b01-4930-8af2-42030b6e4233
- c8848d28-0d8b-41e8-91f1-abec125fca07
- 2024-02-19T20:13:13Z
+ de0e30ab-3bb4-41e5-ad00-abf50a094dc5
+ 2024-02-22T18:12:31Z
2C38F48B
BuildResidentialHPXML
HPXML Builder
@@ -70,42 +70,28 @@
false
- schedules_vacancy_period
- Schedules: Vacancy Period
- Specifies the vacancy period. Enter a date like "Dec 15 - Jan 15". Optionally, can enter hour of the day like "Dec 15 2 - Jan 15 20" (start hour can be 0 through 23 and end hour can be 1 through 24).
+ schedules_vacancy_periods
+ Schedules: Vacancy Periods
+ Specifies the vacancy periods. Enter a date like "Dec 15 - Jan 15". Optionally, can enter hour of the day like "Dec 15 2 - Jan 15 20" (start hour can be 0 through 23 and end hour can be 1 through 24). If multiple periods, use a comma-separated list.
String
false
false
- schedules_power_outage_period
- Schedules: Power Outage Period
- Specifies the power outage period. Enter a date like "Dec 15 - Jan 15". Optionally, can enter hour of the day like "Dec 15 2 - Jan 15 20" (start hour can be 0 through 23 and end hour can be 1 through 24).
+ schedules_power_outage_periods
+ Schedules: Power Outage Periods
+ Specifies the power outage periods. Enter a date like "Dec 15 - Jan 15". Optionally, can enter hour of the day like "Dec 15 2 - Jan 15 20" (start hour can be 0 through 23 and end hour can be 1 through 24). If multiple periods, use a comma-separated list.
String
false
false
- schedules_power_outage_window_natvent_availability
- Schedules: Power Outage Period Window Natural Ventilation Availability
- The availability of the natural ventilation schedule during the outage period.
- Choice
+ schedules_power_outage_periods_window_natvent_availability
+ Schedules: Power Outage Periods Window Natural Ventilation Availability
+ The availability of the natural ventilation schedule during the power outage periods. Valid choices are 'regular schedule', 'always available', 'always unavailable'. If multiple periods, use a comma-separated list.
+ String
false
false
-
-
- regular schedule
- regular schedule
-
-
- always available
- always available
-
-
- always unavailable
- always unavailable
-
-
simulation_control_timestep
@@ -6237,10 +6223,19 @@
+
+ ceiling_fan_label_energy_use
+ Ceiling Fan: Label Energy Use
+ The label average energy use of the ceiling fan(s). If neither Efficiency nor Label Energy Use provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.7.0/workflow_inputs.html#hpxml-ceiling-fans'>HPXML Ceiling Fans</a>) is used.
+ Double
+ W
+ false
+ false
+
ceiling_fan_efficiency
Ceiling Fan: Efficiency
- The efficiency rating of the ceiling fan(s) at medium speed. If not provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.7.0/workflow_inputs.html#hpxml-ceiling-fans'>HPXML Ceiling Fans</a>) is used.
+ The efficiency rating of the ceiling fan(s) at medium speed. Only used if Label Energy Use not provided. If neither Efficiency nor Label Energy Use provided, the OS-HPXML default (see <a href='https://openstudio-hpxml.readthedocs.io/en/v1.7.0/workflow_inputs.html#hpxml-ceiling-fans'>HPXML Ceiling Fans</a>) is used.
Double
CFM/W
false
@@ -7167,7 +7162,7 @@
README.md
md
readme
- 58E2B548
+ BD2232F1
README.md.erb
@@ -7184,7 +7179,7 @@
measure.rb
rb
script
- 4E5B7CEC
+ 776E5EEC
geometry.rb
@@ -7196,7 +7191,7 @@
test_build_residential_hpxml.rb
rb
test
- 63FD5BD3
+ 15E37B7A
diff --git a/hpxml-measures/BuildResidentialHPXML/tests/test_build_residential_hpxml.rb b/hpxml-measures/BuildResidentialHPXML/tests/test_build_residential_hpxml.rb
index 210848bd3..7dfa47d23 100644
--- a/hpxml-measures/BuildResidentialHPXML/tests/test_build_residential_hpxml.rb
+++ b/hpxml-measures/BuildResidentialHPXML/tests/test_build_residential_hpxml.rb
@@ -69,6 +69,7 @@ def test_workflows
'extra-battery-crawlspace.xml' => 'base-sfd.xml',
'extra-battery-attic.xml' => 'base-sfd.xml',
'extra-detailed-performance-autosize.xml' => 'base-sfd.xml',
+ 'extra-power-outage-periods.xml' => 'base-sfd.xml',
'extra-sfa-atticroof-flat.xml' => 'base-sfa.xml',
'extra-sfa-atticroof-conditioned-eaves-gable.xml' => 'extra-sfa-slab.xml',
@@ -185,6 +186,8 @@ def test_workflows
'error-sfd-with-shared-system.xml' => 'base-sfd.xml',
'error-rim-joist-height-but-no-assembly-r.xml' => 'base-sfd.xml',
'error-rim-joist-assembly-r-but-no-height.xml' => 'base-sfd.xml',
+ 'error-power-outage-args-not-all-same-size.xml' => 'base-sfd.xml',
+ 'error-power-outage-window-natvent-invalid.xml' => 'base-sfd.xml',
'error-heating-perf-data-not-all-specified.xml' => 'base-sfd.xml',
'error-heating-perf-data-not-all-same-size.xml' => 'base-sfd.xml',
'error-cooling-perf-data-not-all-specified.xml' => 'base-sfd.xml',
@@ -249,6 +252,8 @@ def test_workflows
'error-sfd-with-shared-system.xml' => ['Specified a shared system for a single-family detached unit.'],
'error-rim-joist-height-but-no-assembly-r.xml' => ['Specified a rim joist height but no rim joist assembly R-value.'],
'error-rim-joist-assembly-r-but-no-height.xml' => ['Specified a rim joist assembly R-value but no rim joist height.'],
+ 'error-power-outage-args-not-all-same-size.xml' => ['One power outage periods schedule argument does not have enough comma-separated elements specified.'],
+ 'error-power-outage-window-natvent-invalid.xml' => ["Window natural ventilation availability 'invalid' during a power outage is invalid."],
'error-heating-perf-data-not-all-specified.xml' => ['Did not specify all required heating detailed performance data arguments.'],
'error-heating-perf-data-not-all-same-size.xml' => ['One or more detailed heating performance data arguments does not have enough comma-separated elements specified.'],
'error-cooling-perf-data-not-all-specified.xml' => ['Did not specify all required cooling detailed performance data arguments.'],
@@ -720,9 +725,9 @@ def _set_measure_argument_values(hpxml_file, args)
elsif ['base-sfd-header.xml'].include? hpxml_file
args['software_info_program_used'] = 'Program'
args['software_info_program_version'] = '1'
- args['schedules_vacancy_period'] = 'Jan 2 - Jan 5'
- args['schedules_power_outage_period'] = 'Feb 10 - Feb 12'
- args['schedules_power_outage_window_natvent_availability'] = HPXML::ScheduleAvailable
+ args['schedules_vacancy_periods'] = 'Jan 2 - Jan 5'
+ args['schedules_power_outage_periods'] = 'Feb 10 - Feb 12'
+ args['schedules_power_outage_periods_window_natvent_availability'] = HPXML::ScheduleAvailable
args['simulation_control_run_period'] = 'Jan 1 - Dec 31'
args['simulation_control_run_period_calendar_year'] = 2007
args['simulation_control_temperature_capacitance_multiplier'] = 1.0
@@ -949,6 +954,9 @@ def _set_measure_argument_values(hpxml_file, args)
args['hvac_perf_data_cooling_max_speed_capacities'] = '1.0, 1.11'
args['hvac_perf_data_cooling_min_speed_cops'] = '4.47, 6.34'
args['hvac_perf_data_cooling_max_speed_cops'] = '2.71, 3.53'
+ elsif ['extra-power-outage-periods.xml'].include? hpxml_file
+ args['schedules_power_outage_periods'] = 'Jan 1 - Jan 5, Jan 7 - Jan 9'
+ args['schedules_power_outage_periods_window_natvent_availability'] = "#{HPXML::ScheduleRegular}, #{HPXML::ScheduleAvailable}"
elsif ['extra-sfa-atticroof-flat.xml'].include? hpxml_file
args['geometry_attic_type'] = HPXML::AtticTypeFlatRoof
args['ducts_supply_leakage_to_outside_value'] = 0.0
@@ -1196,6 +1204,11 @@ def _set_measure_argument_values(hpxml_file, args)
args.delete('rim_joist_assembly_r')
elsif ['error-rim-joist-assembly-r-but-no-height.xml'].include? hpxml_file
args.delete('geometry_rim_joist_height')
+ elsif ['error-power-outage-args-not-all-same-size.xml'].include? hpxml_file
+ args['schedules_power_outage_periods'] = 'Jan 1 - Jan 5, Jan 7 - Jan 9'
+ args['schedules_power_outage_periods_window_natvent_availability'] = HPXML::ScheduleRegular
+ elsif ['error-power-outage-window-natvent-invalid.xml'].include? hpxml_file
+ args['schedules_power_outage_periods_window_natvent_availability'] = 'invalid'
elsif ['error-heating-perf-data-not-all-specified.xml'].include? hpxml_file
args['hvac_perf_data_heating_outdoor_temperatures'] = '47.0'
elsif ['error-heating-perf-data-not-all-same-size.xml'].include? hpxml_file
diff --git a/hpxml-measures/BuildResidentialScheduleFile/measure.xml b/hpxml-measures/BuildResidentialScheduleFile/measure.xml
index 240ea53b7..59955630b 100644
--- a/hpxml-measures/BuildResidentialScheduleFile/measure.xml
+++ b/hpxml-measures/BuildResidentialScheduleFile/measure.xml
@@ -3,8 +3,8 @@
3.1
build_residential_schedule_file
f770b2db-1a9f-4e99-99a7-7f3161a594b1
- 2302dda7-e4bb-4acd-9d56-7d33c175f30f
- 2024-02-07T22:56:16Z
+ 7b1409ae-fd42-438f-b83a-f7f398becd3b
+ 2024-02-23T00:22:14Z
03F02484
BuildResidentialScheduleFile
Schedule File Builder
@@ -204,7 +204,7 @@
schedules.rb
rb
resource
- B2F4A689
+ 4F823EDF
schedules_config.md
@@ -912,7 +912,7 @@
test_build_residential_schedule_file.rb
rb
test
- 2F6E6374
+ B0C9AC80
diff --git a/hpxml-measures/BuildResidentialScheduleFile/resources/schedules.rb b/hpxml-measures/BuildResidentialScheduleFile/resources/schedules.rb
index 8db1d23fb..68fb3bfb9 100644
--- a/hpxml-measures/BuildResidentialScheduleFile/resources/schedules.rb
+++ b/hpxml-measures/BuildResidentialScheduleFile/resources/schedules.rb
@@ -34,19 +34,7 @@ def initialize(runner:,
end
def self.export_columns
- return [SchedulesFile::ColumnOccupants,
- SchedulesFile::ColumnLightingInterior,
- SchedulesFile::ColumnLightingGarage,
- SchedulesFile::ColumnCookingRange,
- SchedulesFile::ColumnDishwasher,
- SchedulesFile::ColumnClothesWasher,
- SchedulesFile::ColumnClothesDryer,
- SchedulesFile::ColumnCeilingFan,
- SchedulesFile::ColumnPlugLoadsOther,
- SchedulesFile::ColumnPlugLoadsTV,
- SchedulesFile::ColumnHotWaterDishwasher,
- SchedulesFile::ColumnHotWaterClothesWasher,
- SchedulesFile::ColumnHotWaterFixtures]
+ return SchedulesFile::Columns.values.select { |c| c.can_be_stochastic }.map { |c| c.name }
end
def schedules
@@ -61,10 +49,10 @@ def create(args:)
end
if @column_names.nil?
- @column_names = SchedulesFile.ColumnNames
+ @column_names = SchedulesFile::Columns.values.map { |c| c.name }
end
- invalid_columns = (@column_names - SchedulesFile.ColumnNames)
+ invalid_columns = (@column_names - SchedulesFile::Columns.values.map { |c| c.name })
invalid_columns.each do |invalid_column|
@runner.registerError("Invalid column name specified: '#{invalid_column}'.")
end
@@ -185,16 +173,16 @@ def create_stochastic_schedules(args:)
away_schedule << sum_across_occupants(all_simulated_values, 5, index_15).to_f / args[:geometry_num_occupants]
idle_schedule << sum_across_occupants(all_simulated_values, 6, index_15).to_f / args[:geometry_num_occupants]
active_occupancy_percentage = 1 - (away_schedule[-1] + sleep_schedule[-1])
- @schedules[SchedulesFile::ColumnPlugLoadsOther][day * @steps_in_day + step] = get_value_from_daily_sch(plugload_weekday_sch, plugload_weekend_sch, plugload_monthly_multiplier, month, is_weekday, minute, active_occupancy_percentage)
- @schedules[SchedulesFile::ColumnLightingInterior][day * @steps_in_day + step] = scale_lighting_by_occupancy(interior_lighting_schedule, minute, active_occupancy_percentage)
- @schedules[SchedulesFile::ColumnCeilingFan][day * @steps_in_day + step] = get_value_from_daily_sch(ceiling_fan_weekday_sch, ceiling_fan_weekend_sch, ceiling_fan_monthly_multiplier, month, is_weekday, minute, active_occupancy_percentage)
+ @schedules[SchedulesFile::Columns[:PlugLoadsOther].name][day * @steps_in_day + step] = get_value_from_daily_sch(plugload_weekday_sch, plugload_weekend_sch, plugload_monthly_multiplier, month, is_weekday, minute, active_occupancy_percentage)
+ @schedules[SchedulesFile::Columns[:LightingInterior].name][day * @steps_in_day + step] = scale_lighting_by_occupancy(interior_lighting_schedule, minute, active_occupancy_percentage)
+ @schedules[SchedulesFile::Columns[:CeilingFan].name][day * @steps_in_day + step] = get_value_from_daily_sch(ceiling_fan_weekday_sch, ceiling_fan_weekend_sch, ceiling_fan_monthly_multiplier, month, is_weekday, minute, active_occupancy_percentage)
end
end
- @schedules[SchedulesFile::ColumnPlugLoadsOther] = normalize(@schedules[SchedulesFile::ColumnPlugLoadsOther])
- @schedules[SchedulesFile::ColumnPlugLoadsTV] = @schedules[SchedulesFile::ColumnPlugLoadsOther]
- @schedules[SchedulesFile::ColumnLightingInterior] = normalize(@schedules[SchedulesFile::ColumnLightingInterior])
- @schedules[SchedulesFile::ColumnLightingGarage] = @schedules[SchedulesFile::ColumnLightingInterior]
- @schedules[SchedulesFile::ColumnCeilingFan] = normalize(@schedules[SchedulesFile::ColumnCeilingFan])
+ @schedules[SchedulesFile::Columns[:PlugLoadsOther].name] = normalize(@schedules[SchedulesFile::Columns[:PlugLoadsOther].name])
+ @schedules[SchedulesFile::Columns[:PlugLoadsTV].name] = @schedules[SchedulesFile::Columns[:PlugLoadsOther].name]
+ @schedules[SchedulesFile::Columns[:LightingInterior].name] = normalize(@schedules[SchedulesFile::Columns[:LightingInterior].name])
+ @schedules[SchedulesFile::Columns[:LightingGarage].name] = @schedules[SchedulesFile::Columns[:LightingInterior].name]
+ @schedules[SchedulesFile::Columns[:CeilingFan].name] = normalize(@schedules[SchedulesFile::Columns[:CeilingFan].name])
# Generate the Sink Schedule
# 1. Find indexes (minutes) when at least one occupant can have sink event (they aren't sleeping or absent)
@@ -542,52 +530,52 @@ def create_stochastic_schedules(args:)
dw_activity_sch = apply_monthly_offsets(array: dw_activity_sch, weekday_monthly_shift_dict: weekday_monthly_shift_dict, weekend_monthly_shift_dict: weekend_monthly_shift_dict)
dw_activity_sch = aggregate_array(dw_activity_sch, @minutes_per_step)
dw_peak_flow = dw_activity_sch.max
- @schedules[SchedulesFile::ColumnHotWaterDishwasher] = dw_activity_sch.map { |flow| flow / dw_peak_flow }
+ @schedules[SchedulesFile::Columns[:HotWaterDishwasher].name] = dw_activity_sch.map { |flow| flow / dw_peak_flow }
random_offset = (prng.rand * 2 * offset_range).to_i - offset_range
cw_activity_sch = cw_activity_sch.rotate(random_offset)
cw_activity_sch = apply_monthly_offsets(array: cw_activity_sch, weekday_monthly_shift_dict: weekday_monthly_shift_dict, weekend_monthly_shift_dict: weekend_monthly_shift_dict)
cw_activity_sch = aggregate_array(cw_activity_sch, @minutes_per_step)
cw_peak_flow = cw_activity_sch.max
- @schedules[SchedulesFile::ColumnHotWaterClothesWasher] = cw_activity_sch.map { |flow| flow / cw_peak_flow }
+ @schedules[SchedulesFile::Columns[:HotWaterClothesWasher].name] = cw_activity_sch.map { |flow| flow / cw_peak_flow }
random_offset = (prng.rand * 2 * offset_range).to_i - offset_range
cooking_power_sch = cooking_power_sch.rotate(random_offset)
cooking_power_sch = apply_monthly_offsets(array: cooking_power_sch, weekday_monthly_shift_dict: weekday_monthly_shift_dict, weekend_monthly_shift_dict: weekend_monthly_shift_dict)
cooking_power_sch = aggregate_array(cooking_power_sch, @minutes_per_step)
cooking_peak_power = cooking_power_sch.max
- @schedules[SchedulesFile::ColumnCookingRange] = cooking_power_sch.map { |power| power / cooking_peak_power }
+ @schedules[SchedulesFile::Columns[:CookingRange].name] = cooking_power_sch.map { |power| power / cooking_peak_power }
random_offset = (prng.rand * 2 * offset_range).to_i - offset_range
cw_power_sch = cw_power_sch.rotate(random_offset)
cw_power_sch = apply_monthly_offsets(array: cw_power_sch, weekday_monthly_shift_dict: weekday_monthly_shift_dict, weekend_monthly_shift_dict: weekend_monthly_shift_dict)
cw_power_sch = aggregate_array(cw_power_sch, @minutes_per_step)
cw_peak_power = cw_power_sch.max
- @schedules[SchedulesFile::ColumnClothesWasher] = cw_power_sch.map { |power| power / cw_peak_power }
+ @schedules[SchedulesFile::Columns[:ClothesWasher].name] = cw_power_sch.map { |power| power / cw_peak_power }
random_offset = (prng.rand * 2 * offset_range).to_i - offset_range
cd_power_sch = cd_power_sch.rotate(random_offset)
cd_power_sch = apply_monthly_offsets(array: cd_power_sch, weekday_monthly_shift_dict: weekday_monthly_shift_dict, weekend_monthly_shift_dict: weekend_monthly_shift_dict)
cd_power_sch = aggregate_array(cd_power_sch, @minutes_per_step)
cd_peak_power = cd_power_sch.max
- @schedules[SchedulesFile::ColumnClothesDryer] = cd_power_sch.map { |power| power / cd_peak_power }
+ @schedules[SchedulesFile::Columns[:ClothesDryer].name] = cd_power_sch.map { |power| power / cd_peak_power }
random_offset = (prng.rand * 2 * offset_range).to_i - offset_range
dw_power_sch = dw_power_sch.rotate(random_offset)
dw_power_sch = apply_monthly_offsets(array: dw_power_sch, weekday_monthly_shift_dict: weekday_monthly_shift_dict, weekend_monthly_shift_dict: weekend_monthly_shift_dict)
dw_power_sch = aggregate_array(dw_power_sch, @minutes_per_step)
dw_peak_power = dw_power_sch.max
- @schedules[SchedulesFile::ColumnDishwasher] = dw_power_sch.map { |power| power / dw_peak_power }
+ @schedules[SchedulesFile::Columns[:Dishwasher].name] = dw_power_sch.map { |power| power / dw_peak_power }
- @schedules[SchedulesFile::ColumnOccupants] = away_schedule.map { |i| 1.0 - i }
+ @schedules[SchedulesFile::Columns[:Occupants].name] = away_schedule.map { |i| 1.0 - i }
if @debug
- @schedules[SchedulesFile::ColumnSleeping] = sleep_schedule
+ @schedules[SchedulesFile::Columns[:Sleeping].name] = sleep_schedule
end
- @schedules[SchedulesFile::ColumnHotWaterFixtures] = [showers, sinks, baths].transpose.map { |flow| flow.reduce(:+) }
- fixtures_peak_flow = @schedules[SchedulesFile::ColumnHotWaterFixtures].max
- @schedules[SchedulesFile::ColumnHotWaterFixtures] = @schedules[SchedulesFile::ColumnHotWaterFixtures].map { |flow| flow / fixtures_peak_flow }
+ @schedules[SchedulesFile::Columns[:HotWaterFixtures].name] = [showers, sinks, baths].transpose.map { |flow| flow.reduce(:+) }
+ fixtures_peak_flow = @schedules[SchedulesFile::Columns[:HotWaterFixtures].name].max
+ @schedules[SchedulesFile::Columns[:HotWaterFixtures].name] = @schedules[SchedulesFile::Columns[:HotWaterFixtures].name].map { |flow| flow / fixtures_peak_flow }
return true
end
@@ -754,7 +742,7 @@ def sample_activity_duration(prng, activity_duration_prob_map, occ_type_id, acti
end
def export(schedules_path:)
- (SchedulesFile.ColumnNames - @column_names).each do |col_to_remove|
+ (SchedulesFile::Columns.values.map { |c| c.name } - @column_names).each do |col_to_remove|
@schedules.delete(col_to_remove)
end
CSV.open(schedules_path, 'w') do |csv|
diff --git a/hpxml-measures/BuildResidentialScheduleFile/tests/test_build_residential_schedule_file.rb b/hpxml-measures/BuildResidentialScheduleFile/tests/test_build_residential_schedule_file.rb
index 051b7c1d1..c23b0a354 100644
--- a/hpxml-measures/BuildResidentialScheduleFile/tests/test_build_residential_schedule_file.rb
+++ b/hpxml-measures/BuildResidentialScheduleFile/tests/test_build_residential_schedule_file.rb
@@ -49,33 +49,33 @@ def test_stochastic
year: @year,
output_path: @tmp_schedule_file_path)
- assert_in_epsilon(6689, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnOccupants, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(2086, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnLightingInterior, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(2086, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnLightingGarage, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(534, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnCookingRange, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(213, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnDishwasher, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(134, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnClothesWasher, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(151, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnClothesDryer, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(3250, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnCeilingFan, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(4840, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnPlugLoadsOther, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(4840, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnPlugLoadsTV, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(273, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnHotWaterDishwasher, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(346, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnHotWaterClothesWasher, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(887, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnHotWaterFixtures, schedules: sf.tmp_schedules), @tol)
- assert(!sf.schedules.keys.include?(SchedulesFile::ColumnSleeping))
+ assert_in_epsilon(6689, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:Occupants].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(2086, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:LightingInterior].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(2086, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:LightingGarage].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(534, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:CookingRange].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(213, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:Dishwasher].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(134, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:ClothesWasher].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(151, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:ClothesDryer].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(3250, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:CeilingFan].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(4840, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:PlugLoadsOther].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(4840, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:PlugLoadsTV].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(273, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:HotWaterDishwasher].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(346, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:HotWaterClothesWasher].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(887, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:HotWaterFixtures].name, schedules: sf.tmp_schedules), @tol)
+ assert(!sf.schedules.keys.include?(SchedulesFile::Columns[:Sleeping].name))
end
def test_stochastic_subset_of_columns
hpxml = _create_hpxml('base.xml')
XMLHelper.write_file(hpxml.to_doc, @tmp_hpxml_path)
- columns = [SchedulesFile::ColumnCookingRange,
- SchedulesFile::ColumnDishwasher,
- SchedulesFile::ColumnHotWaterDishwasher,
- SchedulesFile::ColumnClothesWasher,
- SchedulesFile::ColumnHotWaterClothesWasher,
- SchedulesFile::ColumnClothesDryer,
- SchedulesFile::ColumnHotWaterFixtures]
+ columns = [SchedulesFile::Columns[:CookingRange].name,
+ SchedulesFile::Columns[:Dishwasher].name,
+ SchedulesFile::Columns[:HotWaterDishwasher].name,
+ SchedulesFile::Columns[:ClothesWasher].name,
+ SchedulesFile::Columns[:HotWaterClothesWasher].name,
+ SchedulesFile::Columns[:ClothesDryer].name,
+ SchedulesFile::Columns[:HotWaterFixtures].name]
@args_hash['schedules_type'] = 'stochastic'
@args_hash['output_csv_path'] = File.absolute_path(File.join(@tmp_output_path, 'occupancy-stochastic.csv'))
@@ -92,7 +92,7 @@ def test_stochastic_subset_of_columns
columns.each do |column|
assert(sf.schedules.keys.include?(column))
end
- (SchedulesFile.ColumnNames - columns).each do |column|
+ (SchedulesFile::Columns.values.map { |c| c.name } - columns).each do |column|
assert(!sf.schedules.keys.include?(column))
end
end
@@ -103,7 +103,7 @@ def test_stochastic_subset_of_columns_invalid_name
@args_hash['schedules_type'] = 'stochastic'
@args_hash['output_csv_path'] = File.absolute_path(File.join(@tmp_output_path, 'occupancy-stochastic.csv'))
- @args_hash['schedules_column_names'] = "foobar, #{SchedulesFile::ColumnCookingRange}, foobar2"
+ @args_hash['schedules_column_names'] = "foobar, #{SchedulesFile::Columns[:CookingRange].name}, foobar2"
_hpxml, result = _test_measure(expect_fail: true)
error_msgs = result.errors.map { |x| x.logMessage }
@@ -131,20 +131,20 @@ def test_stochastic_debug
year: @year,
output_path: @tmp_schedule_file_path)
- assert_in_epsilon(6689, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnOccupants, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(2086, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnLightingInterior, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(2086, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnLightingGarage, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(534, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnCookingRange, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(213, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnDishwasher, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(134, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnClothesWasher, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(151, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnClothesDryer, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(3250, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnCeilingFan, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(4840, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnPlugLoadsOther, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(4840, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnPlugLoadsTV, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(273, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnHotWaterDishwasher, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(346, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnHotWaterClothesWasher, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(887, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnHotWaterFixtures, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(3067, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnSleeping, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(6689, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:Occupants].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(2086, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:LightingInterior].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(2086, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:LightingGarage].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(534, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:CookingRange].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(213, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:Dishwasher].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(134, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:ClothesWasher].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(151, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:ClothesDryer].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(3250, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:CeilingFan].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(4840, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:PlugLoadsOther].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(4840, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:PlugLoadsTV].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(273, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:HotWaterDishwasher].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(346, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:HotWaterClothesWasher].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(887, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:HotWaterFixtures].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(3067, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:Sleeping].name, schedules: sf.tmp_schedules), @tol)
end
def test_random_seed
@@ -167,20 +167,20 @@ def test_random_seed
year: @year,
output_path: @tmp_schedule_file_path)
- assert_in_epsilon(6689, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnOccupants, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(2070, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnLightingInterior, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(2070, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnLightingGarage, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(534, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnCookingRange, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(233, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnDishwasher, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(134, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnClothesWasher, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(151, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnClothesDryer, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(3250, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnCeilingFan, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(4840, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnPlugLoadsOther, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(4840, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnPlugLoadsTV, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(288, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnHotWaterDishwasher, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(320, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnHotWaterClothesWasher, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(889, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnHotWaterFixtures, schedules: sf.tmp_schedules), @tol)
- assert(!sf.schedules.keys.include?(SchedulesFile::ColumnSleeping))
+ assert_in_epsilon(6689, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:Occupants].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(2070, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:LightingInterior].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(2070, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:LightingGarage].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(534, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:CookingRange].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(233, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:Dishwasher].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(134, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:ClothesWasher].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(151, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:ClothesDryer].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(3250, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:CeilingFan].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(4840, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:PlugLoadsOther].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(4840, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:PlugLoadsTV].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(288, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:HotWaterDishwasher].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(320, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:HotWaterClothesWasher].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(889, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:HotWaterFixtures].name, schedules: sf.tmp_schedules), @tol)
+ assert(!sf.schedules.keys.include?(SchedulesFile::Columns[:Sleeping].name))
@args_hash['schedules_random_seed'] = 2
hpxml, result = _test_measure()
@@ -197,20 +197,20 @@ def test_random_seed
year: @year,
output_path: @tmp_schedule_file_path)
- assert_in_epsilon(6072, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnOccupants, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(1753, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnLightingInterior, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(1753, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnLightingGarage, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(356, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnCookingRange, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(174, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnDishwasher, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(101, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnClothesWasher, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(166, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnClothesDryer, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(3029, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnCeilingFan, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(4700, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnPlugLoadsOther, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(4700, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnPlugLoadsTV, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(233, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnHotWaterDishwasher, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(244, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnHotWaterClothesWasher, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(1077, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnHotWaterFixtures, schedules: sf.tmp_schedules), @tol)
- assert(!sf.schedules.keys.include?(SchedulesFile::ColumnSleeping))
+ assert_in_epsilon(6072, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:Occupants].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(1753, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:LightingInterior].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(1753, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:LightingGarage].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(356, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:CookingRange].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(174, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:Dishwasher].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(101, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:ClothesWasher].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(166, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:ClothesDryer].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(3029, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:CeilingFan].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(4700, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:PlugLoadsOther].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(4700, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:PlugLoadsTV].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(233, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:HotWaterDishwasher].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(244, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:HotWaterClothesWasher].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(1077, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:HotWaterFixtures].name, schedules: sf.tmp_schedules), @tol)
+ assert(!sf.schedules.keys.include?(SchedulesFile::Columns[:Sleeping].name))
end
def test_10_min_timestep
@@ -232,20 +232,20 @@ def test_10_min_timestep
year: @year,
output_path: @tmp_schedule_file_path)
- assert_in_epsilon(6707, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnOccupants, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(2077, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnLightingInterior, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(2077, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnLightingGarage, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(534, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnCookingRange, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(213, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnDishwasher, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(105, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnClothesWasher, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(151, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnClothesDryer, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(3237, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnCeilingFan, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(4845, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnPlugLoadsOther, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(4845, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnPlugLoadsTV, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(146, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnHotWaterDishwasher, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(154, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnHotWaterClothesWasher, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(397, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnHotWaterFixtures, schedules: sf.tmp_schedules), @tol)
- assert(!sf.schedules.keys.include?(SchedulesFile::ColumnSleeping))
+ assert_in_epsilon(6707, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:Occupants].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(2077, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:LightingInterior].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(2077, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:LightingGarage].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(534, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:CookingRange].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(213, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:Dishwasher].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(105, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:ClothesWasher].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(151, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:ClothesDryer].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(3237, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:CeilingFan].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(4845, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:PlugLoadsOther].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(4845, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:PlugLoadsTV].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(146, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:HotWaterDishwasher].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(154, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:HotWaterClothesWasher].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(397, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:HotWaterFixtures].name, schedules: sf.tmp_schedules), @tol)
+ assert(!sf.schedules.keys.include?(SchedulesFile::Columns[:Sleeping].name))
end
def test_non_integer_number_of_occupants
@@ -306,54 +306,54 @@ def test_multiple_buildings
if hpxml_bldg.building_id == 'MyBuilding'
assert_equal(1, hpxml_bldg.header.schedules_filepaths.size)
assert(hpxml_bldg.header.schedules_filepaths[0].include? 'occupancy-stochastic.csv')
- assert_in_epsilon(6689, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnOccupants, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(2086, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnLightingInterior, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(2086, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnLightingGarage, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(534, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnCookingRange, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(213, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnDishwasher, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(134, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnClothesWasher, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(151, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnClothesDryer, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(3250, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnCeilingFan, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(4840, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnPlugLoadsOther, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(4840, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnPlugLoadsTV, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(273, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnHotWaterDishwasher, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(346, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnHotWaterClothesWasher, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(887, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnHotWaterFixtures, schedules: sf.tmp_schedules), @tol)
- assert(!sf.schedules.keys.include?(SchedulesFile::ColumnSleeping))
+ assert_in_epsilon(6689, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:Occupants].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(2086, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:LightingInterior].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(2086, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:LightingGarage].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(534, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:CookingRange].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(213, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:Dishwasher].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(134, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:ClothesWasher].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(151, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:ClothesDryer].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(3250, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:CeilingFan].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(4840, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:PlugLoadsOther].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(4840, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:PlugLoadsTV].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(273, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:HotWaterDishwasher].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(346, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:HotWaterClothesWasher].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(887, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:HotWaterFixtures].name, schedules: sf.tmp_schedules), @tol)
+ assert(!sf.schedules.keys.include?(SchedulesFile::Columns[:Sleeping].name))
elsif hpxml_bldg.building_id == 'MyBuilding_2'
assert_equal(1, hpxml_bldg.header.schedules_filepaths.size)
assert(hpxml_bldg.header.schedules_filepaths[0].include? 'occupancy-stochastic_2.csv')
- assert_in_epsilon(6072, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnOccupants, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(1765, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnLightingInterior, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(1765, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnLightingGarage, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(356, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnCookingRange, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(165, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnDishwasher, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(101, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnClothesWasher, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(166, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnClothesDryer, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(3029, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnCeilingFan, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(4700, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnPlugLoadsOther, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(4700, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnPlugLoadsTV, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(221, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnHotWaterDishwasher, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(266, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnHotWaterClothesWasher, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(894, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnHotWaterFixtures, schedules: sf.tmp_schedules), @tol)
- assert(!sf.schedules.keys.include?(SchedulesFile::ColumnSleeping))
+ assert_in_epsilon(6072, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:Occupants].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(1765, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:LightingInterior].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(1765, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:LightingGarage].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(356, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:CookingRange].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(165, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:Dishwasher].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(101, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:ClothesWasher].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(166, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:ClothesDryer].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(3029, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:CeilingFan].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(4700, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:PlugLoadsOther].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(4700, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:PlugLoadsTV].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(221, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:HotWaterDishwasher].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(266, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:HotWaterClothesWasher].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(894, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:HotWaterFixtures].name, schedules: sf.tmp_schedules), @tol)
+ assert(!sf.schedules.keys.include?(SchedulesFile::Columns[:Sleeping].name))
elsif hpxml_bldg.building_id == 'MyBuilding_3'
assert_equal(1, hpxml_bldg.header.schedules_filepaths.size)
assert(hpxml_bldg.header.schedules_filepaths[0].include? 'occupancy-stochastic_3.csv')
- assert_in_epsilon(6045, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnOccupants, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(1745, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnLightingInterior, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(1745, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnLightingGarage, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(421, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnCookingRange, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(239, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnDishwasher, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(81, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnClothesWasher, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(127, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnClothesDryer, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(2984, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnCeilingFan, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(4716, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnPlugLoadsOther, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(4716, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnPlugLoadsTV, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(224, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnHotWaterDishwasher, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(209, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnHotWaterClothesWasher, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(970, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnHotWaterFixtures, schedules: sf.tmp_schedules), @tol)
- assert(!sf.schedules.keys.include?(SchedulesFile::ColumnSleeping))
+ assert_in_epsilon(6045, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:Occupants].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(1745, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:LightingInterior].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(1745, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:LightingGarage].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(421, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:CookingRange].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(239, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:Dishwasher].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(81, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:ClothesWasher].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(127, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:ClothesDryer].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(2984, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:CeilingFan].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(4716, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:PlugLoadsOther].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(4716, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:PlugLoadsTV].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(224, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:HotWaterDishwasher].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(209, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:HotWaterClothesWasher].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(970, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:HotWaterFixtures].name, schedules: sf.tmp_schedules), @tol)
+ assert(!sf.schedules.keys.include?(SchedulesFile::Columns[:Sleeping].name))
end
end
end
@@ -387,20 +387,20 @@ def test_multiple_buildings_id
assert_equal(1, hpxml_bldg.header.schedules_filepaths.size)
assert(hpxml_bldg.header.schedules_filepaths[0].include? 'occupancy-stochastic_2.csv')
- assert_in_epsilon(6072, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnOccupants, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(1765, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnLightingInterior, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(1765, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnLightingGarage, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(356, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnCookingRange, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(165, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnDishwasher, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(101, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnClothesWasher, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(166, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnClothesDryer, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(3029, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnCeilingFan, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(4700, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnPlugLoadsOther, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(4700, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnPlugLoadsTV, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(221, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnHotWaterDishwasher, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(266, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnHotWaterClothesWasher, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(894, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnHotWaterFixtures, schedules: sf.tmp_schedules), @tol)
- assert(!sf.schedules.keys.include?(SchedulesFile::ColumnSleeping))
+ assert_in_epsilon(6072, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:Occupants].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(1765, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:LightingInterior].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(1765, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:LightingGarage].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(356, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:CookingRange].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(165, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:Dishwasher].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(101, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:ClothesWasher].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(166, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:ClothesDryer].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(3029, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:CeilingFan].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(4700, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:PlugLoadsOther].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(4700, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:PlugLoadsTV].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(221, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:HotWaterDishwasher].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(266, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:HotWaterClothesWasher].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(894, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:HotWaterFixtures].name, schedules: sf.tmp_schedules), @tol)
+ assert(!sf.schedules.keys.include?(SchedulesFile::Columns[:Sleeping].name))
else
assert_empty(hpxml_bldg.header.schedules_filepaths)
end
diff --git a/hpxml-measures/Changelog.md b/hpxml-measures/Changelog.md
index 837868dc3..482ee2da2 100644
--- a/hpxml-measures/Changelog.md
+++ b/hpxml-measures/Changelog.md
@@ -3,7 +3,6 @@
__New Features__
- Updates to HPXML v4.0-rc3.
- Updates per ANSI/RESNET/ICC 301-2022 w/ Addendum C:
- - **Breaking change**: Shared boilers require `SharedLoopWatts` (and `FanCoilWatts` if a fan coil system) inputs; removed EAE input/defaults.
- Allows shared batteries (batteries serving multiple dwelling units).
- Updated default CFIS fan power to 0.58 W/cfm.
- Removed natural ventilation availability RH constraint; HR constraint remains.
@@ -12,6 +11,7 @@ __New Features__
- Adds schedule inputs for hot water recirculation pumps and general water use internal gains.
- Updated water heater installation location defaulting to match ANSI 301-2022
- Updated calculation of hot water piping length for buildings with both conditioned and unconditioned basements to avoid double counting.
+ - `AverageCeilingHeight` now used in natural ACH/CFM infiltration calculations.
- **Breaking change**: Replaces `BuildingSummary/Site/extension/GroundConductivity` with `BuildingSummary/Site/Soil/Conductivity`.
- **Breaking change**: Modeling whole SFA/MF buildings is now specified using a `SoftwareInfo/extension/WholeSFAorMFBuildingSimulation=true` element instead of `building-id=ALL` argument.
- Air source heat pump enhancements:
@@ -27,18 +27,21 @@ __New Features__
- Adds window and skylight `GlassType` options of "low-e, high-solar-gain" and "low-e, low-solar-gain"; updates U-factor/SHGC lookup tables.
- BuildResidentialHPXML measure:
- **Breaking change**: Replaces `roof_radiant_barrier`/`roof_radiant_barrier_grade` arguments with `radiant_barrier_attic_location`/`radiant_barrier_grade`.
+ - Allows defining multiple unavailable periods; **Breaking change**: arguments renamed to `schedules_vacancy_periods`, `schedules_power_outage_periods`, and `schedules_power_outage_periods_window_natvent_availability`.
- Adds detailed performance data inputs for variable-speed air source HVAC systems.
- Adds heat pump backup sizing methodology input.
- Add soil and moisture type arguments (for determining ground conductivity and diffusivity) and optional geothermal loop arguments for ground source heat pumps.
- The "Geometry: Building Number of Units" input is now written to the HPXML `NumberofUnitsInBuilding` element.
- Miscellaneous Manual J improvements.
- Adds more error-checking for inappropriate inputs (e.g., HVAC SHR=0 or clothes washer IMEF=0).
+- Allow alternative label energy use (W) input for ceiling fans.
__Bugfixes__
- Fixes error if using AllowIncreasedFixedCapacities=true w/ HP detailed performance data.
- Prevents mains water temperature from going below freezing (0 C).
- Fixes error if HPXML has emissions scenario and abbreviated run period.
- Fixes detailed schedule error-checking where schedules with MAX < 1 were incorrectly allowed.
+- Fixes error if using MF space types (e.g., "other heated space") and the building has no HVAC equipment.
## OpenStudio-HPXML v1.7.0
diff --git a/hpxml-measures/HPXMLtoOpenStudio/measure.rb b/hpxml-measures/HPXMLtoOpenStudio/measure.rb
index e112db6bd..98ffc45e2 100644
--- a/hpxml-measures/HPXMLtoOpenStudio/measure.rb
+++ b/hpxml-measures/HPXMLtoOpenStudio/measure.rb
@@ -445,7 +445,7 @@ def create_unit_model(hpxml, hpxml_bldg, runner, model, epw_path, epw_file, weat
add_num_occupants(model, runner, spaces)
# HVAC
- @hvac_unavailable_periods = Schedule.get_unavailable_periods(runner, SchedulesFile::ColumnHVAC, @hpxml_header.unavailable_periods)
+ @hvac_unavailable_periods = Schedule.get_unavailable_periods(runner, SchedulesFile::Columns[:HVAC].name, @hpxml_header.unavailable_periods)
airloop_map = {} # Map of HPXML System ID -> AirLoopHVAC (or ZoneHVACFourPipeFanCoil)
add_ideal_system(model, spaces, epw_path)
add_cooling_system(model, weather, spaces, airloop_map)
@@ -1530,7 +1530,7 @@ def add_hot_water_and_appliances(runner, model, weather, spaces)
end
# Water Heater
- unavailable_periods = Schedule.get_unavailable_periods(runner, SchedulesFile::ColumnWaterHeater, @hpxml_header.unavailable_periods)
+ unavailable_periods = Schedule.get_unavailable_periods(runner, SchedulesFile::Columns[:WaterHeater].name, @hpxml_header.unavailable_periods)
unit_multiplier = @hpxml_bldg.building_construction.number_of_units
has_uncond_bsmnt = @hpxml_bldg.has_location(HPXML::LocationBasementUnconditioned)
has_cond_bsmnt = @hpxml_bldg.has_location(HPXML::LocationBasementConditioned)
@@ -1938,7 +1938,7 @@ def add_airflow(runner, model, weather, spaces, airloop_map)
# Create HVAC availability sensor
hvac_availability_sensor = nil
if not @hvac_unavailable_periods.empty?
- avail_sch = ScheduleConstant.new(model, SchedulesFile::ColumnHVAC, 1.0, Constants.ScheduleTypeLimitsFraction, unavailable_periods: @hvac_unavailable_periods)
+ avail_sch = ScheduleConstant.new(model, SchedulesFile::Columns[:HVAC].name, 1.0, Constants.ScheduleTypeLimitsFraction, unavailable_periods: @hvac_unavailable_periods)
hvac_availability_sensor = OpenStudio::Model::EnergyManagementSystemSensor.new(model, 'Schedule Value')
hvac_availability_sensor.setName('hvac availability s')
@@ -2744,13 +2744,32 @@ def get_space_temperature_schedule(model, location, spaces)
space_values = Geometry.get_temperature_scheduled_space_values(location)
+ htg_weekday_setpoints, htg_weekend_setpoints = HVAC.get_default_heating_setpoint(HPXML::HVACControlTypeManual, @eri_version)
+ if htg_weekday_setpoints.split(', ').uniq.size == 1 && htg_weekend_setpoints.split(', ').uniq.size == 1 && htg_weekday_setpoints.split(', ').uniq == htg_weekend_setpoints.split(', ').uniq
+ default_htg_sp = htg_weekend_setpoints.split(', ').uniq[0].to_f # F
+ else
+ fail 'Unexpected heating setpoints.'
+ end
+
+ clg_weekday_setpoints, clg_weekend_setpoints = HVAC.get_default_cooling_setpoint(HPXML::HVACControlTypeManual, @eri_version)
+ if clg_weekday_setpoints.split(', ').uniq.size == 1 && clg_weekend_setpoints.split(', ').uniq.size == 1 && clg_weekday_setpoints.split(', ').uniq == clg_weekend_setpoints.split(', ').uniq
+ default_clg_sp = clg_weekend_setpoints.split(', ').uniq[0].to_f # F
+ else
+ fail 'Unexpected cooling setpoints.'
+ end
+
if location == HPXML::LocationOtherHeatedSpace
- # Create a sensor to get dynamic heating setpoint
- htg_sch = spaces[HPXML::LocationConditionedSpace].thermalZone.get.thermostatSetpointDualSetpoint.get.heatingSetpointTemperatureSchedule.get
- sensor_htg_spt = OpenStudio::Model::EnergyManagementSystemSensor.new(model, 'Schedule Value')
- sensor_htg_spt.setName('htg_spt')
- sensor_htg_spt.setKeyName(htg_sch.name.to_s)
- space_values[:temp_min] = sensor_htg_spt.name.to_s
+ if spaces[HPXML::LocationConditionedSpace].thermalZone.get.thermostatSetpointDualSetpoint.is_initialized
+ # Create a sensor to get dynamic heating setpoint
+ htg_sch = spaces[HPXML::LocationConditionedSpace].thermalZone.get.thermostatSetpointDualSetpoint.get.heatingSetpointTemperatureSchedule.get
+ sensor_htg_spt = OpenStudio::Model::EnergyManagementSystemSensor.new(model, 'Schedule Value')
+ sensor_htg_spt.setName('htg_spt')
+ sensor_htg_spt.setKeyName(htg_sch.name.to_s)
+ space_values[:temp_min] = sensor_htg_spt.name.to_s
+ else
+ # No HVAC system; use the defaulted heating setpoint.
+ space_values[:temp_min] = default_htg_sp # F
+ end
end
# Schedule type limits compatible
@@ -2760,9 +2779,15 @@ def get_space_temperature_schedule(model, location, spaces)
# Sensors
if space_values[:indoor_weight] > 0
- sensor_ia = OpenStudio::Model::EnergyManagementSystemSensor.new(model, 'Zone Air Temperature')
- sensor_ia.setName('cond_zone_temp')
- sensor_ia.setKeyName(spaces[HPXML::LocationConditionedSpace].thermalZone.get.name.to_s)
+ if not spaces[HPXML::LocationConditionedSpace].thermalZone.get.thermostatSetpointDualSetpoint.is_initialized
+ # No HVAC system; use the average of defaulted heating/cooling setpoints.
+ sensor_ia = UnitConversions.convert((default_htg_sp + default_clg_sp) / 2.0, 'F', 'C')
+ else
+ sensor_ia = OpenStudio::Model::EnergyManagementSystemSensor.new(model, 'Zone Air Temperature')
+ sensor_ia.setName('cond_zone_temp')
+ sensor_ia.setKeyName(spaces[HPXML::LocationConditionedSpace].thermalZone.get.name.to_s)
+ sensor_ia = sensor_ia.name
+ end
end
if space_values[:outdoor_weight] > 0
@@ -2783,7 +2808,7 @@ def get_space_temperature_schedule(model, location, spaces)
program.setName("#{location.gsub('-', '_')} Temperature Program")
program.addLine("Set #{actuator.name} = 0.0")
if not sensor_ia.nil?
- program.addLine("Set #{actuator.name} = #{actuator.name} + (#{sensor_ia.name} * #{space_values[:indoor_weight]})")
+ program.addLine("Set #{actuator.name} = #{actuator.name} + (#{sensor_ia} * #{space_values[:indoor_weight]})")
end
if not sensor_oa.nil?
program.addLine("Set #{actuator.name} = #{actuator.name} + (#{sensor_oa.name} * #{space_values[:outdoor_weight]})")
diff --git a/hpxml-measures/HPXMLtoOpenStudio/measure.xml b/hpxml-measures/HPXMLtoOpenStudio/measure.xml
index 1c64e4a84..64740bd2f 100644
--- a/hpxml-measures/HPXMLtoOpenStudio/measure.xml
+++ b/hpxml-measures/HPXMLtoOpenStudio/measure.xml
@@ -3,8 +3,8 @@
3.1
hpxm_lto_openstudio
b1543b30-9465-45ff-ba04-1d1f85e763bc
- 53efd403-5c1e-4f5d-b000-ed28eb726d8f
- 2024-02-20T01:03:31Z
+ b928f262-09fb-4a7e-97e3-e2710a1ed202
+ 2024-02-23T15:43:54Z
D8922A73
HPXMLtoOpenStudio
HPXML to OpenStudio Translator
@@ -142,19 +142,19 @@
measure.rb
rb
script
- EFD8076F
+ 3913AEF2
airflow.rb
rb
resource
- 8D63CEED
+ 19AA9E9B
battery.rb
rb
resource
- 464DA35E
+ E8ED081B
constants.rb
@@ -166,7 +166,7 @@
constructions.rb
rb
resource
- AD88328B
+ D9C85C3D
data/Xing_okstate_0664D_13659_Table_A-3.csv
@@ -274,7 +274,7 @@
data/unavailable_periods.csv
csv
resource
- 24CC1590
+ 73BFECE2
energyplus.rb
@@ -292,31 +292,31 @@
geometry.rb
rb
resource
- 866708CF
+ 21C2553F
hotwater_appliances.rb
rb
resource
- 86B64E18
+ 525FB9DB
hpxml.rb
rb
resource
- 48D38B28
+ A6AA9F53
hpxml_defaults.rb
rb
resource
- 6232FAF8
+ C00A2695
hpxml_schema/HPXML.xsd
xsd
resource
- 572286DE
+ CAF0E2AF
hpxml_schema/README.md
@@ -328,7 +328,7 @@
hpxml_schematron/EPvalidator.xml
xml
resource
- E48E2E8F
+ B3C7FBCD
hpxml_schematron/iso-schematron.xsd
@@ -340,19 +340,19 @@
hvac.rb
rb
resource
- 57E1DCDA
+ BE071714
hvac_sizing.rb
rb
resource
- 7D95EA72
+ C8E9BF7D
lighting.rb
rb
resource
- 71625827
+ 720F24C6
location.rb
@@ -382,7 +382,7 @@
misc_loads.rb
rb
resource
- 7D800940
+ 8BDAA188
output.rb
@@ -520,7 +520,7 @@
schedules.rb
rb
resource
- 42581FB2
+ 0E227CE5
simcontrols.rb
@@ -556,7 +556,7 @@
waterheater.rb
rb
resource
- EFED6196
+ 2A86DD12
weather.rb
@@ -580,13 +580,13 @@
in.schedules.csv
csv
test
- 6244F711
+ 615A7F1F
test_airflow.rb
rb
test
- 2C8BEE99
+ AA475DBF
test_battery.rb
@@ -598,7 +598,7 @@
test_defaults.rb
rb
test
- 0C0D8F7B
+ 53041605
test_enclosure.rb
@@ -622,7 +622,7 @@
test_hvac.rb
rb
test
- B582B9C9
+ 5AD597FF
test_hvac_sizing.rb
@@ -634,7 +634,7 @@
test_lighting.rb
rb
test
- 5FDDE1AD
+ A15B8208
test_location.rb
@@ -658,7 +658,7 @@
test_schedules.rb
rb
test
- 92D61DDA
+ A34141EE
test_simcontrols.rb
diff --git a/hpxml-measures/HPXMLtoOpenStudio/resources/airflow.rb b/hpxml-measures/HPXMLtoOpenStudio/resources/airflow.rb
index 8233246df..6a697cd23 100644
--- a/hpxml-measures/HPXMLtoOpenStudio/resources/airflow.rb
+++ b/hpxml-measures/HPXMLtoOpenStudio/resources/airflow.rb
@@ -103,7 +103,7 @@ def self.apply(model, runner, weather, spaces, hpxml_header, hpxml_bldg, cfa, nb
vented_attic = hpxml_bldg.attics.find { |attic| attic.attic_type == HPXML::AtticTypeVented }
vented_crawl = hpxml_bldg.foundations.find { |foundation| foundation.foundation_type == HPXML::FoundationTypeCrawlspaceVented }
- _sla, conditioned_ach50, nach, infil_volume, infil_height, a_ext = get_values_from_air_infiltration_measurements(hpxml_bldg, cfa, weather)
+ _, conditioned_ach50, nach, infil_volume, infil_height, a_ext = get_values_from_air_infiltration_measurements(hpxml_bldg, cfa, weather)
if @apply_ashrae140_assumptions
conditioned_const_ach = nach
conditioned_ach50 = nil
@@ -177,10 +177,10 @@ def self.get_infiltration_measurement_of_interest(infil_measurements)
def self.get_values_from_air_infiltration_measurements(hpxml_bldg, cfa, weather)
measurement = get_infiltration_measurement_of_interest(hpxml_bldg.air_infiltration_measurements)
- volume = measurement.infiltration_volume
- height = measurement.infiltration_height
- if height.nil?
- height = hpxml_bldg.inferred_infiltration_height(volume)
+ infil_volume = measurement.infiltration_volume
+ infil_height = measurement.infiltration_height
+ if infil_height.nil?
+ infil_height = hpxml_bldg.inferred_infiltration_height(infil_volume)
end
sla, ach50, nach = nil
@@ -188,23 +188,24 @@ def self.get_values_from_air_infiltration_measurements(hpxml_bldg, cfa, weather)
if measurement.unit_of_measure == HPXML::UnitsACH
ach50 = calc_air_leakage_at_diff_pressure(InfilPressureExponent, measurement.air_leakage, measurement.house_pressure, 50.0)
elsif measurement.unit_of_measure == HPXML::UnitsCFM
- achXX = measurement.air_leakage * 60.0 / volume # Convert CFM to ACH
+ achXX = measurement.air_leakage * 60.0 / infil_volume # Convert CFM to ACH
ach50 = calc_air_leakage_at_diff_pressure(InfilPressureExponent, achXX, measurement.house_pressure, 50.0)
end
- sla = get_infiltration_SLA_from_ACH50(ach50, InfilPressureExponent, cfa, volume)
- nach = get_infiltration_ACH_from_SLA(sla, height, weather)
+ sla = get_infiltration_SLA_from_ACH50(ach50, InfilPressureExponent, cfa, infil_volume)
+ nach = get_infiltration_ACH_from_SLA(sla, infil_height, weather)
elsif [HPXML::UnitsACHNatural, HPXML::UnitsCFMNatural].include? measurement.unit_of_measure
if measurement.unit_of_measure == HPXML::UnitsACHNatural
nach = measurement.air_leakage
elsif measurement.unit_of_measure == HPXML::UnitsCFMNatural
- nach = measurement.air_leakage * 60.0 / volume # Convert CFM to ACH
+ nach = measurement.air_leakage * 60.0 / infil_volume # Convert CFM to ACH
end
- sla = get_infiltration_SLA_from_ACH(nach, height, weather)
- ach50 = get_infiltration_ACH50_from_SLA(sla, InfilPressureExponent, cfa, volume)
+ avg_ceiling_height = hpxml_bldg.building_construction.average_ceiling_height
+ sla = get_infiltration_SLA_from_ACH(nach, infil_height, avg_ceiling_height, weather)
+ ach50 = get_infiltration_ACH50_from_SLA(sla, InfilPressureExponent, cfa, infil_volume)
elsif !measurement.effective_leakage_area.nil?
sla = UnitConversions.convert(measurement.effective_leakage_area, 'in^2', 'ft^2') / cfa
- ach50 = get_infiltration_ACH50_from_SLA(sla, InfilPressureExponent, cfa, volume)
- nach = get_infiltration_ACH_from_SLA(sla, height, weather)
+ ach50 = get_infiltration_ACH50_from_SLA(sla, InfilPressureExponent, cfa, infil_volume)
+ nach = get_infiltration_ACH_from_SLA(sla, infil_height, weather)
else
fail 'Unexpected error.'
end
@@ -214,14 +215,14 @@ def self.get_values_from_air_infiltration_measurements(hpxml_bldg, cfa, weather)
end
a_ext = 1.0 if a_ext.nil?
- return sla, ach50, nach, volume, height, a_ext
+ return sla, ach50, nach, infil_volume, infil_height, a_ext
end
def self.get_default_mech_vent_flow_rate(hpxml_bldg, vent_fan, weather, cfa, nbeds)
# Calculates Qfan cfm requirement per ASHRAE 62.2-2019
- sla, _ach50, _nach, _volume, height, a_ext = get_values_from_air_infiltration_measurements(hpxml_bldg, cfa, weather)
+ sla, _, _, _, infil_height, a_ext = get_values_from_air_infiltration_measurements(hpxml_bldg, cfa, weather)
- nl = get_infiltration_NL_from_SLA(sla, height)
+ nl = get_infiltration_NL_from_SLA(sla, infil_height)
q_inf = get_infiltration_Qinf_from_NL(nl, weather, cfa)
q_tot = get_mech_vent_qtot_cfm(nbeds, cfa)
@@ -334,7 +335,7 @@ def self.apply_natural_ventilation_and_whole_house_fan(model, site, vent_fans_wh
vent_fans_whf.each_with_index do |vent_whf, index|
whf_num_days_per_week = 7 # FUTURE: Expose via HPXML?
obj_name = "#{Constants.ObjectNameWholeHouseFan} #{index}"
- whf_unavailable_periods = Schedule.get_unavailable_periods(@runner, SchedulesFile::ColumnWholeHouseFan, unavailable_periods)
+ whf_unavailable_periods = Schedule.get_unavailable_periods(@runner, SchedulesFile::Columns[:WholeHouseFan].name, unavailable_periods)
whf_avail_sch = create_nv_and_whf_avail_sch(model, obj_name, whf_num_days_per_week, whf_unavailable_periods)
whf_avail_sensor = OpenStudio::Model::EnergyManagementSystemSensor.new(model, 'Schedule Value')
@@ -1250,7 +1251,7 @@ def self.apply_infiltration_to_vented_attic(model, weather, site, vented_attic)
if @apply_ashrae140_assumptions
vented_attic_const_ach = vented_attic.vented_attic_ach
else
- vented_attic_sla = get_infiltration_SLA_from_ACH(vented_attic.vented_attic_ach, 8.202, weather)
+ vented_attic_sla = get_infiltration_SLA_from_ACH(vented_attic.vented_attic_ach, 8.202, 8.202, weather)
end
end
@@ -1315,7 +1316,7 @@ def self.apply_dryer_exhaust(model, vented_dryer, schedules_file, index, unavail
# Create schedule
obj_sch = nil
if not schedules_file.nil?
- obj_sch_name = SchedulesFile::ColumnClothesDryer
+ obj_sch_name = SchedulesFile::Columns[:ClothesDryer].name
obj_sch = schedules_file.create_schedule_file(model, col_name: obj_sch_name)
full_load_hrs = schedules_file.annual_equivalent_full_load_hrs(col_name: obj_sch_name)
end
@@ -1600,7 +1601,7 @@ def self.apply_infiltration_adjustment_to_conditioned(model, infil_program, vent
infil_program.addLine('Set Qrange = 0')
vent_fans_kitchen.each_with_index do |vent_kitchen, index|
# Electricity impact
- vent_kitchen_unavailable_periods = Schedule.get_unavailable_periods(@runner, SchedulesFile::ColumnKitchenFan, unavailable_periods)
+ vent_kitchen_unavailable_periods = Schedule.get_unavailable_periods(@runner, SchedulesFile::Columns[:KitchenFan].name, unavailable_periods)
obj_sch_sensor = apply_local_ventilation(model, vent_kitchen, Constants.ObjectNameMechanicalVentilationRangeFan, index, vent_kitchen_unavailable_periods)
next unless @cooking_range_in_cond_space
@@ -1611,7 +1612,7 @@ def self.apply_infiltration_adjustment_to_conditioned(model, infil_program, vent
infil_program.addLine('Set Qbath = 0')
vent_fans_bath.each_with_index do |vent_bath, index|
# Electricity impact
- vent_bath_unavailable_periods = Schedule.get_unavailable_periods(@runner, SchedulesFile::ColumnBathFan, unavailable_periods)
+ vent_bath_unavailable_periods = Schedule.get_unavailable_periods(@runner, SchedulesFile::Columns[:BathFan].name, unavailable_periods)
obj_sch_sensor = apply_local_ventilation(model, vent_bath, Constants.ObjectNameMechanicalVentilationBathFan, index, vent_bath_unavailable_periods)
# Infiltration impact
infil_program.addLine("Set Qbath = Qbath + #{UnitConversions.convert(vent_bath.flow_rate * vent_bath.count, 'cfm', 'm^3/s').round(5)} * #{obj_sch_sensor.name}")
@@ -1622,7 +1623,7 @@ def self.apply_infiltration_adjustment_to_conditioned(model, infil_program, vent
next unless @clothes_dryer_in_cond_space
# Infiltration impact
- vented_dryer_unavailable_periods = Schedule.get_unavailable_periods(@runner, SchedulesFile::ColumnClothesDryer, unavailable_periods)
+ vented_dryer_unavailable_periods = Schedule.get_unavailable_periods(@runner, SchedulesFile::Columns[:ClothesDryer].name, unavailable_periods)
obj_sch_sensor, cfm_mult = apply_dryer_exhaust(model, vented_dryer, schedules_file, index, vented_dryer_unavailable_periods)
infil_program.addLine("Set Qdryer = Qdryer + #{UnitConversions.convert(vented_dryer.vented_flow_rate * cfm_mult, 'cfm', 'm^3/s').round(5)} * #{obj_sch_sensor.name}")
end
@@ -1788,7 +1789,7 @@ def self.apply_infiltration_ventilation_to_conditioned(model, site, vent_fans_me
vent_mech_erv_hrv_tot = vent_fans_mech.select { |vent_mech| [HPXML::MechVentTypeERV, HPXML::MechVentTypeHRV].include? vent_mech.fan_type }
# Non-CFIS fan power
- house_fan_unavailable_periods = Schedule.get_unavailable_periods(@runner, SchedulesFile::ColumnHouseFan, unavailable_periods)
+ house_fan_unavailable_periods = Schedule.get_unavailable_periods(@runner, SchedulesFile::Columns[:HouseFan].name, unavailable_periods)
add_ee_for_vent_fan_power(model, Constants.ObjectNameMechanicalVentilationHouseFan,
vent_mech_sup_tot, vent_mech_exh_tot, vent_mech_bal_tot, vent_mech_erv_hrv_tot, house_fan_unavailable_periods)
@@ -2009,9 +2010,9 @@ def self.get_infiltration_ACH_from_SLA(sla, infil_height, weather)
return norm_leakage * weather.data.WSF
end
- def self.get_infiltration_SLA_from_ACH(ach, infil_height, weather)
+ def self.get_infiltration_SLA_from_ACH(ach, infil_height, avg_ceiling_height, weather)
# Returns the infiltration SLA given an annual average ACH.
- return ach / (weather.data.WSF * 1000 * (infil_height / 8.202)**0.4)
+ return ach * (avg_ceiling_height / 8.202) / (weather.data.WSF * 1000 * (infil_height / 8.202)**0.4)
end
def self.get_infiltration_SLA_from_ACH50(ach50, n_i, floor_area, volume)
diff --git a/hpxml-measures/HPXMLtoOpenStudio/resources/battery.rb b/hpxml-measures/HPXMLtoOpenStudio/resources/battery.rb
index c981dbe22..1cd154cd7 100644
--- a/hpxml-measures/HPXMLtoOpenStudio/resources/battery.rb
+++ b/hpxml-measures/HPXMLtoOpenStudio/resources/battery.rb
@@ -5,8 +5,8 @@ def self.apply(runner, model, nbeds, pv_systems, battery, schedules_file, unit_m
charging_schedule = nil
discharging_schedule = nil
if not schedules_file.nil?
- charging_schedule = schedules_file.create_schedule_file(model, col_name: SchedulesFile::ColumnBatteryCharging)
- discharging_schedule = schedules_file.create_schedule_file(model, col_name: SchedulesFile::ColumnBatteryDischarging)
+ charging_schedule = schedules_file.create_schedule_file(model, col_name: SchedulesFile::Columns[:BatteryCharging].name)
+ discharging_schedule = schedules_file.create_schedule_file(model, col_name: SchedulesFile::Columns[:BatteryDischarging].name)
end
if pv_systems.empty? && charging_schedule.nil? && discharging_schedule.nil?
diff --git a/hpxml-measures/HPXMLtoOpenStudio/resources/constructions.rb b/hpxml-measures/HPXMLtoOpenStudio/resources/constructions.rb
index 9bf45ea11..8b79387d8 100644
--- a/hpxml-measures/HPXMLtoOpenStudio/resources/constructions.rb
+++ b/hpxml-measures/HPXMLtoOpenStudio/resources/constructions.rb
@@ -1699,14 +1699,14 @@ def self.apply_kiva_initial_temp(foundation, slab, weather, conditioned_zone,
htg_day_sch = htg_setpoint_sch.to_ScheduleRuleset.get.getDaySchedules(sim_begin_date, sim_begin_date)[0]
heat_setpoint = UnitConversions.convert(htg_day_sch.values[0], 'C', 'F')
else
- heat_setpoint = schedules_file.schedules[SchedulesFile::ColumnHeatingSetpoint][sim_begin_hour]
+ heat_setpoint = schedules_file.schedules[SchedulesFile::Columns[:HeatingSetpoint].name][sim_begin_hour]
end
clg_setpoint_sch = setpoint_sch.coolingSetpointTemperatureSchedule.get
if clg_setpoint_sch.to_ScheduleRuleset.is_initialized
clg_day_sch = clg_setpoint_sch.to_ScheduleRuleset.get.getDaySchedules(sim_begin_date, sim_begin_date)[0]
cool_setpoint = UnitConversions.convert(clg_day_sch.values[0], 'C', 'F')
else
- cool_setpoint = schedules_file.schedules[SchedulesFile::ColumnCoolingSetpoint][sim_begin_hour]
+ cool_setpoint = schedules_file.schedules[SchedulesFile::Columns[:CoolingSetpoint].name][sim_begin_hour]
end
# Methodology adapted from https://github.com/NREL/EnergyPlus/blob/b18a2733c3131db808feac44bc278a14b05d8e1f/src/EnergyPlus/HeatBalanceKivaManager.cc#L303-L313
diff --git a/hpxml-measures/HPXMLtoOpenStudio/resources/data/unavailable_periods.csv b/hpxml-measures/HPXMLtoOpenStudio/resources/data/unavailable_periods.csv
index 4175dcb70..c8ba7e242 100644
--- a/hpxml-measures/HPXMLtoOpenStudio/resources/data/unavailable_periods.csv
+++ b/hpxml-measures/HPXMLtoOpenStudio/resources/data/unavailable_periods.csv
@@ -24,7 +24,8 @@ pool_heater,0,1
permanent_spa_pump,0,1
permanent_spa_heater,0,1
hot_water_fixtures,1,1
-general_water_use,1,1
+hot_water_recirculation_pump,1,1
+general_water_use,1,0
hvac,0,1
water_heater,0,1
dehumidifier,0,1
diff --git a/hpxml-measures/HPXMLtoOpenStudio/resources/geometry.rb b/hpxml-measures/HPXMLtoOpenStudio/resources/geometry.rb
index b9305efb4..ad2e57a79 100644
--- a/hpxml-measures/HPXMLtoOpenStudio/resources/geometry.rb
+++ b/hpxml-measures/HPXMLtoOpenStudio/resources/geometry.rb
@@ -528,7 +528,7 @@ def self.apply_occupants(model, runner, hpxml_bldg, num_occ, space, schedules_fi
# Create schedule
people_sch = nil
- people_col_name = SchedulesFile::ColumnOccupants
+ people_col_name = SchedulesFile::Columns[:Occupants].name
if not schedules_file.nil?
people_sch = schedules_file.create_schedule_file(model, col_name: people_col_name)
end
diff --git a/hpxml-measures/HPXMLtoOpenStudio/resources/hotwater_appliances.rb b/hpxml-measures/HPXMLtoOpenStudio/resources/hotwater_appliances.rb
index 8225f8c31..c7069a67a 100644
--- a/hpxml-measures/HPXMLtoOpenStudio/resources/hotwater_appliances.rb
+++ b/hpxml-measures/HPXMLtoOpenStudio/resources/hotwater_appliances.rb
@@ -48,7 +48,7 @@ def self.apply(model, runner, hpxml_header, hpxml_bldg, weather, spaces, hot_wat
# Create schedule
cw_power_schedule = nil
- cw_col_name = SchedulesFile::ColumnClothesWasher
+ cw_col_name = SchedulesFile::Columns[:ClothesWasher].name
cw_object_name = Constants.ObjectNameClothesWasher
if not schedules_file.nil?
cw_design_level_w = schedules_file.calc_design_level_from_daily_kwh(col_name: cw_col_name, daily_kwh: cw_annual_kwh / 365.0)
@@ -79,7 +79,7 @@ def self.apply(model, runner, hpxml_header, hpxml_bldg, weather, spaces, hot_wat
# Create schedule
cd_schedule = nil
- cd_col_name = SchedulesFile::ColumnClothesDryer
+ cd_col_name = SchedulesFile::Columns[:ClothesDryer].name
cd_obj_name = Constants.ObjectNameClothesDryer
if not schedules_file.nil?
cd_design_level_e = schedules_file.calc_design_level_from_annual_kwh(col_name: cd_col_name, annual_kwh: cd_annual_kwh)
@@ -113,7 +113,7 @@ def self.apply(model, runner, hpxml_header, hpxml_bldg, weather, spaces, hot_wat
# Create schedule
dw_power_schedule = nil
- dw_col_name = SchedulesFile::ColumnDishwasher
+ dw_col_name = SchedulesFile::Columns[:Dishwasher].name
dw_obj_name = Constants.ObjectNameDishwasher
if not schedules_file.nil?
dw_design_level_w = schedules_file.calc_design_level_from_daily_kwh(col_name: dw_col_name, daily_kwh: dw_annual_kwh / 365.0)
@@ -144,7 +144,7 @@ def self.apply(model, runner, hpxml_header, hpxml_bldg, weather, spaces, hot_wat
# Create schedule
fridge_schedule = nil
- fridge_col_name = refrigerator.primary_indicator ? SchedulesFile::ColumnRefrigerator : SchedulesFile::ColumnExtraRefrigerator
+ fridge_col_name = refrigerator.primary_indicator ? SchedulesFile::Columns[:Refrigerator].name : SchedulesFile::Columns[:ExtraRefrigerator].name
fridge_obj_name = Constants.ObjectNameRefrigerator
if not schedules_file.nil?
fridge_design_level = schedules_file.calc_design_level_from_annual_kwh(col_name: fridge_col_name, annual_kwh: rf_annual_kwh)
@@ -186,7 +186,7 @@ def self.apply(model, runner, hpxml_header, hpxml_bldg, weather, spaces, hot_wat
# Create schedule
freezer_schedule = nil
- freezer_col_name = SchedulesFile::ColumnFreezer
+ freezer_col_name = SchedulesFile::Columns[:Freezer].name
freezer_obj_name = Constants.ObjectNameFreezer
if not schedules_file.nil?
freezer_design_level = schedules_file.calc_design_level_from_annual_kwh(col_name: freezer_col_name, annual_kwh: fz_annual_kwh)
@@ -228,7 +228,7 @@ def self.apply(model, runner, hpxml_header, hpxml_bldg, weather, spaces, hot_wat
# Create schedule
cook_schedule = nil
- cook_col_name = SchedulesFile::ColumnCookingRange
+ cook_col_name = SchedulesFile::Columns[:CookingRange].name
cook_obj_name = Constants.ObjectNameCookingRange
if not schedules_file.nil?
cook_design_level_e = schedules_file.calc_design_level_from_annual_kwh(col_name: cook_col_name, annual_kwh: cook_annual_kwh)
@@ -310,7 +310,7 @@ def self.apply(model, runner, hpxml_header, hpxml_bldg, weather, spaces, hot_wat
# Create schedule
fixtures_schedule = nil
- fixtures_col_name = SchedulesFile::ColumnHotWaterFixtures
+ fixtures_col_name = SchedulesFile::Columns[:HotWaterFixtures].name
fixtures_obj_name = Constants.ObjectNameFixtures
if not schedules_file.nil?
fixtures_schedule = schedules_file.create_schedule_file(model, col_name: fixtures_col_name, schedule_type_limits_name: Constants.ScheduleTypeLimitsFraction)
@@ -340,8 +340,8 @@ def self.apply(model, runner, hpxml_header, hpxml_bldg, weather, spaces, hot_wat
fx_peak_flow = nil
if not schedules_file.nil?
- fx_peak_flow = schedules_file.calc_peak_flow_from_daily_gpm(col_name: SchedulesFile::ColumnHotWaterFixtures, daily_water: fx_gpd)
- dist_water_peak_flow = schedules_file.calc_peak_flow_from_daily_gpm(col_name: SchedulesFile::ColumnHotWaterFixtures, daily_water: w_gpd)
+ fx_peak_flow = schedules_file.calc_peak_flow_from_daily_gpm(col_name: SchedulesFile::Columns[:HotWaterFixtures].name, daily_water: fx_gpd)
+ dist_water_peak_flow = schedules_file.calc_peak_flow_from_daily_gpm(col_name: SchedulesFile::Columns[:HotWaterFixtures].name, daily_water: w_gpd)
end
if fx_peak_flow.nil?
fx_peak_flow = fixtures_schedule_obj.calc_design_level_from_daily_gpm(fx_gpd)
@@ -361,7 +361,7 @@ def self.apply(model, runner, hpxml_header, hpxml_bldg, weather, spaces, hot_wat
# Create schedule
recirc_pump_sch = nil
- recirc_pump_col_name = SchedulesFile::ColumnHotWaterRecirculationPump
+ recirc_pump_col_name = SchedulesFile::Columns[:HotWaterRecirculationPump].name
recirc_pump_obj_name = Constants.ObjectNameHotWaterRecircPump
if not schedules_file.nil?
recirc_pump_design_level = schedules_file.calc_design_level_from_daily_kwh(col_name: recirc_pump_col_name, daily_kwh: recirc_pump_annual_kwh / 365.0)
@@ -402,8 +402,8 @@ def self.apply(model, runner, hpxml_header, hpxml_bldg, weather, spaces, hot_wat
# Create schedule
water_cw_schedule = nil
if not schedules_file.nil?
- cw_peak_flow = schedules_file.calc_peak_flow_from_daily_gpm(col_name: SchedulesFile::ColumnHotWaterClothesWasher, daily_water: cw_gpd)
- water_cw_schedule = schedules_file.create_schedule_file(model, col_name: SchedulesFile::ColumnHotWaterClothesWasher, schedule_type_limits_name: Constants.ScheduleTypeLimitsFraction)
+ cw_peak_flow = schedules_file.calc_peak_flow_from_daily_gpm(col_name: SchedulesFile::Columns[:HotWaterClothesWasher].name, daily_water: cw_gpd)
+ water_cw_schedule = schedules_file.create_schedule_file(model, col_name: SchedulesFile::Columns[:HotWaterClothesWasher].name, schedule_type_limits_name: Constants.ScheduleTypeLimitsFraction)
end
if water_cw_schedule.nil?
cw_peak_flow = cw_schedule_obj.calc_design_level_from_daily_gpm(cw_gpd)
@@ -429,8 +429,8 @@ def self.apply(model, runner, hpxml_header, hpxml_bldg, weather, spaces, hot_wat
# Create schedule
water_dw_schedule = nil
if not schedules_file.nil?
- dw_peak_flow = schedules_file.calc_peak_flow_from_daily_gpm(col_name: SchedulesFile::ColumnHotWaterDishwasher, daily_water: dw_gpd)
- water_dw_schedule = schedules_file.create_schedule_file(model, col_name: SchedulesFile::ColumnHotWaterDishwasher, schedule_type_limits_name: Constants.ScheduleTypeLimitsFraction)
+ dw_peak_flow = schedules_file.calc_peak_flow_from_daily_gpm(col_name: SchedulesFile::Columns[:HotWaterDishwasher].name, daily_water: dw_gpd)
+ water_dw_schedule = schedules_file.create_schedule_file(model, col_name: SchedulesFile::Columns[:HotWaterDishwasher].name, schedule_type_limits_name: Constants.ScheduleTypeLimitsFraction)
end
if water_dw_schedule.nil?
dw_peak_flow = dw_schedule_obj.calc_design_level_from_daily_gpm(dw_gpd)
@@ -446,11 +446,11 @@ def self.apply(model, runner, hpxml_header, hpxml_bldg, weather, spaces, hot_wat
# Create schedule
water_schedule = nil
- water_col_name = SchedulesFile::ColumnGeneralWaterUse
+ water_col_name = SchedulesFile::Columns[:GeneralWaterUse].name
water_obj_name = Constants.ObjectNameGeneralWaterUse
if not schedules_file.nil?
- water_design_level_sens = schedules_file.calc_design_level_from_daily_kwh(col_name: SchedulesFile::ColumnGeneralWaterUse, daily_kwh: UnitConversions.convert(water_sens_btu, 'Btu', 'kWh') / 365.0)
- water_design_level_lat = schedules_file.calc_design_level_from_daily_kwh(col_name: SchedulesFile::ColumnGeneralWaterUse, daily_kwh: UnitConversions.convert(water_lat_btu, 'Btu', 'kWh') / 365.0)
+ water_design_level_sens = schedules_file.calc_design_level_from_daily_kwh(col_name: SchedulesFile::Columns[:GeneralWaterUse].name, daily_kwh: UnitConversions.convert(water_sens_btu, 'Btu', 'kWh') / 365.0)
+ water_design_level_lat = schedules_file.calc_design_level_from_daily_kwh(col_name: SchedulesFile::Columns[:GeneralWaterUse].name, daily_kwh: UnitConversions.convert(water_lat_btu, 'Btu', 'kWh') / 365.0)
water_schedule = schedules_file.create_schedule_file(model, col_name: water_col_name, schedule_type_limits_name: Constants.ScheduleTypeLimitsFraction)
end
if water_schedule.nil?
diff --git a/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml.rb b/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml.rb
index da43f5e12..d335e8b66 100644
--- a/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml.rb
+++ b/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml.rb
@@ -7025,7 +7025,7 @@ def from_doc(building)
end
class CeilingFan < BaseElement
- ATTRS = [:id, :efficiency, :count, :weekday_fractions, :weekend_fractions, :monthly_multipliers]
+ ATTRS = [:id, :efficiency, :label_energy_use, :count, :weekday_fractions, :weekend_fractions, :monthly_multipliers]
attr_accessor(*ATTRS)
def delete
@@ -7050,6 +7050,7 @@ def to_doc(building)
XMLHelper.add_element(airflow, 'Efficiency', @efficiency, :float, @efficiency_isdefaulted)
end
XMLHelper.add_element(ceiling_fan, 'Count', @count, :integer, @count_isdefaulted) unless @count.nil?
+ XMLHelper.add_element(ceiling_fan, 'LabelEnergyUse', @label_energy_use, :float, @label_energy_use_isdefaulted) unless @label_energy_use.nil?
XMLHelper.add_extension(ceiling_fan, 'WeekdayScheduleFractions', @weekday_fractions, :string, @weekday_fractions_isdefaulted) unless @weekday_fractions.nil?
XMLHelper.add_extension(ceiling_fan, 'WeekendScheduleFractions', @weekend_fractions, :string, @weekend_fractions_isdefaulted) unless @weekend_fractions.nil?
XMLHelper.add_extension(ceiling_fan, 'MonthlyScheduleMultipliers', @monthly_multipliers, :string, @monthly_multipliers_isdefaulted) unless @monthly_multipliers.nil?
@@ -7058,6 +7059,7 @@ def to_doc(building)
def from_doc(ceiling_fan)
@id = HPXML::get_id(ceiling_fan)
@efficiency = XMLHelper.get_value(ceiling_fan, "Airflow[FanSpeed='medium']/Efficiency", :float)
+ @label_energy_use = XMLHelper.get_value(ceiling_fan, 'LabelEnergyUse', :float)
@count = XMLHelper.get_value(ceiling_fan, 'Count', :integer)
@weekday_fractions = XMLHelper.get_value(ceiling_fan, 'extension/WeekdayScheduleFractions', :string)
@weekend_fractions = XMLHelper.get_value(ceiling_fan, 'extension/WeekendScheduleFractions', :string)
diff --git a/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_defaults.rb b/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_defaults.rb
index 6e47eeaa2..74ea4aee8 100644
--- a/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_defaults.rb
+++ b/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_defaults.rb
@@ -13,7 +13,6 @@ def self.apply(runner, hpxml, hpxml_bldg, eri_version, weather, epw_file: nil, s
ncfl_ag = hpxml_bldg.building_construction.number_of_conditioned_floors_above_grade
has_uncond_bsmnt = hpxml_bldg.has_location(HPXML::LocationBasementUnconditioned)
has_cond_bsmnt = hpxml_bldg.has_location(HPXML::LocationBasementConditioned)
- infil_measurement = Airflow.get_infiltration_measurement_of_interest(hpxml_bldg.air_infiltration_measurements)
# Check for presence of fuels once
has_fuel = hpxml_bldg.has_fuels(Constants.FossilFuels, hpxml.to_doc)
@@ -27,9 +26,9 @@ def self.apply(runner, hpxml, hpxml_bldg, eri_version, weather, epw_file: nil, s
apply_site(hpxml_bldg)
apply_neighbor_buildings(hpxml_bldg)
apply_building_occupancy(hpxml_bldg, schedules_file)
- apply_building_construction(hpxml_bldg, cfa, nbeds, infil_measurement)
+ apply_building_construction(hpxml_bldg, cfa, nbeds)
apply_climate_and_risk_zones(hpxml_bldg, epw_file)
- apply_infiltration(hpxml_bldg, infil_measurement)
+ apply_infiltration(hpxml_bldg)
apply_attics(hpxml_bldg)
apply_foundations(hpxml_bldg)
apply_roofs(hpxml_bldg)
@@ -597,7 +596,7 @@ def self.apply_building_occupancy(hpxml_bldg, schedules_file)
# ANSI 301 or Building America equations, which are based on number of bedrooms.
hpxml_bldg.building_construction.additional_properties.adjusted_number_of_bedrooms = get_nbeds_adjusted_for_operational_calculation(hpxml_bldg)
end
- schedules_file_includes_occupants = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::ColumnOccupants))
+ schedules_file_includes_occupants = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::Columns[:Occupants].name))
if hpxml_bldg.building_occupancy.weekday_fractions.nil? && !schedules_file_includes_occupants
hpxml_bldg.building_occupancy.weekday_fractions = Schedule.OccupantsWeekdayFractions
hpxml_bldg.building_occupancy.weekday_fractions_isdefaulted = true
@@ -614,7 +613,7 @@ def self.apply_building_occupancy(hpxml_bldg, schedules_file)
hpxml_bldg.building_occupancy.general_water_use_usage_multiplier = 1.0
hpxml_bldg.building_occupancy.general_water_use_usage_multiplier_isdefaulted = true
end
- schedules_file_includes_water = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::ColumnGeneralWaterUse))
+ schedules_file_includes_water = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::Columns[:GeneralWaterUse].name))
if hpxml_bldg.building_occupancy.general_water_use_weekday_fractions.nil? && !schedules_file_includes_water
hpxml_bldg.building_occupancy.general_water_use_weekday_fractions = Schedule.GeneralWaterUseWeekdayFractions
hpxml_bldg.building_occupancy.general_water_use_weekday_fractions_isdefaulted = true
@@ -629,22 +628,18 @@ def self.apply_building_occupancy(hpxml_bldg, schedules_file)
end
end
- def self.apply_building_construction(hpxml_bldg, cfa, nbeds, infil_measurement)
+ def self.apply_building_construction(hpxml_bldg, cfa, nbeds)
cond_crawl_volume = hpxml_bldg.inferred_conditioned_crawlspace_volume()
if hpxml_bldg.building_construction.conditioned_building_volume.nil? && hpxml_bldg.building_construction.average_ceiling_height.nil?
- if not infil_measurement.infiltration_volume.nil?
- hpxml_bldg.building_construction.average_ceiling_height = [infil_measurement.infiltration_volume / cfa, 8.0].min
- else
- hpxml_bldg.building_construction.average_ceiling_height = 8.0
- end
+ hpxml_bldg.building_construction.average_ceiling_height = 8.0
hpxml_bldg.building_construction.average_ceiling_height_isdefaulted = true
- hpxml_bldg.building_construction.conditioned_building_volume = cfa * hpxml_bldg.building_construction.average_ceiling_height + cond_crawl_volume
+ hpxml_bldg.building_construction.conditioned_building_volume = (cfa * hpxml_bldg.building_construction.average_ceiling_height + cond_crawl_volume).round
hpxml_bldg.building_construction.conditioned_building_volume_isdefaulted = true
elsif hpxml_bldg.building_construction.conditioned_building_volume.nil?
- hpxml_bldg.building_construction.conditioned_building_volume = cfa * hpxml_bldg.building_construction.average_ceiling_height + cond_crawl_volume
+ hpxml_bldg.building_construction.conditioned_building_volume = (cfa * hpxml_bldg.building_construction.average_ceiling_height + cond_crawl_volume).round
hpxml_bldg.building_construction.conditioned_building_volume_isdefaulted = true
elsif hpxml_bldg.building_construction.average_ceiling_height.nil?
- hpxml_bldg.building_construction.average_ceiling_height = (hpxml_bldg.building_construction.conditioned_building_volume - cond_crawl_volume) / cfa
+ hpxml_bldg.building_construction.average_ceiling_height = ((hpxml_bldg.building_construction.conditioned_building_volume - cond_crawl_volume) / cfa).round(2)
hpxml_bldg.building_construction.average_ceiling_height_isdefaulted = true
end
if hpxml_bldg.building_construction.number_of_bathrooms.nil?
@@ -669,7 +664,8 @@ def self.apply_climate_and_risk_zones(hpxml_bldg, epw_file)
end
end
- def self.apply_infiltration(hpxml_bldg, infil_measurement)
+ def self.apply_infiltration(hpxml_bldg)
+ infil_measurement = Airflow.get_infiltration_measurement_of_interest(hpxml_bldg.air_infiltration_measurements)
if infil_measurement.infiltration_volume.nil?
infil_measurement.infiltration_volume = hpxml_bldg.building_construction.conditioned_building_volume
infil_measurement.infiltration_volume_isdefaulted = true
@@ -1340,14 +1336,15 @@ def self.apply_hvac(runner, hpxml, hpxml_bldg, weather, convert_shared_systems)
heating_system.electric_resistance_distribution_isdefaulted = true
end
- # Default in-unit boiler EAE
+ # Default boiler EAE
hpxml_bldg.heating_systems.each do |heating_system|
next unless heating_system.electric_auxiliary_energy.nil?
- next unless heating_system.heating_system_type == HPXML::HVACTypeBoiler
- next if heating_system.is_shared_system
heating_system.electric_auxiliary_energy_isdefaulted = true
- heating_system.electric_auxiliary_energy = HVAC.get_default_in_unit_boiler_eae(heating_system.heating_system_fuel)
+ heating_system.electric_auxiliary_energy = HVAC.get_default_boiler_eae(heating_system)
+ heating_system.shared_loop_watts = nil
+ heating_system.shared_loop_motor_efficiency = nil
+ heating_system.fan_coil_watts = nil
end
# Default AC/HP sensible heat ratio
@@ -1761,7 +1758,7 @@ def self.apply_detailed_performance_data_for_var_speed_systems(hpxml_bldg)
def self.apply_hvac_control(hpxml_bldg, schedules_file, eri_version)
hpxml_bldg.hvac_controls.each do |hvac_control|
- schedules_file_includes_heating_setpoint_temp = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::ColumnHeatingSetpoint))
+ schedules_file_includes_heating_setpoint_temp = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::Columns[:HeatingSetpoint].name))
if hvac_control.heating_setpoint_temp.nil? && hvac_control.weekday_heating_setpoints.nil? && !schedules_file_includes_heating_setpoint_temp
# No heating setpoints; set a default heating setpoint for, e.g., natural ventilation
htg_weekday_setpoints, htg_weekend_setpoints = HVAC.get_default_heating_setpoint(HPXML::HVACControlTypeManual, eri_version)
@@ -1773,7 +1770,7 @@ def self.apply_hvac_control(hpxml_bldg, schedules_file, eri_version)
hvac_control.heating_setpoint_temp_isdefaulted = true
end
- schedules_file_includes_cooling_setpoint_temp = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::ColumnCoolingSetpoint))
+ schedules_file_includes_cooling_setpoint_temp = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::Columns[:CoolingSetpoint].name))
if hvac_control.cooling_setpoint_temp.nil? && hvac_control.weekday_cooling_setpoints.nil? && !schedules_file_includes_cooling_setpoint_temp
# No cooling setpoints; set a default cooling setpoint for, e.g., natural ventilation
clg_weekday_setpoints, clg_weekend_setpoints = HVAC.get_default_cooling_setpoint(HPXML::HVACControlTypeManual, eri_version)
@@ -2093,7 +2090,7 @@ def self.apply_water_heaters(hpxml_bldg, nbeds, eri_version, schedules_file)
water_heating_system.is_shared_system = false
water_heating_system.is_shared_system_isdefaulted = true
end
- schedules_file_includes_water_heater_setpoint_temp = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::ColumnWaterHeaterSetpoint))
+ schedules_file_includes_water_heater_setpoint_temp = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::Columns[:WaterHeaterSetpoint].name))
if water_heating_system.temperature.nil? && !schedules_file_includes_water_heater_setpoint_temp
water_heating_system.temperature = Waterheater.get_default_hot_water_temperature(eri_version)
water_heating_system.temperature_isdefaulted = true
@@ -2132,7 +2129,7 @@ def self.apply_water_heaters(hpxml_bldg, nbeds, eri_version, schedules_file)
end
end
if (water_heating_system.water_heater_type == HPXML::WaterHeaterTypeHeatPump)
- schedules_file_includes_water_heater_operating_mode = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::ColumnWaterHeaterOperatingMode))
+ schedules_file_includes_water_heater_operating_mode = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::Columns[:WaterHeaterOperatingMode].name))
if water_heating_system.operating_mode.nil? && !schedules_file_includes_water_heater_operating_mode
water_heating_system.operating_mode = HPXML::WaterHeaterOperatingModeHybridAuto
water_heating_system.operating_mode_isdefaulted = true
@@ -2199,7 +2196,7 @@ def self.apply_hot_water_distribution(hpxml_bldg, cfa, ncfl, has_uncond_bsmnt, h
end
if hot_water_distribution.system_type == HPXML::DHWDistTypeRecirc || hot_water_distribution.has_shared_recirculation
- schedules_file_includes_recirculation_pump = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::ColumnHotWaterRecirculationPump))
+ schedules_file_includes_recirculation_pump = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::Columns[:HotWaterRecirculationPump].name))
recirc_control_type = hot_water_distribution.has_shared_recirculation ? hot_water_distribution.shared_recirculation_control_type : hot_water_distribution.recirculation_control_type
if [HPXML::DHWRecircControlTypeNone, HPXML::DHWRecircControlTypeTimer].include?(recirc_control_type)
if hot_water_distribution.recirculation_pump_weekday_fractions.nil? && !schedules_file_includes_recirculation_pump
@@ -2252,7 +2249,7 @@ def self.apply_water_fixtures(hpxml_bldg, schedules_file)
hpxml_bldg.water_heating.water_fixtures_usage_multiplier = 1.0
hpxml_bldg.water_heating.water_fixtures_usage_multiplier_isdefaulted = true
end
- schedules_file_includes_fixtures = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::ColumnHotWaterFixtures))
+ schedules_file_includes_fixtures = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::Columns[:HotWaterFixtures].name))
if hpxml_bldg.water_heating.water_fixtures_weekday_fractions.nil? && !schedules_file_includes_fixtures
hpxml_bldg.water_heating.water_fixtures_weekday_fractions = Schedule.FixturesWeekdayFractions
hpxml_bldg.water_heating.water_fixtures_weekday_fractions_isdefaulted = true
@@ -2426,7 +2423,7 @@ def self.apply_appliances(hpxml_bldg, nbeds, eri_version, schedules_file)
clothes_washer.usage_multiplier = 1.0
clothes_washer.usage_multiplier_isdefaulted = true
end
- schedules_file_includes_cw = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::ColumnClothesWasher))
+ schedules_file_includes_cw = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::Columns[:ClothesWasher].name))
if clothes_washer.weekday_fractions.nil? && !schedules_file_includes_cw
clothes_washer.weekday_fractions = Schedule.ClothesWasherWeekdayFractions
clothes_washer.weekday_fractions_isdefaulted = true
@@ -2474,7 +2471,7 @@ def self.apply_appliances(hpxml_bldg, nbeds, eri_version, schedules_file)
clothes_dryer.vented_flow_rate = 100.0
clothes_dryer.vented_flow_rate_isdefaulted = true
end
- schedules_file_includes_cd = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::ColumnClothesDryer))
+ schedules_file_includes_cd = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::Columns[:ClothesDryer].name))
if clothes_dryer.weekday_fractions.nil? && !schedules_file_includes_cd
clothes_dryer.weekday_fractions = Schedule.ClothesDryerWeekdayFractions
clothes_dryer.weekday_fractions_isdefaulted = true
@@ -2519,7 +2516,7 @@ def self.apply_appliances(hpxml_bldg, nbeds, eri_version, schedules_file)
dishwasher.usage_multiplier = 1.0
dishwasher.usage_multiplier_isdefaulted = true
end
- schedules_file_includes_dw = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::ColumnDishwasher))
+ schedules_file_includes_dw = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::Columns[:Dishwasher].name))
if dishwasher.weekday_fractions.nil? && !schedules_file_includes_dw
dishwasher.weekday_fractions = Schedule.DishwasherWeekdayFractions
dishwasher.weekday_fractions_isdefaulted = true
@@ -2551,7 +2548,7 @@ def self.apply_appliances(hpxml_bldg, nbeds, eri_version, schedules_file)
refrigerator.rated_annual_kwh = default_values[:rated_annual_kwh]
refrigerator.rated_annual_kwh_isdefaulted = true
end
- schedules_file_includes_extrafridge = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::ColumnExtraRefrigerator))
+ schedules_file_includes_extrafridge = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::Columns[:ExtraRefrigerator].name))
if !schedules_file_includes_extrafridge
if schedules_includes_fractions_multipliers
if refrigerator.weekday_fractions.nil?
@@ -2587,7 +2584,7 @@ def self.apply_appliances(hpxml_bldg, nbeds, eri_version, schedules_file)
refrigerator.rated_annual_kwh = default_values[:rated_annual_kwh]
refrigerator.rated_annual_kwh_isdefaulted = true
end
- schedules_file_includes_fridge = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::ColumnRefrigerator))
+ schedules_file_includes_fridge = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::Columns[:Refrigerator].name))
if !schedules_file_includes_fridge
if schedules_includes_fractions_multipliers
if refrigerator.weekday_fractions.nil?
@@ -2636,7 +2633,7 @@ def self.apply_appliances(hpxml_bldg, nbeds, eri_version, schedules_file)
freezer.usage_multiplier_isdefaulted = true
end
schedules_includes_schedule_coefficients = (!freezer.constant_coefficients.nil? || !freezer.temperature_coefficients.nil?)
- schedules_file_includes_freezer = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::ColumnFreezer))
+ schedules_file_includes_freezer = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::Columns[:Freezer].name))
next unless !schedules_includes_schedule_coefficients
if freezer.weekday_fractions.nil? && !schedules_file_includes_freezer
@@ -2669,7 +2666,7 @@ def self.apply_appliances(hpxml_bldg, nbeds, eri_version, schedules_file)
cooking_range.usage_multiplier = 1.0
cooking_range.usage_multiplier_isdefaulted = true
end
- schedules_file_includes_range = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::ColumnCookingRange))
+ schedules_file_includes_range = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::Columns[:CookingRange].name))
if cooking_range.weekday_fractions.nil? && !schedules_file_includes_range
cooking_range.weekday_fractions = Schedule.CookingRangeWeekdayFractions
cooking_range.weekday_fractions_isdefaulted = true
@@ -2711,7 +2708,7 @@ def self.apply_lighting(hpxml_bldg, schedules_file)
hpxml_bldg.lighting.exterior_usage_multiplier_isdefaulted = true
end
default_lighting_monthly_multipliers = Schedule.LightingMonthlyMultipliers
- schedules_file_includes_lighting_interior = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::ColumnLightingInterior))
+ schedules_file_includes_lighting_interior = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::Columns[:LightingInterior].name))
if hpxml_bldg.lighting.interior_weekday_fractions.nil? && !schedules_file_includes_lighting_interior
hpxml_bldg.lighting.interior_weekday_fractions = Schedule.LightingInteriorWeekdayFractions
hpxml_bldg.lighting.interior_weekday_fractions_isdefaulted = true
@@ -2725,7 +2722,7 @@ def self.apply_lighting(hpxml_bldg, schedules_file)
hpxml_bldg.lighting.interior_monthly_multipliers_isdefaulted = true
end
if hpxml_bldg.has_location(HPXML::LocationGarage)
- schedules_file_includes_lighting_garage = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::ColumnLightingGarage))
+ schedules_file_includes_lighting_garage = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::Columns[:LightingGarage].name))
if hpxml_bldg.lighting.garage_weekday_fractions.nil? && !schedules_file_includes_lighting_garage
hpxml_bldg.lighting.garage_weekday_fractions = Schedule.LightingGarageWeekdayFractions
hpxml_bldg.lighting.garage_weekday_fractions_isdefaulted = true
@@ -2739,7 +2736,7 @@ def self.apply_lighting(hpxml_bldg, schedules_file)
hpxml_bldg.lighting.garage_monthly_multipliers_isdefaulted = true
end
end
- schedules_file_includes_lighting_exterior = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::ColumnLightingExterior))
+ schedules_file_includes_lighting_exterior = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::Columns[:LightingExterior].name))
if hpxml_bldg.lighting.exterior_weekday_fractions.nil? && !schedules_file_includes_lighting_exterior
hpxml_bldg.lighting.exterior_weekday_fractions = Schedule.LightingExteriorWeekdayFractions
hpxml_bldg.lighting.exterior_weekday_fractions_isdefaulted = true
@@ -2774,7 +2771,7 @@ def self.apply_lighting(hpxml_bldg, schedules_file)
hpxml_bldg.lighting.holiday_period_end_day = 6
hpxml_bldg.lighting.holiday_period_end_day_isdefaulted = true
end
- schedules_file_includes_lighting_holiday_exterior = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::ColumnLightingExteriorHoliday))
+ schedules_file_includes_lighting_holiday_exterior = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::Columns[:LightingExteriorHoliday].name))
if hpxml_bldg.lighting.holiday_weekday_fractions.nil? && !schedules_file_includes_lighting_holiday_exterior
hpxml_bldg.lighting.holiday_weekday_fractions = Schedule.LightingExteriorHolidayWeekdayFractions
hpxml_bldg.lighting.holiday_weekday_fractions_isdefaulted = true
@@ -2790,16 +2787,15 @@ def self.apply_ceiling_fans(hpxml_bldg, nbeds, weather, schedules_file)
return if hpxml_bldg.ceiling_fans.size == 0
ceiling_fan = hpxml_bldg.ceiling_fans[0]
- if ceiling_fan.efficiency.nil?
- medium_cfm = 3000.0
- ceiling_fan.efficiency = medium_cfm / HVAC.get_default_ceiling_fan_power()
- ceiling_fan.efficiency_isdefaulted = true
+ if ceiling_fan.efficiency.nil? && ceiling_fan.label_energy_use.nil?
+ ceiling_fan.label_energy_use = HVAC.get_default_ceiling_fan_power()
+ ceiling_fan.label_energy_use_isdefaulted = true
end
if ceiling_fan.count.nil?
ceiling_fan.count = HVAC.get_default_ceiling_fan_quantity(nbeds)
ceiling_fan.count_isdefaulted = true
end
- schedules_file_includes_ceiling_fan = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::ColumnCeilingFan))
+ schedules_file_includes_ceiling_fan = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::Columns[:CeilingFan].name))
if ceiling_fan.weekday_fractions.nil? && !schedules_file_includes_ceiling_fan
ceiling_fan.weekday_fractions = Schedule.CeilingFanWeekdayFractions
ceiling_fan.weekday_fractions_isdefaulted = true
@@ -2829,7 +2825,7 @@ def self.apply_pools_and_permanent_spas(hpxml_bldg, cfa, schedules_file)
pool.pump_usage_multiplier = 1.0
pool.pump_usage_multiplier_isdefaulted = true
end
- schedules_file_includes_pool_pump = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::ColumnPoolPump))
+ schedules_file_includes_pool_pump = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::Columns[:PoolPump].name))
if pool.pump_weekday_fractions.nil? && !schedules_file_includes_pool_pump
pool.pump_weekday_fractions = Schedule.PoolPumpWeekdayFractions
pool.pump_weekday_fractions_isdefaulted = true
@@ -2857,7 +2853,7 @@ def self.apply_pools_and_permanent_spas(hpxml_bldg, cfa, schedules_file)
pool.heater_usage_multiplier = 1.0
pool.heater_usage_multiplier_isdefaulted = true
end
- schedules_file_includes_pool_heater = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::ColumnPoolHeater))
+ schedules_file_includes_pool_heater = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::Columns[:PoolHeater].name))
if pool.heater_weekday_fractions.nil? && !schedules_file_includes_pool_heater
pool.heater_weekday_fractions = Schedule.PoolHeaterWeekdayFractions
pool.heater_weekday_fractions_isdefaulted = true
@@ -2885,7 +2881,7 @@ def self.apply_pools_and_permanent_spas(hpxml_bldg, cfa, schedules_file)
spa.pump_usage_multiplier = 1.0
spa.pump_usage_multiplier_isdefaulted = true
end
- schedules_file_includes_permanent_spa_pump = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::ColumnPermanentSpaPump))
+ schedules_file_includes_permanent_spa_pump = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::Columns[:PermanentSpaPump].name))
if spa.pump_weekday_fractions.nil? && !schedules_file_includes_permanent_spa_pump
spa.pump_weekday_fractions = Schedule.PermanentSpaPumpWeekdayFractions
spa.pump_weekday_fractions_isdefaulted = true
@@ -2913,7 +2909,7 @@ def self.apply_pools_and_permanent_spas(hpxml_bldg, cfa, schedules_file)
spa.heater_usage_multiplier = 1.0
spa.heater_usage_multiplier_isdefaulted = true
end
- schedules_file_includes_permanent_spa_heater = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::ColumnPermanentSpaHeater))
+ schedules_file_includes_permanent_spa_heater = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::Columns[:PermanentSpaHeater].name))
if spa.heater_weekday_fractions.nil? && !schedules_file_includes_permanent_spa_heater
spa.heater_weekday_fractions = Schedule.PermanentSpaHeaterWeekdayFractions
spa.heater_weekday_fractions_isdefaulted = true
@@ -2946,7 +2942,7 @@ def self.apply_plug_loads(hpxml_bldg, cfa, schedules_file)
plug_load.frac_latent = default_lat_frac
plug_load.frac_latent_isdefaulted = true
end
- schedules_file_includes_plug_loads_other = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::ColumnPlugLoadsOther))
+ schedules_file_includes_plug_loads_other = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::Columns[:PlugLoadsOther].name))
if plug_load.weekday_fractions.nil? && !schedules_file_includes_plug_loads_other
plug_load.weekday_fractions = Schedule.PlugLoadsOtherWeekdayFractions
plug_load.weekday_fractions_isdefaulted = true
@@ -2973,7 +2969,7 @@ def self.apply_plug_loads(hpxml_bldg, cfa, schedules_file)
plug_load.frac_latent = default_lat_frac
plug_load.frac_latent_isdefaulted = true
end
- schedules_file_includes_plug_loads_tv = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::ColumnPlugLoadsTV))
+ schedules_file_includes_plug_loads_tv = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::Columns[:PlugLoadsTV].name))
if plug_load.weekday_fractions.nil? && !schedules_file_includes_plug_loads_tv
plug_load.weekday_fractions = Schedule.PlugLoadsTVWeekdayFractions
plug_load.weekday_fractions_isdefaulted = true
@@ -3000,7 +2996,7 @@ def self.apply_plug_loads(hpxml_bldg, cfa, schedules_file)
plug_load.frac_latent = 0.0
plug_load.frac_latent_isdefaulted = true
end
- schedules_file_includes_plug_loads_vehicle = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::ColumnPlugLoadsVehicle))
+ schedules_file_includes_plug_loads_vehicle = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::Columns[:PlugLoadsVehicle].name))
if plug_load.weekday_fractions.nil? && !schedules_file_includes_plug_loads_vehicle
plug_load.weekday_fractions = Schedule.PlugLoadsVehicleWeekdayFractions
plug_load.weekday_fractions_isdefaulted = true
@@ -3027,7 +3023,7 @@ def self.apply_plug_loads(hpxml_bldg, cfa, schedules_file)
plug_load.frac_latent = 0.0
plug_load.frac_latent_isdefaulted = true
end
- schedules_file_includes_plug_loads_well_pump = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::ColumnPlugLoadsWellPump))
+ schedules_file_includes_plug_loads_well_pump = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::Columns[:PlugLoadsWellPump].name))
if plug_load.weekday_fractions.nil? && !schedules_file_includes_plug_loads_well_pump
plug_load.weekday_fractions = Schedule.PlugLoadsWellPumpWeekdayFractions
plug_load.weekday_fractions_isdefaulted = true
@@ -3064,7 +3060,7 @@ def self.apply_fuel_loads(hpxml_bldg, cfa, schedules_file)
fuel_load.frac_latent = 0.0
fuel_load.frac_latent_isdefaulted = true
end
- schedules_file_includes_fuel_loads_grill = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::ColumnFuelLoadsGrill))
+ schedules_file_includes_fuel_loads_grill = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::Columns[:FuelLoadsGrill].name))
if fuel_load.weekday_fractions.nil? && !schedules_file_includes_fuel_loads_grill
fuel_load.weekday_fractions = Schedule.FuelLoadsGrillWeekdayFractions
fuel_load.weekday_fractions_isdefaulted = true
@@ -3090,7 +3086,7 @@ def self.apply_fuel_loads(hpxml_bldg, cfa, schedules_file)
fuel_load.frac_latent = 0.0
fuel_load.frac_latent_isdefaulted = true
end
- schedules_file_includes_fuel_loads_lighting = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::ColumnFuelLoadsLighting))
+ schedules_file_includes_fuel_loads_lighting = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::Columns[:FuelLoadsLighting].name))
if fuel_load.weekday_fractions.nil? && !schedules_file_includes_fuel_loads_lighting
fuel_load.weekday_fractions = Schedule.FuelLoadsLightingWeekdayFractions
fuel_load.weekday_fractions_isdefaulted = true
@@ -3116,7 +3112,7 @@ def self.apply_fuel_loads(hpxml_bldg, cfa, schedules_file)
fuel_load.frac_latent = 0.1
fuel_load.frac_latent_isdefaulted = true
end
- schedules_file_includes_fuel_loads_fireplace = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::ColumnFuelLoadsFireplace))
+ schedules_file_includes_fuel_loads_fireplace = (schedules_file.nil? ? false : schedules_file.includes_col_name(SchedulesFile::Columns[:FuelLoadsFireplace].name))
if fuel_load.weekday_fractions.nil? && !schedules_file_includes_fuel_loads_fireplace
fuel_load.weekday_fractions = Schedule.FuelLoadsFireplaceWeekdayFractions
fuel_load.weekday_fractions_isdefaulted = true
diff --git a/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_schema/HPXML.xsd b/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_schema/HPXML.xsd
index 9eec7c6e3..a43ffdadb 100644
--- a/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_schema/HPXML.xsd
+++ b/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_schema/HPXML.xsd
@@ -2463,6 +2463,26 @@
Number of similar ceiling fans.
+
+
+ [W] Energy use per the EnergyGuide label
+
+
+
+
+ [$] Estimated yearly energy cost per the EnergyGuide label
+
+
+
+
+ [$/kWh] Electric rate per the EnergyGuide label
+
+
+
+
+ [hrs/day] Hours use per day per the EnergyGuide label
+
+
diff --git a/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_schematron/EPvalidator.xml b/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_schematron/EPvalidator.xml
index 186a63bd0..b8ecbcf6a 100644
--- a/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_schematron/EPvalidator.xml
+++ b/hpxml-measures/HPXMLtoOpenStudio/resources/hpxml_schematron/EPvalidator.xml
@@ -911,7 +911,7 @@
Expected 1 element(s) for xpath: AnnualHeatingEfficiency[Units="AFUE"]/Value
Expected AnnualHeatingEfficiency[Units="AFUE"]/Value to be less than or equal to 1
Expected 1 element(s) for xpath: FractionHeatLoadServed
- Expected 1 element(s) for xpath: extension/SharedLoopWatts
+ Expected 0 or 1 element(s) for xpath: ElectricAuxiliaryEnergy | extension/SharedLoopWatts
Expected extension/SharedLoopWatts to be greater than or equal to 0
AFUE should typically be greater than or equal to 0.5.
@@ -921,7 +921,7 @@
[HeatingSystemType=SharedBoilerWthFanCoil]
- Expected 1 element(s) for xpath: extension/FanCoilWatts
+ Expected 0 or 1 element(s) for xpath: ElectricAuxiliaryEnergy | extension/FanCoilWatts
Expected extension/FanCoilWatts to be greater than or equal to 0
@@ -2439,6 +2439,7 @@
Expected 0 or 1 element(s) for xpath: Airflow[FanSpeed="medium"]/Efficiency
Expected 0 or 1 element(s) for xpath: Count
+ Expected 0 or 1 element(s) for xpath: LabelEnergyUse
Expected 0 or 1 element(s) for xpath: extension/WeekdayScheduleFractions
Expected 0 or 1 element(s) for xpath: extension/WeekendScheduleFractions
Expected 0 or 1 element(s) for xpath: extension/MonthlyScheduleMultipliers
diff --git a/hpxml-measures/HPXMLtoOpenStudio/resources/hvac.rb b/hpxml-measures/HPXMLtoOpenStudio/resources/hvac.rb
index c6310a350..9f39d6c55 100644
--- a/hpxml-measures/HPXMLtoOpenStudio/resources/hvac.rb
+++ b/hpxml-measures/HPXMLtoOpenStudio/resources/hvac.rb
@@ -823,7 +823,7 @@ def self.apply_dehumidifiers(runner, model, dehumidifiers, conditioned_space, un
control_zone.setZoneControlHumidistat(humidistat)
# Availability Schedule
- dehum_unavailable_periods = Schedule.get_unavailable_periods(runner, SchedulesFile::ColumnDehumidifier, unavailable_periods)
+ dehum_unavailable_periods = Schedule.get_unavailable_periods(runner, SchedulesFile::Columns[:Dehumidifier].name, unavailable_periods)
avail_sch = ScheduleConstant.new(model, obj_name + ' schedule', 1.0, Constants.ScheduleTypeLimitsFraction, unavailable_periods: dehum_unavailable_periods)
avail_sch = avail_sch.schedule
@@ -847,15 +847,20 @@ def self.apply_dehumidifiers(runner, model, dehumidifiers, conditioned_space, un
def self.apply_ceiling_fans(model, runner, weather, ceiling_fan, conditioned_space, schedules_file,
unavailable_periods)
obj_name = Constants.ObjectNameCeilingFan
- medium_cfm = 3000.0 # From ANSI 301-2019
hrs_per_day = 10.5 # From ANSI 301-2019
cfm_per_w = ceiling_fan.efficiency
+ label_energy_use = ceiling_fan.label_energy_use
count = ceiling_fan.count
- annual_kwh = UnitConversions.convert(count * medium_cfm / cfm_per_w * hrs_per_day * 365.0, 'Wh', 'kWh')
+ if !label_energy_use.nil? # priority if both provided
+ annual_kwh = UnitConversions.convert(count * label_energy_use * hrs_per_day * 365.0, 'Wh', 'kWh')
+ elsif !cfm_per_w.nil?
+ medium_cfm = get_default_ceiling_fan_medium_cfm()
+ annual_kwh = UnitConversions.convert(count * medium_cfm / cfm_per_w * hrs_per_day * 365.0, 'Wh', 'kWh')
+ end
# Create schedule
ceiling_fan_sch = nil
- ceiling_fan_col_name = SchedulesFile::ColumnCeilingFan
+ ceiling_fan_col_name = SchedulesFile::Columns[:CeilingFan].name
if not schedules_file.nil?
annual_kwh *= Schedule.CeilingFanMonthlyMultipliers(weather: weather).split(',').map(&:to_f).sum(0.0) / 12.0
ceiling_fan_design_level = schedules_file.calc_design_level_from_annual_kwh(col_name: ceiling_fan_col_name, annual_kwh: annual_kwh)
@@ -893,23 +898,23 @@ def self.apply_setpoints(model, runner, weather, hvac_control, conditioned_zone,
heating_sch = nil
cooling_sch = nil
if not schedules_file.nil?
- heating_sch = schedules_file.create_schedule_file(model, col_name: SchedulesFile::ColumnHeatingSetpoint)
+ heating_sch = schedules_file.create_schedule_file(model, col_name: SchedulesFile::Columns[:HeatingSetpoint].name)
end
if not schedules_file.nil?
- cooling_sch = schedules_file.create_schedule_file(model, col_name: SchedulesFile::ColumnCoolingSetpoint)
+ cooling_sch = schedules_file.create_schedule_file(model, col_name: SchedulesFile::Columns[:CoolingSetpoint].name)
end
# permit mixing detailed schedules with simple schedules
if heating_sch.nil?
htg_weekday_setpoints, htg_weekend_setpoints = get_heating_setpoints(hvac_control, year)
else
- runner.registerWarning("Both '#{SchedulesFile::ColumnHeatingSetpoint}' schedule file and heating setpoint temperature provided; the latter will be ignored.") if !hvac_control.heating_setpoint_temp.nil?
+ runner.registerWarning("Both '#{SchedulesFile::Columns[:HeatingSetpoint].name}' schedule file and heating setpoint temperature provided; the latter will be ignored.") if !hvac_control.heating_setpoint_temp.nil?
end
if cooling_sch.nil?
clg_weekday_setpoints, clg_weekend_setpoints = get_cooling_setpoints(hvac_control, has_ceiling_fan, year, weather)
else
- runner.registerWarning("Both '#{SchedulesFile::ColumnCoolingSetpoint}' schedule file and cooling setpoint temperature provided; the latter will be ignored.") if !hvac_control.cooling_setpoint_temp.nil?
+ runner.registerWarning("Both '#{SchedulesFile::Columns[:CoolingSetpoint].name}' schedule file and cooling setpoint temperature provided; the latter will be ignored.") if !hvac_control.cooling_setpoint_temp.nil?
end
# only deal with deadband issue if both schedules are simple
@@ -1514,6 +1519,11 @@ def self.get_default_ceiling_fan_power()
return 42.6 # W
end
+ def self.get_default_ceiling_fan_medium_cfm()
+ # From ANSI 301-2019
+ return 3000.0 # cfm
+ end
+
def self.get_default_ceiling_fan_quantity(nbeds)
# Per ANSI/RESNET/ICC 301
return nbeds + 1
@@ -2002,16 +2012,65 @@ def self.apply_dehumidifier_ief_to_ef_inputs(dh_type, w_coeff, ef_coeff, ief, wa
return ef_input, water_removal_rate_input
end
- def self.get_default_in_unit_boiler_eae(boiler_fuel)
- # Electric auxiliary energy, from ANSI/RESNET/ICC 301-2022 Addendum C Standard
- if [HPXML::FuelTypeNaturalGas,
- HPXML::FuelTypePropane,
- HPXML::FuelTypeElectricity,
- HPXML::FuelTypeWoodCord,
- HPXML::FuelTypeWoodPellets].include? boiler_fuel
- return 170.0 # kWh/yr
- else
- return 330.0 # kWh/yr
+ def self.get_default_boiler_eae(heating_system)
+ if heating_system.heating_system_type != HPXML::HVACTypeBoiler
+ return
+ end
+ if not heating_system.electric_auxiliary_energy.nil?
+ return heating_system.electric_auxiliary_energy
+ end
+
+ # From ANSI/RESNET/ICC 301-2019 Standard
+ fuel = heating_system.heating_system_fuel
+
+ if heating_system.is_shared_system
+ distribution_system = heating_system.distribution_system
+ distribution_type = distribution_system.distribution_system_type
+
+ if not heating_system.shared_loop_watts.nil?
+ sp_kw = UnitConversions.convert(heating_system.shared_loop_watts, 'W', 'kW')
+ n_dweq = heating_system.number_of_units_served.to_f
+ if distribution_system.air_type == HPXML::AirTypeFanCoil
+ aux_in = UnitConversions.convert(heating_system.fan_coil_watts, 'W', 'kW')
+ else
+ aux_in = 0.0 # ANSI/RESNET/ICC 301-2019 Section 4.4.7.2
+ end
+ # ANSI/RESNET/ICC 301-2019 Equation 4.4-5
+ return (((sp_kw / n_dweq) + aux_in) * 2080.0).round(2) # kWh/yr
+ elsif distribution_type == HPXML::HVACDistributionTypeHydronic
+ # kWh/yr, per ANSI/RESNET/ICC 301-2019 Table 4.5.2(5)
+ if distribution_system.hydronic_type == HPXML::HydronicTypeWaterLoop # Shared boiler w/ WLHP
+ return 265.0
+ else # Shared boiler w/ baseboard/radiators/etc
+ return 220.0
+ end
+ elsif distribution_type == HPXML::HVACDistributionTypeAir
+ if distribution_system.air_type == HPXML::AirTypeFanCoil # Shared boiler w/ fan coil
+ return 438.0
+ end
+ end
+
+ else # In-unit boilers
+
+ if [HPXML::FuelTypeNaturalGas,
+ HPXML::FuelTypePropane,
+ HPXML::FuelTypeElectricity,
+ HPXML::FuelTypeWoodCord,
+ HPXML::FuelTypeWoodPellets].include? fuel
+ return 170.0 # kWh/yr
+ elsif [HPXML::FuelTypeOil,
+ HPXML::FuelTypeOil1,
+ HPXML::FuelTypeOil2,
+ HPXML::FuelTypeOil4,
+ HPXML::FuelTypeOil5or6,
+ HPXML::FuelTypeDiesel,
+ HPXML::FuelTypeKerosene,
+ HPXML::FuelTypeCoal,
+ HPXML::FuelTypeCoalAnthracite,
+ HPXML::FuelTypeCoalBituminous,
+ HPXML::FuelTypeCoke].include? fuel
+ return 330.0 # kWh/yr
+ end
end
end
@@ -3402,17 +3461,6 @@ def self.apply_shared_heating_systems(hpxml_bldg)
distribution_system = heating_system.distribution_system
hydronic_type = distribution_system.hydronic_type
- if heating_system.heating_system_type == HPXML::HVACTypeBoiler
- sp_kw = UnitConversions.convert(heating_system.shared_loop_watts, 'W', 'kW')
- n_dweq = heating_system.number_of_units_served.to_f
- if distribution_system.air_type == HPXML::AirTypeFanCoil
- aux_in = UnitConversions.convert(heating_system.fan_coil_watts, 'W', 'kW')
- else
- aux_in = 0.0
- end
- heating_system.electric_auxiliary_energy = (((sp_kw / n_dweq) + aux_in) * 2080.0).round(2) # kWh/yr
- end
-
if heating_system.heating_system_type == HPXML::HVACTypeBoiler && hydronic_type.to_s == HPXML::HydronicTypeWaterLoop
# Shared boiler w/ water loop heat pump
diff --git a/hpxml-measures/HPXMLtoOpenStudio/resources/hvac_sizing.rb b/hpxml-measures/HPXMLtoOpenStudio/resources/hvac_sizing.rb
index 4eb2a3f71..e62610034 100644
--- a/hpxml-measures/HPXMLtoOpenStudio/resources/hvac_sizing.rb
+++ b/hpxml-measures/HPXMLtoOpenStudio/resources/hvac_sizing.rb
@@ -933,7 +933,7 @@ def self.process_load_infiltration_ventilation(mj, bldg_design_loads, weather)
Heating and Cooling Loads: Infiltration & Ventilation
'''
- sla, _ach50, _nach, _volume, _height, a_ext = Airflow.get_values_from_air_infiltration_measurements(@hpxml_bldg, @cfa, weather)
+ sla, _, _, _, _, a_ext = Airflow.get_values_from_air_infiltration_measurements(@hpxml_bldg, @cfa, weather)
sla *= a_ext
ela = sla * @cfa
diff --git a/hpxml-measures/HPXMLtoOpenStudio/resources/lighting.rb b/hpxml-measures/HPXMLtoOpenStudio/resources/lighting.rb
index 1cc4a88c6..2cccc6643 100644
--- a/hpxml-measures/HPXMLtoOpenStudio/resources/lighting.rb
+++ b/hpxml-measures/HPXMLtoOpenStudio/resources/lighting.rb
@@ -62,7 +62,7 @@ def self.apply(runner, model, spaces, lighting_groups, lighting, eri_version, sc
# Create schedule
interior_sch = nil
- interior_col_name = SchedulesFile::ColumnLightingInterior
+ interior_col_name = SchedulesFile::Columns[:LightingInterior].name
interior_obj_name = Constants.ObjectNameLightingInterior
if not schedules_file.nil?
design_level = schedules_file.calc_design_level_from_annual_kwh(col_name: interior_col_name, annual_kwh: int_kwh)
@@ -101,7 +101,7 @@ def self.apply(runner, model, spaces, lighting_groups, lighting, eri_version, sc
# Create schedule
garage_sch = nil
- garage_col_name = SchedulesFile::ColumnLightingGarage
+ garage_col_name = SchedulesFile::Columns[:LightingGarage].name
garage_obj_name = Constants.ObjectNameLightingGarage
if not schedules_file.nil?
design_level = schedules_file.calc_design_level_from_annual_kwh(col_name: garage_col_name, annual_kwh: grg_kwh)
@@ -137,7 +137,7 @@ def self.apply(runner, model, spaces, lighting_groups, lighting, eri_version, sc
# Create schedule
exterior_sch = nil
- exterior_col_name = SchedulesFile::ColumnLightingExterior
+ exterior_col_name = SchedulesFile::Columns[:LightingExterior].name
exterior_obj_name = Constants.ObjectNameLightingExterior
if not schedules_file.nil?
design_level = schedules_file.calc_design_level_from_annual_kwh(col_name: exterior_col_name, annual_kwh: ext_kwh)
@@ -169,7 +169,7 @@ def self.apply(runner, model, spaces, lighting_groups, lighting, eri_version, sc
# Create schedule
exterior_holiday_sch = nil
- exterior_holiday_col_name = SchedulesFile::ColumnLightingExteriorHoliday
+ exterior_holiday_col_name = SchedulesFile::Columns[:LightingExteriorHoliday].name
exterior_holiday_obj_name = Constants.ObjectNameLightingExteriorHoliday
exterior_holiday_kwh_per_day = lighting.holiday_kwh_per_day * unit_multiplier
if not schedules_file.nil?
diff --git a/hpxml-measures/HPXMLtoOpenStudio/resources/misc_loads.rb b/hpxml-measures/HPXMLtoOpenStudio/resources/misc_loads.rb
index 3eadb2255..c323f5ed8 100644
--- a/hpxml-measures/HPXMLtoOpenStudio/resources/misc_loads.rb
+++ b/hpxml-measures/HPXMLtoOpenStudio/resources/misc_loads.rb
@@ -12,13 +12,13 @@ def self.apply_plug(model, runner, plug_load, obj_name, conditioned_space, apply
# Create schedule
sch = nil
if plug_load.plug_load_type == HPXML::PlugLoadTypeOther
- col_name = SchedulesFile::ColumnPlugLoadsOther
+ col_name = SchedulesFile::Columns[:PlugLoadsOther].name
elsif plug_load.plug_load_type == HPXML::PlugLoadTypeTelevision
- col_name = SchedulesFile::ColumnPlugLoadsTV
+ col_name = SchedulesFile::Columns[:PlugLoadsTV].name
elsif plug_load.plug_load_type == HPXML::PlugLoadTypeElectricVehicleCharging
- col_name = SchedulesFile::ColumnPlugLoadsVehicle
+ col_name = SchedulesFile::Columns[:PlugLoadsVehicle].name
elsif plug_load.plug_load_type == HPXML::PlugLoadTypeWellPump
- col_name = SchedulesFile::ColumnPlugLoadsWellPump
+ col_name = SchedulesFile::Columns[:PlugLoadsWellPump].name
end
if not schedules_file.nil?
space_design_level = schedules_file.calc_design_level_from_annual_kwh(col_name: col_name, annual_kwh: kwh)
@@ -70,11 +70,11 @@ def self.apply_fuel(model, runner, fuel_load, obj_name, conditioned_space, sched
# Create schedule
sch = nil
if fuel_load.fuel_load_type == HPXML::FuelLoadTypeGrill
- col_name = SchedulesFile::ColumnFuelLoadsGrill
+ col_name = SchedulesFile::Columns[:FuelLoadsGrill].name
elsif fuel_load.fuel_load_type == HPXML::FuelLoadTypeLighting
- col_name = SchedulesFile::ColumnFuelLoadsLighting
+ col_name = SchedulesFile::Columns[:FuelLoadsLighting].name
elsif fuel_load.fuel_load_type == HPXML::FuelLoadTypeFireplace
- col_name = SchedulesFile::ColumnFuelLoadsFireplace
+ col_name = SchedulesFile::Columns[:FuelLoadsFireplace].name
end
if not schedules_file.nil?
space_design_level = schedules_file.calc_design_level_from_annual_therm(col_name: col_name, annual_therm: therm)
diff --git a/hpxml-measures/HPXMLtoOpenStudio/resources/schedules.rb b/hpxml-measures/HPXMLtoOpenStudio/resources/schedules.rb
index 902778b52..5b860c065 100644
--- a/hpxml-measures/HPXMLtoOpenStudio/resources/schedules.rb
+++ b/hpxml-measures/HPXMLtoOpenStudio/resources/schedules.rb
@@ -1310,7 +1310,6 @@ def self.get_unavailable_periods_csv_data
def self.unavailable_period_applies(runner, schedule_name, col_name)
if @unavailable_periods_csv_data.nil?
@unavailable_periods_csv_data = get_unavailable_periods_csv_data
-
end
@unavailable_periods_csv_data.each do |csv_row|
next if csv_row['Schedule Name'] != schedule_name
@@ -1326,9 +1325,9 @@ def self.unavailable_period_applies(runner, schedule_name, col_name)
end
if applies == 1
if not runner.nil?
- if schedule_name == SchedulesFile::ColumnHVAC
+ if schedule_name == SchedulesFile::Columns[:HVAC].name
runner.registerWarning('It is not possible to eliminate all HVAC energy use (e.g. crankcase/defrost energy) in EnergyPlus during an unavailable period.')
- elsif schedule_name == SchedulesFile::ColumnWaterHeater
+ elsif schedule_name == SchedulesFile::Columns[:WaterHeater].name
runner.registerWarning('It is not possible to eliminate all water heater energy use (e.g. parasitics) in EnergyPlus during an unavailable period.')
end
end
@@ -1381,51 +1380,65 @@ def self.valid_float?(str)
end
class SchedulesFile
- # Constants
- ColumnOccupants = 'occupants'
- ColumnLightingInterior = 'lighting_interior'
- ColumnLightingExterior = 'lighting_exterior'
- ColumnLightingGarage = 'lighting_garage'
- ColumnLightingExteriorHoliday = 'lighting_exterior_holiday'
- ColumnCookingRange = 'cooking_range'
- ColumnRefrigerator = 'refrigerator'
- ColumnExtraRefrigerator = 'extra_refrigerator'
- ColumnFreezer = 'freezer'
- ColumnDishwasher = 'dishwasher'
- ColumnClothesWasher = 'clothes_washer'
- ColumnClothesDryer = 'clothes_dryer'
- ColumnCeilingFan = 'ceiling_fan'
- ColumnPlugLoadsOther = 'plug_loads_other'
- ColumnPlugLoadsTV = 'plug_loads_tv'
- ColumnPlugLoadsVehicle = 'plug_loads_vehicle'
- ColumnPlugLoadsWellPump = 'plug_loads_well_pump'
- ColumnFuelLoadsGrill = 'fuel_loads_grill'
- ColumnFuelLoadsLighting = 'fuel_loads_lighting'
- ColumnFuelLoadsFireplace = 'fuel_loads_fireplace'
- ColumnPoolPump = 'pool_pump'
- ColumnPoolHeater = 'pool_heater'
- ColumnPermanentSpaPump = 'permanent_spa_pump'
- ColumnPermanentSpaHeater = 'permanent_spa_heater'
- ColumnHotWaterDishwasher = 'hot_water_dishwasher'
- ColumnHotWaterClothesWasher = 'hot_water_clothes_washer'
- ColumnHotWaterFixtures = 'hot_water_fixtures'
- ColumnGeneralWaterUse = 'general_water_use'
- ColumnHotWaterRecirculationPump = 'hot_water_recirculation_pump'
- ColumnSleeping = 'sleeping'
- ColumnHeatingSetpoint = 'heating_setpoint'
- ColumnCoolingSetpoint = 'cooling_setpoint'
- ColumnWaterHeaterSetpoint = 'water_heater_setpoint'
- ColumnWaterHeaterOperatingMode = 'water_heater_operating_mode'
- ColumnBattery = 'battery'
- ColumnBatteryCharging = 'battery_charging'
- ColumnBatteryDischarging = 'battery_discharging'
- ColumnHVAC = 'hvac'
- ColumnWaterHeater = 'water_heater'
- ColumnDehumidifier = 'dehumidifier'
- ColumnKitchenFan = 'kitchen_fan'
- ColumnBathFan = 'bath_fan'
- ColumnHouseFan = 'house_fan'
- ColumnWholeHouseFan = 'whole_house_fan'
+ class Column
+ def initialize(name, used_by_unavailable_periods, can_be_stochastic, type)
+ @name = name
+ @used_by_unavailable_periods = used_by_unavailable_periods
+ @can_be_stochastic = can_be_stochastic
+ @type = type
+ end
+ attr_accessor(:name, :used_by_unavailable_periods, :can_be_stochastic, :type)
+ end
+
+ # Define all schedule columns
+ # Columns may be used for A) detailed schedule CSVs (e.g., occupants), B) unavailable
+ # periods CSV (e.g., hvac), and/or C) EnergyPlus-specific schedules (e.g., battery_charging).
+ Columns = {
+ Occupants: Column.new('occupants', true, true, :frac),
+ LightingInterior: Column.new('lighting_interior', true, true, :frac),
+ LightingExterior: Column.new('lighting_exterior', true, false, :frac),
+ LightingGarage: Column.new('lighting_garage', true, true, :frac),
+ LightingExteriorHoliday: Column.new('lighting_exterior_holiday', true, false, :frac),
+ CookingRange: Column.new('cooking_range', true, true, :frac),
+ Refrigerator: Column.new('refrigerator', true, false, :frac),
+ ExtraRefrigerator: Column.new('extra_refrigerator', true, false, :frac),
+ Freezer: Column.new('freezer', true, false, :frac),
+ Dishwasher: Column.new('dishwasher', true, true, :frac),
+ ClothesWasher: Column.new('clothes_washer', true, true, :frac),
+ ClothesDryer: Column.new('clothes_dryer', true, true, :frac),
+ CeilingFan: Column.new('ceiling_fan', true, true, :frac),
+ PlugLoadsOther: Column.new('plug_loads_other', true, true, :frac),
+ PlugLoadsTV: Column.new('plug_loads_tv', true, true, :frac),
+ PlugLoadsVehicle: Column.new('plug_loads_vehicle', true, false, :frac),
+ PlugLoadsWellPump: Column.new('plug_loads_well_pump', true, false, :frac),
+ FuelLoadsGrill: Column.new('fuel_loads_grill', true, false, :frac),
+ FuelLoadsLighting: Column.new('fuel_loads_lighting', true, false, :frac),
+ FuelLoadsFireplace: Column.new('fuel_loads_fireplace', true, false, :frac),
+ PoolPump: Column.new('pool_pump', true, false, :frac),
+ PoolHeater: Column.new('pool_heater', true, false, :frac),
+ PermanentSpaPump: Column.new('permanent_spa_pump', true, false, :frac),
+ PermanentSpaHeater: Column.new('permanent_spa_heater', true, false, :frac),
+ HotWaterDishwasher: Column.new('hot_water_dishwasher', false, true, :frac),
+ HotWaterClothesWasher: Column.new('hot_water_clothes_washer', false, true, :frac),
+ HotWaterFixtures: Column.new('hot_water_fixtures', true, true, :frac),
+ HotWaterRecirculationPump: Column.new('hot_water_recirculation_pump', true, false, :frac),
+ GeneralWaterUse: Column.new('general_water_use', true, false, :frac),
+ Sleeping: Column.new('sleeping', false, false, nil),
+ HeatingSetpoint: Column.new('heating_setpoint', false, false, :setpoint),
+ CoolingSetpoint: Column.new('cooling_setpoint', false, false, :setpoint),
+ WaterHeaterSetpoint: Column.new('water_heater_setpoint', false, false, :setpoint),
+ WaterHeaterOperatingMode: Column.new('water_heater_operating_mode', false, false, :zero_or_one),
+ Battery: Column.new('battery', false, false, :neg_one_to_one),
+ BatteryCharging: Column.new('battery_charging', false, false, nil),
+ BatteryDischarging: Column.new('battery_discharging', false, false, nil),
+ HVAC: Column.new('hvac', true, false, nil),
+ WaterHeater: Column.new('water_heater', true, false, nil),
+ Dehumidifier: Column.new('dehumidifier', true, false, nil),
+ KitchenFan: Column.new('kitchen_fan', true, false, nil),
+ BathFan: Column.new('bath_fan', true, false, nil),
+ HouseFan: Column.new('house_fan', true, false, nil),
+ WholeHouseFan: Column.new('whole_house_fan', true, false, nil),
+ }
def initialize(runner: nil,
schedules_paths:,
@@ -1436,7 +1449,7 @@ def initialize(runner: nil,
@year = year
import(schedules_paths)
- battery_schedules
+ create_battery_charging_discharging_schedules
expand_schedules
@tmp_schedules = Marshal.load(Marshal.dump(@schedules))
set_unavailable_periods(runner, unavailable_periods)
@@ -1468,6 +1481,7 @@ def import(schedules_paths)
columns = CSV.read(schedules_path).transpose
columns.each do |col|
col_name = col[0]
+ column = Columns.values.find { |c| c.name == col_name }
values = col[1..-1].reject { |v| v.nil? }
@@ -1481,19 +1495,19 @@ def import(schedules_paths)
fail "Schedule column name '#{col_name}' is duplicated. [context: #{schedules_path}]"
end
- if max_value_one[col_name]
+ if column.type == :frac
if values.max > 1.01 || values.max < 0.99 # Allow some imprecision
fail "Schedule max value for column '#{col_name}' must be 1. [context: #{schedules_path}]"
end
end
- if min_value_zero[col_name]
+ if column.type == :frac
if values.min < 0
fail "Schedule min value for column '#{col_name}' must be non-negative. [context: #{schedules_path}]"
end
end
- if value_neg_one_to_one[col_name]
+ if column.type == :neg_one_to_one
if values.min < -1
fail "Schedule value for column '#{col_name}' must be greater than or equal to -1. [context: #{schedules_path}]"
end
@@ -1502,7 +1516,7 @@ def import(schedules_paths)
end
end
- if only_zeros_and_ones[col_name]
+ if column.type == :zero_or_one
if values.any? { |v| v != 0 && v != 1 }
fail "Schedule value for column '#{col_name}' must be either 0 or 1. [context: #{schedules_path}]"
end
@@ -1761,28 +1775,26 @@ def set_unavailable_periods(runner, unavailable_periods)
@tmp_schedules.keys.each do |schedule_name|
next if column_names.include? schedule_name
- next if SchedulesFile.OperatingModeColumnNames.include?(schedule_name)
- next if SchedulesFile.BatteryColumnNames.include?(schedule_name)
schedule_name2 = schedule_name
- if [SchedulesFile::ColumnHotWaterDishwasher].include?(schedule_name)
- schedule_name2 = SchedulesFile::ColumnDishwasher
- elsif [SchedulesFile::ColumnHotWaterClothesWasher].include?(schedule_name)
- schedule_name2 = SchedulesFile::ColumnClothesWasher
- elsif [SchedulesFile::ColumnHeatingSetpoint, SchedulesFile::ColumnCoolingSetpoint].include?(schedule_name)
- schedule_name2 = SchedulesFile::ColumnHVAC
- elsif [SchedulesFile::ColumnWaterHeaterSetpoint].include?(schedule_name)
- schedule_name2 = SchedulesFile::ColumnWaterHeater
+ if [SchedulesFile::Columns[:HotWaterDishwasher].name].include?(schedule_name)
+ schedule_name2 = SchedulesFile::Columns[:Dishwasher].name
+ elsif [SchedulesFile::Columns[:HotWaterClothesWasher].name].include?(schedule_name)
+ schedule_name2 = SchedulesFile::Columns[:ClothesWasher].name
+ elsif [SchedulesFile::Columns[:HeatingSetpoint].name, SchedulesFile::Columns[:CoolingSetpoint].name].include?(schedule_name)
+ schedule_name2 = SchedulesFile::Columns[:HVAC].name
+ elsif [SchedulesFile::Columns[:WaterHeaterSetpoint].name].include?(schedule_name)
+ schedule_name2 = SchedulesFile::Columns[:WaterHeater].name
end
# Skip those unaffected
next unless Schedule.unavailable_period_applies(runner, schedule_name2, column_name)
@tmp_schedules[column_name].each_with_index do |_ts, i|
- if schedule_name == ColumnWaterHeaterSetpoint
+ if schedule_name == SchedulesFile::Columns[:WaterHeaterSetpoint].name
# Temperature of tank < 2C indicates of possibility of freeze.
@tmp_schedules[schedule_name][i] = UnitConversions.convert(2.0, 'C', 'F') if @tmp_schedules[column_name][i] == 1.0
- elsif ![SchedulesFile::ColumnHeatingSetpoint, SchedulesFile::ColumnCoolingSetpoint].include?(schedule_name)
+ elsif ![SchedulesFile::Columns[:HeatingSetpoint].name, SchedulesFile::Columns[:CoolingSetpoint].name].include?(schedule_name)
@tmp_schedules[schedule_name][i] *= (1.0 - @tmp_schedules[column_name][i])
end
end
@@ -1791,12 +1803,13 @@ def set_unavailable_periods(runner, unavailable_periods)
end
def convert_setpoints
- return if @tmp_schedules.keys.none? { |k| SchedulesFile.SetpointColumnNames.include?(k) }
+ setpoint_col_names = Columns.values.select { |c| c.type == :setpoint }.map { |c| c.name }
+ return if @tmp_schedules.keys.none? { |k| setpoint_col_names.include?(k) }
col_names = @tmp_schedules.keys
@tmp_schedules[col_names[0]].each_with_index do |_ts, i|
- SchedulesFile.SetpointColumnNames.each do |setpoint_col_name|
+ setpoint_col_names.each do |setpoint_col_name|
next unless col_names.include?(setpoint_col_name)
@tmp_schedules[setpoint_col_name][i] = UnitConversions.convert(@tmp_schedules[setpoint_col_name][i], 'f', 'c').round(4)
@@ -1804,139 +1817,19 @@ def convert_setpoints
end
end
- def battery_schedules
- return if !@schedules.keys.include?(SchedulesFile::ColumnBattery)
-
- @schedules[SchedulesFile::ColumnBatteryCharging] = Array.new(@schedules[SchedulesFile::ColumnBattery].size, 0)
- @schedules[SchedulesFile::ColumnBatteryDischarging] = Array.new(@schedules[SchedulesFile::ColumnBattery].size, 0)
- @schedules[SchedulesFile::ColumnBattery].each_with_index do |_ts, i|
- if @schedules[SchedulesFile::ColumnBattery][i] > 0
- @schedules[SchedulesFile::ColumnBatteryCharging][i] = @schedules[SchedulesFile::ColumnBattery][i]
- elsif @schedules[SchedulesFile::ColumnBattery][i] < 0
- @schedules[SchedulesFile::ColumnBatteryDischarging][i] = -1 * @schedules[SchedulesFile::ColumnBattery][i]
- end
- end
- @schedules.delete(SchedulesFile::ColumnBattery)
- end
-
- def self.ColumnNames
- return SchedulesFile.OccupancyColumnNames + SchedulesFile.HVACSetpointColumnNames + SchedulesFile.WaterHeaterColumnNames + SchedulesFile.BatteryColumnNames
- end
-
- def self.OccupancyColumnNames
- return [
- ColumnOccupants,
- ColumnLightingInterior,
- ColumnLightingExterior,
- ColumnLightingGarage,
- ColumnLightingExteriorHoliday,
- ColumnCookingRange,
- ColumnRefrigerator,
- ColumnExtraRefrigerator,
- ColumnFreezer,
- ColumnDishwasher,
- ColumnClothesWasher,
- ColumnClothesDryer,
- ColumnCeilingFan,
- ColumnPlugLoadsOther,
- ColumnPlugLoadsTV,
- ColumnPlugLoadsVehicle,
- ColumnPlugLoadsWellPump,
- ColumnFuelLoadsGrill,
- ColumnFuelLoadsLighting,
- ColumnFuelLoadsFireplace,
- ColumnPoolPump,
- ColumnPoolHeater,
- ColumnPermanentSpaPump,
- ColumnPermanentSpaHeater,
- ColumnHotWaterDishwasher,
- ColumnHotWaterClothesWasher,
- ColumnHotWaterFixtures,
- ColumnHotWaterRecirculationPump
- ]
- end
-
- def self.HVACSetpointColumnNames
- return [
- ColumnHeatingSetpoint,
- ColumnCoolingSetpoint
- ]
- end
-
- def self.WaterHeaterColumnNames
- return [
- ColumnWaterHeaterSetpoint,
- ColumnWaterHeaterOperatingMode
- ]
- end
-
- def self.SetpointColumnNames
- return [
- ColumnHeatingSetpoint,
- ColumnCoolingSetpoint,
- ColumnWaterHeaterSetpoint
- ]
- end
-
- def self.OperatingModeColumnNames
- return [
- ColumnWaterHeaterOperatingMode
- ]
- end
-
- def self.BatteryColumnNames
- return [
- ColumnBattery,
- ColumnBatteryCharging,
- ColumnBatteryDischarging
- ]
- end
-
- def max_value_one
- max_value_one = {}
- column_names = SchedulesFile.ColumnNames
- column_names.each do |column_name|
- max_value_one[column_name] = true
- if SchedulesFile.SetpointColumnNames.include?(column_name) || SchedulesFile.OperatingModeColumnNames.include?(column_name) || SchedulesFile.BatteryColumnNames.include?(column_name)
- max_value_one[column_name] = false
- end
- end
- return max_value_one
- end
+ def create_battery_charging_discharging_schedules
+ battery_col_name = Columns[:Battery].name
+ return if !@schedules.keys.include?(battery_col_name)
- def min_value_zero
- min_value_zero = {}
- column_names = SchedulesFile.ColumnNames
- column_names.each do |column_name|
- min_value_zero[column_name] = true
- if SchedulesFile.SetpointColumnNames.include?(column_name) || SchedulesFile.OperatingModeColumnNames.include?(column_name) || SchedulesFile.BatteryColumnNames.include?(column_name)
- min_value_zero[column_name] = false
- end
- end
- return min_value_zero
- end
-
- def value_neg_one_to_one
- value_neg_one_to_one = {}
- column_names = SchedulesFile.ColumnNames
- column_names.each do |column_name|
- value_neg_one_to_one[column_name] = false
- if column_name == SchedulesFile::ColumnBattery
- value_neg_one_to_one[column_name] = true
- end
- end
- return value_neg_one_to_one
- end
-
- def only_zeros_and_ones
- only_zeros_and_ones = {}
- column_names = SchedulesFile.ColumnNames
- column_names.each do |column_name|
- only_zeros_and_ones[column_name] = false
- if SchedulesFile.OperatingModeColumnNames.include?(column_name)
- only_zeros_and_ones[column_name] = true
+ @schedules[SchedulesFile::Columns[:BatteryCharging].name] = Array.new(@schedules[battery_col_name].size, 0)
+ @schedules[SchedulesFile::Columns[:BatteryDischarging].name] = Array.new(@schedules[battery_col_name].size, 0)
+ @schedules[battery_col_name].each_with_index do |_ts, i|
+ if @schedules[battery_col_name][i] > 0
+ @schedules[SchedulesFile::Columns[:BatteryCharging].name][i] = @schedules[battery_col_name][i]
+ elsif @schedules[battery_col_name][i] < 0
+ @schedules[SchedulesFile::Columns[:BatteryDischarging].name][i] = -1 * @schedules[battery_col_name][i]
end
end
- return only_zeros_and_ones
+ @schedules.delete(battery_col_name)
end
end
diff --git a/hpxml-measures/HPXMLtoOpenStudio/resources/waterheater.rb b/hpxml-measures/HPXMLtoOpenStudio/resources/waterheater.rb
index 1a2e8a3f2..e1c8befd1 100644
--- a/hpxml-measures/HPXMLtoOpenStudio/resources/waterheater.rb
+++ b/hpxml-measures/HPXMLtoOpenStudio/resources/waterheater.rb
@@ -87,7 +87,7 @@ def self.apply_heatpump(model, runner, loc_space, loc_schedule, weather, water_h
if not schedules_file.nil?
# To handle variable setpoints, need one schedule that gets sensed and a new schedule that gets actuated
# Sensed schedule
- setpoint_schedule = schedules_file.create_schedule_file(model, col_name: SchedulesFile::ColumnWaterHeaterSetpoint)
+ setpoint_schedule = schedules_file.create_schedule_file(model, col_name: SchedulesFile::Columns[:WaterHeaterSetpoint].name)
if not setpoint_schedule.nil?
Schedule.set_schedule_type_limits(model, setpoint_schedule, Constants.ScheduleTypeLimitsTemperature)
@@ -102,7 +102,7 @@ def self.apply_heatpump(model, runner, loc_space, loc_schedule, weather, water_h
control_setpoint_schedule = setpoint_schedule
else
- runner.registerWarning("Both '#{SchedulesFile::ColumnWaterHeaterSetpoint}' schedule file and setpoint temperature provided; the latter will be ignored.") if !t_set_c.nil?
+ runner.registerWarning("Both '#{SchedulesFile::Columns[:WaterHeaterSetpoint].name}' schedule file and setpoint temperature provided; the latter will be ignored.") if !t_set_c.nil?
end
airflow_rate = 181.0 # cfm
@@ -970,7 +970,7 @@ def self.add_hpwh_control_program(model, runner, obj_name_hpwh, amb_temp_sensor,
op_mode_schedule = nil
if not schedules_file.nil?
- op_mode_schedule = schedules_file.create_schedule_file(model, col_name: SchedulesFile::ColumnWaterHeaterOperatingMode)
+ op_mode_schedule = schedules_file.create_schedule_file(model, col_name: SchedulesFile::Columns[:WaterHeaterOperatingMode].name)
end
# Sensor on op_mode_schedule
@@ -981,7 +981,7 @@ def self.add_hpwh_control_program(model, runner, obj_name_hpwh, amb_temp_sensor,
op_mode_sensor.setName("#{obj_name_hpwh} op_mode")
op_mode_sensor.setKeyName(op_mode_schedule.name.to_s)
- runner.registerWarning("Both '#{SchedulesFile::ColumnWaterHeaterOperatingMode}' schedule file and operating mode provided; the latter will be ignored.") if !op_mode.nil?
+ runner.registerWarning("Both '#{SchedulesFile::Columns[:WaterHeaterOperatingMode].name}' schedule file and operating mode provided; the latter will be ignored.") if !op_mode.nil?
end
t_offset = 9.0 # deg-C
@@ -1753,13 +1753,13 @@ def self.set_wh_ambient(loc_space, loc_schedule, wh_obj)
def self.configure_mixed_tank_setpoint_schedule(new_heater, schedules_file, t_set_c, model, runner, unavailable_periods)
new_schedule = nil
if not schedules_file.nil?
- new_schedule = schedules_file.create_schedule_file(model, col_name: SchedulesFile::ColumnWaterHeaterSetpoint)
+ new_schedule = schedules_file.create_schedule_file(model, col_name: SchedulesFile::Columns[:WaterHeaterSetpoint].name)
end
if new_schedule.nil? # constant
new_schedule = ScheduleConstant.new(model, Constants.ObjectNameWaterHeaterSetpoint, t_set_c, Constants.ScheduleTypeLimitsTemperature, unavailable_periods: unavailable_periods)
new_schedule = new_schedule.schedule
else
- runner.registerWarning("Both '#{SchedulesFile::ColumnWaterHeaterSetpoint}' schedule file and setpoint temperature provided; the latter will be ignored.") if !t_set_c.nil?
+ runner.registerWarning("Both '#{SchedulesFile::Columns[:WaterHeaterSetpoint].name}' schedule file and setpoint temperature provided; the latter will be ignored.") if !t_set_c.nil?
end
if new_heater.setpointTemperatureSchedule.is_initialized
new_heater.setpointTemperatureSchedule.get.remove
@@ -1770,13 +1770,13 @@ def self.configure_mixed_tank_setpoint_schedule(new_heater, schedules_file, t_se
def self.configure_stratified_tank_setpoint_schedules(new_heater, schedules_file, t_set_c, model, runner, unavailable_periods)
new_schedule = nil
if not schedules_file.nil?
- new_schedule = schedules_file.create_schedule_file(model, col_name: SchedulesFile::ColumnWaterHeaterSetpoint)
+ new_schedule = schedules_file.create_schedule_file(model, col_name: SchedulesFile::Columns[:WaterHeaterSetpoint].name)
end
if new_schedule.nil? # constant
new_schedule = ScheduleConstant.new(model, Constants.ObjectNameWaterHeaterSetpoint, t_set_c, Constants.ScheduleTypeLimitsTemperature, unavailable_periods: unavailable_periods)
new_schedule = new_schedule.schedule
else
- runner.registerWarning("Both '#{SchedulesFile::ColumnWaterHeaterSetpoint}' schedule file and setpoint temperature provided; the latter will be ignored.") if !t_set_c.nil?
+ runner.registerWarning("Both '#{SchedulesFile::Columns[:WaterHeaterSetpoint].name}' schedule file and setpoint temperature provided; the latter will be ignored.") if !t_set_c.nil?
end
new_heater.heater1SetpointTemperatureSchedule.remove
new_heater.heater2SetpointTemperatureSchedule.remove
diff --git a/hpxml-measures/HPXMLtoOpenStudio/tests/test_airflow.rb b/hpxml-measures/HPXMLtoOpenStudio/tests/test_airflow.rb
index fa6e0c5f2..3f617efeb 100644
--- a/hpxml-measures/HPXMLtoOpenStudio/tests/test_airflow.rb
+++ b/hpxml-measures/HPXMLtoOpenStudio/tests/test_airflow.rb
@@ -102,7 +102,7 @@ def test_infiltration_natural_ach
# Check infiltration/ventilation program
program_values = get_ems_values(model.getEnergyManagementSystemPrograms, "#{Constants.ObjectNameInfiltration} program")
- assert_in_epsilon(0.0904, program_values['c'].sum, 0.01)
+ assert_in_epsilon(0.0881, program_values['c'].sum, 0.01)
assert_in_epsilon(0.0573, program_values['Cs'].sum, 0.01)
assert_in_epsilon(0.1446, program_values['Cw'].sum, 0.01)
end
@@ -114,7 +114,7 @@ def test_infiltration_natural_cfm
# Check infiltration/ventilation program
program_values = get_ems_values(model.getEnergyManagementSystemPrograms, "#{Constants.ObjectNameInfiltration} program")
- assert_in_epsilon(0.0904, program_values['c'].sum, 0.01)
+ assert_in_epsilon(0.0881, program_values['c'].sum, 0.01)
assert_in_epsilon(0.0573, program_values['Cs'].sum, 0.01)
assert_in_epsilon(0.1446, program_values['Cw'].sum, 0.01)
end
diff --git a/hpxml-measures/HPXMLtoOpenStudio/tests/test_defaults.rb b/hpxml-measures/HPXMLtoOpenStudio/tests/test_defaults.rb
index 83d13fcb5..29e583352 100644
--- a/hpxml-measures/HPXMLtoOpenStudio/tests/test_defaults.rb
+++ b/hpxml-measures/HPXMLtoOpenStudio/tests/test_defaults.rb
@@ -442,20 +442,6 @@ def test_building_construction
_default_hpxml, default_hpxml_bldg = _test_measure()
_test_default_building_construction_values(default_hpxml_bldg, 20000, 7.4, 2, 1)
- # Test defaults w/ infiltration volume
- hpxml_bldg.building_construction.conditioned_building_volume = nil
- hpxml_bldg.air_infiltration_measurements[0].infiltration_volume = 25650
- XMLHelper.write_file(hpxml.to_doc, @tmp_hpxml_path)
- _default_hpxml, default_hpxml_bldg = _test_measure()
- _test_default_building_construction_values(default_hpxml_bldg, 21600, 8, 2, 1)
-
- # Test defaults w/ infiltration volume
- hpxml_bldg.building_construction.conditioned_building_volume = nil
- hpxml_bldg.air_infiltration_measurements[0].infiltration_volume = 18000
- XMLHelper.write_file(hpxml.to_doc, @tmp_hpxml_path)
- _default_hpxml, default_hpxml_bldg = _test_measure()
- _test_default_building_construction_values(default_hpxml_bldg, 18000, 6.67, 2, 1)
-
# Test defaults w/ conditioned crawlspace
hpxml, hpxml_bldg = _create_hpxml('base-foundation-conditioned-crawlspace.xml')
hpxml_bldg.building_construction.conditioned_building_volume = nil
@@ -1389,7 +1375,7 @@ def test_electric_resistance
end
def test_boilers
- # Test inputs not overridden by defaults
+ # Test inputs not overridden by defaults (in-unit boiler)
hpxml, hpxml_bldg = _create_hpxml('base-hvac-boiler-gas-only.xml')
hpxml_bldg.heating_systems[0].electric_auxiliary_energy = 99.9
hpxml_bldg.heating_systems[0].heating_capacity = 12345
@@ -1399,13 +1385,21 @@ def test_boilers
_default_hpxml, default_hpxml_bldg = _test_measure()
_test_default_boiler_values(default_hpxml_bldg.heating_systems[0], 99.9, 12345, true, 999)
- # Test defaults
+ # Test defaults w/ in-unit boiler
hpxml_bldg.heating_systems[0].electric_auxiliary_energy = nil
hpxml_bldg.heating_systems[0].heating_capacity = nil
hpxml_bldg.heating_systems[0].pilot_light_btuh = nil
XMLHelper.write_file(hpxml.to_doc, @tmp_hpxml_path)
_default_hpxml, default_hpxml_bldg = _test_measure()
_test_default_boiler_values(default_hpxml_bldg.heating_systems[0], 170.0, nil, true, 500)
+
+ # Test inputs not overridden by defaults (shared boiler)
+ hpxml, hpxml_bldg = _create_hpxml('base-bldgtype-mf-unit-shared-boiler-only-baseboard.xml')
+ hpxml_bldg.heating_systems[0].shared_loop_watts = nil
+ hpxml_bldg.heating_systems[0].electric_auxiliary_energy = 99.9
+ XMLHelper.write_file(hpxml.to_doc, @tmp_hpxml_path)
+ _default_hpxml, default_hpxml_bldg = _test_measure()
+ _test_default_boiler_values(default_hpxml_bldg.heating_systems[0], 99.9, nil, false, nil)
end
def test_stoves
@@ -2391,7 +2385,7 @@ def test_mech_ventilation_fans
used_for_whole_building_ventilation: true)
XMLHelper.write_file(hpxml.to_doc, @tmp_hpxml_path)
_default_hpxml, default_hpxml_bldg = _test_measure()
- _test_default_mech_vent_values(default_hpxml_bldg, false, 24.0, 21.7, 61.9)
+ _test_default_mech_vent_values(default_hpxml_bldg, false, 24.0, 22.5, 64.3)
# Test defaults w/ CFM50 infiltration
hpxml, hpxml_bldg = _create_hpxml('base-enclosure-infil-cfm50.xml')
@@ -3513,24 +3507,39 @@ def test_ceiling_fans
hpxml, hpxml_bldg = _create_hpxml('base-lighting-ceiling-fans.xml')
hpxml_bldg.ceiling_fans[0].count = 2
hpxml_bldg.ceiling_fans[0].efficiency = 100
+ hpxml_bldg.ceiling_fans[0].label_energy_use = 39
hpxml_bldg.ceiling_fans[0].weekday_fractions = ConstantDaySchedule
hpxml_bldg.ceiling_fans[0].weekend_fractions = ConstantDaySchedule
hpxml_bldg.ceiling_fans[0].monthly_multipliers = ConstantMonthSchedule
XMLHelper.write_file(hpxml.to_doc, @tmp_hpxml_path)
_default_hpxml, default_hpxml_bldg = _test_measure()
- _test_default_ceiling_fan_values(default_hpxml_bldg.ceiling_fans[0], 2, 100, ConstantDaySchedule, ConstantDaySchedule, ConstantMonthSchedule)
+ _test_default_ceiling_fan_values(default_hpxml_bldg.ceiling_fans[0], 2, 100, 39, ConstantDaySchedule, ConstantDaySchedule, ConstantMonthSchedule)
+
+ # Test inputs not overridden by defaults 2
+ hpxml_bldg.ceiling_fans[0].label_energy_use = nil
+ XMLHelper.write_file(hpxml.to_doc, @tmp_hpxml_path)
+ _default_hpxml, default_hpxml_bldg = _test_measure()
+ _test_default_ceiling_fan_values(default_hpxml_bldg.ceiling_fans[0], 2, 100, nil, ConstantDaySchedule, ConstantDaySchedule, ConstantMonthSchedule)
+
+ # Test inputs not overridden by defaults 3
+ hpxml_bldg.ceiling_fans[0].efficiency = nil
+ hpxml_bldg.ceiling_fans[0].label_energy_use = 39
+ XMLHelper.write_file(hpxml.to_doc, @tmp_hpxml_path)
+ _default_hpxml, default_hpxml_bldg = _test_measure()
+ _test_default_ceiling_fan_values(default_hpxml_bldg.ceiling_fans[0], 2, nil, 39, ConstantDaySchedule, ConstantDaySchedule, ConstantMonthSchedule)
# Test defaults
hpxml_bldg.ceiling_fans.each do |ceiling_fan|
ceiling_fan.count = nil
ceiling_fan.efficiency = nil
+ ceiling_fan.label_energy_use = nil
ceiling_fan.weekday_fractions = nil
ceiling_fan.weekend_fractions = nil
ceiling_fan.monthly_multipliers = nil
end
XMLHelper.write_file(hpxml.to_doc, @tmp_hpxml_path)
_default_hpxml, default_hpxml_bldg = _test_measure()
- _test_default_ceiling_fan_values(default_hpxml_bldg.ceiling_fans[0], 4, 70.4, Schedule.CeilingFanWeekdayFractions, Schedule.CeilingFanWeekendFractions, '0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0')
+ _test_default_ceiling_fan_values(default_hpxml_bldg.ceiling_fans[0], 4, nil, 42.6, Schedule.CeilingFanWeekdayFractions, Schedule.CeilingFanWeekendFractions, '0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0')
end
def test_pools
@@ -5196,9 +5205,18 @@ def _test_default_lighting_values(hpxml_bldg, interior_usage_multiplier, garage_
end
end
- def _test_default_ceiling_fan_values(ceiling_fan, count, efficiency, weekday_sch, weekend_sch, monthly_mults)
+ def _test_default_ceiling_fan_values(ceiling_fan, count, efficiency, label_energy_use, weekday_sch, weekend_sch, monthly_mults)
assert_equal(count, ceiling_fan.count)
- assert_in_epsilon(efficiency, ceiling_fan.efficiency, 0.01)
+ if efficiency.nil?
+ assert_nil(ceiling_fan.efficiency)
+ else
+ assert_in_epsilon(efficiency, ceiling_fan.efficiency, 0.01)
+ end
+ if label_energy_use.nil?
+ assert_nil(ceiling_fan.label_energy_use)
+ else
+ assert_in_epsilon(label_energy_use, ceiling_fan.label_energy_use, 0.01)
+ end
if weekday_sch.nil?
assert_nil(ceiling_fan.weekday_fractions)
else
diff --git a/hpxml-measures/HPXMLtoOpenStudio/tests/test_hvac.rb b/hpxml-measures/HPXMLtoOpenStudio/tests/test_hvac.rb
index 54d39f60f..c52e4d603 100644
--- a/hpxml-measures/HPXMLtoOpenStudio/tests/test_hvac.rb
+++ b/hpxml-measures/HPXMLtoOpenStudio/tests/test_hvac.rb
@@ -1304,6 +1304,34 @@ def test_crankcase_heater_watts
assert_in_epsilon(crankcase_heater_watts, clg_coil.crankcaseHeaterCapacity, 0.01)
end
+ def test_ceiling_fan
+ args_hash = {}
+ args_hash['hpxml_path'] = File.absolute_path(File.join(@sample_files_path, 'base-lighting-ceiling-fans.xml'))
+ model, _hpxml, hpxml_bldg = _test_measure(args_hash)
+
+ # Get HPXML values
+ hvac_control = hpxml_bldg.hvac_controls[0]
+ cooling_setpoint_temp = hvac_control.cooling_setpoint_temp
+ ceiling_fan_cooling_setpoint_temp_offset = hvac_control.ceiling_fan_cooling_setpoint_temp_offset
+
+ # Check ceiling fan months
+ assert_equal(1, model.getThermostatSetpointDualSetpoints.size)
+ thermostat = model.getThermostatSetpointDualSetpoints[0]
+
+ cooling_schedule = thermostat.coolingSetpointTemperatureSchedule.get.to_ScheduleRuleset.get
+ assert_equal(3, cooling_schedule.scheduleRules.size)
+
+ rule = cooling_schedule.scheduleRules[1] # cooling months
+ assert_equal(6, rule.startDate.get.monthOfYear.value)
+ assert_equal(1, rule.startDate.get.dayOfMonth)
+ assert_equal(9, rule.endDate.get.monthOfYear.value)
+ assert_equal(30, rule.endDate.get.dayOfMonth)
+ day_schedule = rule.daySchedule
+ values = day_schedule.values
+ assert_equal(1, values.size)
+ assert_in_epsilon(cooling_setpoint_temp + ceiling_fan_cooling_setpoint_temp_offset, UnitConversions.convert(values[0], 'C', 'F'), 0.01)
+ end
+
def _test_measure(args_hash)
# create an instance of the measure
measure = HPXMLtoOpenStudio.new
diff --git a/hpxml-measures/HPXMLtoOpenStudio/tests/test_lighting.rb b/hpxml-measures/HPXMLtoOpenStudio/tests/test_lighting.rb
index 9b64807ef..26704181e 100644
--- a/hpxml-measures/HPXMLtoOpenStudio/tests/test_lighting.rb
+++ b/hpxml-measures/HPXMLtoOpenStudio/tests/test_lighting.rb
@@ -27,6 +27,13 @@ def get_kwh_per_year(model, name)
kwh_yr = UnitConversions.convert(hrs * ltg.exteriorLightsDefinition.designLevel * ltg.multiplier, 'Wh', 'kWh')
return kwh_yr
end
+ model.getElectricEquipments.each do |ee|
+ next unless ee.name.to_s.include?(name)
+
+ hrs = Schedule.annual_equivalent_full_load_hrs(model.yearDescription.get.assumedYear, ee.schedule.get)
+ kwh_yr = UnitConversions.convert(hrs * ee.designLevel.get * ee.multiplier * ee.space.get.multiplier, 'Wh', 'kWh')
+ return kwh_yr
+ end
return 0.0
end
@@ -105,6 +112,22 @@ def test_lighting_none
assert_equal(0.0, get_kwh_per_year(model, Constants.ObjectNameLightingExterior))
end
+ def test_ceiling_fan
+ # Efficiency
+ args_hash = {}
+ args_hash['hpxml_path'] = File.absolute_path(File.join(sample_files_dir, 'base-lighting-ceiling-fans.xml'))
+ model, _hpxml, _hpxml_bldg = _test_measure(args_hash)
+
+ assert_in_delta(154, get_kwh_per_year(model, Constants.ObjectNameCeilingFan), 1.0)
+
+ # Label energy use
+ args_hash = {}
+ args_hash['hpxml_path'] = File.absolute_path(File.join(sample_files_dir, 'base-lighting-ceiling-fans-label-energy-use.xml'))
+ model, _hpxml, _hpxml_bldg = _test_measure(args_hash)
+
+ assert_in_delta(200, get_kwh_per_year(model, Constants.ObjectNameCeilingFan), 1.0)
+ end
+
def _test_measure(args_hash)
# create an instance of the measure
measure = HPXMLtoOpenStudio.new
diff --git a/hpxml-measures/HPXMLtoOpenStudio/tests/test_schedules.rb b/hpxml-measures/HPXMLtoOpenStudio/tests/test_schedules.rb
index 2633fcdd8..da989a868 100644
--- a/hpxml-measures/HPXMLtoOpenStudio/tests/test_schedules.rb
+++ b/hpxml-measures/HPXMLtoOpenStudio/tests/test_schedules.rb
@@ -72,6 +72,7 @@ def test_default_schedules
assert_in_epsilon(7157, get_annual_equivalent_full_load_hrs(model, Constants.ObjectNameMiscPlugLoads + ' schedule'), @tol)
assert_in_epsilon(2765, get_annual_equivalent_full_load_hrs(model, Constants.ObjectNameMiscTelevision + ' schedule'), @tol)
assert_in_epsilon(4244, get_annual_equivalent_full_load_hrs(model, Constants.ObjectNameFixtures + ' schedule'), @tol)
+ assert_in_epsilon(5000, get_annual_equivalent_full_load_hrs(model, Constants.ObjectNameGeneralWaterUse + ' schedule'), @tol)
assert_in_epsilon(8760, get_annual_equivalent_full_load_hrs(model, Constants.ObjectNameMechanicalVentilationHouseFan + ' schedule'), @tol)
end
@@ -81,7 +82,7 @@ def test_simple_schedules
model, _hpxml, _hpxml_bldg = _test_measure(args_hash)
schedule_constants = 11
- schedule_rulesets = 18
+ schedule_rulesets = 19
schedule_fixed_intervals = 1
schedule_files = 0
@@ -102,6 +103,8 @@ def test_simple_schedules
assert_in_epsilon(6880, get_annual_equivalent_full_load_hrs(model, Constants.ObjectNameMiscPlugLoads + ' schedule'), @tol)
assert_in_epsilon(3373, get_annual_equivalent_full_load_hrs(model, Constants.ObjectNameMiscTelevision + ' schedule'), @tol)
assert_in_epsilon(4204, get_annual_equivalent_full_load_hrs(model, Constants.ObjectNameFixtures + ' schedule'), @tol)
+ assert_in_epsilon(4244, get_annual_equivalent_full_load_hrs(model, Constants.ObjectNameHotWaterRecircPump + ' schedule'), @tol)
+ assert_in_epsilon(5000, get_annual_equivalent_full_load_hrs(model, Constants.ObjectNameGeneralWaterUse + ' schedule'), @tol)
assert_in_epsilon(8760, get_annual_equivalent_full_load_hrs(model, Constants.ObjectNameMechanicalVentilationHouseFan + ' schedule'), @tol)
end
@@ -123,6 +126,8 @@ def test_simple_vacancy_schedules
assert_in_epsilon(6880 * get_available_hrs_ratio(unavailable_month_hrs, Schedule.PlugLoadsOtherMonthlyMultipliers), get_annual_equivalent_full_load_hrs(model, Constants.ObjectNameMiscPlugLoads + ' schedule'), @tol)
assert_in_epsilon(3373 * get_available_hrs_ratio(unavailable_month_hrs, Schedule.PlugLoadsTVMonthlyMultipliers), get_annual_equivalent_full_load_hrs(model, Constants.ObjectNameMiscTelevision + ' schedule'), @tol)
assert_in_epsilon(4204 * get_available_hrs_ratio(unavailable_month_hrs, Schedule.FixturesMonthlyMultipliers), get_annual_equivalent_full_load_hrs(model, Constants.ObjectNameFixtures + ' schedule'), @tol)
+ assert_in_epsilon(4244 * get_available_hrs_ratio(unavailable_month_hrs, Schedule.RecirculationPumpMonthlyMultipliers), get_annual_equivalent_full_load_hrs(model, Constants.ObjectNameHotWaterRecircPump + ' schedule'), @tol)
+ assert_in_epsilon(5000 * get_available_hrs_ratio(unavailable_month_hrs, Schedule.GeneralWaterUseMonthlyMultipliers), get_annual_equivalent_full_load_hrs(model, Constants.ObjectNameGeneralWaterUse + ' schedule'), @tol)
assert_in_epsilon(8760, get_annual_equivalent_full_load_hrs(model, Constants.ObjectNameMechanicalVentilationHouseFan + ' schedule'), @tol)
end
@@ -149,6 +154,8 @@ def test_simple_vacancy_year_round_schedules
assert_equal(0, get_annual_equivalent_full_load_hrs(model, Constants.ObjectNameMiscPlugLoads + ' schedule'))
assert_equal(0, get_annual_equivalent_full_load_hrs(model, Constants.ObjectNameMiscTelevision + ' schedule'))
assert_equal(0, get_annual_equivalent_full_load_hrs(model, Constants.ObjectNameFixtures + ' schedule'))
+ assert_equal(0, get_annual_equivalent_full_load_hrs(model, Constants.ObjectNameHotWaterRecircPump + ' schedule'))
+ assert_equal(0, get_annual_equivalent_full_load_hrs(model, Constants.ObjectNameGeneralWaterUse + ' schedule'))
assert_in_epsilon(8760, get_annual_equivalent_full_load_hrs(model, Constants.ObjectNameMechanicalVentilationHouseFan + ' schedule'), @tol)
end
@@ -170,6 +177,8 @@ def test_simple_power_outage_schedules
assert_in_epsilon(6880 * get_available_hrs_ratio(unavailable_month_hrs, Schedule.PlugLoadsOtherMonthlyMultipliers), get_annual_equivalent_full_load_hrs(model, Constants.ObjectNameMiscPlugLoads + ' schedule'), @tol)
assert_in_epsilon(3373 * get_available_hrs_ratio(unavailable_month_hrs, Schedule.PlugLoadsTVMonthlyMultipliers), get_annual_equivalent_full_load_hrs(model, Constants.ObjectNameMiscTelevision + ' schedule'), @tol)
assert_in_epsilon(4204 * get_available_hrs_ratio(unavailable_month_hrs, Schedule.FixturesMonthlyMultipliers), get_annual_equivalent_full_load_hrs(model, Constants.ObjectNameFixtures + ' schedule'), @tol)
+ assert_in_epsilon(4244 * get_available_hrs_ratio(unavailable_month_hrs, Schedule.RecirculationPumpMonthlyMultipliers), get_annual_equivalent_full_load_hrs(model, Constants.ObjectNameHotWaterRecircPump + ' schedule'), @tol)
+ assert_in_epsilon(5000, get_annual_equivalent_full_load_hrs(model, Constants.ObjectNameGeneralWaterUse + ' schedule'), @tol)
assert_in_epsilon(8760 * get_available_hrs_ratio(unavailable_month_hrs), get_annual_equivalent_full_load_hrs(model, Constants.ObjectNameMechanicalVentilationHouseFan + ' schedule'), @tol)
end
@@ -195,38 +204,39 @@ def test_stochastic_schedules
unavailable_periods: hpxml.header.unavailable_periods,
output_path: @tmp_schedule_file_path)
- assert(schedule_file_names.include?(SchedulesFile::ColumnOccupants))
- assert_in_epsilon(6689, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnOccupants, schedules: sf.tmp_schedules), @tol)
- assert(schedule_file_names.include?(SchedulesFile::ColumnLightingInterior))
- assert_in_epsilon(2086, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnLightingInterior, schedules: sf.tmp_schedules), @tol)
- assert(!schedule_file_names.include?(SchedulesFile::ColumnLightingGarage))
- assert_in_epsilon(2086, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnLightingGarage, schedules: sf.tmp_schedules), @tol)
- assert(!schedule_file_names.include?(SchedulesFile::ColumnLightingExterior))
+ assert(schedule_file_names.include?(SchedulesFile::Columns[:Occupants].name))
+ assert_in_epsilon(6689, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:Occupants].name, schedules: sf.tmp_schedules), @tol)
+ assert(schedule_file_names.include?(SchedulesFile::Columns[:LightingInterior].name))
+ assert_in_epsilon(2086, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:LightingInterior].name, schedules: sf.tmp_schedules), @tol)
+ assert(!schedule_file_names.include?(SchedulesFile::Columns[:LightingGarage].name))
+ assert_in_epsilon(2086, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:LightingGarage].name, schedules: sf.tmp_schedules), @tol)
+ assert(!schedule_file_names.include?(SchedulesFile::Columns[:LightingExterior].name))
assert_in_epsilon(4342, get_annual_equivalent_full_load_hrs(model, Constants.ObjectNameLightingExterior + ' schedule'), @tol)
- assert(!schedule_file_names.include?(SchedulesFile::ColumnLightingExteriorHoliday))
- assert(!schedule_file_names.include?(SchedulesFile::ColumnRefrigerator))
- assert(schedule_file_names.include?(SchedulesFile::ColumnCookingRange))
- assert_in_epsilon(534, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnCookingRange, schedules: sf.tmp_schedules), @tol)
- assert(schedule_file_names.include?(SchedulesFile::ColumnDishwasher))
- assert_in_epsilon(213, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnDishwasher, schedules: sf.tmp_schedules), @tol)
- assert(schedule_file_names.include?(SchedulesFile::ColumnClothesWasher))
- assert_in_epsilon(134, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnClothesWasher, schedules: sf.tmp_schedules), @tol)
- assert(schedule_file_names.include?(SchedulesFile::ColumnClothesDryer))
- assert_in_epsilon(151, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnClothesDryer, schedules: sf.tmp_schedules), @tol)
- assert(!schedule_file_names.include?(SchedulesFile::ColumnCeilingFan))
- assert_in_epsilon(3250, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnCeilingFan, schedules: sf.tmp_schedules), @tol)
- assert(schedule_file_names.include?(SchedulesFile::ColumnPlugLoadsOther))
- assert_in_epsilon(4840, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnPlugLoadsOther, schedules: sf.tmp_schedules), @tol)
- assert(schedule_file_names.include?(SchedulesFile::ColumnPlugLoadsTV))
- assert_in_epsilon(4840, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnPlugLoadsTV, schedules: sf.tmp_schedules), @tol)
- assert(schedule_file_names.include?(SchedulesFile::ColumnHotWaterDishwasher))
- assert_in_epsilon(273, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnHotWaterDishwasher, schedules: sf.tmp_schedules), @tol)
- assert(schedule_file_names.include?(SchedulesFile::ColumnHotWaterClothesWasher))
- assert_in_epsilon(346, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnHotWaterClothesWasher, schedules: sf.tmp_schedules), @tol)
- assert(schedule_file_names.include?(SchedulesFile::ColumnHotWaterFixtures))
- assert_in_epsilon(887, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnHotWaterFixtures, schedules: sf.tmp_schedules), @tol)
+ assert(!schedule_file_names.include?(SchedulesFile::Columns[:LightingExteriorHoliday].name))
+ assert(!schedule_file_names.include?(SchedulesFile::Columns[:Refrigerator].name))
+ assert(schedule_file_names.include?(SchedulesFile::Columns[:CookingRange].name))
+ assert_in_epsilon(534, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:CookingRange].name, schedules: sf.tmp_schedules), @tol)
+ assert(schedule_file_names.include?(SchedulesFile::Columns[:Dishwasher].name))
+ assert_in_epsilon(213, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:Dishwasher].name, schedules: sf.tmp_schedules), @tol)
+ assert(schedule_file_names.include?(SchedulesFile::Columns[:ClothesWasher].name))
+ assert_in_epsilon(134, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:ClothesWasher].name, schedules: sf.tmp_schedules), @tol)
+ assert(schedule_file_names.include?(SchedulesFile::Columns[:ClothesDryer].name))
+ assert_in_epsilon(151, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:ClothesDryer].name, schedules: sf.tmp_schedules), @tol)
+ assert(!schedule_file_names.include?(SchedulesFile::Columns[:CeilingFan].name))
+ assert_in_epsilon(3250, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:CeilingFan].name, schedules: sf.tmp_schedules), @tol)
+ assert(schedule_file_names.include?(SchedulesFile::Columns[:PlugLoadsOther].name))
+ assert_in_epsilon(4840, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:PlugLoadsOther].name, schedules: sf.tmp_schedules), @tol)
+ assert(schedule_file_names.include?(SchedulesFile::Columns[:PlugLoadsTV].name))
+ assert_in_epsilon(4840, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:PlugLoadsTV].name, schedules: sf.tmp_schedules), @tol)
+ assert(schedule_file_names.include?(SchedulesFile::Columns[:HotWaterDishwasher].name))
+ assert_in_epsilon(273, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:HotWaterDishwasher].name, schedules: sf.tmp_schedules), @tol)
+ assert(schedule_file_names.include?(SchedulesFile::Columns[:HotWaterClothesWasher].name))
+ assert_in_epsilon(346, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:HotWaterClothesWasher].name, schedules: sf.tmp_schedules), @tol)
+ assert(schedule_file_names.include?(SchedulesFile::Columns[:HotWaterFixtures].name))
+ assert_in_epsilon(887, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:HotWaterFixtures].name, schedules: sf.tmp_schedules), @tol)
+ assert(!schedule_file_names.include?(SchedulesFile::Columns[:GeneralWaterUse].name))
assert_in_epsilon(8760, get_annual_equivalent_full_load_hrs(model, Constants.ObjectNameMechanicalVentilationHouseFan + ' schedule'), @tol)
- assert(!schedule_file_names.include?(SchedulesFile::ColumnSleeping))
+ assert(!schedule_file_names.include?(SchedulesFile::Columns[:Sleeping].name))
assert(!schedule_file_names.include?('Vacancy'))
assert(!schedule_file_names.include?('Power Outage'))
end
@@ -252,22 +262,22 @@ def test_stochastic_vacancy_schedules
unavailable_month_hrs = { 0 => 31.0 * 24.0, 11 => 31.0 * 24.0 }
- assert_in_epsilon(6689 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnOccupants, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnOccupants, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(2086 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnLightingInterior, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnLightingInterior, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(2086 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnLightingGarage, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnLightingGarage, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(6689 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:Occupants].name, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:Occupants].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(2086 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:LightingInterior].name, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:LightingInterior].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(2086 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:LightingGarage].name, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:LightingGarage].name, schedules: sf.tmp_schedules), @tol)
assert_in_epsilon(4342 * get_available_hrs_ratio(unavailable_month_hrs, Schedule.LightingMonthlyMultipliers), get_annual_equivalent_full_load_hrs(model, Constants.ObjectNameLightingExterior + ' schedule'), @tol)
- assert_in_epsilon(534 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnCookingRange, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnCookingRange, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(213 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnDishwasher, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnDishwasher, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(134 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnClothesWasher, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnClothesWasher, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(151 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnClothesDryer, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnClothesDryer, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(3250 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnCeilingFan, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnCeilingFan, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(4840 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnPlugLoadsOther, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnPlugLoadsOther, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(4840 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnPlugLoadsTV, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnPlugLoadsTV, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(273 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnHotWaterDishwasher, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnHotWaterDishwasher, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(346 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnHotWaterClothesWasher, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnHotWaterClothesWasher, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(887 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnHotWaterFixtures, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnHotWaterFixtures, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(534 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:CookingRange].name, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:CookingRange].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(213 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:Dishwasher].name, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:Dishwasher].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(134 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:ClothesWasher].name, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:ClothesWasher].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(151 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:ClothesDryer].name, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:ClothesDryer].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(3250 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:CeilingFan].name, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:CeilingFan].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(4840 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:PlugLoadsOther].name, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:PlugLoadsOther].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(4840 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:PlugLoadsTV].name, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:PlugLoadsTV].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(273 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:HotWaterDishwasher].name, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:HotWaterDishwasher].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(346 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:HotWaterClothesWasher].name, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:HotWaterClothesWasher].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(887 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:HotWaterFixtures].name, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:HotWaterFixtures].name, schedules: sf.tmp_schedules), @tol)
assert_in_epsilon(8760, get_annual_equivalent_full_load_hrs(model, Constants.ObjectNameMechanicalVentilationHouseFan + ' schedule'), @tol)
- assert(!sf.schedules.keys.include?(SchedulesFile::ColumnSleeping))
+ assert(!sf.schedules.keys.include?(SchedulesFile::Columns[:Sleeping].name))
assert_in_epsilon(unavailable_month_hrs.values.sum, sf.annual_equivalent_full_load_hrs(col_name: column_name, schedules: sf.tmp_schedules), 0.001)
end
@@ -310,22 +320,22 @@ def test_stochastic_vacancy_schedules2
unavailable_month_hrs = { 0 => 31.0 * 24.0, 1 => 28.0 * 24.0, 11 => 31.0 * 24.0 }
- assert_in_epsilon(6689 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnOccupants, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnOccupants, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(2086 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnLightingInterior, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnLightingInterior, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(2086 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnLightingGarage, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnLightingGarage, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(6689 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:Occupants].name, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:Occupants].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(2086 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:LightingInterior].name, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:LightingInterior].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(2086 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:LightingGarage].name, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:LightingGarage].name, schedules: sf.tmp_schedules), @tol)
assert_in_epsilon(4342 * get_available_hrs_ratio(unavailable_month_hrs, Schedule.LightingMonthlyMultipliers), get_annual_equivalent_full_load_hrs(model, Constants.ObjectNameLightingExterior + ' schedule'), @tol)
- assert_in_epsilon(534 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnCookingRange, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnCookingRange, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(213 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnDishwasher, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnDishwasher, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(134 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnClothesWasher, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnClothesWasher, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(151 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnClothesDryer, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnClothesDryer, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(3250 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnCeilingFan, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnCeilingFan, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(4840 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnPlugLoadsOther, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnPlugLoadsOther, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(4840 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnPlugLoadsTV, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnPlugLoadsTV, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(273 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnHotWaterDishwasher, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnHotWaterDishwasher, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(346 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnHotWaterClothesWasher, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnHotWaterClothesWasher, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(887 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnHotWaterFixtures, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnHotWaterFixtures, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(534 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:CookingRange].name, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:CookingRange].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(213 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:Dishwasher].name, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:Dishwasher].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(134 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:ClothesWasher].name, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:ClothesWasher].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(151 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:ClothesDryer].name, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:ClothesDryer].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(3250 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:CeilingFan].name, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:CeilingFan].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(4840 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:PlugLoadsOther].name, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:PlugLoadsOther].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(4840 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:PlugLoadsTV].name, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:PlugLoadsTV].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(273 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:HotWaterDishwasher].name, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:HotWaterDishwasher].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(346 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:HotWaterClothesWasher].name, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:HotWaterClothesWasher].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(887 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:HotWaterFixtures].name, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:HotWaterFixtures].name, schedules: sf.tmp_schedules), @tol)
assert_in_epsilon(8760, get_annual_equivalent_full_load_hrs(model, Constants.ObjectNameMechanicalVentilationHouseFan + ' schedule'), @tol)
- assert(!sf.schedules.keys.include?(SchedulesFile::ColumnSleeping))
+ assert(!sf.schedules.keys.include?(SchedulesFile::Columns[:Sleeping].name))
assert_in_epsilon(unavailable_month_hrs.values.sum, sf.annual_equivalent_full_load_hrs(col_name: column_name, schedules: sf.tmp_schedules), 0.001)
end
@@ -354,22 +364,22 @@ def test_stochastic_vacancy_year_round_schedules
unavailable_periods: hpxml.header.unavailable_periods,
output_path: @tmp_schedule_file_path)
- assert_equal(0, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnOccupants, schedules: sf.tmp_schedules))
- assert_equal(0, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnLightingInterior, schedules: sf.tmp_schedules))
- assert_equal(0, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnLightingGarage, schedules: sf.tmp_schedules))
+ assert_equal(0, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:Occupants].name, schedules: sf.tmp_schedules))
+ assert_equal(0, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:LightingInterior].name, schedules: sf.tmp_schedules))
+ assert_equal(0, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:LightingGarage].name, schedules: sf.tmp_schedules))
assert_equal(0, get_annual_equivalent_full_load_hrs(model, Constants.ObjectNameLightingExterior + ' schedule'))
- assert_equal(0, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnCookingRange, schedules: sf.tmp_schedules))
- assert_equal(0, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnDishwasher, schedules: sf.tmp_schedules))
- assert_equal(0, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnClothesWasher, schedules: sf.tmp_schedules))
- assert_equal(0, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnClothesDryer, schedules: sf.tmp_schedules))
- assert_equal(0, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnCeilingFan, schedules: sf.tmp_schedules))
- assert_equal(0, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnPlugLoadsOther, schedules: sf.tmp_schedules))
- assert_equal(0, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnPlugLoadsTV, schedules: sf.tmp_schedules))
- assert_equal(0, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnHotWaterDishwasher, schedules: sf.tmp_schedules))
- assert_equal(0, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnHotWaterClothesWasher, schedules: sf.tmp_schedules))
- assert_equal(0, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnHotWaterFixtures, schedules: sf.tmp_schedules))
+ assert_equal(0, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:CookingRange].name, schedules: sf.tmp_schedules))
+ assert_equal(0, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:Dishwasher].name, schedules: sf.tmp_schedules))
+ assert_equal(0, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:ClothesWasher].name, schedules: sf.tmp_schedules))
+ assert_equal(0, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:ClothesDryer].name, schedules: sf.tmp_schedules))
+ assert_equal(0, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:CeilingFan].name, schedules: sf.tmp_schedules))
+ assert_equal(0, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:PlugLoadsOther].name, schedules: sf.tmp_schedules))
+ assert_equal(0, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:PlugLoadsTV].name, schedules: sf.tmp_schedules))
+ assert_equal(0, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:HotWaterDishwasher].name, schedules: sf.tmp_schedules))
+ assert_equal(0, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:HotWaterClothesWasher].name, schedules: sf.tmp_schedules))
+ assert_equal(0, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:HotWaterFixtures].name, schedules: sf.tmp_schedules))
assert_in_epsilon(8760, get_annual_equivalent_full_load_hrs(model, Constants.ObjectNameMechanicalVentilationHouseFan + ' schedule'), @tol)
- assert(!sf.schedules.keys.include?(SchedulesFile::ColumnSleeping))
+ assert(!sf.schedules.keys.include?(SchedulesFile::Columns[:Sleeping].name))
assert_in_epsilon(Constants.NumHoursInYear(@year), sf.annual_equivalent_full_load_hrs(col_name: column_name, schedules: sf.tmp_schedules), @tol)
end
@@ -394,22 +404,22 @@ def test_stochastic_power_outage_schedules
unavailable_month_hrs = { 0 => 31.0 * 24.0 - 10.0, 11 => 31.0 * 24.0 - 5.0 }
- assert_in_epsilon(6689, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnOccupants, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(2086 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnLightingInterior, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnLightingInterior, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(2086 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnLightingGarage, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnLightingGarage, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(6689, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:Occupants].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(2086 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:LightingInterior].name, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:LightingInterior].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(2086 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:LightingGarage].name, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:LightingGarage].name, schedules: sf.tmp_schedules), @tol)
assert_in_epsilon(4342 * get_available_hrs_ratio(unavailable_month_hrs, Schedule.LightingMonthlyMultipliers), get_annual_equivalent_full_load_hrs(model, Constants.ObjectNameLightingExterior + ' schedule'), @tol)
- assert_in_epsilon(534 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnCookingRange, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnCookingRange, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(213 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnDishwasher, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnDishwasher, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(134 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnClothesWasher, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnClothesWasher, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(151 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnClothesDryer, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnClothesDryer, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(3250 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnCeilingFan, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnCeilingFan, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(4840 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnPlugLoadsOther, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnPlugLoadsOther, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(4840 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnPlugLoadsTV, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnPlugLoadsTV, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(273 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnHotWaterDishwasher, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnHotWaterDishwasher, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(346 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnHotWaterClothesWasher, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnHotWaterClothesWasher, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(887 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnHotWaterFixtures, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnHotWaterFixtures, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(534 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:CookingRange].name, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:CookingRange].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(213 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:Dishwasher].name, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:Dishwasher].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(134 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:ClothesWasher].name, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:ClothesWasher].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(151 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:ClothesDryer].name, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:ClothesDryer].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(3250 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:CeilingFan].name, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:CeilingFan].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(4840 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:PlugLoadsOther].name, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:PlugLoadsOther].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(4840 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:PlugLoadsTV].name, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:PlugLoadsTV].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(273 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:HotWaterDishwasher].name, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:HotWaterDishwasher].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(346 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:HotWaterClothesWasher].name, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:HotWaterClothesWasher].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(887 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:HotWaterFixtures].name, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:HotWaterFixtures].name, schedules: sf.tmp_schedules), @tol)
assert_in_epsilon(8760 * get_available_hrs_ratio(unavailable_month_hrs), get_annual_equivalent_full_load_hrs(model, Constants.ObjectNameMechanicalVentilationHouseFan + ' schedule'), @tol)
- assert(!sf.schedules.keys.include?(SchedulesFile::ColumnSleeping))
+ assert(!sf.schedules.keys.include?(SchedulesFile::Columns[:Sleeping].name))
assert_in_epsilon(unavailable_month_hrs.values.sum, sf.annual_equivalent_full_load_hrs(col_name: column_name, schedules: sf.tmp_schedules), 0.001)
end
@@ -454,22 +464,22 @@ def test_stochastic_power_outage_schedules2
unavailable_month_hrs = { 0 => 31.0 * 24.0, 1 => 28.0 * 24.0 - 24.0, 11 => 31.0 * 24.0 - 5.0 }
- assert_in_epsilon(6689, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnOccupants, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(2086 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnLightingInterior, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnLightingInterior, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(2086 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnLightingGarage, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnLightingGarage, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(6689, sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:Occupants].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(2086 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:LightingInterior].name, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:LightingInterior].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(2086 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:LightingGarage].name, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:LightingGarage].name, schedules: sf.tmp_schedules), @tol)
assert_in_epsilon(4342 * get_available_hrs_ratio(unavailable_month_hrs, Schedule.LightingMonthlyMultipliers), get_annual_equivalent_full_load_hrs(model, Constants.ObjectNameLightingExterior + ' schedule'), @tol)
- assert_in_epsilon(534 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnCookingRange, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnCookingRange, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(213 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnDishwasher, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnDishwasher, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(134 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnClothesWasher, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnClothesWasher, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(151 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnClothesDryer, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnClothesDryer, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(3250 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnCeilingFan, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnCeilingFan, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(4840 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnPlugLoadsOther, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnPlugLoadsOther, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(4840 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnPlugLoadsTV, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnPlugLoadsTV, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(273 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnHotWaterDishwasher, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnHotWaterDishwasher, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(346 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnHotWaterClothesWasher, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnHotWaterClothesWasher, schedules: sf.tmp_schedules), @tol)
- assert_in_epsilon(887 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnHotWaterFixtures, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::ColumnHotWaterFixtures, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(534 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:CookingRange].name, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:CookingRange].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(213 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:Dishwasher].name, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:Dishwasher].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(134 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:ClothesWasher].name, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:ClothesWasher].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(151 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:ClothesDryer].name, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:ClothesDryer].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(3250 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:CeilingFan].name, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:CeilingFan].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(4840 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:PlugLoadsOther].name, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:PlugLoadsOther].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(4840 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:PlugLoadsTV].name, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:PlugLoadsTV].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(273 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:HotWaterDishwasher].name, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:HotWaterDishwasher].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(346 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:HotWaterClothesWasher].name, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:HotWaterClothesWasher].name, schedules: sf.tmp_schedules), @tol)
+ assert_in_epsilon(887 - sf.period_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:HotWaterFixtures].name, period: unavailable_period), sf.annual_equivalent_full_load_hrs(col_name: SchedulesFile::Columns[:HotWaterFixtures].name, schedules: sf.tmp_schedules), @tol)
assert_in_epsilon(8760 * get_available_hrs_ratio(unavailable_month_hrs), get_annual_equivalent_full_load_hrs(model, Constants.ObjectNameMechanicalVentilationHouseFan + ' schedule'), @tol)
- assert(!sf.schedules.keys.include?(SchedulesFile::ColumnSleeping))
+ assert(!sf.schedules.keys.include?(SchedulesFile::Columns[:Sleeping].name))
assert_in_epsilon(unavailable_month_hrs.values.sum, sf.annual_equivalent_full_load_hrs(col_name: column_name, schedules: sf.tmp_schedules), 0.001)
end
@@ -688,6 +698,12 @@ def test_set_unavailable_periods_leap_year
_test_day_schedule(schedule, 3, 1, year, 0, 24)
end
+ def test_unavailable_period_csv_entries
+ csv_entries = Schedule.get_unavailable_periods_csv_data.map { |h| h['Schedule Name'] }
+ unavailable_period_columns = SchedulesFile::Columns.values.select { |c| c.used_by_unavailable_periods }.map { |c| c.name }.sort
+ assert_equal(unavailable_period_columns.sort, csv_entries.sort)
+ end
+
def _add_unavailable_period(hpxml, column_name, begin_month, begin_day, begin_hour, end_month, end_day, end_hour, natvent_availability = nil)
hpxml.header.unavailable_periods.add(column_name: column_name,
begin_month: begin_month,
diff --git a/hpxml-measures/ReportSimulationOutput/measure.xml b/hpxml-measures/ReportSimulationOutput/measure.xml
index 5ceec63bb..c92cced5e 100644
--- a/hpxml-measures/ReportSimulationOutput/measure.xml
+++ b/hpxml-measures/ReportSimulationOutput/measure.xml
@@ -3,8 +3,8 @@
3.1
report_simulation_output
df9d170c-c21a-4130-866d-0d46b06073fd
- 0f71215d-a222-485f-b614-630888e7db65
- 2024-01-25T22:35:16Z
+ 710f2d3c-ddf8-4b04-8a52-bf34bb01b07e
+ 2024-02-22T17:59:44Z
9BF1E6AC
ReportSimulationOutput
HPXML Simulation Output Report
@@ -1935,7 +1935,7 @@
test_report_sim_output.rb
rb
test
- 3A0094A9
+ 3ED3C0C5
diff --git a/hpxml-measures/ReportSimulationOutput/tests/test_report_sim_output.rb b/hpxml-measures/ReportSimulationOutput/tests/test_report_sim_output.rb
index 817d63df5..7a0eebf99 100644
--- a/hpxml-measures/ReportSimulationOutput/tests/test_report_sim_output.rb
+++ b/hpxml-measures/ReportSimulationOutput/tests/test_report_sim_output.rb
@@ -782,7 +782,7 @@ def test_timeseries_hourly_enduses_vacancy
annual_csv, timeseries_csv = _test_measure(args_hash)
assert(File.exist?(annual_csv))
assert(File.exist?(timeseries_csv))
- expected_timeseries_cols = ['Time'] + BaseHPXMLTimeseriesColsEndUses
+ expected_timeseries_cols = ['Time'] + BaseHPXMLTimeseriesColsEndUses + ["End Use: #{FT::Elec}: #{EUT::HotWaterRecircPump}"]
actual_timeseries_cols = File.readlines(timeseries_csv)[0].strip.split(',')
assert_equal(expected_timeseries_cols.sort, actual_timeseries_cols.sort)
timeseries_rows = CSV.read(timeseries_csv)
diff --git a/hpxml-measures/docs/source/workflow_inputs.rst b/hpxml-measures/docs/source/workflow_inputs.rst
index 5550b6f3f..a93ea3e2b 100644
--- a/hpxml-measures/docs/source/workflow_inputs.rst
+++ b/hpxml-measures/docs/source/workflow_inputs.rst
@@ -576,8 +576,8 @@ Building construction is entered in ``/HPXML/Building/BuildingDetails/BuildingSu
EnergyPlus simulation results will be multiplied by this value.
For example, when modeling :ref:`bldg_type_bldgs`, this allows modeling *unique* dwelling units, rather than *all* dwelling units, to reduce simulation runtime.
.. [#] If NumberofBathrooms not provided, calculated as NumberofBedrooms/2 + 0.5 based on the `2010 BAHSP `_.
- .. [#] If neither ConditionedBuildingVolume nor AverageCeilingHeight provided, AverageCeilingHeight defaults to the lesser of 8.0 and InfiltrationVolume / ConditionedFloorArea.
- If needed, additional defaulting is performed using the following relationship: ConditionedBuildingVolume = ConditionedFloorArea * AverageCeilingHeight + ConditionedCrawlspaceVolume.
+ .. [#] If neither ConditionedBuildingVolume nor AverageCeilingHeight provided, AverageCeilingHeight defaults to 8 ft.
+ If one is provided, the other is calculated using the following relationship: ConditionedBuildingVolume = ConditionedFloorArea * AverageCeilingHeight + ConditionedCrawlspaceVolume.
HPXML Schedules
***************
@@ -646,8 +646,6 @@ The column names available in the schedule CSV files are:
``water_heater_setpoint`` F Water heater setpoint schedule. No
``water_heater_operating_mode`` 0/1 Heat pump water heater operating mode schedule. 0=hybrid/auto, 1=heat pump only. No
``battery`` -1 to 1 Battery schedule. Positive for charging, negative for discharging. No
- ``vacancy`` 0/1 Vacancy schedule. 0=occupied, 1=vacant. Automatically overrides other columns. N/A
- ``outage`` 0/1 Power outage schedule. 0=power. 1=nopower. Automatically overrides other columns. N/A
================================ ======= ================================================================================= ===============================
Columns with units of `frac` must be normalized to MAX=1; that is, these schedules only define *when* energy is used, not *how much* energy is used.
@@ -1670,7 +1668,7 @@ Each in-unit boiler is entered as a ``/HPXML/Building/BuildingDetails/Systems/HV
.. [#] The sum of all ``FractionHeatLoadServed`` (across all HVAC systems) must be less than or equal to 1.
.. [#] FractionHeatLoadServed is required unless the heating system is a heat pump backup system (i.e., referenced by a ``HeatPump[BackupType="separate"]/BackupSystem``; see :ref:`hvac_heatpump`), in which case FractionHeatLoadServed is not allowed.
Heat pump backup will only operate during colder temperatures when the heat pump runs out of heating capacity or is disabled due to a switchover/lockout temperature.
- .. [#] If ElectricAuxiliaryEnergy not provided, defaults as follows:
+ .. [#] If ElectricAuxiliaryEnergy not provided, defaults as follows per ANSI/RESNET/ICC 301-2019:
\- **Oil boiler**: 330 kWh/yr
@@ -1697,8 +1695,8 @@ Each shared boiler (serving multiple dwelling units) is entered as a ``/HPXML/Bu
``HeatingSystemFuel`` string See [#]_ Yes Fuel type
``AnnualHeatingEfficiency[Units="AFUE"]/Value`` double frac > 0, <= 1 Yes Rated efficiency
``FractionHeatLoadServed`` double frac >= 0, <= 1 [#]_ See [#]_ Fraction of heating load served
- ``extension/SharedLoopWatts`` double W >= 0 Yes Shared loop power
- ``extension/FanCoilWatts`` double W >= 0 See [#]_ Fan coil power
+ ``ElectricAuxiliaryEnergy`` or ``extension/SharedLoopWatts`` double kWh/yr or W >= 0 No See [#]_ Electric auxiliary energy or shared loop power
+ ``ElectricAuxiliaryEnergy`` or ``extension/FanCoilWatts`` double kWh/yr or W >= 0 No [#]_ Electric auxiliary energy or fan coil power
============================================================ ======= =========== =============== ======== ============== =========================================
.. [#] UnitLocation choices are "conditioned space", "basement - unconditioned", "basement - conditioned", "attic - unvented", "attic - vented", "garage", "crawlspace - unvented", "crawlspace - vented", "crawlspace - conditioned", "other exterior", "other housing unit", "other heated space", "other multifamily buffer space", "other non-freezing space", "roof deck", "manufactured home belly", or "unconditioned space".
@@ -1715,7 +1713,15 @@ Each shared boiler (serving multiple dwelling units) is entered as a ``/HPXML/Bu
.. [#] The sum of all ``FractionHeatLoadServed`` (across all HVAC systems) must be less than or equal to 1.
.. [#] FractionHeatLoadServed is required unless the heating system is a heat pump backup system (i.e., referenced by a ``HeatPump[BackupType="separate"]/BackupSystem``; see :ref:`hvac_heatpump`), in which case FractionHeatLoadServed is not allowed.
Heat pump backup will only operate during colder temperatures when the heat pump runs out of heating capacity or is disabled due to a switchover/lockout temperature.
- .. [#] FanCoilWatts only required if boiler connected to fan coil.
+ .. [#] If ElectricAuxiliaryEnergy nor SharedLoopWatts provided, defaults as follows per ANSI/RESNET/ICC 301-2019:
+
+ \- **Shared boiler w/ baseboard**: 220 kWh/yr
+
+ \- **Shared boiler w/ water loop heat pump**: 265 kWh/yr
+
+ \- **Shared boiler w/ fan coil**: 438 kWh/yr
+
+ .. [#] FanCoilWatts only used if boiler connected to fan coil and SharedLoopWatts provided.
.. _hvac_heating_stove:
@@ -4297,18 +4303,19 @@ HPXML Ceiling Fans
Each ceiling fan is entered as a ``/HPXML/Building/BuildingDetails/Lighting/CeilingFan``.
If not entered, the simulation will not include a ceiling fan.
- ========================================= ======= ======= =========== ======== ======== ==============================
- Element Type Units Constraints Required Default Notes
- ========================================= ======= ======= =========== ======== ======== ==============================
- ``SystemIdentifier`` id Yes Unique identifier
- ``Airflow[FanSpeed="medium"]/Efficiency`` double cfm/W > 0 No See [#]_ Efficiency at medium speed
- ``Count`` integer > 0 No See [#]_ Number of similar ceiling fans
- ``extension/WeekdayScheduleFractions`` array No See [#]_ 24 comma-separated weekday fractions
- ``extension/WeekendScheduleFractions`` array No 24 comma-separated weekend fractions
- ``extension/MonthlyScheduleMultipliers`` array No See [#]_ 12 comma-separated monthly multipliers
- ========================================= ======= ======= =========== ======== ======== ==============================
-
- .. [#] If Efficiency not provided, defaults to 3000 / 42.6 based on `ANSI/RESNET/ICC 301-2019 `_.
+ ============================================================================= ======= ========== =========== ======== ======== ==============================
+ Element Type Units Constraints Required Default Notes
+ ============================================================================= ======= ========== =========== ======== ======== ==============================
+ ``SystemIdentifier`` id Yes Unique identifier
+ ``Airflow[FanSpeed="medium"]/Efficiency`` and/or ``LabelEnergyUse`` double cfm/W or W > 0 No See [#]_ Efficiency at medium speed or EnergyGuide label average energy use
+ ``Count`` integer > 0 No See [#]_ Number of similar ceiling fans
+ ``extension/WeekdayScheduleFractions`` array No See [#]_ 24 comma-separated weekday fractions
+ ``extension/WeekendScheduleFractions`` array No 24 comma-separated weekend fractions
+ ``extension/MonthlyScheduleMultipliers`` array No See [#]_ 12 comma-separated monthly multipliers
+ ============================================================================= ======= ========== =========== ======== ======== ==============================
+
+ .. [#] If Efficiency and LabelEnergyUse not provided, LabelEnergyUse defaults to 42.6 W based on ANSI/RESNET/ICC 301-2022 Addendum C.
+ If both are provided, LabelEnergyUse will be used in the model.
.. [#] If Count not provided, defaults to NumberofBedrooms + 1 based on `ANSI/RESNET/ICC 301-2019 `_.
.. [#] If WeekdayScheduleFractions or WeekendScheduleFractions not provided (and :ref:`schedules_detailed` not used), default values from Table C.3(5) of ANSI/RESNET/ICC 301-2022 Addendum C are used: "0.057, 0.057, 0.057, 0.057, 0.057, 0.057, 0.057, 0.024, 0.024, 0.024, 0.024, 0.024, 0.024, 0.024, 0.024, 0.024, 0.024, 0.024, 0.052, 0.057, 0.057, 0.057, 0.057, 0.057".
.. [#] If MonthlyScheduleMultipliers not provided (and :ref:`schedules_detailed` not used), defaults based on monthly average outdoor temperatures per `ANSI/RESNET/ICC 301-2019 `_
@@ -4605,31 +4612,31 @@ HPXML Locations
The various locations used in an HPXML file are defined as follows:
- ============================== ======================================================= ============================================ =================
- Value Description Temperature Building Type
- ============================== ======================================================= ============================================ =================
- outside Ambient environment Weather data Any
- ground EnergyPlus calculation Any
- conditioned space Above-grade conditioned space maintained at setpoint EnergyPlus calculation Any
- attic - vented EnergyPlus calculation Any
- attic - unvented EnergyPlus calculation Any
- basement - conditioned Below-grade conditioned space maintained at setpoint EnergyPlus calculation Any
- basement - unconditioned EnergyPlus calculation Any
- crawlspace - vented EnergyPlus calculation Any
- crawlspace - unvented EnergyPlus calculation Any
- crawlspace - conditioned Below-grade conditioned space maintained at setpoint EnergyPlus calculation Any
- garage Single-family garage (not shared parking) EnergyPlus calculation Any
- manufactured home underbelly Underneath the belly, ambient environment Weather data Manufactured only
- manufactured home belly Within the belly Same as conditioned space Manufactured only
- other housing unit E.g., conditioned adjacent unit or conditioned corridor Same as conditioned space SFA/MF only
- other heated space E.g., shared laundry/equipment space Avg of conditioned space/outside; min of 68F SFA/MF only
- other multifamily buffer space E.g., enclosed unconditioned stairwell Avg of conditioned space/outside; min of 50F SFA/MF only
- other non-freezing space E.g., shared parking garage ceiling Floats with outside; minimum of 40F SFA/MF only
- other exterior Water heater outside Weather data Any
- exterior wall Ducts in exterior wall Avg of conditioned space/outside Any
- under slab Ducts under slab (ground) EnergyPlus calculation Any
- roof deck Ducts on roof deck (outside) Weather data Any
- ============================== ======================================================= ============================================ =================
+ ============================== ======================================================= ========================================================= =================
+ Value Description Temperature Building Type
+ ============================== ======================================================= ========================================================= =================
+ outside Ambient environment Weather data Any
+ ground EnergyPlus calculation Any
+ conditioned space Above-grade conditioned space maintained at setpoint EnergyPlus calculation Any
+ attic - vented EnergyPlus calculation Any
+ attic - unvented EnergyPlus calculation Any
+ basement - conditioned Below-grade conditioned space maintained at setpoint EnergyPlus calculation Any
+ basement - unconditioned EnergyPlus calculation Any
+ crawlspace - vented EnergyPlus calculation Any
+ crawlspace - unvented EnergyPlus calculation Any
+ crawlspace - conditioned Below-grade conditioned space maintained at setpoint EnergyPlus calculation Any
+ garage Single-family garage (not shared parking) EnergyPlus calculation Any
+ manufactured home underbelly Underneath the belly, ambient environment Weather data Manufactured only
+ manufactured home belly Within the belly Same as conditioned space Manufactured only
+ other housing unit E.g., conditioned adjacent unit or conditioned corridor Same as conditioned space SFA/MF only
+ other heated space E.g., shared laundry/equipment space Avg of conditioned space/outside; min of heating setpoint SFA/MF only
+ other multifamily buffer space E.g., enclosed unconditioned stairwell Avg of conditioned space/outside; min of 50F SFA/MF only
+ other non-freezing space E.g., shared parking garage ceiling Floats with outside; minimum of 40F SFA/MF only
+ other exterior Water heater outside Weather data Any
+ exterior wall Ducts in exterior wall Avg of conditioned space/outside Any
+ under slab Ducts under slab (ground) EnergyPlus calculation Any
+ roof deck Ducts on roof deck (outside) Weather data Any
+ ============================== ======================================================= ========================================================= =================
Validating & Debugging Errors
-----------------------------
diff --git a/hpxml-measures/tasks.rb b/hpxml-measures/tasks.rb
index ff31ffe97..0881fe348 100644
--- a/hpxml-measures/tasks.rb
+++ b/hpxml-measures/tasks.rb
@@ -406,7 +406,8 @@ def apply_hpxml_modification(hpxml_file, hpxml)
hpxml_bldg.dishwashers[0].location = adjacent_to
hpxml_bldg.refrigerators[0].location = adjacent_to
hpxml_bldg.cooking_ranges[0].location = adjacent_to
- elsif ['base-bldgtype-mf-unit-adjacent-to-multiple.xml'].include? hpxml_file
+ elsif ['base-bldgtype-mf-unit-adjacent-to-multiple.xml',
+ 'base-bldgtype-mf-unit-adjacent-to-multiple-hvac-none.xml'].include? hpxml_file
wall = hpxml_bldg.walls.select { |w|
w.interior_adjacent_to == HPXML::LocationConditionedSpace &&
w.exterior_adjacent_to == HPXML::LocationOtherHousingUnit
@@ -1325,21 +1326,25 @@ def apply_hpxml_modification(hpxml_file, hpxml)
hpxml_bldg.heat_pumps[0].number_of_units_served = 6
hpxml_bldg.heat_pumps[0].pump_watts_per_ton = 0.0
end
- if hpxml_file.include? 'shared-boiler'
- hpxml_bldg.heating_systems[0].shared_loop_watts = 600
- end
- if hpxml_file.include?('chiller') || hpxml_file.include?('cooling-tower')
- hpxml_bldg.cooling_systems[0].shared_loop_watts = 600
- end
- if hpxml_file.include? 'shared-ground-loop'
- hpxml_bldg.heat_pumps[0].shared_loop_watts = 600
- end
- if hpxml_file.include? 'fan-coil'
- if hpxml_file.include? 'boiler'
- hpxml_bldg.heating_systems[0].fan_coil_watts = 150
+ if hpxml_file.include? 'eae'
+ hpxml_bldg.heating_systems[0].electric_auxiliary_energy = 500.0
+ else
+ if hpxml_file.include? 'shared-boiler'
+ hpxml_bldg.heating_systems[0].shared_loop_watts = 600
end
- if hpxml_file.include? 'chiller'
- hpxml_bldg.cooling_systems[0].fan_coil_watts = 150
+ if hpxml_file.include?('chiller') || hpxml_file.include?('cooling-tower')
+ hpxml_bldg.cooling_systems[0].shared_loop_watts = 600
+ end
+ if hpxml_file.include? 'shared-ground-loop'
+ hpxml_bldg.heat_pumps[0].shared_loop_watts = 600
+ end
+ if hpxml_file.include? 'fan-coil'
+ if hpxml_file.include? 'boiler'
+ hpxml_bldg.heating_systems[0].fan_coil_watts = 150
+ end
+ if hpxml_file.include? 'chiller'
+ hpxml_bldg.cooling_systems[0].fan_coil_watts = 150
+ end
end
end
if hpxml_file.include? 'install-quality'
@@ -1777,7 +1782,10 @@ def apply_hpxml_modification(hpxml_file, hpxml)
hpxml_bldg.water_fixtures[1].flow_rate = 2.0
hpxml_bldg.water_fixtures[1].count = 3
end
- if ['base-dhw-recirc-demand-scheduled.xml'].include? hpxml_file
+ if ['base-dhw-recirc-demand-scheduled.xml',
+ 'base-schedules-simple.xml',
+ 'base-schedules-simple-vacancy.xml',
+ 'base-schedules-simple-power-outage.xml'].include? hpxml_file
hpxml_bldg.hot_water_distributions[0].recirculation_pump_weekday_fractions = Schedule.RecirculationPumpDemandControlledWeekdayFractions
hpxml_bldg.hot_water_distributions[0].recirculation_pump_weekend_fractions = Schedule.RecirculationPumpDemandControlledWeekendFractions
hpxml_bldg.hot_water_distributions[0].recirculation_pump_monthly_multipliers = Schedule.RecirculationPumpMonthlyMultipliers
@@ -2114,7 +2122,8 @@ def apply_hpxml_modification(hpxml_file, hpxml)
# -------------- #
# Logic that can only be applied based on the file name
- if ['base-lighting-ceiling-fans.xml'].include? hpxml_file
+ if ['base-lighting-ceiling-fans.xml',
+ 'base-lighting-ceiling-fans-label-energy-use.xml'].include? hpxml_file
hpxml_bldg.ceiling_fans[0].weekday_fractions = '0.057, 0.057, 0.057, 0.057, 0.057, 0.057, 0.057, 0.024, 0.024, 0.024, 0.024, 0.024, 0.024, 0.024, 0.024, 0.024, 0.024, 0.024, 0.057, 0.057, 0.057, 0.057, 0.057, 0.057'
hpxml_bldg.ceiling_fans[0].weekend_fractions = '0.057, 0.057, 0.057, 0.057, 0.057, 0.057, 0.057, 0.024, 0.024, 0.024, 0.024, 0.024, 0.024, 0.024, 0.024, 0.024, 0.024, 0.024, 0.057, 0.057, 0.057, 0.057, 0.057, 0.057'
hpxml_bldg.ceiling_fans[0].monthly_multipliers = '0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0'
diff --git a/hpxml-measures/workflow/hpxml_inputs.json b/hpxml-measures/workflow/hpxml_inputs.json
index 09f2a8e67..7d5a169f4 100644
--- a/hpxml-measures/workflow/hpxml_inputs.json
+++ b/hpxml-measures/workflow/hpxml_inputs.json
@@ -842,6 +842,11 @@
"sample_files/base-bldgtype-mf-unit-adjacent-to-other-heated-space.xml": {
"parent_hpxml": "sample_files/base-bldgtype-mf-unit.xml"
},
+ "sample_files/base-bldgtype-mf-unit-adjacent-to-multiple-hvac-none.xml": {
+ "parent_hpxml": "sample_files/base-bldgtype-mf-unit-adjacent-to-multiple.xml",
+ "heating_system_type": "none",
+ "cooling_system_type": "none"
+ },
"sample_files/base-bldgtype-mf-unit-adjacent-to-other-housing-unit.xml": {
"parent_hpxml": "sample_files/base-bldgtype-mf-unit.xml"
},
@@ -897,6 +902,9 @@
"sample_files/base-bldgtype-mf-unit-shared-boiler-only-fan-coil-ducted.xml": {
"parent_hpxml": "sample_files/base-bldgtype-mf-unit-shared-boiler-only-fan-coil.xml"
},
+ "sample_files/base-bldgtype-mf-unit-shared-boiler-only-fan-coil-eae.xml": {
+ "parent_hpxml": "sample_files/base-bldgtype-mf-unit-shared-boiler-only-fan-coil.xml"
+ },
"sample_files/base-bldgtype-mf-unit-shared-boiler-only-water-loop-heat-pump.xml": {
"parent_hpxml": "sample_files/base-bldgtype-mf-unit-shared-boiler-only-baseboard.xml"
},
@@ -2520,6 +2528,10 @@
"ceiling_fan_quantity": 4,
"ceiling_fan_cooling_setpoint_temp_offset": 0.5
},
+ "sample_files/base-lighting-ceiling-fans-label-energy-use.xml": {
+ "parent_hpxml": "sample_files/base-lighting-ceiling-fans.xml",
+ "ceiling_fan_label_energy_use": 39
+ },
"sample_files/base-lighting-holiday.xml": {
"parent_hpxml": "sample_files/base.xml",
"holiday_lighting_present": true,
@@ -2880,6 +2892,7 @@
},
"sample_files/base-misc-loads-large-uncommon.xml": {
"parent_hpxml": "sample_files/base-schedules-simple.xml",
+ "hot_water_distribution_system_type": "Standard",
"extra_refrigerator_present": true,
"extra_refrigerator_rated_annual_kwh": 700,
"freezer_present": true,
@@ -3154,15 +3167,30 @@
"geometry_unit_num_occupants": 5
},
"sample_files/base-schedules-simple.xml": {
- "parent_hpxml": "sample_files/base.xml"
+ "parent_hpxml": "sample_files/base.xml",
+ "hot_water_distribution_system_type": "Recirculation",
+ "hot_water_distribution_recirc_control_type": "no control",
+ "hot_water_distribution_recirc_piping_length": 50,
+ "hot_water_distribution_recirc_branch_piping_length": 50,
+ "hot_water_distribution_recirc_pump_power": 50
},
"sample_files/base-schedules-simple-vacancy.xml": {
"parent_hpxml": "sample_files/base.xml",
- "schedules_vacancy_period": "Dec 1 - Jan 31"
+ "schedules_vacancy_periods": "Dec 1 - Jan 31",
+ "hot_water_distribution_system_type": "Recirculation",
+ "hot_water_distribution_recirc_control_type": "no control",
+ "hot_water_distribution_recirc_piping_length": 50,
+ "hot_water_distribution_recirc_branch_piping_length": 50,
+ "hot_water_distribution_recirc_pump_power": 50
},
"sample_files/base-schedules-simple-power-outage.xml": {
"parent_hpxml": "sample_files/base.xml",
- "schedules_power_outage_period": "Jul 1 5 - Jul 31 14"
+ "schedules_power_outage_periods": "Jul 1 5 - Jul 31 14",
+ "hot_water_distribution_system_type": "Recirculation",
+ "hot_water_distribution_recirc_control_type": "no control",
+ "hot_water_distribution_recirc_piping_length": 50,
+ "hot_water_distribution_recirc_branch_piping_length": 50,
+ "hot_water_distribution_recirc_pump_power": 50
},
"sample_files/base-schedules-detailed-all-10-mins.xml": {
"parent_hpxml": "sample_files/base-simcontrol-timestep-10-mins.xml",
@@ -3184,7 +3212,7 @@
},
"sample_files/base-schedules-detailed-mixed-timesteps-power-outage.xml": {
"parent_hpxml": "sample_files/base-schedules-detailed-mixed-timesteps.xml",
- "schedules_power_outage_period": "Dec 1 5 - Jan 31 14"
+ "schedules_power_outage_periods": "Dec 1 5 - Jan 31 14"
},
"sample_files/base-schedules-detailed-occupancy-stochastic.xml": {
"parent_hpxml": "sample_files/base.xml",
@@ -3192,11 +3220,11 @@
},
"sample_files/base-schedules-detailed-occupancy-stochastic-vacancy.xml": {
"parent_hpxml": "sample_files/base-schedules-detailed-occupancy-stochastic.xml",
- "schedules_vacancy_period": "Dec 1 - Jan 31"
+ "schedules_vacancy_periods": "Dec 1 - Jan 31"
},
"sample_files/base-schedules-detailed-occupancy-stochastic-power-outage.xml": {
"parent_hpxml": "sample_files/base-schedules-detailed-occupancy-stochastic.xml",
- "schedules_power_outage_period": "Dec 1 5 - Jan 31 14"
+ "schedules_power_outage_periods": "Dec 1 5 - Jan 31 14"
},
"sample_files/base-schedules-detailed-occupancy-stochastic-10-mins.xml": {
"parent_hpxml": "sample_files/base.xml",
diff --git a/hpxml-measures/workflow/sample_files/base-bldgtype-mf-unit-adjacent-to-multiple-hvac-none.xml b/hpxml-measures/workflow/sample_files/base-bldgtype-mf-unit-adjacent-to-multiple-hvac-none.xml
new file mode 100644
index 000000000..6a3364fe5
--- /dev/null
+++ b/hpxml-measures/workflow/sample_files/base-bldgtype-mf-unit-adjacent-to-multiple-hvac-none.xml
@@ -0,0 +1,486 @@
+
+
+
+ HPXML
+ tasks.rb
+ 2000-01-01T00:00:00-07:00
+ create
+
+
+
+
+ 60
+
+
+
+ Bills
+
+
+
+
+
+
+
+
+
+ CO
+
+
+
+ proposed workscope
+
+
+
+
+ suburban
+ attached on one side
+ unit above and below
+ 180
+
+ electricity
+ natural gas
+
+
+
+ apartment unit
+ 6
+ 1.0
+ 1.0
+ 8.0
+ 3
+ 2
+ 900.0
+ 7200.0
+
+
+
+
+ 2006
+ 5B
+
+
+
+ USA_CO_Denver.Intl.AP.725650_TMY3
+
+ USA_CO_Denver.Intl.AP.725650_TMY3.epw
+
+
+
+
+
+
+
+ unit exterior only
+ 50.0
+
+ ACH
+ 3.0
+
+ 7200.0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ outside
+ conditioned space
+
+
+
+ 685.9
+ wood siding
+ 0.7
+ 0.92
+
+ gypsum board
+
+
+
+ 23.0
+
+
+
+
+ other heated space
+ conditioned space
+
+
+
+ 100.0
+ 0.7
+ 0.92
+
+ gypsum board
+
+
+
+ 23.0
+
+
+
+
+ other multifamily buffer space
+ conditioned space
+
+
+
+ 100.0
+ 0.7
+ 0.92
+
+ gypsum board
+
+
+
+ 23.0
+
+
+
+
+ other non-freezing space
+ conditioned space
+
+
+
+ 100.0
+ 0.7
+ 0.92
+
+ gypsum board
+
+
+
+ 23.0
+
+
+
+
+ other housing unit
+ conditioned space
+
+
+
+ 100.0
+ 0.7
+ 0.92
+
+ gypsum board
+
+
+
+ 4.0
+
+
+
+
+
+
+ other housing unit
+ conditioned space
+ ceiling
+
+
+
+ 900.0
+
+ gypsum board
+
+
+
+ 2.1
+
+
+
+
+ other non-freezing space
+ conditioned space
+ floor
+
+
+
+ 550.0
+
+
+ 18.7
+
+
+
+
+ other multifamily buffer space
+ conditioned space
+ floor
+
+
+
+ 200.0
+
+
+ 18.7
+
+
+
+
+ other heated space
+ conditioned space
+ floor
+
+
+
+ 150.0
+
+
+ 2.1
+
+
+
+
+
+
+ 35.3
+ 0
+ 0.33
+ 0.45
+
+
+ 0.7
+ 0.85
+
+ 0.67
+
+
+
+
+ 35.3
+ 180
+ 0.33
+ 0.45
+
+
+ 0.7
+ 0.85
+
+ 0.67
+
+
+
+
+ 52.9
+ 270
+ 0.33
+ 0.45
+
+
+ 0.7
+ 0.85
+
+ 0.67
+
+
+
+
+ 50.0
+ 270
+ 0.33
+ 0.45
+ 0.67
+
+
+
+
+
+
+
+ 20.0
+ 180
+ 4.4
+
+
+
+
+ 20.0
+ 0
+ 4.4
+
+
+
+
+ 20.0
+ 0
+ 4.4
+
+
+
+
+
+
+
+ electricity
+ storage water heater
+ conditioned space
+ 40.0
+ 1.0
+ 18767.0
+ 0.95
+ 125.0
+
+
+
+
+
+ 50.0
+
+
+
+ 0.0
+
+
+
+
+ shower head
+ true
+
+
+
+ faucet
+ false
+
+
+
+
+
+
+ conditioned space
+ 1.21
+ 380.0
+ 0.12
+ 1.09
+ 27.0
+ 6.0
+ 3.2
+
+
+
+ conditioned space
+ electricity
+ 3.73
+ true
+ 150.0
+
+
+
+ conditioned space
+ 307.0
+ 12
+ 0.12
+ 1.09
+ 22.32
+ 4.0
+
+
+
+ conditioned space
+ 650.0
+ true
+
+
+
+ conditioned space
+ electricity
+ false
+
+
+
+ false
+
+
+
+
+
+ interior
+ 0.4
+
+
+
+
+
+
+ interior
+ 0.1
+
+
+
+
+
+
+ interior
+ 0.25
+
+
+
+
+
+
+ exterior
+ 0.4
+
+
+
+
+
+
+ exterior
+ 0.1
+
+
+
+
+
+
+ exterior
+ 0.25
+
+
+
+
+
+
+
+
+ TV other
+
+ kWh/year
+ 620.0
+
+
+
+
+ other
+
+ kWh/year
+ 819.0
+
+
+ 0.855
+ 0.045
+
+
+
+
+
+
\ No newline at end of file
diff --git a/hpxml-measures/workflow/sample_files/base-bldgtype-mf-unit-shared-boiler-only-fan-coil-eae.xml b/hpxml-measures/workflow/sample_files/base-bldgtype-mf-unit-shared-boiler-only-fan-coil-eae.xml
new file mode 100644
index 000000000..681c3ce55
--- /dev/null
+++ b/hpxml-measures/workflow/sample_files/base-bldgtype-mf-unit-shared-boiler-only-fan-coil-eae.xml
@@ -0,0 +1,416 @@
+
+
+
+ HPXML
+ tasks.rb
+ 2000-01-01T00:00:00-07:00
+ create
+
+
+
+
+ 60
+
+
+
+ Bills
+
+
+
+
+
+
+
+
+
+ CO
+
+
+
+ proposed workscope
+
+
+
+
+ suburban
+ attached on one side
+ unit above and below
+ 180
+
+ electricity
+ natural gas
+
+
+
+ apartment unit
+ 6
+ 1.0
+ 1.0
+ 8.0
+ 3
+ 2
+ 900.0
+ 7200.0
+
+
+
+
+ 2006
+ 5B
+
+
+
+ USA_CO_Denver.Intl.AP.725650_TMY3
+
+ USA_CO_Denver.Intl.AP.725650_TMY3.epw
+
+
+
+
+
+
+
+ unit exterior only
+ 50.0
+
+ ACH
+ 3.0
+
+ 7200.0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ outside
+ conditioned space
+
+
+
+ 685.9
+ wood siding
+ 0.7
+ 0.92
+
+ gypsum board
+
+
+
+ 23.0
+
+
+
+
+ other housing unit
+ conditioned space
+
+
+
+ 293.9
+ 0.7
+ 0.92
+
+ gypsum board
+
+
+
+ 4.0
+
+
+
+
+
+
+ other housing unit
+ conditioned space
+ floor
+
+
+
+ 900.0
+
+
+ 2.1
+
+
+
+
+ other housing unit
+ conditioned space
+ ceiling
+
+
+
+ 900.0
+
+ gypsum board
+
+
+
+ 2.1
+
+
+
+
+
+
+ 35.3
+ 0
+ 0.33
+ 0.45
+
+
+ 0.7
+ 0.85
+
+ 0.67
+
+
+
+
+ 35.3
+ 180
+ 0.33
+ 0.45
+
+
+ 0.7
+ 0.85
+
+ 0.67
+
+
+
+
+ 52.9
+ 270
+ 0.33
+ 0.45
+
+
+ 0.7
+ 0.85
+
+ 0.67
+
+
+
+
+
+
+
+ 20.0
+ 180
+ 4.4
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+ 6
+
+
+
+ natural gas
+
+ AFUE
+ 0.92
+
+ 1.0
+ 500.0
+
+
+
+
+ 68.0
+
+
+
+
+
+ fan coil
+
+
+
+
+
+
+
+ electricity
+ storage water heater
+ conditioned space
+ 40.0
+ 1.0
+ 18767.0
+ 0.95
+ 125.0
+
+
+
+
+
+ 50.0
+
+
+
+ 0.0
+
+
+
+
+ shower head
+ true
+
+
+
+ faucet
+ false
+
+
+
+
+
+
+ conditioned space
+ 1.21
+ 380.0
+ 0.12
+ 1.09
+ 27.0
+ 6.0
+ 3.2
+
+
+
+ conditioned space
+ electricity
+ 3.73
+ true
+ 150.0
+
+
+
+ conditioned space
+ 307.0
+ 12
+ 0.12
+ 1.09
+ 22.32
+ 4.0
+
+
+
+ conditioned space
+ 650.0
+ true
+
+
+
+ conditioned space
+ electricity
+ false
+
+
+
+ false
+
+
+
+
+
+ interior
+ 0.4
+
+
+
+
+
+
+ interior
+ 0.1
+
+
+
+
+
+
+ interior
+ 0.25
+
+
+
+
+
+
+ exterior
+ 0.4
+
+
+
+
+
+
+ exterior
+ 0.1
+
+
+
+
+
+
+ exterior
+ 0.25
+
+
+
+
+
+
+
+
+ TV other
+
+ kWh/year
+ 620.0
+
+
+
+
+ other
+
+ kWh/year
+ 819.0
+
+
+ 0.855
+ 0.045
+
+
+
+
+
+
\ No newline at end of file
diff --git a/hpxml-measures/workflow/sample_files/base-lighting-ceiling-fans-label-energy-use.xml b/hpxml-measures/workflow/sample_files/base-lighting-ceiling-fans-label-energy-use.xml
new file mode 100644
index 000000000..27bbb54f1
--- /dev/null
+++ b/hpxml-measures/workflow/sample_files/base-lighting-ceiling-fans-label-energy-use.xml
@@ -0,0 +1,569 @@
+
+
+
+ HPXML
+ tasks.rb
+ 2000-01-01T00:00:00-07:00
+ create
+
+
+
+
+ 60
+
+
+
+ Bills
+
+
+
+
+
+
+
+
+
+ CO
+
+
+
+ proposed workscope
+
+
+
+
+ suburban
+ stand-alone
+ no units above or below
+ 180
+
+ electricity
+ natural gas
+
+
+
+ single-family detached
+ 2.0
+ 1.0
+ 8.0
+ 3
+ 2
+ 2700.0
+ 21600.0
+
+
+
+
+ 2006
+ 5B
+
+
+
+ USA_CO_Denver.Intl.AP.725650_TMY3
+
+ USA_CO_Denver.Intl.AP.725650_TMY3.epw
+
+
+
+
+
+
+
+ 50.0
+
+ ACH
+ 3.0
+
+ 21600.0
+
+
+
+
+
+
+
+ false
+
+
+ false
+
+
+
+
+
+
+
+
+
+
+ true
+
+
+
+
+
+
+
+
+
+
+ attic - unvented
+ 1509.3
+ asphalt or fiberglass shingles
+ 0.7
+ 0.92
+ 6.0
+
+
+ 2.3
+
+
+
+
+
+
+ outside
+ basement - conditioned
+ 115.6
+ wood siding
+ 0.7
+ 0.92
+
+
+ 23.0
+
+
+
+
+
+
+ outside
+ conditioned space
+
+
+
+ 1200.0
+ wood siding
+ 0.7
+ 0.92
+
+ gypsum board
+
+
+
+ 23.0
+
+
+
+
+ outside
+ attic - unvented
+ gable
+
+
+
+ 225.0
+ wood siding
+ 0.7
+ 0.92
+
+
+ 4.0
+
+
+
+
+
+
+ ground
+ basement - conditioned
+ 8.0
+ 1200.0
+ 8.0
+ 7.0
+
+ gypsum board
+
+
+
+
+ continuous - exterior
+ 8.9
+ 0.0
+ 8.0
+
+
+ continuous - interior
+ 0.0
+
+
+
+
+
+
+
+ attic - unvented
+ conditioned space
+ ceiling
+
+
+
+ 1350.0
+
+ gypsum board
+
+
+
+ 39.3
+
+
+
+
+
+
+ basement - conditioned
+ 1350.0
+ 4.0
+ 150.0
+
+
+
+ 0.0
+ 0.0
+
+
+
+
+
+ 0.0
+ 0.0
+
+
+
+ 0.0
+ 0.0
+
+
+
+
+
+
+ 108.0
+ 0
+ 0.33
+ 0.45
+
+
+ 0.7
+ 0.85
+
+ 0.67
+
+
+
+
+ 72.0
+ 90
+ 0.33
+ 0.45
+
+
+ 0.7
+ 0.85
+
+ 0.67
+
+
+
+
+ 108.0
+ 180
+ 0.33
+ 0.45
+
+
+ 0.7
+ 0.85
+
+ 0.67
+
+
+
+
+ 72.0
+ 270
+ 0.33
+ 0.45
+
+
+ 0.7
+ 0.85
+
+ 0.67
+
+
+
+
+
+
+
+ 40.0
+ 180
+ 4.4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ natural gas
+ 36000.0
+
+ AFUE
+ 0.92
+
+ 1.0
+
+
+
+
+ central air conditioner
+ electricity
+ 24000.0
+ single stage
+ 1.0
+
+ SEER
+ 13.0
+
+ 0.73
+
+
+
+
+ 68.0
+ 78.0
+
+ 0.5
+
+
+
+
+
+
+ regular velocity
+
+ supply
+
+ CFM25
+ 75.0
+ to outside
+
+
+
+ return
+
+ CFM25
+ 25.0
+ to outside
+
+
+
+
+ supply
+ 4.0
+ attic - unvented
+ 150.0
+
+
+
+ return
+ 0.0
+ attic - unvented
+ 50.0
+
+
+
+
+
+
+
+
+ electricity
+ storage water heater
+ conditioned space
+ 40.0
+ 1.0
+ 18767.0
+ 0.95
+ 125.0
+
+
+
+
+
+ 50.0
+
+
+
+ 0.0
+
+
+
+
+ shower head
+ true
+
+
+
+ faucet
+ false
+
+
+
+
+
+
+ conditioned space
+ 1.21
+ 380.0
+ 0.12
+ 1.09
+ 27.0
+ 6.0
+ 3.2
+
+
+
+ conditioned space
+ electricity
+ 3.73
+ true
+ 150.0
+
+
+
+ conditioned space
+ 307.0
+ 12
+ 0.12
+ 1.09
+ 22.32
+ 4.0
+
+
+
+ conditioned space
+ 650.0
+ true
+
+
+
+ conditioned space
+ electricity
+ false
+
+
+
+ false
+
+
+
+
+
+ interior
+ 0.4
+
+
+
+
+
+
+ interior
+ 0.1
+
+
+
+
+
+
+ interior
+ 0.25
+
+
+
+
+
+
+ exterior
+ 0.4
+
+
+
+
+
+
+ exterior
+ 0.1
+
+
+
+
+
+
+ exterior
+ 0.25
+
+
+
+
+
+
+
+ medium
+ 100.0
+
+ 4
+ 39.0
+
+ 0.057, 0.057, 0.057, 0.057, 0.057, 0.057, 0.057, 0.024, 0.024, 0.024, 0.024, 0.024, 0.024, 0.024, 0.024, 0.024, 0.024, 0.024, 0.057, 0.057, 0.057, 0.057, 0.057, 0.057
+ 0.057, 0.057, 0.057, 0.057, 0.057, 0.057, 0.057, 0.024, 0.024, 0.024, 0.024, 0.024, 0.024, 0.024, 0.024, 0.024, 0.024, 0.024, 0.057, 0.057, 0.057, 0.057, 0.057, 0.057
+ 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0
+
+
+
+
+
+
+ TV other
+
+ kWh/year
+ 620.0
+
+
+
+
+ other
+
+ kWh/year
+ 2457.0
+
+
+ 0.855
+ 0.045
+
+
+
+
+
+
\ No newline at end of file
diff --git a/hpxml-measures/workflow/sample_files/base-schedules-simple-power-outage.xml b/hpxml-measures/workflow/sample_files/base-schedules-simple-power-outage.xml
index c22f4be06..9354f6375 100644
--- a/hpxml-measures/workflow/sample_files/base-schedules-simple-power-outage.xml
+++ b/hpxml-measures/workflow/sample_files/base-schedules-simple-power-outage.xml
@@ -429,13 +429,21 @@
-
- 50.0
-
+
+ no control
+ 50.0
+ 50.0
+ 50.0
+
0.0
+
+ 0.012, 0.006, 0.004, 0.005, 0.010, 0.034, 0.078, 0.086, 0.080, 0.067, 0.056, 0.047, 0.040, 0.035, 0.033, 0.031, 0.038, 0.051, 0.060, 0.060, 0.055, 0.048, 0.038, 0.026
+ 0.012, 0.006, 0.004, 0.005, 0.010, 0.034, 0.078, 0.086, 0.080, 0.067, 0.056, 0.047, 0.040, 0.035, 0.033, 0.031, 0.038, 0.051, 0.060, 0.060, 0.055, 0.048, 0.038, 0.026
+ 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0
+
diff --git a/hpxml-measures/workflow/sample_files/base-schedules-simple-vacancy.xml b/hpxml-measures/workflow/sample_files/base-schedules-simple-vacancy.xml
index 742a9e647..fdf79411e 100644
--- a/hpxml-measures/workflow/sample_files/base-schedules-simple-vacancy.xml
+++ b/hpxml-measures/workflow/sample_files/base-schedules-simple-vacancy.xml
@@ -428,13 +428,21 @@
-
- 50.0
-
+
+ no control
+ 50.0
+ 50.0
+ 50.0
+
0.0
+
+ 0.012, 0.006, 0.004, 0.005, 0.010, 0.034, 0.078, 0.086, 0.080, 0.067, 0.056, 0.047, 0.040, 0.035, 0.033, 0.031, 0.038, 0.051, 0.060, 0.060, 0.055, 0.048, 0.038, 0.026
+ 0.012, 0.006, 0.004, 0.005, 0.010, 0.034, 0.078, 0.086, 0.080, 0.067, 0.056, 0.047, 0.040, 0.035, 0.033, 0.031, 0.038, 0.051, 0.060, 0.060, 0.055, 0.048, 0.038, 0.026
+ 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0
+
diff --git a/hpxml-measures/workflow/sample_files/base-schedules-simple.xml b/hpxml-measures/workflow/sample_files/base-schedules-simple.xml
index cf5532808..e3c6947bd 100644
--- a/hpxml-measures/workflow/sample_files/base-schedules-simple.xml
+++ b/hpxml-measures/workflow/sample_files/base-schedules-simple.xml
@@ -418,13 +418,21 @@
-
- 50.0
-
+
+ no control
+ 50.0
+ 50.0
+ 50.0
+
0.0
+
+ 0.012, 0.006, 0.004, 0.005, 0.010, 0.034, 0.078, 0.086, 0.080, 0.067, 0.056, 0.047, 0.040, 0.035, 0.033, 0.031, 0.038, 0.051, 0.060, 0.060, 0.055, 0.048, 0.038, 0.026
+ 0.012, 0.006, 0.004, 0.005, 0.010, 0.034, 0.078, 0.086, 0.080, 0.067, 0.056, 0.047, 0.040, 0.035, 0.033, 0.031, 0.038, 0.051, 0.060, 0.060, 0.055, 0.048, 0.038, 0.026
+ 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0
+
diff --git a/hpxml-measures/workflow/tests/base_results/results_workflow_simulations1.csv b/hpxml-measures/workflow/tests/base_results/results_workflow_simulations1.csv
index af7535626..c9a20d6cb 100644
--- a/hpxml-measures/workflow/tests/base_results/results_workflow_simulations1.csv
+++ b/hpxml-measures/workflow/tests/base_results/results_workflow_simulations1.csv
@@ -22,6 +22,7 @@ base-atticroof-vented.xml,58.679,58.679,35.268,35.268,23.411,0.0,0.0,0.0,0.0,0.0
base-battery-scheduled.xml,60.954,60.954,37.329,37.329,23.625,0.0,0.0,0.0,0.0,0.0,0.0,0.39,0.0,0.0,4.251,0.802,9.014,0.0,0.0,4.507,0.0,0.334,0.0,0.0,0.0,0.0,2.072,0.0,0.0,0.319,0.365,1.513,1.529,0.0,2.116,8.384,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.735,23.625,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,22.125,0.0,13.973,9.071,0.615,0.0,0.0,0.0,0.0,2086.9,3998.4,3998.4,23.508,19.176,0.0,3.54,3.638,0.512,7.506,0.63,10.087,-12.691,0.0,0.0,0.0,8.29,-0.067,4.807,0.0,0.728,0.0,5.099,-7.8,-2.489,0.0,-0.031,-0.441,-0.049,2.748,-0.02,-1.328,11.723,0.0,0.0,0.0,-6.24,-0.063,-1.137,-3.781,-0.162,0.0,3.101,7.782,2.018,1354.7,998.0,11171.6,2563.5,1.321,36000.0,24000.0,0.0,6.8,91.76,32706.0,8608.0,7508.0,0.0,575.0,6840.0,0.0,0.0,2408.0,2171.0,4597.0,19675.0,5934.0,7037.0,0.0,207.0,265.0,0.0,0.0,0.0,2293.0,619.0,3320.0,0.0,0.0,0.0,0.0
base-battery.xml,59.22,59.22,35.594,35.594,23.625,0.0,0.0,0.0,0.0,0.0,0.0,0.39,0.0,0.0,4.251,0.802,9.014,0.0,0.0,4.507,0.0,0.334,0.0,0.0,0.0,0.0,2.072,0.0,0.0,0.319,0.365,1.513,1.529,0.0,2.116,8.384,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,23.625,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,22.125,0.0,13.973,9.071,0.615,0.0,0.0,0.0,0.0,2052.4,3884.4,3884.4,23.508,19.176,0.0,3.54,3.638,0.512,7.506,0.63,10.087,-12.691,0.0,0.0,0.0,8.29,-0.067,4.807,0.0,0.728,0.0,5.099,-7.8,-2.489,0.0,-0.031,-0.441,-0.049,2.748,-0.02,-1.328,11.723,0.0,0.0,0.0,-6.24,-0.063,-1.137,-3.781,-0.162,0.0,3.101,7.782,2.018,1354.7,998.0,11171.6,2563.5,0.0,36000.0,24000.0,0.0,6.8,91.76,32706.0,8608.0,7508.0,0.0,575.0,6840.0,0.0,0.0,2408.0,2171.0,4597.0,19675.0,5934.0,7037.0,0.0,207.0,265.0,0.0,0.0,0.0,2293.0,619.0,3320.0,0.0,0.0,0.0,0.0
base-bldgtype-mf-unit-adjacent-to-multifamily-buffer-space.xml,37.028,37.028,24.04,24.04,12.987,0.0,0.0,0.0,0.0,0.0,0.0,0.095,0.0,0.0,1.534,0.185,9.672,0.0,0.0,2.025,0.0,0.206,0.0,0.0,0.0,0.0,1.688,0.0,0.0,0.319,0.365,1.513,1.529,0.0,2.116,2.795,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,12.987,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,12.04,0.0,2.898,9.37,0.731,0.0,0.0,0.0,0.0,1496.3,1906.1,1906.1,8.305,6.269,0.0,2.942,3.648,0.0,0.0,0.585,1.314,-1.599,0.0,0.0,2.977,0.0,-0.048,1.674,0.0,0.0,0.0,5.215,-3.529,-1.183,0.0,-0.891,-0.193,0.0,0.0,-0.044,-0.088,1.303,0.0,0.0,-0.905,0.0,-0.045,-0.267,-0.401,0.0,0.0,0.548,3.087,0.842,1354.7,998.0,11171.5,3093.4,0.0,12000.0,12000.0,0.0,6.8,91.76,12345.0,5658.0,903.0,0.0,378.0,1949.0,0.0,963.0,0.0,963.0,1532.0,8173.0,2276.0,1142.0,0.0,142.0,280.0,0.0,403.0,0.0,403.0,206.0,3320.0,520.0,0.0,-280.0,800.0
+base-bldgtype-mf-unit-adjacent-to-multiple-hvac-none.xml,22.488,22.488,22.488,22.488,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,9.565,0.0,0.0,2.025,0.0,0.206,0.0,0.0,0.0,0.0,2.057,0.0,0.0,0.319,0.365,1.513,1.529,0.0,2.116,2.795,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,9.37,0.62,0.0,0.0,0.0,0.0,1459.3,1409.8,1459.3,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1354.7,998.0,11171.5,3093.4,0.0,0.0,0.0,0.0,6.8,91.76,7315.0,0.0,2576.0,0.0,296.0,1671.0,0.0,1239.0,0.0,0.0,1532.0,8391.0,0.0,3264.0,0.0,142.0,277.0,0.0,1181.0,0.0,0.0,206.0,3320.0,520.0,0.0,-280.0,800.0
base-bldgtype-mf-unit-adjacent-to-multiple.xml,32.364,32.364,24.943,24.943,7.422,0.0,0.0,0.0,0.0,0.0,0.0,0.054,0.0,0.0,2.077,0.304,9.557,0.0,0.0,2.025,0.0,0.206,0.0,0.0,0.0,0.0,2.083,0.0,0.0,0.319,0.365,1.513,1.529,0.0,2.116,2.795,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,7.422,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,6.884,0.0,5.047,9.37,0.612,0.0,0.0,0.0,0.0,1513.4,2227.0,2227.0,10.066,11.013,0.0,-0.005,3.291,0.0,0.0,1.39,3.735,-4.234,0.0,0.0,4.543,0.0,-0.086,1.252,0.0,0.791,0.0,2.747,-5.509,-1.139,0.0,-0.001,-0.416,0.0,0.0,-0.396,-0.133,3.971,0.0,0.0,-2.921,0.0,-0.081,-0.23,-1.203,-0.123,0.0,0.499,5.302,0.886,1354.7,998.0,11171.5,3093.4,0.0,12000.0,12000.0,0.0,6.8,91.76,12328.0,5013.0,2576.0,0.0,296.0,1671.0,0.0,1239.0,0.0,0.0,1532.0,9963.0,1572.0,3264.0,0.0,142.0,277.0,0.0,1181.0,0.0,0.0,206.0,3320.0,520.0,0.0,-280.0,800.0
base-bldgtype-mf-unit-adjacent-to-non-freezing-space.xml,50.251,50.251,23.789,23.789,26.461,0.0,0.0,0.0,0.0,0.0,0.0,0.194,0.0,0.0,1.417,0.158,9.755,0.0,0.0,2.025,0.0,0.206,0.0,0.0,0.0,0.0,1.399,0.0,0.0,0.319,0.365,1.513,1.529,0.0,2.116,2.795,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,26.461,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,24.537,0.0,2.432,9.37,0.818,0.0,0.0,0.0,0.0,1491.9,2170.3,2170.3,11.815,8.826,0.0,5.38,4.202,0.0,0.0,0.793,1.293,-1.715,0.0,0.0,5.429,0.0,-0.077,1.706,0.0,0.0,0.0,12.476,-3.737,-1.243,0.0,-1.132,-0.025,0.0,0.0,-0.042,0.011,1.187,0.0,0.0,-1.14,0.0,-0.073,-0.178,-0.296,0.0,0.0,0.531,2.88,0.782,1354.7,998.0,11171.5,3093.4,0.0,12000.0,12000.0,0.0,6.8,91.76,14592.0,6778.0,903.0,0.0,424.0,2068.0,0.0,1444.0,0.0,1444.0,1532.0,10080.0,3239.0,1142.0,0.0,180.0,380.0,0.0,807.0,0.0,807.0,206.0,3320.0,520.0,0.0,-280.0,800.0
base-bldgtype-mf-unit-adjacent-to-other-heated-space.xml,26.114,26.114,24.211,24.211,1.904,0.0,0.0,0.0,0.0,0.0,0.0,0.014,0.0,0.0,1.558,0.191,9.582,0.0,0.0,2.025,0.0,0.206,0.0,0.0,0.0,0.0,2.0,0.0,0.0,0.319,0.365,1.513,1.529,0.0,2.116,2.795,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.904,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.763,0.0,3.001,9.37,0.637,0.0,0.0,0.0,0.0,1508.3,1950.2,1950.2,3.926,6.271,0.0,0.284,3.112,0.0,0.0,0.366,1.367,-1.509,0.0,0.0,0.305,0.0,-0.01,1.681,0.0,0.0,0.0,0.543,-3.319,-1.118,0.0,-0.795,-0.417,0.0,0.0,-0.066,-0.199,1.393,0.0,0.0,-0.811,0.0,-0.007,-0.374,-0.454,0.0,0.0,0.567,3.297,0.907,1354.7,998.0,11171.5,3093.4,0.0,12000.0,12000.0,0.0,6.8,91.76,8331.0,3673.0,903.0,0.0,296.0,1735.0,0.0,96.0,0.0,96.0,1532.0,8173.0,2276.0,1142.0,0.0,142.0,280.0,0.0,403.0,0.0,403.0,206.0,3320.0,520.0,0.0,-280.0,800.0
@@ -35,6 +36,7 @@ base-bldgtype-mf-unit-shared-boiler-chiller-water-loop-heat-pump.xml,31.443,31.4
base-bldgtype-mf-unit-shared-boiler-cooling-tower-water-loop-heat-pump.xml,27.737,27.737,27.02,27.02,0.718,0.0,0.0,0.0,0.0,0.0,0.046,0.045,0.0,0.0,3.492,0.856,9.527,0.0,0.0,2.025,0.0,0.206,0.0,0.0,0.0,0.0,2.186,0.0,0.0,0.319,0.365,1.513,1.529,0.0,2.116,2.795,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.718,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.85,0.0,9.698,9.37,0.58,0.0,0.0,0.0,13.0,1655.1,2254.7,2254.7,3.903,8.325,0.0,-0.016,2.514,0.0,0.0,0.42,3.963,-2.774,0.0,0.0,-0.013,0.0,-0.389,1.282,0.0,0.699,0.0,0.019,-4.124,-0.809,0.0,-0.011,-0.983,0.0,0.0,-0.032,-0.982,5.429,0.0,0.0,-0.008,0.0,-0.38,-0.465,-1.603,-0.35,0.0,1.199,6.758,1.216,1354.7,998.0,11171.5,3093.4,0.0,28548.0,8994.0,0.0,6.8,91.76,6770.0,884.0,2576.0,0.0,287.0,1490.0,0.0,0.0,0.0,0.0,1532.0,7961.0,910.0,3264.0,0.0,103.0,157.0,0.0,0.0,0.0,0.0,206.0,3320.0,520.0,0.0,-280.0,800.0
base-bldgtype-mf-unit-shared-boiler-only-baseboard.xml,23.606,23.606,22.809,22.809,0.797,0.0,0.0,0.0,0.0,0.0,0.0,0.039,0.0,0.0,0.0,0.0,9.45,0.0,0.0,2.025,0.0,0.206,0.0,0.0,0.0,0.0,2.453,0.0,0.0,0.319,0.365,1.513,1.529,0.0,2.116,2.795,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.797,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.718,0.0,0.0,9.37,0.499,0.0,0.0,0.0,0.0,1474.9,1412.1,1474.9,3.808,0.0,0.0,-0.003,3.427,0.0,0.0,0.484,4.863,-4.248,0.0,0.0,-0.003,0.0,-0.005,1.64,0.0,0.957,0.0,0.0,-5.448,-1.112,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1354.7,998.0,11171.6,3093.4,0.0,5886.0,0.0,0.0,6.8,91.76,5886.0,0.0,2576.0,0.0,287.0,1490.0,0.0,0.0,0.0,0.0,1532.0,7051.0,0.0,3264.0,0.0,103.0,157.0,0.0,0.0,0.0,0.0,206.0,3320.0,520.0,0.0,-280.0,800.0
base-bldgtype-mf-unit-shared-boiler-only-fan-coil-ducted.xml,23.689,23.689,22.838,22.838,0.85,0.0,0.0,0.0,0.0,0.0,0.0,0.068,0.0,0.0,0.0,0.0,9.45,0.0,0.0,2.025,0.0,0.206,0.0,0.0,0.0,0.0,2.453,0.0,0.0,0.319,0.365,1.513,1.529,0.0,2.116,2.795,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.85,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.761,0.0,0.0,9.37,0.499,0.0,0.0,0.0,0.0,1486.9,1412.1,1486.9,3.973,0.0,0.0,-0.003,3.427,0.0,0.0,0.484,4.862,-4.248,0.0,0.0,-0.003,0.0,-0.005,1.64,0.0,0.957,0.0,0.043,-5.448,-1.112,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1354.7,998.0,11171.6,3093.4,0.0,8647.0,0.0,0.0,6.8,91.76,8647.0,2761.0,2576.0,0.0,287.0,1490.0,0.0,0.0,0.0,0.0,1532.0,7051.0,0.0,3264.0,0.0,103.0,157.0,0.0,0.0,0.0,0.0,206.0,3320.0,520.0,0.0,-280.0,800.0
+base-bldgtype-mf-unit-shared-boiler-only-fan-coil-eae.xml,23.616,23.616,22.858,22.858,0.758,0.0,0.0,0.0,0.0,0.0,0.0,0.088,0.0,0.0,0.0,0.0,9.45,0.0,0.0,2.025,0.0,0.206,0.0,0.0,0.0,0.0,2.453,0.0,0.0,0.319,0.365,1.513,1.529,0.0,2.116,2.795,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.758,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.718,0.0,0.0,9.37,0.499,0.0,0.0,0.0,0.0,1500.7,1412.1,1500.7,3.812,0.0,0.0,-0.003,3.427,0.0,0.0,0.484,4.863,-4.248,0.0,0.0,-0.003,0.0,-0.005,1.64,0.0,0.957,0.0,0.0,-5.448,-1.112,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1354.7,998.0,11171.6,3093.4,0.0,5886.0,0.0,0.0,6.8,91.76,5886.0,0.0,2576.0,0.0,287.0,1490.0,0.0,0.0,0.0,0.0,1532.0,7051.0,0.0,3264.0,0.0,103.0,157.0,0.0,0.0,0.0,0.0,206.0,3320.0,520.0,0.0,-280.0,800.0
base-bldgtype-mf-unit-shared-boiler-only-fan-coil-fireplace-elec.xml,23.595,23.595,23.024,23.024,0.571,0.0,0.0,0.0,0.0,0.0,0.179,0.076,0.0,0.0,0.0,0.0,9.45,0.0,0.0,2.025,0.0,0.206,0.0,0.0,0.0,0.0,2.453,0.0,0.0,0.319,0.365,1.513,1.529,0.0,2.116,2.795,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.571,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.718,0.0,0.0,9.37,0.499,0.0,0.0,0.0,0.0,1613.8,1412.1,1613.8,3.812,0.0,0.0,-0.003,3.427,0.0,0.0,0.484,4.862,-4.248,0.0,0.0,-0.003,0.0,-0.005,1.64,0.0,0.957,0.0,0.0,-5.448,-1.112,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1354.7,998.0,11171.6,3093.4,0.0,7031.0,0.0,0.0,6.8,91.76,7031.0,0.0,2576.0,0.0,287.0,1490.0,0.0,0.0,0.0,0.0,2677.0,7051.0,0.0,3264.0,0.0,103.0,157.0,0.0,0.0,0.0,0.0,206.0,3320.0,520.0,0.0,-280.0,800.0
base-bldgtype-mf-unit-shared-boiler-only-fan-coil.xml,23.617,23.617,22.861,22.861,0.755,0.0,0.0,0.0,0.0,0.0,0.0,0.092,0.0,0.0,0.0,0.0,9.45,0.0,0.0,2.025,0.0,0.206,0.0,0.0,0.0,0.0,2.453,0.0,0.0,0.319,0.365,1.513,1.529,0.0,2.116,2.795,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.755,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.718,0.0,0.0,9.37,0.499,0.0,0.0,0.0,0.0,1502.8,1412.1,1502.8,3.812,0.0,0.0,-0.003,3.427,0.0,0.0,0.484,4.863,-4.248,0.0,0.0,-0.003,0.0,-0.005,1.64,0.0,0.957,0.0,0.0,-5.448,-1.112,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1354.7,998.0,11171.6,3093.4,0.0,5886.0,0.0,0.0,6.8,91.76,5886.0,0.0,2576.0,0.0,287.0,1490.0,0.0,0.0,0.0,0.0,1532.0,7051.0,0.0,3264.0,0.0,103.0,157.0,0.0,0.0,0.0,0.0,206.0,3320.0,520.0,0.0,-280.0,800.0
base-bldgtype-mf-unit-shared-boiler-only-water-loop-heat-pump.xml,23.469,23.469,22.849,22.849,0.62,0.0,0.0,0.0,0.0,0.0,0.04,0.039,0.0,0.0,0.0,0.0,9.45,0.0,0.0,2.025,0.0,0.206,0.0,0.0,0.0,0.0,2.453,0.0,0.0,0.319,0.365,1.513,1.529,0.0,2.116,2.795,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.62,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.735,0.0,0.0,9.37,0.499,0.0,0.0,0.0,0.0,1493.1,1412.1,1493.1,3.901,0.0,0.0,-0.003,3.427,0.0,0.0,0.484,4.862,-4.248,0.0,0.0,-0.003,0.0,-0.005,1.64,0.0,0.957,0.0,0.017,-5.448,-1.112,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1354.7,998.0,11171.6,3093.4,0.0,28548.0,0.0,0.0,6.8,91.76,6770.0,884.0,2576.0,0.0,287.0,1490.0,0.0,0.0,0.0,0.0,1532.0,7051.0,0.0,3264.0,0.0,103.0,157.0,0.0,0.0,0.0,0.0,206.0,3320.0,520.0,0.0,-280.0,800.0
@@ -56,7 +58,7 @@ base-bldgtype-mf-unit-shared-water-heater-recirc-scheduled.xml,30.776,30.776,17.
base-bldgtype-mf-unit-shared-water-heater-recirc.xml,30.776,30.776,17.369,17.369,13.407,0.0,0.0,0.0,0.0,0.0,0.0,0.008,0.0,0.0,2.741,0.479,0.0,1.096,0.0,2.025,0.0,0.206,0.0,0.0,0.0,0.0,2.178,0.0,0.0,0.319,0.365,1.513,1.529,0.0,2.116,2.795,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.097,0.0,12.311,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.014,0.0,8.208,9.37,0.573,0.0,0.0,0.0,0.0,949.7,1631.8,1631.8,4.004,7.812,0.0,-0.016,2.544,0.0,0.0,0.419,3.992,-2.904,0.0,0.0,-0.014,0.0,-0.378,1.609,0.0,0.714,0.0,0.0,-4.173,-0.843,0.0,-0.012,-0.918,0.0,0.0,-0.027,-0.898,5.299,0.0,0.0,-0.009,0.0,-0.369,-0.568,-1.562,-0.325,0.0,0.0,6.494,1.182,1354.7,998.0,11171.6,3093.4,0.0,12000.0,12000.0,0.0,6.8,91.76,5886.0,0.0,2576.0,0.0,287.0,1490.0,0.0,0.0,0.0,0.0,1532.0,7051.0,0.0,3264.0,0.0,103.0,157.0,0.0,0.0,0.0,0.0,206.0,3320.0,520.0,0.0,-280.0,800.0
base-bldgtype-mf-unit-shared-water-heater.xml,29.68,29.68,16.273,16.273,13.407,0.0,0.0,0.0,0.0,0.0,0.0,0.008,0.0,0.0,2.741,0.479,0.0,0.0,0.0,2.025,0.0,0.206,0.0,0.0,0.0,0.0,2.178,0.0,0.0,0.319,0.365,1.513,1.529,0.0,2.116,2.795,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.097,0.0,12.311,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.014,0.0,8.208,9.37,0.573,0.0,0.0,0.0,0.0,913.0,1595.2,1595.2,4.004,7.812,0.0,-0.016,2.544,0.0,0.0,0.419,3.992,-2.904,0.0,0.0,-0.014,0.0,-0.378,1.609,0.0,0.714,0.0,0.0,-4.173,-0.843,0.0,-0.012,-0.918,0.0,0.0,-0.027,-0.898,5.299,0.0,0.0,-0.009,0.0,-0.369,-0.568,-1.562,-0.325,0.0,0.0,6.494,1.182,1354.7,998.0,11171.6,3093.4,0.0,12000.0,12000.0,0.0,6.8,91.76,5886.0,0.0,2576.0,0.0,287.0,1490.0,0.0,0.0,0.0,0.0,1532.0,7051.0,0.0,3264.0,0.0,103.0,157.0,0.0,0.0,0.0,0.0,206.0,3320.0,520.0,0.0,-280.0,800.0
base-bldgtype-mf-unit.xml,26.796,26.796,25.897,25.897,0.899,0.0,0.0,0.0,0.0,0.0,0.0,0.007,0.0,0.0,2.813,0.498,9.527,0.0,0.0,2.025,0.0,0.206,0.0,0.0,0.0,0.0,2.186,0.0,0.0,0.319,0.365,1.513,1.529,0.0,2.116,2.795,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.899,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.831,0.0,8.511,9.37,0.581,0.0,0.0,0.0,0.0,1603.5,2035.3,2035.3,3.814,7.788,0.0,-0.017,2.513,0.0,0.0,0.421,3.973,-2.771,0.0,0.0,-0.014,0.0,-0.391,1.284,0.0,0.7,0.0,0.0,-4.136,-0.812,0.0,-0.012,-0.983,0.0,0.0,-0.031,-0.971,5.431,0.0,0.0,-0.009,0.0,-0.382,-0.463,-1.595,-0.348,0.0,0.0,6.746,1.213,1354.7,998.0,11171.6,3093.4,0.0,12000.0,12000.0,0.0,6.8,91.76,5886.0,0.0,2576.0,0.0,287.0,1490.0,0.0,0.0,0.0,0.0,1532.0,7051.0,0.0,3264.0,0.0,103.0,157.0,0.0,0.0,0.0,0.0,206.0,3320.0,520.0,0.0,-280.0,800.0
-base-bldgtype-mf-whole-building.xml,218.134,218.134,218.134,218.134,0.0,0.0,0.0,0.0,0.0,0.0,35.137,0.0,0.0,0.0,22.441,0.0,55.569,0.0,0.0,14.641,0.0,1.364,0.0,0.0,0.0,0.0,12.712,0.0,0.0,1.912,2.192,0.0,9.172,0.0,12.693,50.302,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,35.082,0.0,50.043,55.316,3.607,0.0,0.0,0.0,1.0,21887.2,16212.0,21887.2,54.369,56.669,0.0,7.761,18.926,0.0,0.0,2.286,27.714,-27.412,0.0,0.0,7.748,0.0,-1.263,57.956,0.0,0.0,0.0,0.0,-50.842,-7.753,0.0,-1.081,-3.254,0.0,0.0,-0.05,-3.755,29.95,0.0,0.0,-3.834,0.0,-1.238,-13.68,-10.172,0.0,0.0,0.0,50.392,6.888,8128.5,5988.0,67057.1,16864.7,0.0,72000.0,72000.0,0.0,6.8,91.76,88106.0,0.0,18018.0,0.0,1722.0,10488.0,0.0,2376.0,0.0,3860.0,51642.0,53050.0,0.0,21576.0,0.0,618.0,1104.0,0.0,630.0,0.0,2244.0,6954.0,19920.0,0.0,0.0,0.0,0.0
+base-bldgtype-mf-whole-building.xml,217.108,217.108,217.108,217.108,0.0,0.0,0.0,0.0,0.0,0.0,34.021,0.0,0.0,0.0,22.525,0.0,55.566,0.0,0.0,14.641,0.0,1.364,0.0,0.0,0.0,0.0,12.72,0.0,0.0,1.912,2.192,0.0,9.172,0.0,12.693,50.302,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,33.967,0.0,50.271,55.316,3.605,0.0,0.0,0.0,1.0,21640.8,16126.6,21640.8,53.512,56.53,0.0,7.767,18.932,0.0,0.0,2.291,27.744,-27.339,0.0,0.0,7.75,0.0,-1.28,56.596,0.0,0.0,0.0,0.0,-50.744,-7.732,0.0,-1.091,-3.297,0.0,0.0,-0.053,-3.801,30.023,0.0,0.0,-3.853,0.0,-1.255,-13.443,-10.231,0.0,0.0,0.0,50.496,6.91,8128.5,5988.0,67057.1,16864.7,0.0,72000.0,72000.0,0.0,6.8,91.76,86834.0,0.0,18018.0,0.0,1722.0,10488.0,0.0,2376.0,0.0,3860.0,50370.0,52878.0,0.0,21576.0,0.0,618.0,1104.0,0.0,630.0,0.0,2244.0,6780.0,19920.0,0.0,0.0,0.0,0.0
base-bldgtype-sfa-unit-2stories.xml,51.953,51.953,34.308,34.308,17.645,0.0,0.0,0.0,0.0,0.0,0.0,0.23,0.0,0.0,3.289,0.576,9.076,0.0,0.0,4.507,0.0,0.334,0.0,0.0,0.0,0.0,2.072,0.0,0.0,0.319,0.365,1.513,1.529,0.0,2.116,8.384,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,17.645,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,16.456,0.0,9.918,9.106,0.615,0.0,0.0,0.0,0.0,2028.3,3203.9,3203.9,18.259,15.793,0.0,2.426,5.061,0.297,4.364,0.638,7.116,-8.588,0.0,0.0,0.0,5.002,-0.071,7.096,0.0,0.729,0.0,2.429,-7.794,-2.489,0.0,0.015,-0.629,-0.025,1.636,-0.014,-1.001,7.908,0.0,0.0,0.0,-3.947,-0.066,-1.651,-3.207,-0.159,0.0,1.338,7.788,2.018,1354.7,998.0,11171.6,2624.7,0.0,48000.0,36000.0,0.0,6.8,91.76,28081.0,7456.0,5147.0,0.0,575.0,5634.0,0.0,0.0,1879.0,1447.0,5942.0,17656.0,4937.0,6528.0,0.0,207.0,333.0,0.0,0.0,0.0,1529.0,803.0,3320.0,0.0,0.0,0.0,0.0
base-bldgtype-sfa-unit-atticroof-cathedral.xml,98.436,98.436,36.921,36.921,61.515,0.0,0.0,0.0,0.0,0.0,0.0,0.802,0.0,0.0,4.989,0.937,9.084,0.0,0.0,4.507,0.0,0.334,0.0,0.0,0.0,0.0,2.044,0.0,0.0,0.319,0.365,1.513,1.529,0.0,2.116,8.384,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,61.515,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,57.361,0.0,15.982,9.106,0.623,0.0,0.0,0.0,0.0,2100.0,4529.8,4529.8,36.753,28.623,49.493,0.0,2.937,0.289,3.687,0.667,4.711,-5.326,0.0,0.0,0.0,3.418,-0.85,7.541,0.0,0.772,0.0,0.0,-8.484,-2.669,8.563,0.0,-0.155,0.004,1.537,0.121,0.039,5.084,0.0,0.0,0.0,-4.273,-0.813,-0.842,-1.316,-0.093,0.0,0.0,7.077,1.838,1354.7,998.0,11171.6,2624.7,0.0,48000.0,36000.0,0.0,6.8,91.76,43723.0,0.0,3210.0,0.0,575.0,4469.0,27649.0,0.0,1879.0,0.0,5942.0,24053.0,0.0,4963.0,0.0,207.0,210.0,14551.0,0.0,0.0,0.0,803.0,3320.0,0.0,0.0,0.0,0.0
base-bldgtype-sfa-unit-infil-compartmentalization-test.xml,43.277,43.277,29.579,29.579,13.697,0.0,0.0,0.0,0.0,0.0,0.0,0.1,0.0,0.0,2.703,0.45,9.286,0.0,0.0,3.266,0.0,0.27,0.0,0.0,0.0,0.0,2.074,0.0,0.0,0.319,0.365,1.513,1.529,0.0,2.116,5.589,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,13.697,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,12.702,0.0,7.743,9.221,0.615,0.0,0.0,0.0,0.0,1759.6,2713.5,2713.5,13.654,10.87,0.0,2.334,2.365,0.292,4.232,0.624,3.565,-4.312,0.0,0.0,0.0,4.669,-0.047,3.042,0.0,0.726,0.0,3.461,-6.592,-1.805,0.0,0.032,-0.275,-0.026,1.588,-0.018,-0.583,3.962,0.0,0.0,0.0,-4.04,-0.045,-0.752,-1.557,-0.163,0.0,1.614,6.601,1.462,1354.7,998.0,11171.5,2829.7,0.0,24000.0,24000.0,0.0,6.8,91.76,21791.0,8161.0,2576.0,0.0,575.0,4088.0,0.0,0.0,1879.0,1447.0,3064.0,14741.0,5838.0,3264.0,0.0,207.0,170.0,0.0,0.0,0.0,1529.0,413.0,3320.0,240.0,0.0,-560.0,800.0
@@ -136,8 +138,8 @@ base-enclosure-infil-cfm-house-pressure.xml,59.22,59.22,35.594,35.594,23.625,0.0
base-enclosure-infil-cfm50.xml,59.22,59.22,35.594,35.594,23.625,0.0,0.0,0.0,0.0,0.0,0.0,0.39,0.0,0.0,4.251,0.802,9.014,0.0,0.0,4.507,0.0,0.334,0.0,0.0,0.0,0.0,2.072,0.0,0.0,0.319,0.365,1.513,1.529,0.0,2.116,8.384,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,23.625,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,22.125,0.0,13.973,9.071,0.615,0.0,0.0,0.0,0.0,2052.4,3884.4,3884.4,23.508,19.176,0.0,3.54,3.638,0.512,7.506,0.63,10.087,-12.691,0.0,0.0,0.0,8.29,-0.067,4.807,0.0,0.728,0.0,5.099,-7.8,-2.489,0.0,-0.031,-0.441,-0.049,2.748,-0.02,-1.328,11.723,0.0,0.0,0.0,-6.24,-0.063,-1.137,-3.781,-0.162,0.0,3.101,7.782,2.018,1354.7,998.0,11171.6,2563.5,0.0,36000.0,24000.0,0.0,6.8,91.76,32706.0,8608.0,7508.0,0.0,575.0,6840.0,0.0,0.0,2408.0,2171.0,4597.0,19675.0,5934.0,7037.0,0.0,207.0,265.0,0.0,0.0,0.0,2293.0,619.0,3320.0,0.0,0.0,0.0,0.0
base-enclosure-infil-ela.xml,66.889,66.889,35.619,35.619,31.27,0.0,0.0,0.0,0.0,0.0,0.0,0.516,0.0,0.0,4.176,0.781,9.016,0.0,0.0,4.507,0.0,0.334,0.0,0.0,0.0,0.0,2.066,0.0,0.0,0.319,0.365,1.513,1.529,0.0,2.116,8.384,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,31.27,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,29.285,0.0,13.582,9.071,0.617,0.0,0.0,0.0,0.0,2060.1,3657.3,3657.3,28.532,20.194,0.0,3.491,3.64,0.512,7.49,0.631,10.103,-12.714,0.0,0.0,0.0,8.298,-0.068,10.58,0.0,0.726,0.0,6.61,-7.832,-2.496,0.0,0.015,-0.395,-0.042,2.869,-0.007,-1.174,11.699,0.0,0.0,0.0,-6.049,-0.064,-2.353,-3.492,-0.153,0.0,3.086,7.745,2.011,1354.7,998.0,11171.5,2563.5,0.0,36000.0,24000.0,0.0,6.8,91.76,37768.0,8724.0,7508.0,0.0,575.0,6840.0,0.0,0.0,2408.0,2171.0,9543.0,20371.0,5964.0,7037.0,0.0,207.0,265.0,0.0,0.0,0.0,2293.0,1285.0,3320.0,0.0,0.0,0.0,0.0
base-enclosure-infil-flue.xml,60.635,60.635,35.596,35.596,25.039,0.0,0.0,0.0,0.0,0.0,0.0,0.413,0.0,0.0,4.235,0.797,9.014,0.0,0.0,4.507,0.0,0.334,0.0,0.0,0.0,0.0,2.071,0.0,0.0,0.319,0.365,1.513,1.529,0.0,2.116,8.384,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,25.039,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,23.45,0.0,13.888,9.071,0.615,0.0,0.0,0.0,0.0,2042.5,3909.2,3909.2,24.243,19.404,0.0,3.528,3.635,0.512,7.5,0.629,10.082,-12.691,0.0,0.0,0.0,8.291,-0.067,5.886,0.0,0.727,0.0,5.378,-7.802,-2.489,0.0,-0.024,-0.434,-0.048,2.774,-0.018,-1.303,11.723,0.0,0.0,0.0,-6.2,-0.063,-1.397,-3.715,-0.16,0.0,3.099,7.778,2.018,1354.7,998.0,11171.6,2563.5,0.0,36000.0,24000.0,0.0,6.8,91.76,32706.0,8608.0,7508.0,0.0,575.0,6840.0,0.0,0.0,2408.0,2171.0,4597.0,19675.0,5934.0,7037.0,0.0,207.0,265.0,0.0,0.0,0.0,2293.0,619.0,3320.0,0.0,0.0,0.0,0.0
-base-enclosure-infil-natural-ach.xml,66.889,66.889,35.619,35.619,31.27,0.0,0.0,0.0,0.0,0.0,0.0,0.516,0.0,0.0,4.176,0.781,9.016,0.0,0.0,4.507,0.0,0.334,0.0,0.0,0.0,0.0,2.066,0.0,0.0,0.319,0.365,1.513,1.529,0.0,2.116,8.384,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,31.27,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,29.285,0.0,13.582,9.071,0.617,0.0,0.0,0.0,0.0,2060.1,3657.3,3657.3,28.532,20.194,0.0,3.491,3.64,0.512,7.49,0.631,10.103,-12.714,0.0,0.0,0.0,8.298,-0.068,10.58,0.0,0.726,0.0,6.61,-7.832,-2.496,0.0,0.015,-0.395,-0.042,2.869,-0.007,-1.174,11.699,0.0,0.0,0.0,-6.049,-0.064,-2.353,-3.492,-0.153,0.0,3.086,7.745,2.011,1354.7,998.0,11171.5,2563.5,0.0,36000.0,24000.0,0.0,6.8,91.76,37767.0,8724.0,7508.0,0.0,575.0,6840.0,0.0,0.0,2408.0,2171.0,9542.0,20371.0,5964.0,7037.0,0.0,207.0,265.0,0.0,0.0,0.0,2293.0,1285.0,3320.0,0.0,0.0,0.0,0.0
-base-enclosure-infil-natural-cfm.xml,66.889,66.889,35.619,35.619,31.27,0.0,0.0,0.0,0.0,0.0,0.0,0.516,0.0,0.0,4.176,0.781,9.016,0.0,0.0,4.507,0.0,0.334,0.0,0.0,0.0,0.0,2.066,0.0,0.0,0.319,0.365,1.513,1.529,0.0,2.116,8.384,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,31.27,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,29.285,0.0,13.582,9.071,0.617,0.0,0.0,0.0,0.0,2060.1,3657.3,3657.3,28.532,20.194,0.0,3.491,3.64,0.512,7.49,0.631,10.103,-12.714,0.0,0.0,0.0,8.298,-0.068,10.58,0.0,0.726,0.0,6.61,-7.832,-2.496,0.0,0.015,-0.395,-0.042,2.869,-0.007,-1.174,11.699,0.0,0.0,0.0,-6.049,-0.064,-2.353,-3.492,-0.153,0.0,3.086,7.745,2.011,1354.7,998.0,11171.5,2563.5,0.0,36000.0,24000.0,0.0,6.8,91.76,37767.0,8724.0,7508.0,0.0,575.0,6840.0,0.0,0.0,2408.0,2171.0,9542.0,20371.0,5964.0,7037.0,0.0,207.0,265.0,0.0,0.0,0.0,2293.0,1285.0,3320.0,0.0,0.0,0.0,0.0
+base-enclosure-infil-natural-ach.xml,66.51,66.51,35.618,35.618,30.892,0.0,0.0,0.0,0.0,0.0,0.0,0.51,0.0,0.0,4.18,0.782,9.016,0.0,0.0,4.507,0.0,0.334,0.0,0.0,0.0,0.0,2.066,0.0,0.0,0.319,0.365,1.513,1.529,0.0,2.116,8.384,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,30.892,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,28.931,0.0,13.6,9.071,0.617,0.0,0.0,0.0,0.0,2076.1,3651.9,3651.9,28.288,20.144,0.0,3.492,3.639,0.512,7.49,0.631,10.102,-12.71,0.0,0.0,0.0,8.299,-0.07,10.294,0.0,0.726,0.0,6.536,-7.831,-2.496,0.0,0.012,-0.398,-0.042,2.863,-0.008,-1.18,11.703,0.0,0.0,0.0,-6.056,-0.066,-2.296,-3.505,-0.154,0.0,3.087,7.746,2.012,1354.7,998.0,11171.5,2563.5,0.0,36000.0,24000.0,0.0,6.8,91.76,37527.0,8718.0,7508.0,0.0,575.0,6840.0,0.0,0.0,2408.0,2171.0,9307.0,20339.0,5963.0,7037.0,0.0,207.0,265.0,0.0,0.0,0.0,2293.0,1253.0,3320.0,0.0,0.0,0.0,0.0
+base-enclosure-infil-natural-cfm.xml,66.51,66.51,35.618,35.618,30.892,0.0,0.0,0.0,0.0,0.0,0.0,0.51,0.0,0.0,4.18,0.782,9.016,0.0,0.0,4.507,0.0,0.334,0.0,0.0,0.0,0.0,2.066,0.0,0.0,0.319,0.365,1.513,1.529,0.0,2.116,8.384,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,30.892,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,28.931,0.0,13.6,9.071,0.617,0.0,0.0,0.0,0.0,2076.1,3651.9,3651.9,28.288,20.144,0.0,3.492,3.639,0.512,7.49,0.631,10.102,-12.71,0.0,0.0,0.0,8.299,-0.07,10.294,0.0,0.726,0.0,6.536,-7.831,-2.496,0.0,0.012,-0.398,-0.042,2.863,-0.008,-1.18,11.703,0.0,0.0,0.0,-6.056,-0.066,-2.296,-3.505,-0.154,0.0,3.087,7.746,2.012,1354.7,998.0,11171.5,2563.5,0.0,36000.0,24000.0,0.0,6.8,91.76,37527.0,8718.0,7508.0,0.0,575.0,6840.0,0.0,0.0,2408.0,2171.0,9307.0,20339.0,5963.0,7037.0,0.0,207.0,265.0,0.0,0.0,0.0,2293.0,1253.0,3320.0,0.0,0.0,0.0,0.0
base-enclosure-orientations.xml,59.445,59.445,35.571,35.571,23.875,0.0,0.0,0.0,0.0,0.0,0.0,0.394,0.0,0.0,4.229,0.797,9.014,0.0,0.0,4.507,0.0,0.334,0.0,0.0,0.0,0.0,2.072,0.0,0.0,0.319,0.365,1.513,1.529,0.0,2.116,8.384,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,23.875,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,22.359,0.0,13.881,9.071,0.615,0.0,0.0,0.0,0.0,2052.7,3880.6,3880.6,23.522,19.14,0.0,3.535,3.634,0.511,7.498,0.863,10.076,-12.691,0.0,0.0,0.0,8.278,-0.066,4.804,0.0,0.727,0.0,5.144,-7.799,-2.489,0.0,-0.027,-0.438,-0.048,2.755,-0.149,-1.32,11.723,0.0,0.0,0.0,-6.227,-0.062,-1.135,-3.763,-0.161,0.0,3.08,7.782,2.018,1354.7,998.0,11171.6,2563.5,0.0,36000.0,24000.0,0.0,6.8,91.76,32706.0,8608.0,7508.0,0.0,575.0,6840.0,0.0,0.0,2408.0,2171.0,4597.0,19675.0,5934.0,7037.0,0.0,207.0,265.0,0.0,0.0,0.0,2293.0,619.0,3320.0,0.0,0.0,0.0,0.0
base-enclosure-overhangs.xml,59.356,59.356,35.431,35.431,23.925,0.0,0.0,0.0,0.0,0.0,0.0,0.395,0.0,0.0,4.115,0.77,9.014,0.0,0.0,4.507,0.0,0.334,0.0,0.0,0.0,0.0,2.071,0.0,0.0,0.319,0.365,1.513,1.529,0.0,2.116,8.384,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,23.925,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,22.406,0.0,13.413,9.071,0.615,0.0,0.0,0.0,0.0,2039.8,3485.2,3485.2,23.46,18.623,0.0,3.532,3.633,0.511,7.487,0.629,9.995,-12.285,0.0,0.0,0.0,8.257,-0.067,4.805,0.0,0.727,0.0,5.149,-7.807,-2.49,0.0,-0.011,-0.427,-0.046,2.78,-0.016,-1.336,11.091,0.0,0.0,0.0,-6.176,-0.063,-1.128,-3.718,-0.16,0.0,2.982,7.773,2.017,1354.7,998.0,11171.5,2563.5,0.0,36000.0,24000.0,0.0,6.8,91.76,32706.0,8608.0,7508.0,0.0,575.0,6840.0,0.0,0.0,2408.0,2171.0,4597.0,19675.0,5934.0,7037.0,0.0,207.0,265.0,0.0,0.0,0.0,2293.0,619.0,3320.0,0.0,0.0,0.0,0.0
base-enclosure-rooftypes.xml,59.148,59.148,35.437,35.437,23.711,0.0,0.0,0.0,0.0,0.0,0.0,0.391,0.0,0.0,4.121,0.773,9.014,0.0,0.0,4.507,0.0,0.334,0.0,0.0,0.0,0.0,2.072,0.0,0.0,0.319,0.365,1.513,1.529,0.0,2.116,8.384,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,23.711,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,22.205,0.0,13.44,9.071,0.615,0.0,0.0,0.0,0.0,2051.9,3766.3,3766.3,23.331,18.137,0.0,3.651,3.635,0.512,7.5,0.629,10.079,-12.691,0.0,0.0,0.0,8.281,-0.064,4.805,0.0,0.727,0.0,5.101,-7.799,-2.489,0.0,-0.281,-0.436,-0.048,2.76,-0.019,-1.315,11.723,0.0,0.0,0.0,-6.221,-0.061,-1.135,-3.758,-0.161,0.0,2.762,7.782,2.018,1354.7,998.0,11171.6,2563.5,0.0,36000.0,24000.0,0.0,6.8,91.76,32706.0,8608.0,7508.0,0.0,575.0,6840.0,0.0,0.0,2408.0,2171.0,4597.0,19675.0,5934.0,7037.0,0.0,207.0,265.0,0.0,0.0,0.0,2293.0,619.0,3320.0,0.0,0.0,0.0,0.0
diff --git a/hpxml-measures/workflow/tests/base_results/results_workflow_simulations1_bills.csv b/hpxml-measures/workflow/tests/base_results/results_workflow_simulations1_bills.csv
index cc18b2507..eb6652736 100644
--- a/hpxml-measures/workflow/tests/base_results/results_workflow_simulations1_bills.csv
+++ b/hpxml-measures/workflow/tests/base_results/results_workflow_simulations1_bills.csv
@@ -22,6 +22,7 @@ base-atticroof-vented.xml,1830.36,144.0,1294.36,0.0,1438.36,144.0,248.0,392.0,0.
base-battery-scheduled.xml,1907.47,144.0,1369.2,0.0,1513.2,144.0,250.27,394.27,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
base-battery.xml,1844.59,144.0,1306.32,0.0,1450.32,144.0,250.27,394.27,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
base-bldgtype-mf-unit-adjacent-to-multifamily-buffer-space.xml,1307.87,144.0,882.29,0.0,1026.29,144.0,137.58,281.58,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+base-bldgtype-mf-unit-adjacent-to-multiple-hvac-none.xml,969.32,144.0,825.32,0.0,969.32,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
base-bldgtype-mf-unit-adjacent-to-multiple.xml,1282.02,144.0,915.4,0.0,1059.4,144.0,78.62,222.62,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
base-bldgtype-mf-unit-adjacent-to-non-freezing-space.xml,1441.38,144.0,873.07,0.0,1017.07,144.0,280.31,424.31,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
base-bldgtype-mf-unit-adjacent-to-other-heated-space.xml,1196.71,144.0,888.54,0.0,1032.54,144.0,20.17,164.17,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
@@ -35,6 +36,7 @@ base-bldgtype-mf-unit-shared-boiler-chiller-water-loop-heat-pump.xml,1423.25,144
base-bldgtype-mf-unit-shared-boiler-cooling-tower-water-loop-heat-pump.xml,1287.23,144.0,991.63,0.0,1135.63,144.0,7.6,151.6,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
base-bldgtype-mf-unit-shared-boiler-only-baseboard.xml,1133.54,144.0,837.09,0.0,981.09,144.0,8.45,152.45,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
base-bldgtype-mf-unit-shared-boiler-only-fan-coil-ducted.xml,1135.18,144.0,838.17,0.0,982.17,144.0,9.01,153.01,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+base-bldgtype-mf-unit-shared-boiler-only-fan-coil-eae.xml,1134.94,144.0,838.91,0.0,982.91,144.0,8.03,152.03,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
base-bldgtype-mf-unit-shared-boiler-only-fan-coil-fireplace-elec.xml,1139.05,144.0,845.0,0.0,989.0,144.0,6.05,150.05,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
base-bldgtype-mf-unit-shared-boiler-only-fan-coil.xml,1135.02,144.0,839.02,0.0,983.02,144.0,8.0,152.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
base-bldgtype-mf-unit-shared-boiler-only-water-loop-heat-pump.xml,1133.14,144.0,838.57,0.0,982.57,144.0,6.57,150.57,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
@@ -56,7 +58,7 @@ base-bldgtype-mf-unit-shared-water-heater-recirc-scheduled.xml,1067.48,144.0,637
base-bldgtype-mf-unit-shared-water-heater-recirc.xml,1067.48,144.0,637.45,0.0,781.45,144.0,142.03,286.03,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
base-bldgtype-mf-unit-shared-water-heater.xml,1027.25,144.0,597.22,0.0,741.22,144.0,142.03,286.03,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
base-bldgtype-mf-unit.xml,1247.96,144.0,950.43,0.0,1094.43,144.0,9.53,153.53,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
-base-bldgtype-mf-whole-building.xml,8869.62,864.0,8005.62,0.0,8869.62,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+base-bldgtype-mf-whole-building.xml,8831.94,864.0,7967.94,0.0,8831.94,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
base-bldgtype-sfa-unit-2stories.xml,1734.05,144.0,1259.13,0.0,1403.13,144.0,186.92,330.92,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
base-bldgtype-sfa-unit-atticroof-cathedral.xml,2294.65,144.0,1355.0,0.0,1499.0,144.0,651.65,795.65,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
base-bldgtype-sfa-unit-infil-compartmentalization-test.xml,1518.68,144.0,1085.58,0.0,1229.58,144.0,145.1,289.1,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
@@ -136,8 +138,8 @@ base-enclosure-infil-cfm-house-pressure.xml,1844.59,144.0,1306.32,0.0,1450.32,14
base-enclosure-infil-cfm50.xml,1844.59,144.0,1306.32,0.0,1450.32,144.0,250.27,394.27,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
base-enclosure-infil-ela.xml,1926.5,144.0,1307.25,0.0,1451.25,144.0,331.25,475.25,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
base-enclosure-infil-flue.xml,1859.62,144.0,1306.37,0.0,1450.37,144.0,265.25,409.25,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
-base-enclosure-infil-natural-ach.xml,1926.5,144.0,1307.25,0.0,1451.25,144.0,331.25,475.25,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
-base-enclosure-infil-natural-cfm.xml,1926.5,144.0,1307.25,0.0,1451.25,144.0,331.25,475.25,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+base-enclosure-infil-natural-ach.xml,1922.45,144.0,1307.2,0.0,1451.2,144.0,327.25,471.25,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
+base-enclosure-infil-natural-cfm.xml,1922.45,144.0,1307.2,0.0,1451.2,144.0,327.25,471.25,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
base-enclosure-orientations.xml,1846.36,144.0,1305.45,0.0,1449.45,144.0,252.91,396.91,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
base-enclosure-overhangs.xml,1841.76,144.0,1300.32,0.0,1444.32,144.0,253.44,397.44,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
base-enclosure-rooftypes.xml,1839.72,144.0,1300.54,0.0,1444.54,144.0,251.18,395.18,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0
diff --git a/hpxml-measures/workflow/tests/base_results/results_workflow_simulations2.csv b/hpxml-measures/workflow/tests/base_results/results_workflow_simulations2.csv
index fa7744473..f7da57b89 100644
--- a/hpxml-measures/workflow/tests/base_results/results_workflow_simulations2.csv
+++ b/hpxml-measures/workflow/tests/base_results/results_workflow_simulations2.csv
@@ -1,4 +1,5 @@
HPXML,Energy Use: Total (MBtu),Energy Use: Net (MBtu),Fuel Use: Electricity: Total (MBtu),Fuel Use: Electricity: Net (MBtu),Fuel Use: Natural Gas: Total (MBtu),Fuel Use: Fuel Oil: Total (MBtu),Fuel Use: Propane: Total (MBtu),Fuel Use: Wood Cord: Total (MBtu),Fuel Use: Wood Pellets: Total (MBtu),Fuel Use: Coal: Total (MBtu),End Use: Electricity: Heating (MBtu),End Use: Electricity: Heating Fans/Pumps (MBtu),End Use: Electricity: Heating Heat Pump Backup (MBtu),End Use: Electricity: Heating Heat Pump Backup Fans/Pumps (MBtu),End Use: Electricity: Cooling (MBtu),End Use: Electricity: Cooling Fans/Pumps (MBtu),End Use: Electricity: Hot Water (MBtu),End Use: Electricity: Hot Water Recirc Pump (MBtu),End Use: Electricity: Hot Water Solar Thermal Pump (MBtu),End Use: Electricity: Lighting Interior (MBtu),End Use: Electricity: Lighting Garage (MBtu),End Use: Electricity: Lighting Exterior (MBtu),End Use: Electricity: Mech Vent (MBtu),End Use: Electricity: Mech Vent Preheating (MBtu),End Use: Electricity: Mech Vent Precooling (MBtu),End Use: Electricity: Whole House Fan (MBtu),End Use: Electricity: Refrigerator (MBtu),End Use: Electricity: Freezer (MBtu),End Use: Electricity: Dehumidifier (MBtu),End Use: Electricity: Dishwasher (MBtu),End Use: Electricity: Clothes Washer (MBtu),End Use: Electricity: Clothes Dryer (MBtu),End Use: Electricity: Range/Oven (MBtu),End Use: Electricity: Ceiling Fan (MBtu),End Use: Electricity: Television (MBtu),End Use: Electricity: Plug Loads (MBtu),End Use: Electricity: Electric Vehicle Charging (MBtu),End Use: Electricity: Well Pump (MBtu),End Use: Electricity: Pool Heater (MBtu),End Use: Electricity: Pool Pump (MBtu),End Use: Electricity: Permanent Spa Heater (MBtu),End Use: Electricity: Permanent Spa Pump (MBtu),End Use: Electricity: PV (MBtu),End Use: Electricity: Generator (MBtu),End Use: Electricity: Battery (MBtu),End Use: Natural Gas: Heating (MBtu),End Use: Natural Gas: Heating Heat Pump Backup (MBtu),End Use: Natural Gas: Hot Water (MBtu),End Use: Natural Gas: Clothes Dryer (MBtu),End Use: Natural Gas: Range/Oven (MBtu),End Use: Natural Gas: Mech Vent Preheating (MBtu),End Use: Natural Gas: Pool Heater (MBtu),End Use: Natural Gas: Permanent Spa Heater (MBtu),End Use: Natural Gas: Grill (MBtu),End Use: Natural Gas: Lighting (MBtu),End Use: Natural Gas: Fireplace (MBtu),End Use: Natural Gas: Generator (MBtu),End Use: Fuel Oil: Heating (MBtu),End Use: Fuel Oil: Heating Heat Pump Backup (MBtu),End Use: Fuel Oil: Hot Water (MBtu),End Use: Fuel Oil: Clothes Dryer (MBtu),End Use: Fuel Oil: Range/Oven (MBtu),End Use: Fuel Oil: Mech Vent Preheating (MBtu),End Use: Fuel Oil: Grill (MBtu),End Use: Fuel Oil: Lighting (MBtu),End Use: Fuel Oil: Fireplace (MBtu),End Use: Fuel Oil: Generator (MBtu),End Use: Propane: Heating (MBtu),End Use: Propane: Heating Heat Pump Backup (MBtu),End Use: Propane: Hot Water (MBtu),End Use: Propane: Clothes Dryer (MBtu),End Use: Propane: Range/Oven (MBtu),End Use: Propane: Mech Vent Preheating (MBtu),End Use: Propane: Grill (MBtu),End Use: Propane: Lighting (MBtu),End Use: Propane: Fireplace (MBtu),End Use: Propane: Generator (MBtu),End Use: Wood Cord: Heating (MBtu),End Use: Wood Cord: Heating Heat Pump Backup (MBtu),End Use: Wood Cord: Hot Water (MBtu),End Use: Wood Cord: Clothes Dryer (MBtu),End Use: Wood Cord: Range/Oven (MBtu),End Use: Wood Cord: Mech Vent Preheating (MBtu),End Use: Wood Cord: Grill (MBtu),End Use: Wood Cord: Lighting (MBtu),End Use: Wood Cord: Fireplace (MBtu),End Use: Wood Cord: Generator (MBtu),End Use: Wood Pellets: Heating (MBtu),End Use: Wood Pellets: Heating Heat Pump Backup (MBtu),End Use: Wood Pellets: Hot Water (MBtu),End Use: Wood Pellets: Clothes Dryer (MBtu),End Use: Wood Pellets: Range/Oven (MBtu),End Use: Wood Pellets: Mech Vent Preheating (MBtu),End Use: Wood Pellets: Grill (MBtu),End Use: Wood Pellets: Lighting (MBtu),End Use: Wood Pellets: Fireplace (MBtu),End Use: Wood Pellets: Generator (MBtu),End Use: Coal: Heating (MBtu),End Use: Coal: Heating Heat Pump Backup (MBtu),End Use: Coal: Hot Water (MBtu),End Use: Coal: Clothes Dryer (MBtu),End Use: Coal: Range/Oven (MBtu),End Use: Coal: Mech Vent Preheating (MBtu),End Use: Coal: Grill (MBtu),End Use: Coal: Lighting (MBtu),End Use: Coal: Fireplace (MBtu),End Use: Coal: Generator (MBtu),Load: Heating: Delivered (MBtu),Load: Heating: Heat Pump Backup (MBtu),Load: Cooling: Delivered (MBtu),Load: Hot Water: Delivered (MBtu),Load: Hot Water: Tank Losses (MBtu),Load: Hot Water: Desuperheater (MBtu),Load: Hot Water: Solar Thermal (MBtu),Unmet Hours: Heating (hr),Unmet Hours: Cooling (hr),Peak Electricity: Winter Total (W),Peak Electricity: Summer Total (W),Peak Electricity: Annual Total (W),Peak Load: Heating: Delivered (kBtu/hr),Peak Load: Cooling: Delivered (kBtu/hr),Component Load: Heating: Roofs (MBtu),Component Load: Heating: Ceilings (MBtu),Component Load: Heating: Walls (MBtu),Component Load: Heating: Rim Joists (MBtu),Component Load: Heating: Foundation Walls (MBtu),Component Load: Heating: Doors (MBtu),Component Load: Heating: Windows Conduction (MBtu),Component Load: Heating: Windows Solar (MBtu),Component Load: Heating: Skylights Conduction (MBtu),Component Load: Heating: Skylights Solar (MBtu),Component Load: Heating: Floors (MBtu),Component Load: Heating: Slabs (MBtu),Component Load: Heating: Internal Mass (MBtu),Component Load: Heating: Infiltration (MBtu),Component Load: Heating: Natural Ventilation (MBtu),Component Load: Heating: Mechanical Ventilation (MBtu),Component Load: Heating: Whole House Fan (MBtu),Component Load: Heating: Ducts (MBtu),Component Load: Heating: Internal Gains (MBtu),Component Load: Heating: Lighting (MBtu),Component Load: Cooling: Roofs (MBtu),Component Load: Cooling: Ceilings (MBtu),Component Load: Cooling: Walls (MBtu),Component Load: Cooling: Rim Joists (MBtu),Component Load: Cooling: Foundation Walls (MBtu),Component Load: Cooling: Doors (MBtu),Component Load: Cooling: Windows Conduction (MBtu),Component Load: Cooling: Windows Solar (MBtu),Component Load: Cooling: Skylights Conduction (MBtu),Component Load: Cooling: Skylights Solar (MBtu),Component Load: Cooling: Floors (MBtu),Component Load: Cooling: Slabs (MBtu),Component Load: Cooling: Internal Mass (MBtu),Component Load: Cooling: Infiltration (MBtu),Component Load: Cooling: Natural Ventilation (MBtu),Component Load: Cooling: Mechanical Ventilation (MBtu),Component Load: Cooling: Whole House Fan (MBtu),Component Load: Cooling: Ducts (MBtu),Component Load: Cooling: Internal Gains (MBtu),Component Load: Cooling: Lighting (MBtu),Hot Water: Clothes Washer (gal),Hot Water: Dishwasher (gal),Hot Water: Fixtures (gal),Hot Water: Distribution Waste (gal),Resilience: Battery (hr),HVAC Capacity: Heating (Btu/h),HVAC Capacity: Cooling (Btu/h),HVAC Capacity: Heat Pump Backup (Btu/h),HVAC Design Temperature: Heating (F),HVAC Design Temperature: Cooling (F),HVAC Design Load: Heating: Total (Btu/h),HVAC Design Load: Heating: Ducts (Btu/h),HVAC Design Load: Heating: Windows (Btu/h),HVAC Design Load: Heating: Skylights (Btu/h),HVAC Design Load: Heating: Doors (Btu/h),HVAC Design Load: Heating: Walls (Btu/h),HVAC Design Load: Heating: Roofs (Btu/h),HVAC Design Load: Heating: Floors (Btu/h),HVAC Design Load: Heating: Slabs (Btu/h),HVAC Design Load: Heating: Ceilings (Btu/h),HVAC Design Load: Heating: Infiltration/Ventilation (Btu/h),HVAC Design Load: Cooling Sensible: Total (Btu/h),HVAC Design Load: Cooling Sensible: Ducts (Btu/h),HVAC Design Load: Cooling Sensible: Windows (Btu/h),HVAC Design Load: Cooling Sensible: Skylights (Btu/h),HVAC Design Load: Cooling Sensible: Doors (Btu/h),HVAC Design Load: Cooling Sensible: Walls (Btu/h),HVAC Design Load: Cooling Sensible: Roofs (Btu/h),HVAC Design Load: Cooling Sensible: Floors (Btu/h),HVAC Design Load: Cooling Sensible: Slabs (Btu/h),HVAC Design Load: Cooling Sensible: Ceilings (Btu/h),HVAC Design Load: Cooling Sensible: Infiltration/Ventilation (Btu/h),HVAC Design Load: Cooling Sensible: Internal Gains (Btu/h),HVAC Design Load: Cooling Latent: Total (Btu/h),HVAC Design Load: Cooling Latent: Ducts (Btu/h),HVAC Design Load: Cooling Latent: Infiltration/Ventilation (Btu/h),HVAC Design Load: Cooling Latent: Internal Gains (Btu/h)
+base-lighting-ceiling-fans-label-energy-use.xml,59.791,59.791,36.187,36.187,23.605,0.0,0.0,0.0,0.0,0.0,0.0,0.389,0.0,0.0,4.176,0.784,9.012,0.0,0.0,4.507,0.0,0.334,0.0,0.0,0.0,0.0,2.079,0.0,0.0,0.319,0.365,1.513,1.529,0.682,2.116,8.384,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,23.605,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,22.106,0.0,13.724,9.071,0.613,0.0,0.0,0.0,0.0,2039.7,3626.3,3626.3,23.508,19.051,0.0,3.54,3.638,0.512,7.504,0.63,10.088,-12.691,0.0,0.0,0.0,8.275,-0.067,4.807,0.0,0.728,0.0,5.094,-7.8,-2.489,0.0,-0.072,-0.489,-0.055,2.617,-0.032,-1.473,11.723,0.0,0.0,0.0,-6.441,-0.063,-1.172,-3.986,-0.17,0.0,3.005,8.468,2.018,1354.7,998.0,11171.6,2563.5,0.0,36000.0,24000.0,0.0,6.8,91.76,32706.0,8608.0,7508.0,0.0,575.0,6840.0,0.0,0.0,2408.0,2171.0,4597.0,19675.0,5934.0,7037.0,0.0,207.0,265.0,0.0,0.0,0.0,2293.0,619.0,3320.0,0.0,0.0,0.0,0.0
base-lighting-ceiling-fans.xml,59.594,59.594,35.989,35.989,23.605,0.0,0.0,0.0,0.0,0.0,0.0,0.389,0.0,0.0,4.143,0.776,9.012,0.0,0.0,4.507,0.0,0.334,0.0,0.0,0.0,0.0,2.079,0.0,0.0,0.319,0.365,1.513,1.529,0.525,2.116,8.384,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,23.605,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,22.106,0.0,13.582,9.071,0.613,0.0,0.0,0.0,0.0,2039.7,3595.8,3595.8,23.508,18.97,0.0,3.54,3.638,0.512,7.504,0.63,10.088,-12.691,0.0,0.0,0.0,8.275,-0.067,4.807,0.0,0.728,0.0,5.095,-7.8,-2.489,0.0,-0.069,-0.487,-0.055,2.621,-0.031,-1.468,11.723,0.0,0.0,0.0,-6.434,-0.063,-1.171,-3.97,-0.17,0.0,2.984,8.311,2.018,1354.7,998.0,11171.6,2563.5,0.0,36000.0,24000.0,0.0,6.8,91.76,32706.0,8608.0,7508.0,0.0,575.0,6840.0,0.0,0.0,2408.0,2171.0,4597.0,19675.0,5934.0,7037.0,0.0,207.0,265.0,0.0,0.0,0.0,2293.0,619.0,3320.0,0.0,0.0,0.0,0.0
base-lighting-holiday.xml,59.416,59.416,35.791,35.791,23.625,0.0,0.0,0.0,0.0,0.0,0.0,0.39,0.0,0.0,4.251,0.802,9.014,0.0,0.0,4.507,0.0,0.531,0.0,0.0,0.0,0.0,2.072,0.0,0.0,0.319,0.365,1.513,1.529,0.0,2.116,8.384,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,23.625,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,22.125,0.0,13.973,9.071,0.615,0.0,0.0,0.0,0.0,2427.3,3884.4,3884.4,23.508,19.176,0.0,3.54,3.638,0.512,7.506,0.63,10.087,-12.691,0.0,0.0,0.0,8.29,-0.067,4.807,0.0,0.728,0.0,5.099,-7.8,-2.489,0.0,-0.031,-0.441,-0.049,2.748,-0.02,-1.328,11.723,0.0,0.0,0.0,-6.24,-0.063,-1.137,-3.781,-0.162,0.0,3.101,7.782,2.018,1354.7,998.0,11171.6,2563.5,0.0,36000.0,24000.0,0.0,6.8,91.76,32706.0,8608.0,7508.0,0.0,575.0,6840.0,0.0,0.0,2408.0,2171.0,4597.0,19675.0,5934.0,7037.0,0.0,207.0,265.0,0.0,0.0,0.0,2293.0,619.0,3320.0,0.0,0.0,0.0,0.0
base-lighting-kwh-per-year.xml,60.9,60.9,39.187,39.187,21.713,0.0,0.0,0.0,0.0,0.0,0.0,0.358,0.0,0.0,4.475,0.856,9.013,0.0,0.0,7.673,0.0,0.512,0.0,0.0,0.0,0.0,2.076,0.0,0.0,0.319,0.365,1.513,1.529,0.0,2.116,8.384,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,21.713,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,20.334,0.0,14.945,9.071,0.614,0.0,0.0,0.0,0.0,2394.8,3956.9,3956.9,23.215,19.78,0.0,3.572,3.658,0.515,7.573,0.634,10.145,-12.66,0.0,0.0,0.0,8.378,-0.074,4.815,0.0,0.729,0.0,4.725,-7.788,-4.232,0.0,-0.071,-0.474,-0.053,2.655,-0.028,-1.42,11.736,0.0,0.0,0.0,-6.391,-0.07,-1.161,-3.967,-0.166,0.0,3.262,7.796,3.441,1354.7,998.0,11171.6,2563.5,0.0,36000.0,24000.0,0.0,6.8,91.76,32706.0,8608.0,7508.0,0.0,575.0,6840.0,0.0,0.0,2408.0,2171.0,4597.0,19675.0,5934.0,7037.0,0.0,207.0,265.0,0.0,0.0,0.0,2293.0,619.0,3320.0,0.0,0.0,0.0,0.0
@@ -67,18 +68,18 @@ base-residents-1-misc-loads-large-uncommon2.xml,80.706,80.706,49.212,49.212,23.5
base-residents-1.xml,53.439,53.439,28.186,28.186,25.253,0.0,0.0,0.0,0.0,0.0,0.0,0.417,0.0,0.0,3.993,0.741,3.886,0.0,0.0,4.507,0.0,0.334,0.0,0.0,0.0,0.0,2.069,0.0,0.0,0.159,0.21,0.868,1.159,0.0,1.461,8.384,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,25.253,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,23.651,0.0,13.015,3.56,0.616,0.0,0.0,0.0,0.0,1592.6,3323.9,3323.9,23.879,18.485,0.0,3.521,3.628,0.51,7.477,0.628,10.062,-12.698,0.0,0.0,0.0,8.262,-0.064,4.801,0.0,0.725,0.0,5.417,-6.452,-2.49,0.0,0.001,-0.416,-0.045,2.824,-0.013,-1.249,11.715,0.0,0.0,0.0,-6.122,-0.06,-1.113,-3.597,-0.158,0.0,2.937,6.439,2.017,777.7,496.6,4208.2,833.5,0.0,36000.0,24000.0,0.0,6.8,91.76,32706.0,8608.0,7508.0,0.0,575.0,6840.0,0.0,0.0,2408.0,2171.0,4597.0,19675.0,5934.0,7037.0,0.0,207.0,265.0,0.0,0.0,0.0,2293.0,619.0,3320.0,0.0,0.0,0.0,0.0
base-residents-5.xml,70.772,50.521,39.555,19.303,31.217,0.0,0.0,0.0,0.0,0.0,0.0,0.515,0.0,0.0,2.261,0.33,6.888,0.0,0.326,4.507,0.0,0.334,1.118,0.0,0.0,1.108,2.16,0.0,0.0,0.769,0.544,4.047,2.058,0.745,3.053,8.384,0.0,0.0,0.0,0.0,0.0,0.0,-20.251,0.0,0.409,31.217,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,29.22,0.0,5.524,18.155,0.645,0.0,11.92,0.0,0.0,2758.8,3334.1,3334.1,26.006,15.439,0.0,3.802,3.696,0.52,7.492,0.647,10.282,-12.793,0.0,0.0,0.0,8.323,-0.087,1.528,0.0,15.037,0.0,2.708,-9.686,-2.53,0.0,0.3,-0.113,-0.002,3.492,0.063,-0.321,11.62,0.0,0.0,0.0,-5.127,-0.083,-0.197,0.0,-3.402,-12.284,0.453,10.013,1.977,2592.0,2707.5,20715.8,5546.8,1.882,36000.0,24000.0,0.0,6.8,91.76,31457.0,4632.0,7508.0,0.0,575.0,6840.0,0.0,0.0,2408.0,2171.0,7324.0,15763.0,1007.0,7037.0,0.0,207.0,265.0,0.0,0.0,0.0,2293.0,1634.0,3320.0,0.0,0.0,0.0,0.0
base-schedules-detailed-all-10-mins.xml,59.298,59.298,35.797,35.797,23.502,0.0,0.0,0.0,0.0,0.0,0.0,0.388,0.0,0.0,4.411,0.833,9.023,0.0,0.0,4.51,0.0,0.334,0.0,0.0,0.0,0.0,2.074,0.0,0.0,0.319,0.365,1.513,1.529,0.0,2.116,8.384,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,23.502,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,22.008,0.0,14.411,9.053,0.639,0.0,0.0,0.333,1.0,9416.3,10702.6,10702.6,37.375,22.443,0.0,3.605,3.668,0.517,7.594,0.642,10.187,-12.602,0.0,0.0,0.0,8.334,-0.062,5.307,0.0,0.78,0.0,5.131,-8.891,-2.51,0.0,-0.155,-0.47,-0.054,2.754,-0.028,-1.377,11.752,0.0,0.0,0.0,-6.244,-0.057,-1.253,-3.675,-0.171,0.0,3.299,8.24,2.0,1354.7,998.0,11252.4,2582.1,0.0,36000.0,24000.0,0.0,6.8,91.76,32706.0,8608.0,7508.0,0.0,575.0,6840.0,0.0,0.0,2408.0,2171.0,4597.0,19675.0,5934.0,7037.0,0.0,207.0,265.0,0.0,0.0,0.0,2293.0,619.0,3320.0,0.0,0.0,0.0,0.0
-base-schedules-detailed-mixed-timesteps-power-outage.xml,33.115,33.115,28.192,28.192,4.923,0.0,0.0,0.0,0.0,0.0,0.0,0.081,0.0,0.0,3.099,0.522,7.326,0.0,0.0,3.619,0.0,0.267,0.0,0.0,0.0,0.0,1.688,0.0,0.0,0.267,0.304,1.259,1.258,0.0,1.713,6.788,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,4.923,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,4.612,0.0,9.112,7.3,0.562,0.0,0.0,0.5,0.5,9382.1,10441.6,10441.6,41.603,22.029,0.0,2.606,2.454,0.343,4.266,0.334,6.471,-12.497,0.0,0.0,0.0,3.68,-0.103,3.377,0.0,0.383,0.0,1.029,-6.405,-1.596,0.0,-0.193,-0.549,-0.064,2.5,-0.053,-1.655,11.861,0.0,0.0,0.0,-7.407,-0.057,-1.32,-6.178,-0.205,0.0,2.184,8.386,2.023,1141.2,883.5,9207.1,2112.8,0.0,36000.0,24000.0,0.0,6.8,91.76,32706.0,8608.0,7508.0,0.0,575.0,6840.0,0.0,0.0,2408.0,2171.0,4597.0,19675.0,5934.0,7037.0,0.0,207.0,265.0,0.0,0.0,0.0,2293.0,619.0,3320.0,0.0,0.0,0.0,0.0
+base-schedules-detailed-mixed-timesteps-power-outage.xml,33.137,33.137,28.192,28.192,4.944,0.0,0.0,0.0,0.0,0.0,0.0,0.082,0.0,0.0,3.099,0.522,7.326,0.0,0.0,3.619,0.0,0.267,0.0,0.0,0.0,0.0,1.688,0.0,0.0,0.267,0.304,1.259,1.258,0.0,1.713,6.788,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,4.944,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,4.632,0.0,9.111,7.3,0.562,0.0,0.0,0.5,0.5,9382.2,10441.6,10441.6,41.885,22.029,0.0,2.598,2.445,0.341,4.238,0.332,6.445,-12.497,0.0,0.0,0.0,3.632,-0.104,3.367,0.0,0.383,0.0,1.033,-6.255,-1.596,0.0,-0.193,-0.549,-0.064,2.5,-0.053,-1.655,11.861,0.0,0.0,0.0,-7.408,-0.057,-1.32,-6.178,-0.205,0.0,2.184,8.386,2.023,1141.2,883.5,9207.2,2112.8,0.0,36000.0,24000.0,0.0,6.8,91.76,32706.0,8608.0,7508.0,0.0,575.0,6840.0,0.0,0.0,2408.0,2171.0,4597.0,19675.0,5934.0,7037.0,0.0,207.0,265.0,0.0,0.0,0.0,2293.0,619.0,3320.0,0.0,0.0,0.0,0.0
base-schedules-detailed-mixed-timesteps.xml,42.033,42.033,33.855,33.855,8.178,0.0,0.0,0.0,0.0,0.0,0.0,0.135,0.0,0.0,3.111,0.524,9.053,0.0,0.0,4.51,0.0,0.334,0.0,0.0,0.0,0.0,1.964,0.0,0.0,0.319,0.365,1.513,1.529,0.0,2.116,8.384,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,8.178,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,7.657,0.0,9.157,9.053,0.672,0.0,0.0,0.0,0.5,9378.7,10444.6,10444.6,31.99,22.032,0.0,2.907,2.8,0.392,5.382,0.419,7.495,-12.492,0.0,0.0,0.0,5.496,-0.058,3.852,0.0,0.58,0.0,1.756,-8.668,-2.486,0.0,-0.196,-0.553,-0.065,2.505,-0.053,-1.665,11.861,0.0,0.0,0.0,-7.339,-0.057,-1.322,-6.196,-0.206,0.0,2.193,8.386,2.023,1354.7,998.0,11253.7,2582.4,0.0,36000.0,24000.0,0.0,6.8,91.76,32706.0,8608.0,7508.0,0.0,575.0,6840.0,0.0,0.0,2408.0,2171.0,4597.0,19675.0,5934.0,7037.0,0.0,207.0,265.0,0.0,0.0,0.0,2293.0,619.0,3320.0,0.0,0.0,0.0,0.0
base-schedules-detailed-occupancy-stochastic-10-mins.xml,58.705,58.705,35.708,35.708,22.997,0.0,0.0,0.0,0.0,0.0,0.0,0.379,0.0,0.0,4.328,0.819,8.936,0.0,0.0,4.482,0.0,0.334,0.0,0.0,0.0,0.0,2.073,0.0,0.0,0.323,0.356,1.504,1.664,0.0,2.117,8.391,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,22.997,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,21.533,0.0,14.197,8.987,0.616,0.0,0.0,0.0,0.0,6630.7,7141.3,8967.4,31.432,21.327,0.0,3.553,3.646,0.513,7.531,0.631,10.109,-12.67,0.0,0.0,0.0,8.32,-0.063,5.321,0.0,0.764,0.0,4.966,-8.913,-2.501,0.0,-0.035,-0.443,-0.049,2.737,-0.021,-1.337,11.743,0.0,0.0,0.0,-6.26,-0.059,-1.261,-3.812,-0.188,0.0,3.144,8.309,1.981,1002.6,945.2,11359.3,2606.6,0.0,36000.0,24000.0,0.0,6.8,91.76,32706.0,8608.0,7508.0,0.0,575.0,6840.0,0.0,0.0,2408.0,2171.0,4597.0,19675.0,5934.0,7037.0,0.0,207.0,265.0,0.0,0.0,0.0,2293.0,619.0,3320.0,0.0,0.0,0.0,0.0
-base-schedules-detailed-occupancy-stochastic-power-outage.xml,44.34,44.34,29.877,29.877,14.463,0.0,0.0,0.0,0.0,0.0,0.0,0.239,0.0,0.0,4.297,0.812,7.294,0.0,0.0,3.627,0.0,0.267,0.0,0.0,0.0,0.0,1.752,0.0,0.0,0.267,0.304,1.259,1.258,0.0,1.713,6.789,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,14.463,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,13.548,0.0,14.068,7.313,0.518,0.0,0.0,17.0,0.0,6218.9,5664.3,6218.9,36.518,19.71,0.0,3.071,3.068,0.43,5.713,0.489,8.385,-12.681,0.0,0.0,0.0,5.191,-0.156,4.373,0.0,0.513,0.0,3.042,-6.589,-1.621,0.0,-0.034,-0.442,-0.049,2.725,-0.02,-1.334,11.737,0.0,0.0,0.0,-6.356,-0.059,-1.245,-3.807,-0.184,0.0,3.118,8.21,2.006,1141.2,883.5,9132.4,2095.6,0.0,36000.0,24000.0,0.0,6.8,91.76,32706.0,8608.0,7508.0,0.0,575.0,6840.0,0.0,0.0,2408.0,2171.0,4597.0,19675.0,5934.0,7037.0,0.0,207.0,265.0,0.0,0.0,0.0,2293.0,619.0,3320.0,0.0,0.0,0.0,0.0
+base-schedules-detailed-occupancy-stochastic-power-outage.xml,44.364,44.364,29.877,29.877,14.486,0.0,0.0,0.0,0.0,0.0,0.0,0.239,0.0,0.0,4.296,0.812,7.294,0.0,0.0,3.627,0.0,0.267,0.0,0.0,0.0,0.0,1.752,0.0,0.0,0.267,0.304,1.259,1.258,0.0,1.713,6.789,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,14.486,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,13.57,0.0,14.067,7.313,0.518,0.0,0.0,17.0,0.0,6219.8,5664.2,6219.8,36.537,19.71,0.0,3.063,3.06,0.429,5.685,0.487,8.361,-12.681,0.0,0.0,0.0,5.145,-0.157,4.363,0.0,0.513,0.0,3.046,-6.439,-1.621,0.0,-0.034,-0.442,-0.049,2.725,-0.02,-1.334,11.737,0.0,0.0,0.0,-6.357,-0.059,-1.245,-3.806,-0.184,0.0,3.117,8.21,2.006,1141.2,883.5,9132.4,2095.6,0.0,36000.0,24000.0,0.0,6.8,91.76,32706.0,8608.0,7508.0,0.0,575.0,6840.0,0.0,0.0,2408.0,2171.0,4597.0,19675.0,5934.0,7037.0,0.0,207.0,265.0,0.0,0.0,0.0,2293.0,619.0,3320.0,0.0,0.0,0.0,0.0
base-schedules-detailed-occupancy-stochastic-vacancy.xml,57.379,57.379,30.475,30.475,26.904,0.0,0.0,0.0,0.0,0.0,0.0,0.444,0.0,0.0,4.315,0.816,7.369,0.0,0.0,3.622,0.0,0.266,0.0,0.0,0.0,0.0,2.073,0.0,0.0,0.267,0.304,1.259,1.256,0.0,1.71,6.775,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,26.904,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,25.195,0.0,14.144,7.303,0.615,0.0,0.0,0.0,0.0,4495.2,5670.6,5670.6,30.846,19.766,0.0,3.501,3.619,0.509,7.449,0.625,10.037,-12.672,0.0,0.0,0.0,8.151,-0.064,5.304,0.0,0.513,0.0,5.718,-6.209,-1.614,0.0,-0.039,-0.447,-0.05,2.731,-0.022,-1.349,11.746,0.0,0.0,0.0,-6.274,-0.059,-1.25,-3.823,-0.184,0.0,3.131,8.223,2.008,1141.2,883.5,9118.0,2092.3,0.0,36000.0,24000.0,0.0,6.8,91.76,32706.0,8608.0,7508.0,0.0,575.0,6840.0,0.0,0.0,2408.0,2171.0,4597.0,19675.0,5934.0,7037.0,0.0,207.0,265.0,0.0,0.0,0.0,2293.0,619.0,3320.0,0.0,0.0,0.0,0.0
base-schedules-detailed-occupancy-stochastic.xml,58.64,58.64,35.665,35.665,22.975,0.0,0.0,0.0,0.0,0.0,0.0,0.379,0.0,0.0,4.315,0.816,9.013,0.0,0.0,4.51,0.0,0.334,0.0,0.0,0.0,0.0,2.073,0.0,0.0,0.319,0.365,1.513,1.529,0.0,2.116,8.384,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,22.975,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,21.513,0.0,14.146,9.071,0.615,0.0,0.0,0.0,0.0,4703.6,5670.8,5670.8,30.719,19.768,0.0,3.55,3.642,0.513,7.527,0.631,10.099,-12.668,0.0,0.0,0.0,8.311,-0.064,5.263,0.0,0.777,0.0,4.964,-8.871,-2.501,0.0,-0.039,-0.447,-0.05,2.731,-0.022,-1.349,11.746,0.0,0.0,0.0,-6.272,-0.059,-1.25,-3.823,-0.184,0.0,3.131,8.223,2.008,1354.7,998.0,11168.6,2562.9,0.0,36000.0,24000.0,0.0,6.8,91.76,32706.0,8608.0,7508.0,0.0,575.0,6840.0,0.0,0.0,2408.0,2171.0,4597.0,19675.0,5934.0,7037.0,0.0,207.0,265.0,0.0,0.0,0.0,2293.0,619.0,3320.0,0.0,0.0,0.0,0.0
base-schedules-detailed-setpoints-daily-schedules.xml,57.895,57.895,34.971,34.971,22.924,0.0,0.0,0.0,0.0,0.0,0.0,0.378,0.0,0.0,3.746,0.7,9.015,0.0,0.0,4.507,0.0,0.334,0.0,0.0,0.0,0.0,2.066,0.0,0.0,0.319,0.365,1.513,1.529,0.0,2.116,8.384,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,22.924,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,21.076,0.0,11.957,9.071,0.617,0.0,0.0,106.0,41.0,2072.1,3770.0,3770.0,34.955,20.845,0.0,3.497,3.568,0.501,7.484,0.605,9.791,-12.687,0.0,0.0,0.0,8.63,0.008,4.642,0.0,0.725,0.0,4.731,-7.752,-2.486,0.0,-0.04,-0.468,-0.053,2.704,-0.034,-1.49,11.726,0.0,0.0,0.0,-6.525,-0.001,-1.18,-4.194,-0.17,0.0,2.39,7.825,2.022,1354.7,998.0,11171.5,2563.5,0.0,36000.0,24000.0,0.0,6.8,91.76,32706.0,8608.0,7508.0,0.0,575.0,6840.0,0.0,0.0,2408.0,2171.0,4597.0,19675.0,5934.0,7037.0,0.0,207.0,265.0,0.0,0.0,0.0,2293.0,619.0,3320.0,0.0,0.0,0.0,0.0
base-schedules-detailed-setpoints-daily-setbacks.xml,57.375,57.375,35.127,35.127,22.248,0.0,0.0,0.0,0.0,0.0,0.0,0.367,0.0,0.0,3.886,0.728,9.015,0.0,0.0,4.507,0.0,0.334,0.0,0.0,0.0,0.0,2.065,0.0,0.0,0.319,0.365,1.513,1.529,0.0,2.116,8.384,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,22.248,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,20.744,0.0,12.562,9.071,0.617,0.0,0.0,0.0,8.0,2048.7,3769.7,3769.7,25.752,21.422,0.0,3.491,3.553,0.499,7.325,0.602,9.749,-12.723,0.0,0.0,0.0,8.166,-0.021,4.634,0.0,0.722,0.0,4.643,-7.768,-2.488,0.0,-0.027,-0.468,-0.053,2.647,-0.033,-1.493,11.69,0.0,0.0,0.0,-6.519,-0.022,-1.168,-4.138,-0.172,0.0,2.557,7.808,2.019,1354.7,998.0,11171.6,2563.5,0.0,36000.0,24000.0,0.0,6.8,91.76,32706.0,8608.0,7508.0,0.0,575.0,6840.0,0.0,0.0,2408.0,2171.0,4597.0,19675.0,5934.0,7037.0,0.0,207.0,265.0,0.0,0.0,0.0,2293.0,619.0,3320.0,0.0,0.0,0.0,0.0
base-schedules-detailed-setpoints.xml,41.926,41.926,33.625,33.625,8.301,0.0,0.0,0.0,0.0,0.0,0.0,0.137,0.0,0.0,2.929,0.488,9.046,0.0,0.0,4.507,0.0,0.334,0.0,0.0,0.0,0.0,1.959,0.0,0.0,0.319,0.365,1.513,1.529,0.0,2.116,8.384,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,8.301,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,7.768,0.0,8.584,9.071,0.649,0.0,0.0,0.0,0.0,2012.3,3487.4,3487.4,17.944,16.314,0.0,2.815,2.755,0.385,5.258,0.403,7.36,-12.563,0.0,0.0,0.0,5.369,-0.059,3.444,0.0,0.566,0.0,1.759,-7.591,-2.465,0.0,-0.067,-0.517,-0.059,2.512,-0.044,-1.596,11.85,0.0,0.0,0.0,-7.338,-0.059,-1.192,-6.335,-0.18,0.0,1.986,7.912,2.042,1354.7,998.0,11171.5,2563.5,0.0,36000.0,24000.0,0.0,6.8,91.76,32706.0,8608.0,7508.0,0.0,575.0,6840.0,0.0,0.0,2408.0,2171.0,4597.0,19675.0,5934.0,7037.0,0.0,207.0,265.0,0.0,0.0,0.0,2293.0,619.0,3320.0,0.0,0.0,0.0,0.0
-base-schedules-simple-power-outage.xml,55.217,55.217,32.34,32.34,22.878,0.0,0.0,0.0,0.0,0.0,0.0,0.377,0.0,0.0,3.386,0.607,8.4,0.0,0.0,4.199,0.0,0.311,0.0,0.0,0.0,0.0,2.017,0.0,0.0,0.292,0.335,1.386,1.401,0.0,1.94,7.686,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,22.878,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,21.425,0.0,10.625,8.445,0.581,0.0,0.0,0.0,4.0,1896.7,5855.5,5855.5,23.323,22.787,0.0,3.55,3.641,0.512,7.518,0.63,10.09,-12.683,0.0,0.0,0.0,8.283,-0.063,4.761,0.0,0.795,0.0,4.949,-8.411,-2.488,0.0,-0.086,-0.524,-0.061,2.512,-0.041,-1.591,11.731,0.0,0.0,0.0,-6.577,-0.059,-1.214,-4.4,-0.172,0.0,2.301,7.319,1.711,1241.4,914.9,10291.7,2361.6,0.0,36000.0,24000.0,0.0,6.8,91.76,32706.0,8608.0,7508.0,0.0,575.0,6840.0,0.0,0.0,2408.0,2171.0,4597.0,19675.0,5934.0,7037.0,0.0,207.0,265.0,0.0,0.0,0.0,2293.0,619.0,3320.0,0.0,0.0,0.0,0.0
-base-schedules-simple-vacancy.xml,57.633,57.633,30.884,30.884,26.749,0.0,0.0,0.0,0.0,0.0,0.0,0.441,0.0,0.0,4.356,0.827,7.374,0.0,0.0,3.592,0.0,0.266,0.0,0.0,0.0,0.0,2.22,0.0,0.0,0.265,0.303,1.256,1.269,0.0,1.756,6.96,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,26.749,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,25.051,0.0,14.356,7.31,0.615,0.0,0.0,0.0,0.0,1864.4,3799.2,3799.2,23.376,19.138,0.0,3.503,3.619,0.509,7.447,0.625,10.032,-12.688,0.0,0.0,0.0,8.147,-0.064,4.961,0.0,0.552,0.0,5.692,-6.041,-1.573,0.0,-0.044,-0.452,-0.05,2.713,-0.023,-1.368,11.73,0.0,0.0,0.0,-6.295,-0.059,-1.128,-3.868,-0.197,0.0,3.163,8.377,2.019,1124.6,828.5,9189.2,2108.6,0.0,36000.0,24000.0,0.0,6.8,91.76,32706.0,8608.0,7508.0,0.0,575.0,6840.0,0.0,0.0,2408.0,2171.0,4597.0,19675.0,5934.0,7037.0,0.0,207.0,265.0,0.0,0.0,0.0,2293.0,619.0,3320.0,0.0,0.0,0.0,0.0
-base-schedules-simple.xml,58.726,58.726,35.859,35.859,22.867,0.0,0.0,0.0,0.0,0.0,0.0,0.377,0.0,0.0,4.356,0.827,9.013,0.0,0.0,4.507,0.0,0.334,0.0,0.0,0.0,0.0,2.22,0.0,0.0,0.319,0.365,1.513,1.529,0.0,2.116,8.384,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,22.867,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,21.415,0.0,14.358,9.071,0.614,0.0,0.0,0.0,0.0,1895.4,3491.3,3491.3,23.323,19.123,0.0,3.55,3.641,0.512,7.519,0.63,10.09,-12.683,0.0,0.0,0.0,8.295,-0.063,4.806,0.0,0.729,0.0,4.948,-8.411,-2.488,0.0,-0.044,-0.452,-0.05,2.711,-0.023,-1.369,11.73,0.0,0.0,0.0,-6.294,-0.059,-1.15,-3.872,-0.164,0.0,3.162,8.377,2.019,1354.7,998.0,11171.6,2563.5,0.0,36000.0,24000.0,0.0,6.8,91.76,32706.0,8608.0,7508.0,0.0,575.0,6840.0,0.0,0.0,2408.0,2171.0,4597.0,19675.0,5934.0,7037.0,0.0,207.0,265.0,0.0,0.0,0.0,2293.0,619.0,3320.0,0.0,0.0,0.0,0.0
+base-schedules-simple-power-outage.xml,68.872,68.872,45.994,45.994,22.878,0.0,0.0,0.0,0.0,0.0,0.0,0.377,0.0,0.0,3.383,0.607,20.687,1.37,0.0,4.199,0.0,0.311,0.0,0.0,0.0,0.0,2.017,0.0,0.0,0.292,0.335,1.386,1.401,0.0,1.94,7.686,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,22.878,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,21.425,0.0,10.613,8.477,0.581,0.0,0.0,0.0,4.0,2805.2,8089.0,8089.0,23.321,22.646,0.0,3.55,3.641,0.512,7.518,0.63,10.09,-12.683,0.0,0.0,0.0,8.283,-0.063,4.761,0.0,0.795,0.0,4.949,-8.411,-2.488,0.0,-0.083,-0.521,-0.06,2.522,-0.041,-1.583,11.731,0.0,0.0,0.0,-6.565,-0.059,-1.212,-4.378,-0.172,0.0,2.299,7.245,1.711,1241.4,914.9,10291.6,2416.4,0.0,36000.0,24000.0,0.0,6.8,91.76,32706.0,8608.0,7508.0,0.0,575.0,6840.0,0.0,0.0,2408.0,2171.0,4597.0,19675.0,5934.0,7037.0,0.0,207.0,265.0,0.0,0.0,0.0,2293.0,619.0,3320.0,0.0,0.0,0.0,0.0
+base-schedules-simple-vacancy.xml,69.659,69.659,42.91,42.91,26.749,0.0,0.0,0.0,0.0,0.0,0.0,0.441,0.0,0.0,4.356,0.827,18.16,1.241,0.0,3.592,0.0,0.266,0.0,0.0,0.0,0.0,2.22,0.0,0.0,0.265,0.303,1.256,1.269,0.0,1.756,6.96,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,26.749,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,25.051,0.0,14.356,7.337,0.615,0.0,0.0,0.0,0.0,2842.1,4021.1,4021.1,23.375,19.138,0.0,3.503,3.619,0.509,7.447,0.625,10.032,-12.688,0.0,0.0,0.0,8.147,-0.064,4.961,0.0,0.552,0.0,5.692,-6.041,-1.573,0.0,-0.044,-0.452,-0.05,2.713,-0.023,-1.368,11.73,0.0,0.0,0.0,-6.295,-0.059,-1.128,-3.868,-0.197,0.0,3.163,8.377,2.019,1124.6,828.5,9189.2,2157.6,0.0,36000.0,24000.0,0.0,6.8,91.76,32706.0,8608.0,7508.0,0.0,575.0,6840.0,0.0,0.0,2408.0,2171.0,4597.0,19675.0,5934.0,7037.0,0.0,207.0,265.0,0.0,0.0,0.0,2293.0,619.0,3320.0,0.0,0.0,0.0,0.0
+base-schedules-simple.xml,73.406,73.406,50.538,50.538,22.867,0.0,0.0,0.0,0.0,0.0,0.0,0.377,0.0,0.0,4.356,0.827,22.199,1.495,0.0,4.507,0.0,0.334,0.0,0.0,0.0,0.0,2.22,0.0,0.0,0.319,0.365,1.513,1.529,0.0,2.116,8.384,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,22.867,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,21.415,0.0,14.358,9.105,0.614,0.0,0.0,0.0,0.0,2805.2,3982.7,3982.7,23.321,19.123,0.0,3.55,3.641,0.512,7.519,0.63,10.09,-12.683,0.0,0.0,0.0,8.295,-0.063,4.806,0.0,0.729,0.0,4.948,-8.411,-2.488,0.0,-0.044,-0.452,-0.05,2.711,-0.023,-1.369,11.73,0.0,0.0,0.0,-6.294,-0.059,-1.15,-3.872,-0.164,0.0,3.162,8.377,2.019,1354.7,998.0,11171.6,2623.0,0.0,36000.0,24000.0,0.0,6.8,91.76,32706.0,8608.0,7508.0,0.0,575.0,6840.0,0.0,0.0,2408.0,2171.0,4597.0,19675.0,5934.0,7037.0,0.0,207.0,265.0,0.0,0.0,0.0,2293.0,619.0,3320.0,0.0,0.0,0.0,0.0
base-simcontrol-calendar-year-custom.xml,59.179,59.179,35.551,35.551,23.628,0.0,0.0,0.0,0.0,0.0,0.0,0.39,0.0,0.0,4.216,0.793,9.014,0.0,0.0,4.507,0.0,0.334,0.0,0.0,0.0,0.0,2.072,0.0,0.0,0.319,0.365,1.513,1.529,0.0,2.116,8.384,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,23.628,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,22.127,0.0,13.804,9.071,0.615,0.0,0.0,0.0,0.0,2052.4,3543.2,3543.2,23.508,19.133,0.0,3.54,3.638,0.512,7.506,0.63,10.087,-12.691,0.0,0.0,0.0,8.29,-0.066,4.807,0.0,0.728,0.0,5.099,-7.8,-2.489,0.0,-0.026,-0.438,-0.048,2.764,-0.019,-1.322,11.723,0.0,0.0,0.0,-6.232,-0.062,-1.136,-3.949,-0.161,0.0,3.067,7.782,2.018,1354.7,998.0,11171.5,2563.5,0.0,36000.0,24000.0,0.0,6.8,91.76,32706.0,8608.0,7508.0,0.0,575.0,6840.0,0.0,0.0,2408.0,2171.0,4597.0,19675.0,5934.0,7037.0,0.0,207.0,265.0,0.0,0.0,0.0,2293.0,619.0,3320.0,0.0,0.0,0.0,0.0
base-simcontrol-daylight-saving-custom.xml,59.22,59.22,35.594,35.594,23.626,0.0,0.0,0.0,0.0,0.0,0.0,0.39,0.0,0.0,4.251,0.802,9.014,0.0,0.0,4.507,0.0,0.334,0.0,0.0,0.0,0.0,2.072,0.0,0.0,0.319,0.365,1.513,1.529,0.0,2.116,8.384,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,23.626,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,22.126,0.0,13.973,9.071,0.615,0.0,0.0,0.0,0.0,2052.4,3884.4,3884.4,23.508,19.176,0.0,3.54,3.638,0.512,7.506,0.63,10.087,-12.691,0.0,0.0,0.0,8.29,-0.067,4.807,0.0,0.728,0.0,5.099,-7.8,-2.489,0.0,-0.031,-0.441,-0.049,2.748,-0.02,-1.328,11.723,0.0,0.0,0.0,-6.24,-0.063,-1.137,-3.781,-0.162,0.0,3.101,7.782,2.018,1354.7,998.0,11171.6,2563.5,0.0,36000.0,24000.0,0.0,6.8,91.76,32706.0,8608.0,7508.0,0.0,575.0,6840.0,0.0,0.0,2408.0,2171.0,4597.0,19675.0,5934.0,7037.0,0.0,207.0,265.0,0.0,0.0,0.0,2293.0,619.0,3320.0,0.0,0.0,0.0,0.0
base-simcontrol-daylight-saving-disabled.xml,59.192,59.192,35.577,35.577,23.615,0.0,0.0,0.0,0.0,0.0,0.0,0.39,0.0,0.0,4.237,0.799,9.014,0.0,0.0,4.507,0.0,0.334,0.0,0.0,0.0,0.0,2.072,0.0,0.0,0.319,0.365,1.513,1.529,0.0,2.116,8.384,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,23.615,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,22.116,0.0,13.914,9.071,0.615,0.0,0.0,0.0,0.0,2052.4,3419.8,3419.8,23.508,18.774,0.0,3.539,3.636,0.512,7.506,0.629,10.074,-12.69,0.0,0.0,0.0,8.286,-0.062,4.804,0.0,0.725,0.0,5.096,-7.793,-2.487,0.0,-0.03,-0.442,-0.049,2.744,-0.021,-1.339,11.724,0.0,0.0,0.0,-6.243,-0.058,-1.142,-3.795,-0.159,0.0,3.074,7.789,2.02,1354.7,998.0,11171.6,2563.5,0.0,36000.0,24000.0,0.0,6.8,91.76,32706.0,8608.0,7508.0,0.0,575.0,6840.0,0.0,0.0,2408.0,2171.0,4597.0,19675.0,5934.0,7037.0,0.0,207.0,265.0,0.0,0.0,0.0,2293.0,619.0,3320.0,0.0,0.0,0.0,0.0
@@ -91,9 +92,9 @@ base-simcontrol-timestep-30-mins.xml,59.604,59.604,35.661,35.661,23.943,0.0,0.0,
base.xml,59.22,59.22,35.594,35.594,23.625,0.0,0.0,0.0,0.0,0.0,0.0,0.39,0.0,0.0,4.251,0.802,9.014,0.0,0.0,4.507,0.0,0.334,0.0,0.0,0.0,0.0,2.072,0.0,0.0,0.319,0.365,1.513,1.529,0.0,2.116,8.384,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,23.625,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,22.125,0.0,13.973,9.071,0.615,0.0,0.0,0.0,0.0,2052.4,3884.4,3884.4,23.508,19.176,0.0,3.54,3.638,0.512,7.506,0.63,10.087,-12.691,0.0,0.0,0.0,8.29,-0.067,4.807,0.0,0.728,0.0,5.099,-7.8,-2.489,0.0,-0.031,-0.441,-0.049,2.748,-0.02,-1.328,11.723,0.0,0.0,0.0,-6.24,-0.063,-1.137,-3.781,-0.162,0.0,3.101,7.782,2.018,1354.7,998.0,11171.6,2563.5,0.0,36000.0,24000.0,0.0,6.8,91.76,32706.0,8608.0,7508.0,0.0,575.0,6840.0,0.0,0.0,2408.0,2171.0,4597.0,19675.0,5934.0,7037.0,0.0,207.0,265.0,0.0,0.0,0.0,2293.0,619.0,3320.0,0.0,0.0,0.0,0.0
house001.xml,86.976,86.976,46.491,46.491,40.485,0.0,0.0,0.0,0.0,0.0,0.0,0.263,0.0,0.0,15.452,4.241,0.0,0.0,0.0,7.376,0.315,0.652,0.448,0.0,0.0,0.0,2.397,0.0,0.0,0.609,0.442,3.284,1.795,0.0,2.586,6.629,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,23.459,0.0,17.026,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,19.024,0.0,49.979,10.404,2.678,0.0,0.0,0.0,0.0,1867.8,6837.1,6837.1,38.208,42.716,0.492,1.978,7.261,0.42,0.0,0.979,7.142,-4.994,0.0,0.0,0.479,1.221,-0.303,4.301,0.0,5.157,0.0,3.347,-5.668,-2.928,0.565,2.008,3.783,0.31,0.0,0.243,1.664,11.471,0.0,0.0,0.525,6.858,-0.289,-0.379,-1.822,-0.711,0.0,10.641,10.839,4.448,2104.4,2144.8,14468.8,4385.1,0.0,90000.0,60000.0,0.0,25.88,98.42,61220.0,24350.0,7740.0,0.0,811.0,7192.0,453.0,325.0,9636.0,2236.0,8478.0,111470.0,85246.0,9491.0,0.0,548.0,4937.0,299.0,70.0,0.0,3975.0,3124.0,3780.0,6860.0,3501.0,2159.0,1200.0
house002.xml,68.384,68.384,40.431,40.431,27.953,0.0,0.0,0.0,0.0,0.0,0.0,0.163,0.0,0.0,14.492,3.319,0.0,0.0,0.0,6.378,0.315,0.594,0.448,0.0,0.0,0.0,2.285,0.0,0.0,0.447,0.338,2.514,1.529,0.0,2.116,5.493,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,14.479,0.0,13.474,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,11.739,0.0,39.708,7.517,2.89,0.0,0.0,0.0,0.0,1572.0,5480.1,5480.1,24.147,29.925,0.0,2.533,5.044,0.0,0.0,0.843,5.712,-4.099,0.0,0.0,0.0,1.73,-0.167,1.578,0.0,3.789,0.0,1.421,-4.319,-2.485,0.0,3.091,2.827,0.0,0.0,0.42,0.424,8.64,0.0,0.0,0.0,8.475,-0.161,-0.174,-1.342,-0.62,0.0,5.858,8.555,3.893,1610.8,1575.3,9989.5,3520.4,0.0,90000.0,60000.0,0.0,25.88,98.42,47503.0,15295.0,6070.0,0.0,637.0,4442.0,0.0,0.0,12952.0,3120.0,4987.0,33038.0,14147.0,6700.0,0.0,399.0,2264.0,0.0,0.0,0.0,4331.0,1877.0,3320.0,3848.0,1750.0,1297.0,800.0
-house003.xml,68.972,68.972,39.941,39.941,29.031,0.0,0.0,0.0,0.0,0.0,0.0,0.177,0.0,0.0,12.746,3.478,0.0,0.0,0.0,6.872,0.315,0.623,0.448,0.0,0.0,0.0,2.283,0.0,0.0,0.447,0.338,2.514,1.529,0.0,2.116,6.055,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,15.799,0.0,13.233,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,12.808,0.0,41.522,7.517,2.69,0.0,0.0,0.0,0.0,1652.4,5614.5,5614.5,26.56,34.007,0.651,2.794,4.669,0.0,0.0,0.977,6.242,-3.958,0.0,0.0,0.0,1.054,-0.193,1.997,0.0,3.943,0.0,1.662,-4.504,-2.69,0.794,3.053,2.631,0.0,0.0,0.651,1.117,9.819,0.0,0.0,0.0,6.527,-0.185,-0.209,-1.394,-0.618,0.0,6.501,8.848,4.182,1610.8,1575.3,9989.4,3520.4,0.0,90000.0,60000.0,0.0,25.88,98.42,48035.0,15929.0,6644.0,0.0,724.0,4238.0,610.0,0.0,11450.0,2908.0,5532.0,41327.0,18337.0,9082.0,0.0,424.0,2542.0,403.0,0.0,0.0,5169.0,2049.0,3320.0,3967.0,1750.0,1416.0,800.0
+house003.xml,68.971,68.971,39.94,39.94,29.031,0.0,0.0,0.0,0.0,0.0,0.0,0.177,0.0,0.0,12.746,3.478,0.0,0.0,0.0,6.872,0.315,0.623,0.448,0.0,0.0,0.0,2.283,0.0,0.0,0.447,0.338,2.514,1.529,0.0,2.116,6.055,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,15.799,0.0,13.233,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,12.808,0.0,41.522,7.517,2.69,0.0,0.0,0.0,0.0,1652.4,5578.5,5578.5,26.56,33.688,0.651,2.794,4.669,0.0,0.0,0.977,6.242,-3.958,0.0,0.0,0.0,1.054,-0.193,1.997,0.0,3.943,0.0,1.662,-4.504,-2.69,0.794,3.053,2.631,0.0,0.0,0.651,1.117,9.819,0.0,0.0,0.0,6.527,-0.185,-0.209,-1.394,-0.618,0.0,6.5,8.848,4.182,1610.8,1575.3,9989.4,3520.4,0.0,90000.0,60000.0,0.0,25.88,98.42,48035.0,15929.0,6644.0,0.0,724.0,4238.0,610.0,0.0,11450.0,2908.0,5532.0,41327.0,18337.0,9082.0,0.0,424.0,2542.0,403.0,0.0,0.0,5169.0,2049.0,3320.0,3967.0,1750.0,1416.0,800.0
house004.xml,137.162,137.162,75.285,75.285,61.877,0.0,0.0,0.0,0.0,0.0,0.0,0.406,0.0,0.0,29.323,9.249,0.0,0.0,0.0,11.556,0.315,0.894,0.448,0.0,0.0,0.0,2.244,0.0,0.0,0.528,0.39,2.899,1.662,1.633,2.351,11.386,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,45.744,0.0,16.133,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,36.992,0.0,108.603,8.975,3.51,0.0,0.0,0.0,106.0,3077.9,7936.4,7936.4,55.097,52.116,0.127,5.496,11.334,0.0,0.0,1.248,13.697,-5.912,0.0,0.0,0.0,3.077,-0.796,4.941,0.0,6.269,0.0,7.248,-6.2,-3.846,0.198,6.711,11.692,0.0,0.0,0.52,7.516,17.689,0.0,0.0,0.0,18.807,-0.784,1.025,-0.0,1.853,0.0,21.4,14.58,7.71,1857.6,1860.1,12229.0,3983.9,0.0,80000.0,60000.0,0.0,25.88,98.42,76099.0,20961.0,11324.0,0.0,882.0,8518.0,101.0,0.0,19021.0,5929.0,9362.0,52109.0,18518.0,12464.0,0.0,688.0,5604.0,65.0,0.0,0.0,7851.0,3369.0,3550.0,4612.0,1284.0,2328.0,1000.0
-house005.xml,95.674,95.674,53.116,53.116,42.558,0.0,0.0,0.0,0.0,0.0,0.0,0.307,0.0,0.0,18.272,5.052,0.0,0.0,0.0,9.15,0.315,0.755,0.448,0.0,0.0,0.0,2.338,0.0,0.0,0.528,0.39,2.899,1.662,0.0,2.351,8.648,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,27.372,0.0,15.187,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,22.198,0.0,60.607,8.975,2.73,0.0,0.0,0.0,2.0,2101.7,7891.8,7891.8,46.474,53.405,0.0,3.026,8.178,0.268,0.0,1.357,9.417,-6.701,0.0,0.0,0.394,1.238,-0.401,5.06,0.0,5.088,0.0,4.496,-5.796,-3.627,0.0,2.994,4.311,0.214,0.0,0.282,2.414,15.358,0.0,0.0,0.416,7.529,-0.383,-0.458,-2.308,-0.708,0.0,14.553,11.103,5.523,1857.6,1860.1,12229.1,3983.9,0.0,90000.0,60000.0,0.0,25.88,98.42,70733.0,26912.0,10216.0,0.0,1118.0,7857.0,0.0,262.0,11638.0,3312.0,9418.0,64895.0,31849.0,13705.0,0.0,779.0,5660.0,0.0,60.0,0.0,5887.0,3406.0,3550.0,6854.0,3501.0,2354.0,1000.0
+house005.xml,95.674,95.674,53.116,53.116,42.558,0.0,0.0,0.0,0.0,0.0,0.0,0.307,0.0,0.0,18.272,5.052,0.0,0.0,0.0,9.15,0.315,0.755,0.448,0.0,0.0,0.0,2.338,0.0,0.0,0.528,0.39,2.899,1.662,0.0,2.351,8.648,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,27.372,0.0,15.187,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,22.198,0.0,60.607,8.975,2.73,0.0,0.0,0.0,2.0,2101.7,7891.8,7891.8,46.474,53.405,0.0,3.026,8.178,0.268,0.0,1.357,9.417,-6.701,0.0,0.0,0.394,1.238,-0.401,5.06,0.0,5.088,0.0,4.496,-5.796,-3.627,0.0,2.994,4.311,0.214,0.0,0.282,2.414,15.358,0.0,0.0,0.416,7.529,-0.383,-0.458,-2.308,-0.708,0.0,14.554,11.103,5.523,1857.6,1860.1,12229.1,3983.9,0.0,90000.0,60000.0,0.0,25.88,98.42,70733.0,26912.0,10216.0,0.0,1118.0,7857.0,0.0,262.0,11638.0,3312.0,9418.0,64895.0,31849.0,13705.0,0.0,779.0,5660.0,0.0,60.0,0.0,5887.0,3406.0,3550.0,6854.0,3501.0,2354.0,1000.0
house006.xml,140.094,140.094,31.53,31.53,108.563,0.0,0.0,0.0,0.0,0.0,0.0,1.898,0.0,0.0,2.868,0.319,0.0,0.0,0.0,8.682,0.29,0.705,3.138,0.0,0.0,0.0,1.533,0.0,0.0,0.447,0.338,0.199,0.105,0.0,2.116,8.893,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,82.718,0.0,20.133,2.642,3.07,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,79.635,0.0,7.544,13.079,3.28,0.0,0.0,0.0,0.0,2056.0,2866.3,2866.3,40.812,15.273,0.0,4.26,22.269,1.99,37.087,1.864,17.625,-9.461,0.0,0.0,0.0,9.291,-0.35,9.534,0.0,4.366,0.0,0.0,-13.275,-6.376,0.0,0.176,-0.767,-0.043,2.86,-0.082,-0.518,4.316,0.0,0.0,0.0,-3.865,-0.349,-0.502,-1.553,-0.066,0.0,0.0,5.729,2.306,1610.8,1575.4,12168.1,4288.2,0.0,80000.0,30000.0,0.0,-13.72,81.14,50794.0,0.0,8907.0,0.0,677.0,31615.0,0.0,0.0,2463.0,1874.0,5256.0,9469.0,0.0,4109.0,0.0,40.0,461.0,0.0,0.0,0.0,1369.0,171.0,3320.0,1566.0,0.0,766.0,800.0
house007.xml,139.988,139.988,33.595,33.595,106.394,0.0,0.0,0.0,0.0,0.0,0.0,1.664,0.0,0.0,2.46,0.368,0.0,0.0,0.0,10.293,0.315,0.821,1.943,0.0,0.0,0.0,2.169,0.0,0.0,0.528,0.39,0.229,0.114,0.0,2.351,9.949,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,76.729,0.0,23.278,3.047,3.34,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,72.245,0.0,5.557,15.626,3.272,0.0,0.0,0.0,0.0,2277.5,3040.8,3040.8,39.978,13.671,0.0,4.721,23.685,4.448,10.095,1.499,18.826,-9.395,0.0,0.0,0.076,11.569,-0.41,6.121,0.0,20.834,0.0,2.921,-15.58,-7.667,0.0,0.208,-0.661,-0.045,0.566,-0.043,-0.285,4.554,0.0,0.0,-0.009,-3.955,-0.405,-0.183,-1.312,-1.838,0.0,0.104,6.322,2.626,1857.6,1860.1,14896.3,4852.9,0.0,90000.0,42000.0,0.0,-13.72,81.14,44632.0,5474.0,9095.0,0.0,517.0,15776.0,0.0,27.0,2623.0,2001.0,9120.0,11844.0,1097.0,4958.0,0.0,11.0,281.0,0.0,0.0,0.0,1461.0,484.0,3550.0,2145.0,404.0,741.0,1000.0
house008.xml,184.58,184.58,38.878,38.878,145.702,0.0,0.0,0.0,0.0,0.0,0.0,2.521,0.0,0.0,3.528,0.513,0.0,0.0,0.0,11.0,0.315,0.862,3.138,0.0,0.0,0.0,2.228,0.0,0.0,0.609,0.442,0.26,0.123,0.0,2.586,10.753,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,112.269,0.0,26.371,3.452,3.61,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,105.788,0.0,10.041,18.122,3.216,0.0,0.0,0.0,0.0,2562.2,3850.6,3850.6,55.304,21.129,0.0,7.234,27.478,4.71,24.269,1.194,21.308,-7.825,0.0,0.0,1.277,17.851,-0.453,18.354,0.0,6.388,0.0,8.009,-16.744,-8.086,0.0,0.297,-1.099,-0.054,1.655,-0.086,-0.367,5.403,0.0,0.0,-0.107,-2.739,-0.453,-0.957,-1.735,-0.268,0.0,0.53,7.216,2.913,2104.4,2144.8,17624.6,5341.6,0.0,90000.0,36000.0,0.0,-13.72,81.14,68489.0,8922.0,10314.0,0.0,499.0,30749.0,0.0,581.0,4580.0,3226.0,9618.0,16083.0,279.0,8654.0,0.0,1.0,937.0,0.0,-240.0,0.0,2356.0,316.0,3780.0,2481.0,158.0,1123.0,1200.0
@@ -116,9 +117,9 @@ house024.xml,130.442,130.442,43.548,43.548,0.0,86.895,0.0,0.0,0.0,0.0,0.0,2.161,
house025.xml,105.595,105.595,69.79,69.79,35.805,0.0,0.0,0.0,0.0,0.0,6.738,1.082,0.0,0.0,18.727,3.059,12.209,0.0,0.0,9.258,0.0,0.783,0.0,0.0,0.0,0.0,3.902,0.0,0.0,0.359,0.282,2.094,1.384,0.0,1.859,8.054,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,35.805,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,37.64,0.0,47.484,8.315,3.831,0.0,0.0,0.0,0.0,4475.8,7250.8,7250.8,36.615,33.391,0.0,3.377,17.567,0.0,0.0,2.17,7.405,-5.706,0.0,0.0,6.826,0.0,-1.341,13.757,0.001,0.41,0.0,5.032,-7.951,-3.985,0.0,1.098,5.727,0.0,0.0,0.446,1.957,12.402,0.0,0.0,5.586,0.0,-1.34,-0.7,-0.276,-0.004,0.0,6.311,11.261,5.273,1341.8,1265.0,3496.9,1343.1,0.0,158000.0,81000.0,33000.0,24.62,91.58,58096.0,23804.0,4722.0,0.0,1238.0,9584.0,0.0,6119.0,0.0,1863.0,10768.0,35348.0,11892.0,7696.0,0.0,752.0,4348.0,0.0,2236.0,0.0,1707.0,2197.0,4520.0,9615.0,5967.0,2849.0,800.0
house026.xml,57.845,57.845,24.948,24.948,32.897,0.0,0.0,0.0,0.0,0.0,0.0,0.047,0.0,0.0,0.0,0.0,0.0,0.0,0.0,6.53,0.252,0.548,0.299,0.0,0.0,0.0,2.07,0.0,0.0,0.447,0.338,2.514,1.529,0.934,2.116,7.325,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,18.764,0.0,14.133,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,14.39,0.0,0.0,8.599,2.08,0.0,0.0,0.0,0.0,1544.5,1474.7,1544.5,17.654,0.0,0.0,1.767,6.851,0.232,0.0,0.197,4.392,-2.928,0.0,0.0,7.072,0.0,-0.056,2.495,0.0,3.132,0.0,0.0,-5.785,-3.086,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1298.2,1286.6,8604.1,3032.2,0.0,84000.0,0.0,0.0,24.62,91.58,22013.0,0.0,3869.0,0.0,128.0,5462.0,0.0,5703.0,0.0,1459.0,5391.0,16135.0,0.0,5497.0,0.0,78.0,1775.0,0.0,1973.0,0.0,2302.0,1191.0,3320.0,2344.0,0.0,1544.0,800.0
house027.xml,74.259,74.259,31.076,31.076,43.183,0.0,0.0,0.0,0.0,0.0,0.0,0.485,0.0,0.0,7.385,0.885,0.0,0.0,0.0,5.944,0.218,0.485,0.927,0.0,0.0,0.0,1.632,0.0,0.0,0.447,0.338,2.514,0.105,0.0,2.116,7.595,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,22.188,0.0,17.925,0.0,3.07,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,20.9,0.0,21.594,8.556,5.272,0.0,0.0,0.0,0.0,1607.5,3801.4,3801.4,24.471,23.121,0.719,1.781,7.929,0.453,0.0,0.594,4.98,-4.015,0.0,0.0,0.319,3.213,-0.176,1.463,0.0,10.47,0.0,2.235,-6.296,-2.854,0.511,1.189,0.91,0.07,0.0,-0.098,0.289,5.396,0.0,0.0,0.154,3.938,-0.176,-0.259,-1.464,-3.2,0.0,2.444,8.654,3.09,1610.8,1575.3,10579.6,3728.4,0.0,75000.0,36000.0,0.0,24.62,91.58,37233.0,7641.0,4494.0,0.0,375.0,6506.0,550.0,183.0,8238.0,1516.0,7731.0,19088.0,3708.0,4018.0,0.0,228.0,2884.0,270.0,2.0,0.0,2392.0,2267.0,3320.0,5496.0,1758.0,2939.0,800.0
-house028.xml,68.554,68.554,29.518,29.518,39.036,0.0,0.0,0.0,0.0,0.0,0.0,0.318,0.0,0.0,7.193,1.296,0.0,0.0,0.0,6.134,0.226,0.503,0.618,0.0,0.0,0.0,2.008,0.0,0.0,0.528,0.39,0.229,0.114,0.0,2.351,7.61,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,14.53,0.0,18.119,3.047,3.34,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,13.687,0.0,22.855,10.217,3.627,0.0,0.0,0.0,0.0,1545.2,3715.1,3715.1,20.61,23.382,0.766,1.652,7.151,0.355,0.0,0.439,4.949,-3.806,0.0,0.0,0.244,2.464,-0.058,4.054,0.0,4.47,0.0,1.743,-7.973,-2.893,0.619,1.255,-0.384,0.112,0.0,0.068,0.158,6.209,0.0,0.0,0.068,1.941,-0.058,-1.019,-2.007,-1.584,0.0,3.014,11.151,3.241,1857.6,1860.1,12951.6,4219.3,0.0,75000.0,36000.0,0.0,24.62,91.58,31143.0,8672.0,4365.0,0.0,272.0,5108.0,616.0,129.0,3569.0,1488.0,6925.0,19430.0,3976.0,5658.0,0.0,109.0,1852.0,374.0,2.0,0.0,2348.0,1562.0,3550.0,5049.0,2024.0,2025.0,1000.0
-house029.xml,78.452,78.452,29.936,29.936,48.516,0.0,0.0,0.0,0.0,0.0,0.0,0.745,0.0,0.0,6.195,0.83,0.0,0.0,0.0,6.539,0.275,0.569,0.76,0.0,0.0,0.0,1.844,0.0,0.0,0.447,0.338,2.514,0.105,0.0,2.116,6.66,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,32.86,0.0,12.586,0.0,3.07,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,32.604,0.0,13.186,9.606,0.0,0.0,0.0,0.0,0.0,1666.8,3302.9,3302.9,28.622,14.297,0.0,3.358,14.585,0.392,0.0,0.295,6.276,-6.012,0.0,0.0,6.794,0.0,-0.09,7.301,0.0,7.302,0.0,3.287,-7.34,-3.695,0.0,1.163,-0.577,0.014,0.0,0.072,0.538,5.271,0.0,0.0,-0.44,0.0,-0.085,-0.752,-1.793,-1.465,0.0,1.412,7.023,2.844,1610.8,1575.4,11033.0,3888.2,0.0,77000.0,36000.0,0.0,17.24,91.22,30138.0,3386.0,4924.0,0.0,120.0,7666.0,0.0,2973.0,0.0,2105.0,8965.0,14814.0,-524.0,4842.0,0.0,-11.0,1788.0,0.0,914.0,0.0,2842.0,1642.0,3320.0,3901.0,903.0,2197.0,800.0
-house030.xml,59.571,59.571,17.179,17.179,0.0,0.0,42.392,0.0,0.0,0.0,0.0,0.058,0.0,0.0,0.0,0.0,0.0,0.0,0.0,5.321,0.272,0.497,0.57,0.0,0.0,0.0,1.815,0.0,0.0,0.366,0.286,0.168,0.096,0.701,1.88,5.148,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,24.054,0.0,13.3,2.238,2.8,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,18.157,0.0,0.0,7.708,2.222,0.0,0.0,0.0,0.0,1161.3,1088.5,1161.3,16.168,0.0,0.0,1.67,10.147,0.485,1.095,1.038,5.176,-3.336,0.0,0.0,0.0,3.4,-0.045,2.725,0.0,5.692,0.0,0.0,-7.087,-2.945,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1064.7,993.3,6760.8,2579.8,0.0,87000.0,0.0,0.0,17.24,91.22,20273.0,0.0,3366.0,0.0,449.0,7834.0,0.0,0.0,3900.0,1036.0,3688.0,9762.0,0.0,2595.0,0.0,183.0,1663.0,0.0,0.0,0.0,1399.0,832.0,3090.0,1714.0,0.0,1114.0,600.0
+house028.xml,68.554,68.554,29.518,29.518,39.036,0.0,0.0,0.0,0.0,0.0,0.0,0.318,0.0,0.0,7.193,1.296,0.0,0.0,0.0,6.134,0.226,0.503,0.618,0.0,0.0,0.0,2.008,0.0,0.0,0.528,0.39,0.229,0.114,0.0,2.351,7.61,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,14.53,0.0,18.119,3.047,3.34,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,13.688,0.0,22.855,10.217,3.627,0.0,0.0,0.0,0.0,1545.2,3715.1,3715.1,20.61,23.382,0.766,1.652,7.151,0.355,0.0,0.439,4.949,-3.806,0.0,0.0,0.244,2.464,-0.058,4.054,0.0,4.47,0.0,1.743,-7.973,-2.893,0.619,1.255,-0.384,0.112,0.0,0.068,0.158,6.209,0.0,0.0,0.068,1.941,-0.058,-1.019,-2.007,-1.584,0.0,3.014,11.151,3.241,1857.6,1860.1,12951.6,4219.3,0.0,75000.0,36000.0,0.0,24.62,91.58,31143.0,8672.0,4365.0,0.0,272.0,5108.0,616.0,129.0,3569.0,1488.0,6925.0,19430.0,3976.0,5658.0,0.0,109.0,1852.0,374.0,2.0,0.0,2348.0,1562.0,3550.0,5049.0,2024.0,2025.0,1000.0
+house029.xml,78.452,78.452,29.936,29.936,48.516,0.0,0.0,0.0,0.0,0.0,0.0,0.745,0.0,0.0,6.195,0.83,0.0,0.0,0.0,6.539,0.275,0.569,0.76,0.0,0.0,0.0,1.844,0.0,0.0,0.447,0.338,2.514,0.105,0.0,2.116,6.66,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,32.86,0.0,12.586,0.0,3.07,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,32.604,0.0,13.186,9.606,0.0,0.0,0.0,0.0,0.0,1666.8,3302.9,3302.9,28.622,14.294,0.0,3.358,14.585,0.392,0.0,0.295,6.276,-6.012,0.0,0.0,6.794,0.0,-0.09,7.301,0.0,7.302,0.0,3.287,-7.34,-3.695,0.0,1.163,-0.577,0.014,0.0,0.072,0.538,5.271,0.0,0.0,-0.44,0.0,-0.085,-0.752,-1.793,-1.465,0.0,1.412,7.023,2.844,1610.8,1575.4,11033.0,3888.2,0.0,77000.0,36000.0,0.0,17.24,91.22,30138.0,3386.0,4924.0,0.0,120.0,7666.0,0.0,2973.0,0.0,2105.0,8965.0,14814.0,-524.0,4842.0,0.0,-11.0,1788.0,0.0,914.0,0.0,2842.0,1642.0,3320.0,3901.0,903.0,2197.0,800.0
+house030.xml,59.571,59.571,17.179,17.179,0.0,0.0,42.392,0.0,0.0,0.0,0.0,0.058,0.0,0.0,0.0,0.0,0.0,0.0,0.0,5.321,0.272,0.497,0.57,0.0,0.0,0.0,1.815,0.0,0.0,0.366,0.286,0.168,0.096,0.701,1.88,5.148,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,24.054,0.0,13.3,2.238,2.8,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,18.157,0.0,0.0,7.708,2.222,0.0,0.0,0.0,0.0,1161.3,1088.5,1161.3,16.168,0.0,0.0,1.67,10.147,0.485,1.095,1.038,5.176,-3.336,0.0,0.0,0.0,3.4,-0.045,2.725,0.0,5.692,0.0,0.0,-7.087,-2.945,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1064.8,993.3,6761.0,2579.9,0.0,87000.0,0.0,0.0,17.24,91.22,20273.0,0.0,3366.0,0.0,449.0,7834.0,0.0,0.0,3900.0,1036.0,3688.0,9762.0,0.0,2595.0,0.0,183.0,1663.0,0.0,0.0,0.0,1399.0,832.0,3090.0,1714.0,0.0,1114.0,600.0
house031.xml,235.571,235.571,50.167,50.167,185.404,0.0,0.0,0.0,0.0,0.0,0.0,3.537,0.0,0.0,12.804,3.242,0.0,0.0,0.0,10.355,0.246,0.759,0.0,0.0,0.0,0.0,1.486,0.0,0.0,0.769,0.544,0.32,0.141,0.0,3.053,12.911,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,147.924,0.0,29.081,4.254,4.145,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,121.743,0.0,39.485,17.919,5.236,0.0,0.0,50.0,113.0,3195.8,7728.0,7848.9,125.757,49.799,0.0,14.436,41.981,1.048,6.618,1.392,20.047,-16.789,0.0,0.0,1.977,6.044,-0.86,56.94,0.001,0.653,0.0,9.881,-15.327,-6.477,0.0,2.267,5.191,0.176,2.824,0.116,0.498,16.921,0.0,0.0,0.227,-3.598,-0.827,-1.831,-0.833,-0.009,0.0,3.046,10.994,3.878,2593.1,2708.5,18308.0,4902.1,0.0,200000.0,96000.0,0.0,16.16,89.24,83120.0,13668.0,10261.0,0.0,650.0,23580.0,0.0,643.0,1726.0,7333.0,25259.0,43562.0,9684.0,13165.0,0.0,305.0,7760.0,0.0,-124.0,0.0,5345.0,3418.0,4010.0,8581.0,1662.0,5518.0,1400.0
house032.xml,102.299,102.299,15.55,15.55,86.749,0.0,0.0,0.0,0.0,0.0,0.0,1.528,0.0,0.0,0.0,0.0,0.0,0.0,0.0,5.091,0.0,0.518,0.0,0.0,0.0,0.0,1.583,0.0,0.0,0.359,0.282,0.166,0.095,0.0,1.859,4.071,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,65.52,0.0,16.252,2.201,2.776,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,50.391,0.0,0.0,7.996,4.946,0.0,0.0,154.0,0.0,1429.9,901.6,1429.9,50.645,0.0,0.0,10.388,8.743,1.918,20.355,1.409,8.345,-9.322,0.0,0.0,0.0,4.513,0.015,14.965,0.0,0.623,0.0,0.0,-8.206,-3.285,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1341.8,1265.0,7310.3,2807.9,0.0,75000.0,0.0,0.0,16.16,89.24,36329.0,0.0,5132.0,0.0,690.0,16560.0,0.0,0.0,1507.0,5647.0,6794.0,17271.0,0.0,6289.0,0.0,324.0,2076.0,0.0,0.0,0.0,4115.0,917.0,3550.0,2481.0,0.0,1481.0,1000.0
house033.xml,107.731,107.731,14.756,14.756,0.0,92.975,0.0,0.0,0.0,0.0,0.0,0.317,0.0,0.0,0.0,0.0,0.0,0.0,0.0,4.885,0.0,0.529,0.0,0.0,0.0,0.0,1.353,0.0,0.0,0.0,0.194,1.443,1.159,0.0,1.461,3.416,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,85.294,0.0,7.68,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,64.29,0.0,0.0,3.531,0.0,0.0,0.0,0.0,0.0,1044.7,861.4,1044.7,48.451,0.0,0.0,19.12,14.557,0.0,0.0,1.0,11.111,-7.528,0.0,0.0,14.642,0.0,-0.368,18.592,0.0,0.791,0.0,0.0,-4.617,-3.316,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,924.7,0.0,3905.6,1188.1,0.0,109000.0,0.0,0.0,16.16,89.24,32325.0,0.0,5273.0,0.0,362.0,6028.0,0.0,4559.0,0.0,8461.0,7643.0,19016.0,0.0,4578.0,0.0,170.0,2314.0,0.0,1206.0,0.0,6166.0,1032.0,3550.0,2666.0,0.0,1666.0,1000.0
@@ -129,12 +130,12 @@ house037.xml,89.347,89.347,21.69,21.69,0.0,67.658,0.0,0.0,0.0,0.0,0.0,0.185,0.0,
house038.xml,126.274,126.274,50.686,50.686,75.588,0.0,0.0,0.0,0.0,0.0,0.0,1.109,0.0,0.0,13.498,2.497,0.0,0.0,0.0,6.904,0.315,0.625,0.0,0.0,0.0,0.0,1.429,0.0,0.0,0.632,0.457,3.396,1.833,0.0,2.655,6.092,0.0,0.0,0.0,9.242,0.0,0.0,0.0,0.0,0.0,51.568,0.0,24.02,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,41.305,0.0,30.435,14.704,4.602,0.0,0.0,0.0,215.0,2354.5,5805.1,5805.1,48.416,27.559,0.0,3.648,14.874,0.65,4.429,0.81,12.438,-10.449,0.0,0.0,1.856,2.334,-0.09,22.508,0.002,0.594,0.0,0.0,-8.966,-3.828,0.0,0.85,2.636,0.142,2.236,0.02,0.963,12.735,0.0,0.0,0.337,-0.579,-0.079,-0.53,-0.333,0.006,0.0,0.0,8.232,3.077,2176.0,2227.4,14642.1,4351.2,0.0,71000.0,36000.0,0.0,16.16,89.24,30970.0,0.0,6993.0,0.0,362.0,9766.0,0.0,640.0,734.0,1706.0,10769.0,18185.0,0.0,9122.0,0.0,170.0,2306.0,0.0,-123.0,0.0,1243.0,1457.0,4010.0,3753.0,0.0,2353.0,1400.0
house039.xml,101.512,101.512,23.992,23.992,77.52,0.0,0.0,0.0,0.0,0.0,0.0,0.149,0.0,0.0,0.0,0.0,5.181,0.0,0.0,4.408,0.239,0.418,0.0,0.0,0.0,0.0,1.674,0.0,0.0,0.632,0.457,3.396,0.126,0.0,2.655,4.658,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,73.832,0.0,0.0,0.0,3.688,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,47.006,0.0,0.0,14.261,1.139,0.0,0.0,0.0,0.0,1705.9,1586.2,1705.9,50.362,0.0,0.0,14.176,5.359,0.0,0.0,2.503,16.085,-13.551,0.0,0.0,13.942,0.0,-0.055,13.236,0.0,0.554,0.0,0.0,-2.832,-2.848,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,2176.0,2227.4,17537.6,5211.7,0.0,87000.0,0.0,0.0,16.16,89.24,41752.0,0.0,11110.0,0.0,1456.0,3312.0,0.0,6185.0,0.0,8806.0,10883.0,22993.0,0.0,9886.0,0.0,683.0,526.0,0.0,690.0,0.0,6418.0,1470.0,3320.0,3173.0,0.0,2373.0,800.0
house040.xml,102.419,102.419,23.514,23.514,78.906,0.0,0.0,0.0,0.0,0.0,0.0,1.322,0.0,0.0,0.0,0.0,0.0,0.0,0.0,7.369,0.0,0.652,0.0,0.0,0.0,0.0,1.574,0.0,0.0,0.359,0.282,2.094,1.384,0.0,1.859,6.621,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,61.533,0.0,17.373,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,57.969,0.0,0.0,7.996,5.526,0.0,0.0,0.0,0.0,1818.3,1304.9,1818.3,62.433,0.0,11.258,5.613,22.268,0.0,4.282,2.093,12.873,-12.521,0.0,0.0,2.031,3.377,-0.101,19.744,0.0,0.611,0.0,0.0,-9.244,-4.751,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1341.8,1265.0,7310.3,2807.9,0.0,75000.0,0.0,0.0,16.16,89.24,44724.0,0.0,7249.0,0.0,1028.0,13761.0,5873.0,795.0,1359.0,3065.0,11594.0,23971.0,0.0,8227.0,0.0,482.0,4483.0,3446.0,210.0,0.0,2234.0,1569.0,3320.0,3333.0,0.0,2533.0,800.0
-house041.xml,260.497,260.497,46.803,46.803,213.694,0.0,0.0,0.0,0.0,0.0,0.0,4.203,0.0,0.0,2.469,0.228,0.0,0.0,0.0,13.935,0.315,1.031,0.05,0.0,0.0,0.0,2.175,0.0,0.0,0.528,0.39,2.899,1.662,0.473,2.351,14.094,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,187.138,0.0,26.556,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,176.334,0.0,4.305,15.626,5.047,0.0,0.0,113.0,0.0,3254.0,5159.0,5159.0,77.829,24.679,0.0,11.243,45.009,3.515,35.002,3.139,38.839,-20.775,0.0,0.0,4.603,17.349,-0.612,64.092,0.0,2.763,0.0,0.0,-18.492,-10.888,0.0,0.139,-2.016,-0.113,1.736,-0.211,-2.727,9.453,0.0,0.0,-0.342,-5.175,-0.61,-3.308,-1.927,-0.247,0.0,0.0,6.717,3.047,1857.6,1860.1,14896.4,4852.9,0.0,75000.0,30000.0,0.0,-13.72,81.14,109895.0,0.0,18666.0,0.0,1290.0,43329.0,0.0,1653.0,8641.0,5077.0,31239.0,25390.0,0.0,15296.0,0.0,-20.0,2646.0,0.0,-615.0,0.0,3708.0,825.0,3550.0,2263.0,0.0,1263.0,1000.0
+house041.xml,260.497,260.497,46.803,46.803,213.693,0.0,0.0,0.0,0.0,0.0,0.0,4.203,0.0,0.0,2.469,0.228,0.0,0.0,0.0,13.935,0.315,1.031,0.05,0.0,0.0,0.0,2.175,0.0,0.0,0.528,0.39,2.899,1.662,0.473,2.351,14.094,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,187.138,0.0,26.556,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,176.334,0.0,4.305,15.626,5.047,0.0,0.0,113.0,0.0,3254.0,5159.0,5159.0,77.829,24.679,0.0,11.243,45.009,3.515,35.002,3.139,38.839,-20.775,0.0,0.0,4.603,17.349,-0.612,64.092,0.0,2.763,0.0,0.0,-18.492,-10.888,0.0,0.139,-2.016,-0.113,1.736,-0.211,-2.727,9.453,0.0,0.0,-0.342,-5.175,-0.61,-3.308,-1.927,-0.247,0.0,0.0,6.717,3.047,1857.6,1860.1,14896.4,4852.9,0.0,75000.0,30000.0,0.0,-13.72,81.14,109895.0,0.0,18666.0,0.0,1290.0,43329.0,0.0,1653.0,8641.0,5077.0,31239.0,25390.0,0.0,15296.0,0.0,-20.0,2646.0,0.0,-615.0,0.0,3708.0,825.0,3550.0,2263.0,0.0,1263.0,1000.0
house042.xml,232.637,232.637,39.795,39.795,192.842,0.0,0.0,0.0,0.0,0.0,0.0,3.946,0.0,0.0,1.717,0.06,0.0,0.0,0.0,9.533,0.213,0.678,0.093,0.0,0.0,0.0,2.167,0.0,0.0,0.528,0.39,2.899,1.662,0.0,2.351,13.557,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,168.404,0.0,24.438,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,165.58,0.0,2.527,15.626,3.233,0.0,0.0,0.0,0.0,2711.0,3497.4,3497.4,88.501,19.177,0.0,9.163,39.814,4.009,43.685,2.648,34.199,-19.431,0.0,0.0,2.447,14.535,-0.346,56.283,0.0,1.748,0.0,0.0,-17.458,-7.569,0.0,0.226,-1.385,-0.052,2.932,-0.142,-2.897,5.785,0.0,0.0,-0.259,-4.859,-0.342,-2.691,-1.169,-0.137,0.0,0.0,5.603,1.965,1857.6,1860.1,14896.3,4852.9,0.0,90000.0,24000.0,0.0,-13.72,81.14,96883.0,0.0,17465.0,0.0,995.0,42258.0,0.0,927.0,3490.0,4248.0,27501.0,15574.0,0.0,5937.0,0.0,110.0,2136.0,0.0,13.0,0.0,3102.0,726.0,3550.0,2111.0,0.0,1111.0,1000.0
house043.xml,159.524,159.524,29.691,29.691,129.832,0.0,0.0,0.0,0.0,0.0,0.0,2.496,0.0,0.0,1.877,0.098,0.0,0.0,0.0,6.558,0.213,0.514,0.093,0.0,0.0,0.0,2.124,0.0,0.0,0.447,0.338,2.514,1.529,0.0,2.116,8.775,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,109.933,0.0,19.899,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,104.711,0.0,2.569,13.079,2.212,0.0,0.0,0.0,0.0,1956.4,3029.6,3029.6,54.812,13.675,0.0,3.162,23.178,2.292,33.736,5.573,22.928,-10.012,0.0,0.0,0.549,9.918,-0.317,28.975,0.0,1.575,0.0,0.0,-13.074,-5.127,0.0,0.046,-0.755,-0.085,1.782,-0.334,-1.953,4.655,0.0,0.0,-0.067,-3.531,-0.317,-1.511,-1.04,-0.139,0.0,0.0,4.467,1.431,1610.8,1575.4,12168.1,4288.2,0.0,90000.0,30000.0,0.0,-13.72,81.14,65558.0,0.0,11581.0,0.0,2240.0,31185.0,0.0,202.0,2598.0,1519.0,16233.0,14430.0,0.0,7218.0,0.0,224.0,2128.0,0.0,3.0,0.0,1109.0,429.0,3320.0,1456.0,0.0,656.0,800.0
-house044.xml,227.742,227.742,43.242,43.242,184.5,0.0,0.0,0.0,0.0,0.0,0.0,4.742,0.0,0.0,2.041,0.174,0.0,0.0,0.0,12.947,0.315,0.974,0.037,0.0,0.0,0.0,2.097,0.0,0.0,0.447,0.338,2.514,1.529,0.0,2.116,12.97,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,161.931,0.0,22.569,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,150.451,0.0,3.393,13.079,4.458,0.0,0.0,0.0,0.0,3132.0,4107.8,4107.8,81.142,19.331,4.367,6.894,36.482,9.228,19.244,2.756,17.943,-11.679,0.0,0.0,12.908,15.067,-0.509,61.977,0.0,1.434,0.0,0.0,-16.586,-10.177,0.253,0.464,-1.317,-0.098,1.22,-0.114,-0.727,5.622,0.0,0.0,-1.11,-4.787,-0.506,-2.598,-0.958,-0.097,0.0,0.0,5.436,2.77,1610.8,1575.4,12168.1,4288.2,0.0,110000.0,36000.0,0.0,-13.72,81.14,81137.0,0.0,8422.0,0.0,1211.0,29262.0,1911.0,5137.0,2346.0,3592.0,29257.0,20316.0,0.0,10363.0,0.0,114.0,2778.0,368.0,-23.0,0.0,2623.0,772.0,3320.0,1982.0,0.0,1182.0,800.0
+house044.xml,227.742,227.742,43.242,43.242,184.5,0.0,0.0,0.0,0.0,0.0,0.0,4.742,0.0,0.0,2.041,0.174,0.0,0.0,0.0,12.947,0.315,0.974,0.037,0.0,0.0,0.0,2.097,0.0,0.0,0.447,0.338,2.514,1.529,0.0,2.116,12.97,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,161.931,0.0,22.569,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,150.45,0.0,3.393,13.079,4.458,0.0,0.0,0.0,0.0,3132.0,4107.8,4107.8,81.142,19.331,4.367,6.894,36.482,9.228,19.244,2.756,17.943,-11.679,0.0,0.0,12.908,15.067,-0.509,61.977,0.0,1.434,0.0,0.0,-16.586,-10.177,0.253,0.464,-1.317,-0.098,1.22,-0.114,-0.727,5.622,0.0,0.0,-1.11,-4.787,-0.506,-2.598,-0.958,-0.097,0.0,0.0,5.436,2.77,1610.8,1575.4,12168.1,4288.2,0.0,110000.0,36000.0,0.0,-13.72,81.14,81137.0,0.0,8422.0,0.0,1211.0,29262.0,1911.0,5137.0,2346.0,3592.0,29257.0,20316.0,0.0,10363.0,0.0,114.0,2778.0,368.0,-23.0,0.0,2623.0,772.0,3320.0,1982.0,0.0,1182.0,800.0
house045.xml,152.536,152.536,34.866,34.866,117.67,0.0,0.0,0.0,0.0,0.0,0.0,2.788,0.0,0.0,2.269,0.261,0.0,0.0,0.0,9.06,0.315,0.75,1.793,0.0,0.0,0.0,2.141,0.0,0.0,0.447,0.338,2.514,1.529,0.0,2.116,8.545,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,95.214,0.0,22.456,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,88.461,0.0,3.641,13.079,4.371,0.0,0.0,0.0,0.0,2334.1,3370.1,3370.1,47.084,13.395,3.573,3.08,15.119,2.29,32.746,1.135,17.716,-12.23,0.968,-0.414,0.086,12.636,-0.264,20.648,0.0,10.929,0.0,0.0,-13.33,-6.949,0.0,0.017,-1.029,-0.116,1.069,-0.082,-1.244,6.238,-0.061,0.4,-0.012,-3.972,-0.264,-1.122,-1.877,-1.218,0.0,0.0,4.895,2.111,1610.8,1575.4,12168.1,4288.2,0.0,70000.0,30000.0,0.0,-13.72,81.14,56820.0,0.0,8558.0,455.0,398.0,28556.0,1494.0,31.0,2749.0,1367.0,13211.0,12890.0,0.0,7147.0,840.0,21.0,-41.0,197.0,0.0,0.0,999.0,407.0,3320.0,1423.0,0.0,623.0,800.0
-house046.xml,25.04,25.04,25.04,25.04,0.0,0.0,0.0,0.0,0.0,0.0,5.452,0.491,0.322,0.011,3.718,0.994,4.922,0.0,0.0,1.029,0.0,0.082,0.0,0.0,0.0,0.0,1.667,0.0,0.0,0.256,0.005,0.482,1.262,0.0,1.645,2.701,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,14.344,0.334,12.736,4.303,0.617,0.0,0.0,0.0,0.0,3862.9,2471.5,3862.9,16.226,13.508,0.0,2.514,3.83,0.0,0.0,0.327,2.233,-1.66,0.0,0.0,-0.157,0.0,-0.304,7.98,0.0,0.378,0.0,2.958,-3.234,-0.476,0.0,1.282,2.546,0.0,0.0,0.026,0.787,2.44,0.0,0.0,-0.156,0.0,-0.303,-0.429,-0.226,0.02,0.0,1.781,4.463,0.553,596.8,442.4,5543.5,2208.6,0.0,18000.0,18000.0,17065.0,24.62,91.58,19009.0,4026.0,1800.0,0.0,182.0,2847.0,0.0,0.0,0.0,1604.0,8550.0,15003.0,3888.0,3183.0,0.0,110.0,1427.0,0.0,0.0,0.0,1823.0,1711.0,2860.0,3101.0,483.0,2218.0,400.0
+house046.xml,25.573,25.573,25.573,25.573,0.0,0.0,0.0,0.0,0.0,0.0,5.736,0.554,0.426,0.017,3.827,0.963,4.922,0.0,0.0,1.029,0.0,0.082,0.0,0.0,0.0,0.0,1.666,0.0,0.0,0.256,0.005,0.482,1.262,0.0,1.645,2.701,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,15.344,0.443,12.834,4.303,0.618,0.0,0.0,0.0,1.0,4118.0,2456.1,4118.0,17.093,13.36,0.0,2.519,3.836,0.0,0.0,0.329,2.242,-1.678,0.0,0.0,-0.158,0.0,-0.308,8.911,0.0,0.38,0.0,3.069,-3.269,-0.481,0.0,1.294,2.564,0.0,0.0,0.028,0.803,2.422,0.0,0.0,-0.157,0.0,-0.306,-0.42,-0.218,0.023,0.0,1.871,4.427,0.548,596.8,442.4,5543.5,2208.6,0.0,18000.0,18000.0,17065.0,24.62,91.58,19947.0,4038.0,1800.0,0.0,182.0,2847.0,0.0,0.0,0.0,1604.0,9476.0,15225.0,3925.0,3183.0,0.0,110.0,1427.0,0.0,0.0,0.0,1823.0,1896.0,2860.0,3341.0,483.0,2458.0,400.0
house047.xml,21.532,21.532,14.849,14.849,6.683,0.0,0.0,0.0,0.0,0.0,0.0,0.148,0.0,0.0,1.073,0.001,4.485,0.0,0.0,0.92,0.0,0.463,0.182,0.0,0.0,0.0,1.335,0.0,0.0,0.256,0.111,0.738,1.262,0.0,1.645,2.229,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,6.683,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,6.496,0.0,1.506,4.202,0.0,0.0,0.0,0.0,0.0,872.9,989.4,989.4,4.818,2.615,0.0,-0.001,0.771,0.126,0.0,0.0,1.725,-0.562,0.0,0.0,0.0,1.363,-0.013,1.575,0.0,4.983,0.0,0.219,-3.202,-0.511,0.0,-0.001,0.108,0.034,0.0,0.0,-0.043,0.795,0.0,0.0,0.0,-1.085,-0.013,-0.216,-0.368,-1.32,0.0,-0.0,3.204,0.41,251.7,442.4,5772.6,1524.2,0.0,20000.0,18000.0,0.0,19.22,86.72,7413.0,1053.0,1216.0,0.0,0.0,630.0,0.0,0.0,728.0,0.0,3785.0,4112.0,0.0,478.0,0.0,0.0,177.0,0.0,0.0,0.0,0.0,597.0,2860.0,1599.0,0.0,1199.0,400.0
house048.xml,92.04,92.04,39.344,39.344,52.697,0.0,0.0,0.0,0.0,0.0,0.0,0.354,0.0,0.0,12.626,3.699,0.0,0.0,0.0,3.689,0.085,0.499,3.033,0.0,0.0,0.0,2.321,0.0,0.0,0.474,1.108,0.67,0.114,0.0,2.351,8.322,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,36.764,0.0,12.592,0.0,3.34,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,29.758,0.0,51.767,7.249,2.658,0.0,0.0,0.0,0.0,1514.9,5614.8,5614.8,42.48,34.051,1.023,2.627,11.996,0.0,0.0,0.804,4.608,-2.543,0.0,0.0,0.056,1.968,-0.572,6.806,0.0,4.214,0.0,6.499,-6.341,-1.49,1.322,1.001,9.312,0.0,0.0,0.567,3.689,4.25,0.0,0.0,0.075,10.085,-0.56,0.536,-0.622,1.976,0.0,7.0,11.153,2.199,130.3,818.0,11617.7,3495.1,0.0,63000.0,46500.0,0.0,25.88,98.42,50683.0,12323.0,4499.0,0.0,490.0,9499.0,828.0,29.0,11275.0,2249.0,9492.0,29599.0,8414.0,4429.0,0.0,298.0,6972.0,547.0,9.0,0.0,1959.0,3421.0,3550.0,4490.0,1126.0,2365.0,1000.0
house049.xml,36.164,36.164,32.666,32.666,3.498,0.0,0.0,0.0,0.0,0.0,8.24,0.05,0.0,0.0,7.625,0.191,2.645,0.249,0.0,1.473,0.057,0.099,2.092,0.0,0.0,0.0,2.952,0.0,0.0,0.329,0.006,0.053,0.096,0.0,1.88,4.63,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.698,2.8,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,7.359,0.0,30.615,4.258,1.319,0.0,0.0,0.0,133.0,4683.0,2827.5,4683.0,13.283,15.961,0.0,1.364,4.328,0.0,0.0,0.0,4.25,-5.816,0.0,0.0,0.0,1.213,-0.089,2.666,0.0,1.852,0.0,0.0,-2.005,-0.473,0.0,1.699,7.248,0.0,0.0,0.0,3.034,9.851,0.0,0.0,0.0,3.487,-0.088,-0.013,-2.938,0.719,0.0,0.0,7.157,1.0,728.6,567.6,7487.5,928.6,0.0,39000.0,16000.0,0.0,33.26,106.16,19111.0,0.0,5635.0,0.0,0.0,5038.0,0.0,0.0,2636.0,1357.0,4445.0,20689.0,0.0,6847.0,0.0,0.0,5786.0,0.0,0.0,0.0,2075.0,2891.0,3090.0,0.0,0.0,0.0,0.0
diff --git a/hpxml-measures/workflow/tests/base_results/results_workflow_simulations2_bills.csv b/hpxml-measures/workflow/tests/base_results/results_workflow_simulations2_bills.csv
index 554f74b58..d74ceaddb 100644
--- a/hpxml-measures/workflow/tests/base_results/results_workflow_simulations2_bills.csv
+++ b/hpxml-measures/workflow/tests/base_results/results_workflow_simulations2_bills.csv
@@ -1,4 +1,5 @@
HPXML,Bills: Total (USD),Bills: Electricity: Fixed (USD),Bills: Electricity: Energy (USD),Bills: Electricity: PV Credit (USD),Bills: Electricity: Total (USD),Bills: Natural Gas: Fixed (USD),Bills: Natural Gas: Energy (USD),Bills: Natural Gas: Total (USD),Bills: Fuel Oil: Fixed (USD),Bills: Fuel Oil: Energy (USD),Bills: Fuel Oil: Total (USD),Bills: Propane: Fixed (USD),Bills: Propane: Energy (USD),Bills: Propane: Total (USD),Bills: Wood Cord: Fixed (USD),Bills: Wood Cord: Energy (USD),Bills: Wood Cord: Total (USD),Bills: Wood Pellets: Fixed (USD),Bills: Wood Pellets: Energy (USD),Bills: Wood Pellets: Total (USD),Bills: Coal: Fixed (USD),Bills: Coal: Energy (USD),Bills: Coal: Total (USD),Tiered: Total (USD),Tiered: Electricity: Fixed (USD),Tiered: Electricity: Energy (USD),Tiered: Electricity: PV Credit (USD),Tiered: Electricity: Total (USD),Tiered: Natural Gas: Fixed (USD),Tiered: Natural Gas: Energy (USD),Tiered: Natural Gas: Total (USD),Tiered: Fuel Oil: Fixed (USD),Tiered: Fuel Oil: Energy (USD),Tiered: Fuel Oil: Total (USD),Tiered: Propane: Fixed (USD),Tiered: Propane: Energy (USD),Tiered: Propane: Total (USD),Tiered: Wood Cord: Fixed (USD),Tiered: Wood Cord: Energy (USD),Tiered: Wood Cord: Total (USD),Tiered: Wood Pellets: Fixed (USD),Tiered: Wood Pellets: Energy (USD),Tiered: Wood Pellets: Total (USD),Tiered: Coal: Fixed (USD),Tiered: Coal: Energy (USD),Tiered: Coal: Total (USD),TOU: Total (USD),TOU: Electricity: Fixed (USD),TOU: Electricity: Energy (USD),TOU: Electricity: PV Credit (USD),TOU: Electricity: Total (USD),TOU: Natural Gas: Fixed (USD),TOU: Natural Gas: Energy (USD),TOU: Natural Gas: Total (USD),TOU: Fuel Oil: Fixed (USD),TOU: Fuel Oil: Energy (USD),TOU: Fuel Oil: Total (USD),TOU: Propane: Fixed (USD),TOU: Propane: Energy (USD),TOU: Propane: Total (USD),TOU: Wood Cord: Fixed (USD),TOU: Wood Cord: Energy (USD),TOU: Wood Cord: Total (USD),TOU: Wood Pellets: Fixed (USD),TOU: Wood Pellets: Energy (USD),TOU: Wood Pellets: Total (USD),TOU: Coal: Fixed (USD),TOU: Coal: Energy (USD),TOU: Coal: Total (USD),Tiered and TOU: Total (USD),Tiered and TOU: Electricity: Fixed (USD),Tiered and TOU: Electricity: Energy (USD),Tiered and TOU: Electricity: PV Credit (USD),Tiered and TOU: Electricity: Total (USD),Tiered and TOU: Natural Gas: Fixed (USD),Tiered and TOU: Natural Gas: Energy (USD),Tiered and TOU: Natural Gas: Total (USD),Tiered and TOU: Fuel Oil: Fixed (USD),Tiered and TOU: Fuel Oil: Energy (USD),Tiered and TOU: Fuel Oil: Total (USD),Tiered and TOU: Propane: Fixed (USD),Tiered and TOU: Propane: Energy (USD),Tiered and TOU: Propane: Total (USD),Tiered and TOU: Wood Cord: Fixed (USD),Tiered and TOU: Wood Cord: Energy (USD),Tiered and TOU: Wood Cord: Total (USD),Tiered and TOU: Wood Pellets: Fixed (USD),Tiered and TOU: Wood Pellets: Energy (USD),Tiered and TOU: Wood Pellets: Total (USD),Tiered and TOU: Coal: Fixed (USD),Tiered and TOU: Coal: Energy (USD),Tiered and TOU: Coal: Total (USD),Real-Time Pricing: Total (USD),Real-Time Pricing: Electricity: Fixed (USD),Real-Time Pricing: Electricity: Energy (USD),Real-Time Pricing: Electricity: PV Credit (USD),Real-Time Pricing: Electricity: Total (USD),Real-Time Pricing: Natural Gas: Fixed (USD),Real-Time Pricing: Natural Gas: Energy (USD),Real-Time Pricing: Natural Gas: Total (USD),Real-Time Pricing: Fuel Oil: Fixed (USD),Real-Time Pricing: Fuel Oil: Energy (USD),Real-Time Pricing: Fuel Oil: Total (USD),Real-Time Pricing: Propane: Fixed (USD),Real-Time Pricing: Propane: Energy (USD),Real-Time Pricing: Propane: Total (USD),Real-Time Pricing: Wood Cord: Fixed (USD),Real-Time Pricing: Wood Cord: Energy (USD),Real-Time Pricing: Wood Cord: Total (USD),Real-Time Pricing: Wood Pellets: Fixed (USD),Real-Time Pricing: Wood Pellets: Energy (USD),Real-Time Pricing: Wood Pellets: Total (USD),Real-Time Pricing: Coal: Fixed (USD),Real-Time Pricing: Coal: Energy (USD),Real-Time Pricing: Coal: Total (USD),Simple: Total (USD),Simple: Electricity: Fixed (USD),Simple: Electricity: Energy (USD),Simple: Electricity: PV Credit (USD),Simple: Electricity: Total (USD),Simple: Natural Gas: Fixed (USD),Simple: Natural Gas: Energy (USD),Simple: Natural Gas: Total (USD),Simple: Fuel Oil: Fixed (USD),Simple: Fuel Oil: Energy (USD),Simple: Fuel Oil: Total (USD),Simple: Propane: Fixed (USD),Simple: Propane: Energy (USD),Simple: Propane: Total (USD),Simple: Wood Cord: Fixed (USD),Simple: Wood Cord: Energy (USD),Simple: Wood Cord: Total (USD),Simple: Wood Pellets: Fixed (USD),Simple: Wood Pellets: Energy (USD),Simple: Wood Pellets: Total (USD),Simple: Coal: Fixed (USD),Simple: Coal: Energy (USD),Simple: Coal: Total (USD),Detailed: Total (USD),Detailed: Electricity: Fixed (USD),Detailed: Electricity: Energy (USD),Detailed: Electricity: PV Credit (USD),Detailed: Electricity: Total (USD),Detailed: Natural Gas: Fixed (USD),Detailed: Natural Gas: Energy (USD),Detailed: Natural Gas: Total (USD),Detailed: Fuel Oil: Fixed (USD),Detailed: Fuel Oil: Energy (USD),Detailed: Fuel Oil: Total (USD),Detailed: Propane: Fixed (USD),Detailed: Propane: Energy (USD),Detailed: Propane: Total (USD),Detailed: Wood Cord: Fixed (USD),Detailed: Wood Cord: Energy (USD),Detailed: Wood Cord: Total (USD),Detailed: Wood Pellets: Fixed (USD),Detailed: Wood Pellets: Energy (USD),Detailed: Wood Pellets: Total (USD),Detailed: Coal: Fixed (USD),Detailed: Coal: Energy (USD),Detailed: Coal: Total (USD),Net Metering w/ Wholesale Excess Rate: Total (USD),Net Metering w/ Wholesale Excess Rate: Electricity: Fixed (USD),Net Metering w/ Wholesale Excess Rate: Electricity: Energy (USD),Net Metering w/ Wholesale Excess Rate: Electricity: PV Credit (USD),Net Metering w/ Wholesale Excess Rate: Electricity: Total (USD),Net Metering w/ Wholesale Excess Rate: Natural Gas: Fixed (USD),Net Metering w/ Wholesale Excess Rate: Natural Gas: Energy (USD),Net Metering w/ Wholesale Excess Rate: Natural Gas: Total (USD),Net Metering w/ Wholesale Excess Rate: Fuel Oil: Fixed (USD),Net Metering w/ Wholesale Excess Rate: Fuel Oil: Energy (USD),Net Metering w/ Wholesale Excess Rate: Fuel Oil: Total (USD),Net Metering w/ Wholesale Excess Rate: Propane: Fixed (USD),Net Metering w/ Wholesale Excess Rate: Propane: Energy (USD),Net Metering w/ Wholesale Excess Rate: Propane: Total (USD),Net Metering w/ Wholesale Excess Rate: Wood Cord: Fixed (USD),Net Metering w/ Wholesale Excess Rate: Wood Cord: Energy (USD),Net Metering w/ Wholesale Excess Rate: Wood Cord: Total (USD),Net Metering w/ Wholesale Excess Rate: Wood Pellets: Fixed (USD),Net Metering w/ Wholesale Excess Rate: Wood Pellets: Energy (USD),Net Metering w/ Wholesale Excess Rate: Wood Pellets: Total (USD),Net Metering w/ Wholesale Excess Rate: Coal: Fixed (USD),Net Metering w/ Wholesale Excess Rate: Coal: Energy (USD),Net Metering w/ Wholesale Excess Rate: Coal: Total (USD),Net Metering w/ Retail Excess Rate: Total (USD),Net Metering w/ Retail Excess Rate: Electricity: Fixed (USD),Net Metering w/ Retail Excess Rate: Electricity: Energy (USD),Net Metering w/ Retail Excess Rate: Electricity: PV Credit (USD),Net Metering w/ Retail Excess Rate: Electricity: Total (USD),Net Metering w/ Retail Excess Rate: Natural Gas: Fixed (USD),Net Metering w/ Retail Excess Rate: Natural Gas: Energy (USD),Net Metering w/ Retail Excess Rate: Natural Gas: Total (USD),Net Metering w/ Retail Excess Rate: Fuel Oil: Fixed (USD),Net Metering w/ Retail Excess Rate: Fuel Oil: Energy (USD),Net Metering w/ Retail Excess Rate: Fuel Oil: Total (USD),Net Metering w/ Retail Excess Rate: Propane: Fixed (USD),Net Metering w/ Retail Excess Rate: Propane: Energy (USD),Net Metering w/ Retail Excess Rate: Propane: Total (USD),Net Metering w/ Retail Excess Rate: Wood Cord: Fixed (USD),Net Metering w/ Retail Excess Rate: Wood Cord: Energy (USD),Net Metering w/ Retail Excess Rate: Wood Cord: Total (USD),Net Metering w/ Retail Excess Rate: Wood Pellets: Fixed (USD),Net Metering w/ Retail Excess Rate: Wood Pellets: Energy (USD),Net Metering w/ Retail Excess Rate: Wood Pellets: Total (USD),Net Metering w/ Retail Excess Rate: Coal: Fixed (USD),Net Metering w/ Retail Excess Rate: Coal: Energy (USD),Net Metering w/ Retail Excess Rate: Coal: Total (USD),Feed-In Tariff: Total (USD),Feed-In Tariff: Electricity: Fixed (USD),Feed-In Tariff: Electricity: Energy (USD),Feed-In Tariff: Electricity: PV Credit (USD),Feed-In Tariff: Electricity: Total (USD),Feed-In Tariff: Natural Gas: Fixed (USD),Feed-In Tariff: Natural Gas: Energy (USD),Feed-In Tariff: Natural Gas: Total (USD),Feed-In Tariff: Fuel Oil: Fixed (USD),Feed-In Tariff: Fuel Oil: Energy (USD),Feed-In Tariff: Fuel Oil: Total (USD),Feed-In Tariff: Propane: Fixed (USD),Feed-In Tariff: Propane: Energy (USD),Feed-In Tariff: Propane: Total (USD),Feed-In Tariff: Wood Cord: Fixed (USD),Feed-In Tariff: Wood Cord: Energy (USD),Feed-In Tariff: Wood Cord: Total (USD),Feed-In Tariff: Wood Pellets: Fixed (USD),Feed-In Tariff: Wood Pellets: Energy (USD),Feed-In Tariff: Wood Pellets: Total (USD),Feed-In Tariff: Coal: Fixed (USD),Feed-In Tariff: Coal: Energy (USD),Feed-In Tariff: Coal: Total (USD)
+base-lighting-ceiling-fans-label-energy-use.xml,1866.12,144.0,1328.07,0.0,1472.07,144.0,250.05,394.05,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
base-lighting-ceiling-fans.xml,1858.87,144.0,1320.81,0.0,1464.81,144.0,250.06,394.06,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
base-lighting-holiday.xml,1851.82,144.0,1313.55,0.0,1457.55,144.0,250.27,394.27,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
base-lighting-kwh-per-year.xml,1956.2,144.0,1438.19,0.0,1582.19,144.0,230.01,374.01,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
@@ -67,18 +68,18 @@ base-residents-1-misc-loads-large-uncommon2.xml,2514.72,144.0,1806.12,0.0,1950.1
base-residents-1.xml,1589.94,144.0,1034.43,0.0,1178.43,144.0,267.51,411.51,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
base-residents-5.xml,1327.14,144.0,1451.58,-743.14,852.44,144.0,330.7,474.7,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
base-schedules-detailed-all-10-mins.xml,1850.71,144.0,1313.75,0.0,1457.75,144.0,248.96,392.96,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-base-schedules-detailed-mixed-timesteps-power-outage.xml,1374.81,144.0,1034.66,0.0,1178.66,144.0,52.15,196.15,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+base-schedules-detailed-mixed-timesteps-power-outage.xml,1375.05,144.0,1034.67,0.0,1178.67,144.0,52.38,196.38,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
base-schedules-detailed-mixed-timesteps.xml,1617.13,144.0,1242.5,0.0,1386.5,144.0,86.63,230.63,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
base-schedules-detailed-occupancy-stochastic-10-mins.xml,1842.11,144.0,1310.49,0.0,1454.49,144.0,243.62,387.62,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-base-schedules-detailed-occupancy-stochastic-power-outage.xml,1537.72,144.0,1096.51,0.0,1240.51,144.0,153.21,297.21,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+base-schedules-detailed-occupancy-stochastic-power-outage.xml,1537.97,144.0,1096.51,0.0,1240.51,144.0,153.46,297.46,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
base-schedules-detailed-occupancy-stochastic-vacancy.xml,1691.46,144.0,1118.46,0.0,1262.46,144.0,285.0,429.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
base-schedules-detailed-occupancy-stochastic.xml,1840.3,144.0,1308.92,0.0,1452.92,144.0,243.38,387.38,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
base-schedules-detailed-setpoints-daily-schedules.xml,1814.29,144.0,1283.45,0.0,1427.45,144.0,242.84,386.84,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
base-schedules-detailed-setpoints-daily-setbacks.xml,1812.85,144.0,1289.17,0.0,1433.17,144.0,235.68,379.68,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
base-schedules-detailed-setpoints.xml,1609.98,144.0,1234.04,0.0,1378.04,144.0,87.94,231.94,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-base-schedules-simple-power-outage.xml,1717.23,144.0,1186.88,0.0,1330.88,144.0,242.35,386.35,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-base-schedules-simple-vacancy.xml,1704.8,144.0,1133.44,0.0,1277.44,144.0,283.36,427.36,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-base-schedules-simple.xml,1846.27,144.0,1316.03,0.0,1460.03,144.0,242.24,386.24,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+base-schedules-simple-power-outage.xml,2218.35,144.0,1687.99,0.0,1831.99,144.0,242.36,386.36,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+base-schedules-simple-vacancy.xml,2146.16,144.0,1574.8,0.0,1718.8,144.0,283.36,427.36,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+base-schedules-simple.xml,2385.02,144.0,1854.78,0.0,1998.78,144.0,242.24,386.24,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
base-simcontrol-calendar-year-custom.xml,1843.03,144.0,1304.74,0.0,1448.74,144.0,250.29,394.29,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
base-simcontrol-daylight-saving-custom.xml,1844.6,144.0,1306.32,0.0,1450.32,144.0,250.28,394.28,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
base-simcontrol-daylight-saving-disabled.xml,1843.85,144.0,1305.68,0.0,1449.68,144.0,250.17,394.17,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
@@ -91,11 +92,11 @@ base-simcontrol-timestep-30-mins.xml,1850.4,144.0,1308.77,0.0,1452.77,144.0,253.
base.xml,1844.59,144.0,1306.32,0.0,1450.32,144.0,250.27,394.27,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
house001.xml,2409.1,144.0,1701.52,0.0,1845.52,144.0,419.58,563.58,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
house002.xml,2057.43,144.0,1479.73,0.0,1623.73,144.0,289.7,433.7,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-house003.xml,2050.65,144.0,1461.78,0.0,1605.78,144.0,300.87,444.87,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+house003.xml,2050.64,144.0,1461.77,0.0,1605.77,144.0,300.87,444.87,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
house004.xml,3684.62,144.0,2755.34,0.0,2899.34,144.0,641.28,785.28,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-house005.xml,2673.04,144.0,1943.98,0.0,2087.98,144.0,441.06,585.06,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+house005.xml,2673.05,144.0,1943.99,0.0,2087.99,144.0,441.06,585.06,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
house006.xml,2279.57,144.0,1172.74,0.0,1316.74,144.0,818.83,962.83,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-house007.xml,2339.98,144.0,1249.52,0.0,1393.52,144.0,802.46,946.46,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+house007.xml,2339.99,144.0,1249.52,0.0,1393.52,144.0,802.47,946.47,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
house008.xml,2832.99,144.0,1446.05,0.0,1590.05,144.0,1098.94,1242.94,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
house009.xml,2458.73,144.0,1255.56,0.0,1399.56,144.0,915.17,1059.17,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
house010.xml,2562.42,144.0,1385.53,0.0,1529.53,144.0,888.89,1032.89,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
@@ -118,7 +119,7 @@ house026.xml,1557.24,144.0,804.91,0.0,948.91,144.0,464.33,608.33,0.0,0.0,0.0,0.0
house027.xml,1900.13,144.0,1002.62,0.0,1146.62,144.0,609.51,753.51,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
house028.xml,1791.33,144.0,952.35,0.0,1096.35,144.0,550.98,694.98,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
house029.xml,2155.65,144.0,1171.6,0.0,1315.6,144.0,696.05,840.05,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-house030.xml,2410.32,144.0,672.33,0.0,816.33,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1593.99,1593.99,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+house030.xml,2410.33,144.0,672.33,0.0,816.33,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1594.0,1594.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
house031.xml,4425.16,144.0,1831.36,0.0,1975.36,144.0,2305.8,2449.8,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
house032.xml,1934.53,144.0,567.67,0.0,711.67,144.0,1078.86,1222.86,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
house033.xml,4000.75,144.0,538.68,0.0,682.68,0.0,0.0,0.0,0.0,3318.07,3318.07,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
@@ -134,7 +135,7 @@ house042.xml,3222.65,144.0,1480.15,0.0,1624.15,144.0,1454.5,1598.5,0.0,0.0,0.0,0
house043.xml,2371.6,144.0,1104.35,0.0,1248.35,144.0,979.25,1123.25,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
house044.xml,3287.93,144.0,1608.35,0.0,1752.35,144.0,1391.58,1535.58,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
house045.xml,2472.35,144.0,1296.83,0.0,1440.83,144.0,887.52,1031.52,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-house046.xml,951.86,144.0,807.86,0.0,951.86,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+house046.xml,969.05,144.0,825.05,0.0,969.05,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
house047.xml,1015.71,144.0,657.22,0.0,801.22,144.0,70.49,214.49,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
house048.xml,2274.06,144.0,1439.93,0.0,1583.93,144.0,546.13,690.13,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
house049.xml,1510.78,144.0,1199.64,0.0,1343.64,144.0,23.14,167.14,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
diff --git a/hpxml-measures/workflow/tests/test_other.rb b/hpxml-measures/workflow/tests/test_other.rb
index b5dc44ea4..a85475555 100644
--- a/hpxml-measures/workflow/tests/test_other.rb
+++ b/hpxml-measures/workflow/tests/test_other.rb
@@ -114,9 +114,9 @@ def test_run_simulation_detailed_occupancy_schedules
# Check stochastic.csv headers
schedules = CSV.read(File.join(File.dirname(xml), 'run', 'stochastic.csv'), headers: true)
if debug
- assert(schedules.headers.include?(SchedulesFile::ColumnSleeping))
+ assert(schedules.headers.include?(SchedulesFile::Columns[:Sleeping].name))
else
- refute(schedules.headers.include?(SchedulesFile::ColumnSleeping))
+ refute(schedules.headers.include?(SchedulesFile::Columns[:Sleeping].name))
end
# Cleanup
diff --git a/rulesets/resources/301ruleset.rb b/rulesets/resources/301ruleset.rb
index fd1889237..cacdf1b39 100644
--- a/rulesets/resources/301ruleset.rb
+++ b/rulesets/resources/301ruleset.rb
@@ -2477,7 +2477,7 @@ def self.calc_rated_home_infiltration_ach50(orig_bldg)
end
if not min_nach.nil?
- min_sla = Airflow.get_infiltration_SLA_from_ACH(min_nach, infil_height, @weather)
+ min_sla = Airflow.get_infiltration_SLA_from_ACH(min_nach, infil_height, 8.202, @weather)
min_ach50 = Airflow.get_infiltration_ACH50_from_SLA(min_sla, 0.65, @cfa, infil_volume)
if ach50 < min_ach50
ach50 = min_ach50
diff --git a/tasks.rb b/tasks.rb
index 51c1e9a27..ce0828b86 100644
--- a/tasks.rb
+++ b/tasks.rb
@@ -2940,6 +2940,16 @@ def create_sample_hpxmls
puts 'Reformatting real_homes HPXMLs...'
Dir['workflow/real_homes/*.xml'].each do |hpxml_path|
hpxml = HPXML.new(hpxml_path: hpxml_path)
+ hpxml.header.eri_calculation_version = 'latest'
+ hpxml.header.co2index_calculation_version = 'latest'
+ hpxml.header.iecc_eri_calculation_version = IECCConstants.AllVersions[-1]
+ if hpxml.buildings[0].building_construction.residential_facility_type == HPXML::ResidentialTypeApartment
+ hpxml.header.zerh_calculation_version = ZERHConstants.MFVer2
+ hpxml.header.energystar_calculation_version = ESConstants.MFNationalVer1_2
+ else
+ hpxml.header.zerh_calculation_version = ZERHConstants.SFVer2
+ hpxml.header.energystar_calculation_version = ESConstants.SFNationalVer3_2
+ end
XMLHelper.write_file(hpxml.to_doc, hpxml_path)
end
end