From 553dce92365b6bb9cbf4e68642a15d8b3629ba3c Mon Sep 17 00:00:00 2001 From: Scott Horowitz Date: Fri, 4 Oct 2024 21:25:45 -0600 Subject: [PATCH 01/11] Add the rest of the schedule object methods to model.rb. --- HPXMLtoOpenStudio/resources/airflow.rb | 40 +- HPXMLtoOpenStudio/resources/constructions.rb | 3 +- HPXMLtoOpenStudio/resources/geometry.rb | 8 +- .../resources/hotwater_appliances.rb | 7 +- HPXMLtoOpenStudio/resources/hvac.rb | 16 +- HPXMLtoOpenStudio/resources/internal_gains.rb | 3 +- HPXMLtoOpenStudio/resources/model.rb | 139 ++++- HPXMLtoOpenStudio/resources/schedules.rb | 556 ++++++------------ HPXMLtoOpenStudio/resources/waterheater.rb | 29 +- 9 files changed, 376 insertions(+), 425 deletions(-) diff --git a/HPXMLtoOpenStudio/resources/airflow.rb b/HPXMLtoOpenStudio/resources/airflow.rb index 6a6c3fd4bf..bb3416c664 100644 --- a/HPXMLtoOpenStudio/resources/airflow.rb +++ b/HPXMLtoOpenStudio/resources/airflow.rb @@ -635,24 +635,30 @@ def self.apply_natural_ventilation_and_whole_house_fan(runner, model, spaces, hp # @param unavailable_periods [HPXML::UnavailablePeriods] Object that defines periods for, e.g., power outages or vacancies # @return [TODO] TODO def self.create_nv_and_whf_avail_sch(model, obj_name, num_days_per_week, unavailable_periods) - avail_sch = OpenStudio::Model::ScheduleRuleset.new(model) sch_name = "#{obj_name} schedule" - avail_sch.setName(sch_name) - avail_sch.defaultDaySchedule.setName("#{sch_name} default day") - Schedule.set_schedule_type_limits(model, avail_sch, EPlus::ScheduleTypeLimitsOnOff) - on_rule = OpenStudio::Model::ScheduleRule.new(avail_sch) - on_rule.setName("#{sch_name} rule") - on_rule_day = on_rule.daySchedule - on_rule_day.setName("#{sch_name} avail day") - on_rule_day.addValue(OpenStudio::Time.new(0, 24, 0, 0), 1) - method_array = ['setApplyMonday', 'setApplyWednesday', 'setApplyFriday', 'setApplySaturday', 'setApplyTuesday', 'setApplyThursday', 'setApplySunday'] - for i in 1..7 do - if num_days_per_week >= i - on_rule.public_send(method_array[i - 1], true) - end - end - on_rule.setStartDate(OpenStudio::Date::fromDayOfYear(1)) - on_rule.setEndDate(OpenStudio::Date::fromDayOfYear(365)) + avail_sch = Model.add_schedule_ruleset( + model, + name: sch_name, + limits: EPlus::ScheduleTypeLimitsOnOff + ) + + # Apply to days in this order: Mon, Wed, Fri, Sat, Tues, Thurs, Sun + apply_to_days = [0] * 7 + apply_to_days[0] = 1 if num_days_per_week >= 7 + apply_to_days[1] = 1 if num_days_per_week >= 1 + apply_to_days[2] = 1 if num_days_per_week >= 5 + apply_to_days[3] = 1 if num_days_per_week >= 2 + apply_to_days[4] = 1 if num_days_per_week >= 6 + apply_to_days[5] = 1 if num_days_per_week >= 3 + apply_to_days[6] = 1 if num_days_per_week >= 4 + + Model.add_schedule_ruleset_rule( + avail_sch, + start_date: OpenStudio::Date::fromDayOfYear(1), + end_date: OpenStudio::Date::fromDayOfYear(365), + apply_to_days: apply_to_days, + hourly_values: [1] * 24 + ) year = model.getYearDescription.assumedYear Schedule.set_unavailable_periods(avail_sch, sch_name, unavailable_periods, year) diff --git a/HPXMLtoOpenStudio/resources/constructions.rb b/HPXMLtoOpenStudio/resources/constructions.rb index a5e7a15a47..36c34aca50 100644 --- a/HPXMLtoOpenStudio/resources/constructions.rb +++ b/HPXMLtoOpenStudio/resources/constructions.rb @@ -2104,7 +2104,8 @@ def self.apply_window_skylight_shading(model, window_or_skylight, sub_surface, s sf_sch = Model.add_schedule_constant( model, name: sch_name, - value: sf_values[0][0] + value: sf_values[0][0], + limits: EPlus::ScheduleTypeLimitsFraction ) else sf_sch = HourlyByDaySchedule.new(model, sch_name, sf_values, sf_values, EPlus::ScheduleTypeLimitsFraction, false).schedule diff --git a/HPXMLtoOpenStudio/resources/geometry.rb b/HPXMLtoOpenStudio/resources/geometry.rb index 47d1bb945e..36965be122 100644 --- a/HPXMLtoOpenStudio/resources/geometry.rb +++ b/HPXMLtoOpenStudio/resources/geometry.rb @@ -1802,7 +1802,8 @@ def self.get_space_temperature_schedule(model, location, spaces) sch = Model.add_schedule_constant( model, name: location, - value: nil + value: nil, + limits: EPlus::ScheduleTypeLimitsTemperature ) sch.additionalProperties.setFeature('ObjectType', location) @@ -1839,11 +1840,6 @@ def self.get_space_temperature_schedule(model, location, spaces) end end - # Schedule type limits compatible - schedule_type_limits = OpenStudio::Model::ScheduleTypeLimits.new(model) - schedule_type_limits.setUnitType('Temperature') - sch.setScheduleTypeLimits(schedule_type_limits) - # Sensors if space_values[:indoor_weight] > 0 if not spaces[HPXML::LocationConditionedSpace].thermalZone.get.thermostatSetpointDualSetpoint.is_initialized diff --git a/HPXMLtoOpenStudio/resources/hotwater_appliances.rb b/HPXMLtoOpenStudio/resources/hotwater_appliances.rb index e8b66f0755..76fad215d6 100644 --- a/HPXMLtoOpenStudio/resources/hotwater_appliances.rb +++ b/HPXMLtoOpenStudio/resources/hotwater_appliances.rb @@ -407,9 +407,9 @@ def self.apply(runner, model, weather, spaces, hpxml_bldg, hpxml_header, schedul mw_temp_schedule = Model.add_schedule_constant( model, name: 'mixed water temperature schedule', - value: UnitConversions.convert(t_mix, 'F', 'C') + value: UnitConversions.convert(t_mix, 'F', 'C'), + limits: EPlus::ScheduleTypeLimitsTemperature ) - Schedule.set_schedule_type_limits(model, mw_temp_schedule, EPlus::ScheduleTypeLimitsTemperature) # Create schedule fixtures_schedule = nil @@ -938,7 +938,8 @@ def self.get_fridge_or_freezer_coefficients_schedule(model, col_name, obj_name, schedule = Model.add_schedule_constant( model, name: "#{obj_name} schedule", - value: nil + value: nil, + limits: nil ) if not loc_space.nil? diff --git a/HPXMLtoOpenStudio/resources/hvac.rb b/HPXMLtoOpenStudio/resources/hvac.rb index e5520e18fb..4eebf37c44 100644 --- a/HPXMLtoOpenStudio/resources/hvac.rb +++ b/HPXMLtoOpenStudio/resources/hvac.rb @@ -940,7 +940,8 @@ def self.apply_boiler(model, runner, heating_system, hvac_sequential_load_fracs, supply_setpoint = Model.add_schedule_constant( model, name: "#{obj_name} hydronic heat supply setpoint", - value: UnitConversions.convert(design_temp, 'F', 'C') + value: UnitConversions.convert(design_temp, 'F', 'C'), + limits: EPlus::ScheduleTypeLimitsTemperature ) setpoint_manager = OpenStudio::Model::SetpointManagerScheduled.new(model, supply_setpoint) @@ -1240,7 +1241,8 @@ def self.apply_dehumidifiers(runner, model, spaces, hpxml_bldg, hpxml_header) rh_setpoint_sch = Model.add_schedule_constant( model, name: "#{obj_name} rh setpoint", - value: rh_setpoint + value: rh_setpoint, + limits: EPlus::ScheduleTypeLimitsFraction ) capacity_curve = Model.add_curve_biquadratic( @@ -2570,9 +2572,9 @@ def self.create_air_loop_unitary_system(model, obj_name, fan, htg_coil, clg_coil cycle_fan_sch = Model.add_schedule_constant( model, name: "#{obj_name} auto fan schedule", - value: 0 - ) # 0 denotes that fan cycles on and off to meet the load (i.e., AUTO fan) as opposed to continuous operation - Schedule.set_schedule_type_limits(model, cycle_fan_sch, EPlus::ScheduleTypeLimitsOnOff) + value: 0, # 0 denotes that fan cycles on and off to meet the load (i.e., AUTO fan) as opposed to continuous operation + limits: EPlus::ScheduleTypeLimitsOnOff + ) air_loop_unitary = OpenStudio::Model::AirLoopHVACUnitarySystem.new(model) air_loop_unitary.setName(obj_name + ' unitary system') @@ -4603,10 +4605,8 @@ def self.get_sequential_load_schedule(model, fractions, unavailable_periods) s = ScheduleConstant.new(model, sch_name, values[0], EPlus::ScheduleTypeLimitsFraction, unavailable_periods: unavailable_periods) s = s.schedule else - s = Schedule.create_ruleset_from_daily_season(model, values) - s.setName(sch_name) + s = Schedule.create_ruleset_from_daily_season(model, sch_name, values) Schedule.set_unavailable_periods(s, sch_name, unavailable_periods, model.getYearDescription.assumedYear) - Schedule.set_schedule_type_limits(model, s, EPlus::ScheduleTypeLimitsFraction) end return s diff --git a/HPXMLtoOpenStudio/resources/internal_gains.rb b/HPXMLtoOpenStudio/resources/internal_gains.rb index 3480915acd..ab957c94f5 100644 --- a/HPXMLtoOpenStudio/resources/internal_gains.rb +++ b/HPXMLtoOpenStudio/resources/internal_gains.rb @@ -51,7 +51,8 @@ def self.apply_building_occupants(runner, model, hpxml_bldg, hpxml_header, space activity_sch = Model.add_schedule_constant( model, name: "#{Constants::ObjectTypeOccupants} activity schedule", - value: activity_per_person + value: activity_per_person, + limits: nil ) # Add people definition for the occ diff --git a/HPXMLtoOpenStudio/resources/model.rb b/HPXMLtoOpenStudio/resources/model.rb index 8dd87ca6c4..e07ce7b7f7 100644 --- a/HPXMLtoOpenStudio/resources/model.rb +++ b/HPXMLtoOpenStudio/resources/model.rb @@ -542,14 +542,151 @@ def self.add_curve_quint_linear(model, name:, coeff:) # @param model [OpenStudio::Model::Model] OpenStudio Model object # @param name [String] Name for the OpenStudio object # @param value [Double] Constant value for the year + # @param limits [String] Data type for the values contained in the schedule (EPlus::ScheduleTypeXXX) # @return [OpenStudio::Model::ScheduleConstant] The model object - def self.add_schedule_constant(model, name:, value:) + def self.add_schedule_constant(model, name:, value:, limits:) sch = OpenStudio::Model::ScheduleConstant.new(model) sch.setName(name) sch.setValue(value) unless value.nil? # EMS-actuated if nil + add_schedule_type_limits(model, schedule: sch, limits: limits) return sch end + # Adds a ScheduleRuleset object to the OpenStudio model. + # + # @param model [OpenStudio::Model::Model] OpenStudio Model object + # @param name [String] Name for the OpenStudio object + # @param limits [String] Data type for the values contained in the schedule (EPlus::ScheduleTypeXXX) + # @return [OpenStudio::Model::ScheduleRuleset] The model object + def self.add_schedule_ruleset(model, name:, limits:) + sch = OpenStudio::Model::ScheduleRuleset.new(model) + sch.setName(name) + sch.defaultDaySchedule.setName("#{name} default day") + add_schedule_type_limits(model, schedule: sch, limits: limits) + return sch + end + + # Adds a ScheduleRule object to the OpenStudio model for a given ruleset. + # + # @param schedule [OpenStudio::Model::ScheduleRuleset] The ruleset to which the rule applies + # @param start_date [OpenStudio::Date] Start date + # @param end_date [OpenStudio::Date] End data + # @param apply_to_days [Array] Values for Sun, Mon, ..., Sat, where 1 means the rule applies + # @param hourly_values [Array] 24 hourly values + # @return [OpenStudio::Model::ScheduleRule] The model object + def self.add_schedule_ruleset_rule(schedule, start_date:, end_date:, apply_to_days: [1, 1, 1, 1, 1, 1, 1], hourly_values:) + rule = OpenStudio::Model::ScheduleRule.new(schedule) + + if (not apply_to_days.is_a? Array) || (apply_to_days.size != 7) + fail 'Unexpected apply_to_days.' + end + + # Allow for either 0-based or 1-based array for now + # FUTURE: Restrict to 0-based + if (not hourly_values.is_a? Array) || (hourly_values.size != 24) || (hourly_values.size != 25) + fail 'Unexpected hourly_values.' + end + + if hourly_values.size == 24 + hourly_values = [nil] + hourly_values + end + + if apply_to_days == [1, 1, 1, 1, 1, 1, 1] + rule.setName("#{schedule.name} allday rule") + elsif apply_to_days == [0, 1, 1, 1, 1, 1, 0] + rule.setName("#{schedule.name} weekday rule") + elsif apply_to_days == [1, 0, 0, 0, 0, 0, 1] + rule.setName("#{schedule.name} weekend rule") + else + rule.setName("#{schedule.name} rule") + end + rule.setStartDate(start_date) + rule.setEndDate(end_date) + rule.setApplySunday(apply_to_days[0]) + rule.setApplyMonday(apply_to_days[1]) + rule.setApplyTuesday(apply_to_days[2]) + rule.setApplyWednesday(apply_to_days[3]) + rule.setApplyThursday(apply_to_days[4]) + rule.setApplyFriday(apply_to_days[5]) + rule.setApplySaturday(apply_to_days[6]) + + day_sch = rule.daySchedule + day_sch.setName("#{schedule.name} day") + + previous_value = hourly_values[1] + for h in 1..24 + next if (h != 24) && (hourly_values[h + 1] == previous_value) + + day_sch.addValue(OpenStudio::Time.new(0, h, 0, 0), previous_value) + previous_value = hourly_values[h + 1] + end + + return rule + end + + # Adds a ScheduleFile object to the OpenStudio model. + # + # @param model [OpenStudio::Model::Model] OpenStudio Model object + # @param name [String] Name for the OpenStudio object + # @param file_path [String] Full path to the CSV schedule file + # @param col_num [Integer] The column number with the desired schedule values; first column is 1 + # @param rows_to_skip [Integer] The number of header rows to skip + # @param num_hours [Integer] Number of hours of data, should be 8760 of 8784 + # @param mins_per_item [Integer] Number of minutes associated with each line of the file + # @param limits [String] Data type for the values contained in the schedule (EPlus::ScheduleTypeXXX) + # @return [OpenStudio::Model::ScheduleFile] The model object + def self.add_schedule_file(model, name:, file_path:, col_num:, rows_to_skip:, num_hours:, mins_per_item:, limits:) + file_dir = File.dirname(file_path) + if not model.workflowJSON.filePaths.map(&:to_s).include?(file_dir) + model.workflowJSON.addFilePath(file_dir) + end + + sch = OpenStudio::Model::ScheduleFile.new(model, File.basename(file_path)) + sch.setName(name) + sch.setColumnNumber(col_num) + sch.setRowstoSkipatTop(rows_to_skip) + sch.setNumberofHoursofData(num_hours) + sch.setMinutesperItem(mins_per_item) + sch.setTranslateFileWithRelativePath(true) + add_schedule_type_limits(model, schedule: sch, limits: limits) + return sch + end + + # Adds a OpenStudio::Model::ScheduleTypeLimits object to the OpenStuio model (unless + # one has already been added) and assigns the schedule to it. + # + # @param model [OpenStudio::Model::Model] OpenStudio Model object + # @param schedule [OpenStudio::Model::Schedule] The schedule of interest + # @param limits [String] Data type for the values contained in the schedule (EPlus::ScheduleTypeXXX) + # @return [OpenStudio::Model::ScheduleTypeLimits] The model object + def self.add_schedule_type_limits(model, schedule:, limits:) + return if limits.nil? + + stl = model.getScheduleTypeLimitss.find { |stl| stl.name.to_s == limits } + + if stl.nil? + stl = OpenStudio::Model::ScheduleTypeLimits.new(model) + stl.setName(limits) + if limits == EPlus::ScheduleTypeLimitsFraction + stl.setLowerLimitValue(0) + stl.setUpperLimitValue(1) + stl.setNumericType('Continuous') + elsif limits == EPlus::ScheduleTypeLimitsOnOff + stl.setLowerLimitValue(0) + stl.setUpperLimitValue(1) + stl.setNumericType('Discrete') + elsif limits == EPlus::ScheduleTypeLimitsTemperature + stl.setNumericType('Continuous') + else + fail "Unexpected schedule type limits: #{limits}" + end + end + + schedule.setScheduleTypeLimits(stl) + + return stl + end + # Adds an EnergyManagementSystemSensor to the OpenStudio model. # # The EnergyManagementSystemSensor object gets information during the simulation diff --git a/HPXMLtoOpenStudio/resources/schedules.rb b/HPXMLtoOpenStudio/resources/schedules.rb index 9532fb3939..f7a6f4d692 100644 --- a/HPXMLtoOpenStudio/resources/schedules.rb +++ b/HPXMLtoOpenStudio/resources/schedules.rb @@ -35,23 +35,22 @@ def create_schedule(model, sch_name, val, year, schedule_type_limits_name, unava schedule = Model.add_schedule_constant( model, name: sch_name, - value: val + value: val, + limits: schedule_type_limits_name ) - - Schedule.set_schedule_type_limits(model, schedule, schedule_type_limits_name) end else - schedule = OpenStudio::Model::ScheduleRuleset.new(model) - schedule.setName(sch_name) - schedule.defaultDaySchedule.setName(sch_name + ' default day') + schedule = Model.add_schedule_ruleset( + model, + name: sch_name, + limits: schedule_type_limits_name + ) default_day_sch = schedule.defaultDaySchedule default_day_sch.clearValues default_day_sch.addValue(OpenStudio::Time.new(0, 24, 0, 0), val) Schedule.set_unavailable_periods(schedule, sch_name, unavailable_periods, year) - - Schedule.set_schedule_type_limits(model, schedule, schedule_type_limits_name) end return schedule @@ -138,25 +137,19 @@ def create_schedule(model, sch_name, year, schedule_type_limits_name, unavailabl day_startm = Calendar.day_start_months(year) day_endm = Calendar.day_end_months(year) - time = [] - for h in 1..24 - time[h] = OpenStudio::Time.new(0, h, 0, 0) - end - - schedule = OpenStudio::Model::ScheduleRuleset.new(model) - schedule.setName(sch_name) - schedule.defaultDaySchedule.setName(sch_name + ' default day') + schedule = Model.add_schedule_ruleset( + model, + name: sch_name, + limits: schedule_type_limits_name + ) - prev_wkdy_vals = nil - prev_wkdy_rule = nil - prev_wknd_vals = nil - prev_wknd_rule = nil + prev_wkdy_vals, prev_wkdy_rule = nil, nil + prev_wknd_vals, prev_wknd_rule = nil, nil for m in 1..12 date_s = OpenStudio::Date::fromDayOfYear(day_startm[m - 1], year) date_e = OpenStudio::Date::fromDayOfYear(day_endm[m - 1], year) - wkdy_vals = [] - wknd_vals = [] + wkdy_vals, wknd_vals = [], [] for h in 1..24 wkdy_vals[h] = (@weekday_month_by_hour_values[m - 1][h - 1]) / @maxval wknd_vals[h] = (@weekend_month_by_hour_values[m - 1][h - 1]) / @maxval @@ -167,68 +160,36 @@ def create_schedule(model, sch_name, year, schedule_type_limits_name, unavailabl prev_wkdy_rule.setEndDate(date_e) unless prev_wkdy_rule.nil? prev_wknd_rule.setEndDate(date_e) unless prev_wknd_rule.nil? elsif wkdy_vals == wknd_vals - # Alldays - wkdy_rule = OpenStudio::Model::ScheduleRule.new(schedule) - wkdy_rule.setName(sch_name + " #{Schedule.allday_name} ruleset#{m}") - wkdy = wkdy_rule.daySchedule - wkdy.setName(sch_name + " #{Schedule.allday_name}#{m}") - previous_value = wkdy_vals[1] - for h in 1..24 - next if (h != 24) && (wkdy_vals[h + 1] == previous_value) - - wkdy.addValue(time[h], previous_value) - previous_value = wkdy_vals[h + 1] - end - Schedule.set_weekday_rule(wkdy_rule) - Schedule.set_weekend_rule(wkdy_rule) - wkdy_rule.setStartDate(date_s) - wkdy_rule.setEndDate(date_e) - prev_wkdy_rule = wkdy_rule - prev_wknd_rule = nil + alld_rule = Model.add_schedule_ruleset_rule( + schedule, + start_date: date_s, + end_date: date_e, + hourly_values: wkdy_vals + ) + prev_wkdy_rule, prev_wknd_rule = alld_rule, nil else - # Weekdays - wkdy_rule = OpenStudio::Model::ScheduleRule.new(schedule) - wkdy_rule.setName(sch_name + " #{Schedule.weekday_name} ruleset#{m}") - wkdy = wkdy_rule.daySchedule - wkdy.setName(sch_name + " #{Schedule.weekday_name}#{m}") - previous_value = wkdy_vals[1] - for h in 1..24 - next if (h != 24) && (wkdy_vals[h + 1] == previous_value) - - wkdy.addValue(time[h], previous_value) - previous_value = wkdy_vals[h + 1] - end - Schedule.set_weekday_rule(wkdy_rule) - wkdy_rule.setStartDate(date_s) - wkdy_rule.setEndDate(date_e) - prev_wkdy_rule = wkdy_rule - - # Weekends - wknd_rule = OpenStudio::Model::ScheduleRule.new(schedule) - wknd_rule.setName(sch_name + " #{Schedule.weekend_name} ruleset#{m}") - wknd = wknd_rule.daySchedule - wknd.setName(sch_name + " #{Schedule.weekend_name}#{m}") - previous_value = wknd_vals[1] - for h in 1..24 - next if (h != 24) && (wknd_vals[h + 1] == previous_value) - - wknd.addValue(time[h], previous_value) - previous_value = wknd_vals[h + 1] - end - Schedule.set_weekend_rule(wknd_rule) - wknd_rule.setStartDate(date_s) - wknd_rule.setEndDate(date_e) - prev_wknd_rule = wknd_rule + wkdy_rule = Model.add_schedule_ruleset_rule( + schedule, + start_date: date_s, + end_date: date_e, + apply_to_days: [0, 1, 1, 1, 1, 1, 0], + hourly_values: wkdy_vals + ) + wknd_rule = Model.add_schedule_ruleset_rule( + schedule, + start_date: date_s, + end_date: date_e, + apply_to_days: [1, 0, 0, 0, 0, 0, 1], + hourly_values: wknd_vals + ) + prev_wkdy_rule, prev_wknd_rule = wkdy_rule, wknd_rule end - prev_wkdy_vals = wkdy_vals - prev_wknd_vals = wknd_vals + prev_wkdy_vals, prev_wknd_vals = wkdy_vals, wknd_vals end Schedule.set_unavailable_periods(schedule, sch_name, unavailable_periods, year) - Schedule.set_schedule_type_limits(model, schedule, schedule_type_limits_name) - return schedule end end @@ -311,25 +272,19 @@ def calc_max_val() # @param unavailable_periods [HPXML::UnavailablePeriods] Object that defines periods for, e.g., power outages or vacancies # @return [OpenStudio::Model::Ruleset] the OpenStudio Schedule object with rules def create_schedule(model, sch_name, year, num_days, schedule_type_limits_name, unavailable_periods) - time = [] - for h in 1..24 - time[h] = OpenStudio::Time.new(0, h, 0, 0) - end - - schedule = OpenStudio::Model::ScheduleRuleset.new(model) - schedule.setName(sch_name) - schedule.defaultDaySchedule.setName(sch_name + ' default day') - - prev_wkdy_vals = nil - prev_wkdy_rule = nil - prev_wknd_vals = nil - prev_wknd_rule = nil + schedule = Model.add_schedule_ruleset( + model, + name: sch_name, + limits: schedule_type_limits_name + ) + + prev_wkdy_vals, prev_wkdy_rule = nil, nil + prev_wknd_vals, prev_wknd_rule = nil, nil for d in 1..num_days date_s = OpenStudio::Date::fromDayOfYear(d, year) date_e = OpenStudio::Date::fromDayOfYear(d, year) - wkdy_vals = [] - wknd_vals = [] + wkdy_vals, wknd_vals = [], [] for h in 1..24 wkdy_vals[h] = (@weekday_day_by_hour_values[d - 1][h - 1]) / @maxval wknd_vals[h] = (@weekend_day_by_hour_values[d - 1][h - 1]) / @maxval @@ -340,68 +295,36 @@ def create_schedule(model, sch_name, year, num_days, schedule_type_limits_name, prev_wkdy_rule.setEndDate(date_e) unless prev_wkdy_rule.nil? prev_wknd_rule.setEndDate(date_e) unless prev_wknd_rule.nil? elsif wkdy_vals == wknd_vals - # Alldays - wkdy_rule = OpenStudio::Model::ScheduleRule.new(schedule) - wkdy_rule.setName(sch_name + " #{Schedule.allday_name} ruleset#{d}") - wkdy = wkdy_rule.daySchedule - wkdy.setName(sch_name + " #{Schedule.allday_name}#{d}") - previous_value = wkdy_vals[1] - for h in 1..24 - next if (h != 24) && (wkdy_vals[h + 1] == previous_value) - - wkdy.addValue(time[h], previous_value) - previous_value = wkdy_vals[h + 1] - end - Schedule.set_weekday_rule(wkdy_rule) - Schedule.set_weekend_rule(wkdy_rule) - wkdy_rule.setStartDate(date_s) - wkdy_rule.setEndDate(date_e) - prev_wkdy_rule = wkdy_rule - prev_wknd_rule = nil + alld_rule = Model.add_schedule_ruleset_rule( + schedule, + start_date: date_s, + end_date: date_e, + hourly_values: wkdy_vals + ) + prev_wkdy_rule, prev_wknd_rule = alld_rule, nil else - # Weekdays - wkdy_rule = OpenStudio::Model::ScheduleRule.new(schedule) - wkdy_rule.setName(sch_name + " #{Schedule.weekday_name} ruleset#{d}") - wkdy = wkdy_rule.daySchedule - wkdy.setName(sch_name + " #{Schedule.weekday_name}#{d}") - previous_value = wkdy_vals[1] - for h in 1..24 - next if (h != 24) && (wkdy_vals[h + 1] == previous_value) - - wkdy.addValue(time[h], previous_value) - previous_value = wkdy_vals[h + 1] - end - Schedule.set_weekday_rule(wkdy_rule) - wkdy_rule.setStartDate(date_s) - wkdy_rule.setEndDate(date_e) - prev_wkdy_rule = wkdy_rule - - # Weekends - wknd_rule = OpenStudio::Model::ScheduleRule.new(schedule) - wknd_rule.setName(sch_name + " #{Schedule.weekend_name} ruleset#{d}") - wknd = wknd_rule.daySchedule - wknd.setName(sch_name + " #{Schedule.weekend_name}#{d}") - previous_value = wknd_vals[1] - for h in 1..24 - next if (h != 24) && (wknd_vals[h + 1] == previous_value) - - wknd.addValue(time[h], previous_value) - previous_value = wknd_vals[h + 1] - end - Schedule.set_weekend_rule(wknd_rule) - wknd_rule.setStartDate(date_s) - wknd_rule.setEndDate(date_e) - prev_wknd_rule = wknd_rule + wkdy_rule = Model.add_schedule_ruleset_rule( + schedule, + start_date: date_s, + end_date: date_e, + apply_to_days: [0, 1, 1, 1, 1, 1, 0], + hourly_values: wkdy_vals + ) + wknd_rule = Model.add_schedule_ruleset_rule( + schedule, + start_date: date_s, + end_date: date_e, + apply_to_days: [1, 0, 0, 0, 0, 0, 1], + hourly_values: wknd_vals + ) + prev_wkdy_rule, prev_wknd_rule = wkdy_rule, wknd_rule end - prev_wkdy_vals = wkdy_vals - prev_wknd_vals = wknd_vals + prev_wkdy_vals, prev_wknd_vals = wkdy_vals, wknd_vals end Schedule.set_unavailable_periods(schedule, sch_name, unavailable_periods, year) - Schedule.set_schedule_type_limits(model, schedule, schedule_type_limits_name) - return schedule end end @@ -552,19 +475,15 @@ def create_schedule(model, sch_name, year, begin_month, begin_day, end_month, en day_startm[begin_month - 1] += begin_day - 1 day_endm = [Calendar.day_start_months(year), month_num_days].transpose.map { |i| i.sum - 1 } - time = [] - for h in 1..24 - time[h] = OpenStudio::Time.new(0, h, 0, 0) - end + schedule = Model.add_schedule_ruleset( + model, + name: sch_name, + limits: schedule_type_limits_name + ) - schedule = OpenStudio::Model::ScheduleRuleset.new(model) - schedule.setName(sch_name) - schedule.defaultDaySchedule.setName(sch_name + ' default day') + prev_wkdy_vals, prev_wkdy_rule = nil, nil + prev_wknd_vals, prev_wknd_rule = nil, nil - prev_wkdy_vals = nil - prev_wkdy_rule = nil - prev_wknd_vals = nil - prev_wknd_rule = nil periods = [] if begin_month <= end_month # contiguous period periods << [begin_month, end_month] @@ -578,8 +497,7 @@ def create_schedule(model, sch_name, year, begin_month, begin_day, end_month, en date_s = OpenStudio::Date::fromDayOfYear(day_startm[m - 1], year) date_e = OpenStudio::Date::fromDayOfYear(day_endm[m - 1], year) - wkdy_vals = [] - wknd_vals = [] + wkdy_vals, wknd_vals = [], [] for h in 1..24 wkdy_vals[h] = (@monthly_values[m - 1] * @weekday_hourly_values[h - 1]) / @maxval wknd_vals[h] = (@monthly_values[m - 1] * @weekend_hourly_values[h - 1]) / @maxval @@ -590,96 +508,43 @@ def create_schedule(model, sch_name, year, begin_month, begin_day, end_month, en prev_wkdy_rule.setEndDate(date_e) unless prev_wkdy_rule.nil? prev_wknd_rule.setEndDate(date_e) unless prev_wknd_rule.nil? elsif wkdy_vals == wknd_vals - # Alldays - wkdy_rule = OpenStudio::Model::ScheduleRule.new(schedule) - wkdy_rule.setName(sch_name + " #{Schedule.allday_name} ruleset#{m}") - wkdy = wkdy_rule.daySchedule - wkdy.setName(sch_name + " #{Schedule.allday_name}#{m}") - previous_value = wkdy_vals[1] - for h in 1..24 - next if (h != 24) && (wkdy_vals[h + 1] == previous_value) - - wkdy.addValue(time[h], previous_value) - previous_value = wkdy_vals[h + 1] - end - Schedule.set_weekday_rule(wkdy_rule) - Schedule.set_weekend_rule(wkdy_rule) - wkdy_rule.setStartDate(date_s) - wkdy_rule.setEndDate(date_e) - prev_wkdy_rule = wkdy_rule - prev_wknd_rule = nil + alld_rule = Model.add_schedule_ruleset_rule( + schedule, + start_date: date_s, + end_date: date_e, + hourly_values: wkdy_vals + ) + prev_wkdy_rule, prev_wknd_rule = alld_rule, nil else - # Weekdays - wkdy_rule = OpenStudio::Model::ScheduleRule.new(schedule) - wkdy_rule.setName(sch_name + " #{Schedule.weekday_name} ruleset#{m}") - wkdy = wkdy_rule.daySchedule - wkdy.setName(sch_name + " #{Schedule.weekday_name}#{m}") - previous_value = wkdy_vals[1] - for h in 1..24 - next if (h != 24) && (wkdy_vals[h + 1] == previous_value) - - wkdy.addValue(time[h], previous_value) - previous_value = wkdy_vals[h + 1] - end - Schedule.set_weekday_rule(wkdy_rule) - wkdy_rule.setStartDate(date_s) - wkdy_rule.setEndDate(date_e) - prev_wkdy_rule = wkdy_rule - - # Weekends - wknd_rule = OpenStudio::Model::ScheduleRule.new(schedule) - wknd_rule.setName(sch_name + " #{Schedule.weekend_name} ruleset#{m}") - wknd = wknd_rule.daySchedule - wknd.setName(sch_name + " #{Schedule.weekend_name}#{m}") - previous_value = wknd_vals[1] - for h in 1..24 - next if (h != 24) && (wknd_vals[h + 1] == previous_value) - - wknd.addValue(time[h], previous_value) - previous_value = wknd_vals[h + 1] - end - Schedule.set_weekend_rule(wknd_rule) - wknd_rule.setStartDate(date_s) - wknd_rule.setEndDate(date_e) - prev_wknd_rule = wknd_rule + wkdy_rule = Model.add_schedule_ruleset_rule( + schedule, + start_date: date_s, + end_date: date_e, + apply_to_days: [0, 1, 1, 1, 1, 1, 0], + hourly_values: wkdy_vals + ) + wknd_rule = Model.add_schedule_ruleset_rule( + schedule, + start_date: date_s, + end_date: date_e, + apply_to_days: [1, 0, 0, 0, 0, 0, 1], + hourly_values: wknd_vals + ) + prev_wkdy_rule, prev_wknd_rule = wkdy_rule, wknd_rule end - prev_wkdy_vals = wkdy_vals - prev_wknd_vals = wknd_vals + prev_wkdy_vals, prev_wknd_vals = wkdy_vals, wknd_vals end end Schedule.set_unavailable_periods(schedule, sch_name, unavailable_periods, year) - Schedule.set_schedule_type_limits(model, schedule, schedule_type_limits_name) - return schedule end end # Collection of helper methods related to schedules. module Schedule - # Used to describe a OpenStudio Schedule Rule that applies to both weekdays and weekends. - # - # @return [String] name for the allday schedule - def self.allday_name - return 'allday' - end - - # Used to describe a OpenStudio Schedule Rule that applies only to weekdays. - # - # @return [String] name for the weekday schedule - def self.weekday_name - return 'weekday' - end - - # Used to describe a OpenStudio Schedule Rule that applies only to weekends. - # - # @return [String] name for the weekend schedule - def self.weekend_name - return 'weekend' - end - # Get the total number of full load hours for this schedule. # # @param modelYear [Integer] the calendar year @@ -777,56 +642,6 @@ def self.annual_equivalent_full_load_hrs(modelYear, schedule) return annual_flh end - # Set the lower/upper limit values and numeric type for the given schedule type limits. - # - # @param model [OpenStudio::Model::Model] OpenStudio Model object - # @param schedule [OpenStudio::Model::ScheduleInterval or OpenStudio::Model::ScheduleConstant or OpenStudio::Model::ScheduleRuleset] the OpenStudio Schedule object - # @param schedule_type_limits_name [String] data type for the values contained in the schedule - # @return [nil] - def self.set_schedule_type_limits(model, schedule, schedule_type_limits_name) - return if schedule_type_limits_name.nil? - - schedule_type_limits = model.getScheduleTypeLimitss.find { |stl| stl.name.to_s == schedule_type_limits_name } - if schedule_type_limits.nil? - schedule_type_limits = OpenStudio::Model::ScheduleTypeLimits.new(model) - schedule_type_limits.setName(schedule_type_limits_name) - if schedule_type_limits_name == EPlus::ScheduleTypeLimitsFraction - schedule_type_limits.setLowerLimitValue(0) - schedule_type_limits.setUpperLimitValue(1) - schedule_type_limits.setNumericType('Continuous') - elsif schedule_type_limits_name == EPlus::ScheduleTypeLimitsOnOff - schedule_type_limits.setLowerLimitValue(0) - schedule_type_limits.setUpperLimitValue(1) - schedule_type_limits.setNumericType('Discrete') - elsif schedule_type_limits_name == EPlus::ScheduleTypeLimitsTemperature - schedule_type_limits.setNumericType('Continuous') - end - end - - schedule.setScheduleTypeLimits(schedule_type_limits) - end - - # Apply true for all weekday days of an OpenStudio ScheduleRule object. - # - # @param rule [OpenStudio::Model::ScheduleRule] an OpenStudio ScheduleRule object - # @return [nil] - def self.set_weekday_rule(rule) - rule.setApplyMonday(true) - rule.setApplyTuesday(true) - rule.setApplyWednesday(true) - rule.setApplyThursday(true) - rule.setApplyFriday(true) - end - - # Apply true for all weekend days of an OpenStudio ScheduleRule object. - # - # @param rule [OpenStudio::Model::ScheduleRule] an OpenStudio ScheduleRule object - # @return [nil] - def self.set_weekend_rule(rule) - rule.setApplySaturday(true) - rule.setApplySunday(true) - end - # Downselect the unavailable periods to only those that apply to the given schedule. # # @param runner [OpenStudio::Measure::OSRunner] Object typically used to display warnings @@ -848,7 +663,7 @@ def self.set_unavailable_periods(schedule, sch_name, unavailable_periods, year) return if unavailable_periods.nil? # Add off rule(s), will override previous rules - unavailable_periods.each_with_index do |period, i| + unavailable_periods.each_with_index do |period, _i| # Special Values # FUTURE: Assign an object type to the schedules and use that to determine what # kind of schedule each is, rather than looking at object names. That would @@ -880,97 +695,95 @@ def self.set_unavailable_periods(schedule, sch_name, unavailable_periods, year) outage_days = day_e - day_s if outage_days == 0 # outage is less than 1 calendar day (need 1 outage rule) - out = Schedule.create_unavailable_period_rule(schedule, sch_name, i, date_s, date_e) - Schedule.set_unavailable_period_values(out, begin_day_schedule, period.begin_hour, period.end_hour, value) + Model.add_schedule_ruleset_rule( + schedule, + start_date: date_s, + end_date: date_e, + hourly_values: [0..23].map { |h| (h < period.begin_hour) || (h >= period.end_hour) ? begin_day_schedule.getValue(OpenStudio::Time.new(0, h + 1, 0, 0)) : value } + ) else # outage is at least 1 calendar day if period.begin_hour == 0 && period.end_hour == 24 # 1 outage rule - out = Schedule.create_unavailable_period_rule(schedule, sch_name, i, date_s, date_e) - out.addValue(OpenStudio::Time.new(0, 24, 0, 0), value) + Model.add_schedule_ruleset_rule( + schedule, + start_date: date_s, + end_date: date_e, + hourly_values: [h] * 24 + ) elsif (period.begin_hour == 0 && period.end_hour != 24) || (period.begin_hour != 0 && period.end_hour == 24) # 2 outage rules if period.begin_hour == 0 && period.end_hour != 24 # last day - out = Schedule.create_unavailable_period_rule(schedule, sch_name, i, date_e, date_e) - Schedule.set_unavailable_period_values(out, end_day_schedule, 0, period.end_hour, value) + Model.add_schedule_ruleset_rule( + schedule, + start_date: date_e, + end_date: date_e, + hourly_values: [0..23].map { |h| (h >= period.end_hour) ? end_day_schedule.getValue(OpenStudio::Time.new(0, h + 1, 0, 0)) : value } + ) # all other days - date_e2 = OpenStudio::Date::fromDayOfYear(day_e - 1, year) - out = Schedule.create_unavailable_period_rule(schedule, sch_name, i, date_s, date_e2) - out.addValue(OpenStudio::Time.new(0, 24, 0, 0), value) + Model.add_schedule_ruleset_rule( + schedule, + start_date: date_s, + end_date: OpenStudio::Date::fromDayOfYear(day_e - 1, year), + hourly_values: [h] * 24 + ) elsif period.begin_hour != 0 && period.end_hour == 24 # first day - out = Schedule.create_unavailable_period_rule(schedule, sch_name, i, date_s, date_s) - Schedule.set_unavailable_period_values(out, begin_day_schedule, period.begin_hour, 24, value) + Model.add_schedule_ruleset_rule( + schedule, + start_date: date_s, + end_date: date_s, + hourly_values: [0..23].map { |h| (h < period.begin_hour) ? begin_day_schedule.getValue(OpenStudio::Time.new(0, h + 1, 0, 0)) : value } + ) # all other days - date_s2 = OpenStudio::Date::fromDayOfYear(day_s + 1, year) - out = Schedule.create_unavailable_period_rule(schedule, sch_name, i, date_s2, date_e) - out.addValue(OpenStudio::Time.new(0, 24, 0, 0), value) + Model.add_schedule_ruleset_rule( + schedule, + start_date: OpenStudio::Date::fromDayOfYear(day_s + 1, year), + end_date: date_e, + hourly_values: [h] * 24 + ) end else # 3 outage rules # first day - out = Schedule.create_unavailable_period_rule(schedule, sch_name, i, date_s, date_s) - Schedule.set_unavailable_period_values(out, begin_day_schedule, period.begin_hour, 24, value) + Model.add_schedule_ruleset_rule( + schedule, + start_date: date_s, + end_date: date_s, + hourly_values: [0..23].map { |h| (h < period.begin_hour) ? begin_day_schedule.getValue(OpenStudio::Time.new(0, h + 1, 0, 0)) : value } + ) # all other days - date_s2 = OpenStudio::Date::fromDayOfYear(day_s + 1, year) - date_e2 = OpenStudio::Date::fromDayOfYear(day_e - 1, year) - out = Schedule.create_unavailable_period_rule(schedule, sch_name, i, date_s2, date_e2) - out.addValue(OpenStudio::Time.new(0, 24, 0, 0), value) + Model.add_schedule_ruleset_rule( + schedule, + start_date: OpenStudio::Date::fromDayOfYear(day_s + 1, year), + end_date: OpenStudio::Date::fromDayOfYear(day_e - 1, year), + hourly_values: [h] * 24 + ) # last day - out = Schedule.create_unavailable_period_rule(schedule, sch_name, i, date_e, date_e) - Schedule.set_unavailable_period_values(out, end_day_schedule, 0, period.end_hour, value) + Model.add_schedule_ruleset_rule( + schedule, + start_date: date_e, + end_date: date_e, + hourly_values: [0..23].map { |h| (h >= period.end_hour) ? end_day_schedule.getValue(OpenStudio::Time.new(0, h + 1, 0, 0)) : value } + ) end end end end - # Create an unavailable period rule from start date to end date. - # - # @param schedule [OpenStudio::Model::ScheduleRuleset] the OpenStudio Schedule object for which to set unavailable period rules - # @param sch_name [String] name that is assigned to the OpenStudio Schedule object - # @param i [Integer] the index of the applicable unavailable period - # @param date_s [OpenStudio::Date] unavailable period rule start date - # @param date_e [OpenStudio::Date] unavailable period rule end date - # @return [OpenStudio::Model::ScheduleDay] OpenStudio Schedule Day object connected to the unavailable period rule - def self.create_unavailable_period_rule(schedule, sch_name, i, date_s, date_e) - out_rule = OpenStudio::Model::ScheduleRule.new(schedule) - out_rule.setName(sch_name + " unavailable period ruleset#{i}") - out_sch = out_rule.daySchedule - out_sch.setName(sch_name + " unavailable period#{i}") - out_rule.setStartDate(date_s) - out_rule.setEndDate(date_e) - Schedule.set_weekday_rule(out_rule) - Schedule.set_weekend_rule(out_rule) - return out_sch - end - - # Set the unavailable period values for the hours of the day which it applies. - # - # @param out [OpenStudio::Model::ScheduleDay] OpenStudio Schedule Day object connected to the unavailable period rule - # @param day_schedule [OpenStudio::Model::ScheduleDay] the OpenStudio Schedule Day object before applying the unavailable period - # @param begin_hour [Integer] hour of the day that the unavailable period begins - # @param end_hour [Integer] hour of the day that the unavailable period ends - # @param value [Double] the value to set on the day schedule that means unavailable - # @return [nil] - def self.set_unavailable_period_values(out, day_schedule, begin_hour, end_hour, value) - for h in 0..23 - time = OpenStudio::Time.new(0, h + 1, 0, 0) - if (h < begin_hour) || (h >= end_hour) - out.addValue(time, day_schedule.getValue(time)) - else - out.addValue(time, value) - end - end - end - # Create an OpenStudio Schedule object based on a 365-element (or 366 for a leap year) daily season array. # # @param model [OpenStudio::Model::Model] OpenStudio Model object + # @param sch_name [String] name that is assigned to the OpenStudio Schedule object # @param values [Array] array of daily sequential load fractions # @return [OpenStudio::Model::ScheduleRuleset] the OpenStudio Schedule object with rules - def self.create_ruleset_from_daily_season(model, values) - s = OpenStudio::Model::ScheduleRuleset.new(model) + def self.create_ruleset_from_daily_season(model, sch_name, values) + schedule = Model.add_schedule_ruleset( + model, + name: sch_name, + limits: EPlus::ScheduleTypeLimitsFraction + ) year = model.getYearDescription.assumedYear start_value = values[0] start_date = OpenStudio::Date::fromDayOfYear(1, year) @@ -978,21 +791,20 @@ def self.create_ruleset_from_daily_season(model, values) i += 1 next unless value != start_value || i == values.length - rule = OpenStudio::Model::ScheduleRule.new(s) - set_weekday_rule(rule) - set_weekend_rule(rule) + rule = Model.add_schedule_ruleset_rule( + schedule, + start_date: start_date, + end_date: OpenStudio::Date::fromDayOfYear(i - 1, year), + hourly_values: [start_value] * 24 + ) + i += 1 if i == values.length - end_date = OpenStudio::Date::fromDayOfYear(i - 1, year) - rule.setStartDate(start_date) - rule.setEndDate(end_date) - day_schedule = rule.daySchedule - day_schedule.addValue(OpenStudio::Time.new(0, 24, 0, 0), start_value) break if i == values.length + 1 start_date = OpenStudio::Date::fromDayOfYear(i, year) start_value = value end - return s + return schedule end # Return a array of maps that reflect the contents of the unavailable_periods.csv file. @@ -1392,25 +1204,19 @@ def create_schedule_file(model, col_name:, rows_to_skip: 1, return end - col_index = get_col_index(col_name: col_name) num_hrs_in_year = Calendar.num_hours_in_year(@year) schedule_length = @schedules[col_name].length - min_per_item = 60.0 / (schedule_length / num_hrs_in_year) - - file_path = File.dirname(@output_schedules_path) - workflow_json = model.workflowJSON - file_paths = workflow_json.filePaths.map(&:to_s) - workflow_json.addFilePath(file_path) unless file_paths.include?(file_path) - - schedule_file = OpenStudio::Model::ScheduleFile.new(model, File.basename(@output_schedules_path)) - schedule_file.setName(col_name) - schedule_file.setColumnNumber(col_index + 1) - schedule_file.setRowstoSkipatTop(rows_to_skip) - schedule_file.setNumberofHoursofData(num_hrs_in_year.to_i) - schedule_file.setMinutesperItem(min_per_item.to_i) - schedule_file.setTranslateFileWithRelativePath(true) - Schedule.set_schedule_type_limits(model, schedule_file, schedule_type_limits_name) + schedule_file = Model.add_schedule_file( + model, + name: col_name, + file_path: File.basename(@output_schedules_path), + col_num: get_col_index(col_name: col_name) + 1, + rows_to_skip: rows_to_skip, + num_hours: num_hrs_in_year.to_i, + mins_per_item: (60.0 / (schedule_length / num_hrs_in_year)).to_i, + limits: schedule_type_limits_name + ) return schedule_file end diff --git a/HPXMLtoOpenStudio/resources/waterheater.rb b/HPXMLtoOpenStudio/resources/waterheater.rb index ba1d0d24ed..30040ee701 100644 --- a/HPXMLtoOpenStudio/resources/waterheater.rb +++ b/HPXMLtoOpenStudio/resources/waterheater.rb @@ -150,35 +150,37 @@ def self.apply_heatpump(model, runner, spaces, hpxml_bldg, hpxml_header, water_h hpwh_tamb = Model.add_schedule_constant( model, name: "#{obj_name} Tamb act", - value: 23 + value: 23, + limits: EPlus::ScheduleTypeLimitsTemperature ) hpwh_rhamb = Model.add_schedule_constant( model, name: "#{obj_name} RHamb act", - value: 0.5 + value: 0.5, + limits: EPlus::ScheduleTypeLimitsFraction ) # Note: These get overwritten by EMS later, see HPWH Control program top_element_sp = Model.add_schedule_constant( model, name: "#{obj_name} TopElementSetpoint", - value: nil + value: nil, + limits: EPlus::ScheduleTypeLimitsTemperature ) bottom_element_sp = Model.add_schedule_constant( model, name: "#{obj_name} BottomElementSetpoint", - value: nil + value: nil, + limits: EPlus::ScheduleTypeLimitsTemperature ) setpoint_schedule = nil 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::Columns[:WaterHeaterSetpoint].name) + setpoint_schedule = schedules_file.create_schedule_file(model, col_name: SchedulesFile::Columns[:WaterHeaterSetpoint].name, schedule_type_limits_name: EPlus::ScheduleTypeLimitsTemperature) if not setpoint_schedule.nil? - Schedule.set_schedule_type_limits(model, setpoint_schedule, EPlus::ScheduleTypeLimitsTemperature) - # Actuated schedule control_setpoint_schedule = ScheduleConstant.new(model, "#{obj_name} ControlSetpoint", 0.0, EPlus::ScheduleTypeLimitsTemperature, unavailable_periods: unavailable_periods) control_setpoint_schedule = control_setpoint_schedule.schedule @@ -310,7 +312,8 @@ def self.apply_combi(model, runner, spaces, hpxml_bldg, hpxml_header, water_heat source_stp_sch = Model.add_schedule_constant( model, name: "#{obj_name_combi} Source Spt", - value: boiler_heating_spt + value: boiler_heating_spt, + limits: EPlus::ScheduleTypeLimitsTemperature ) # reset dhw boiler setpoint boiler_spt_mngr.to_SetpointManagerScheduled.get.setSchedule(source_stp_sch) @@ -1332,13 +1335,11 @@ def self.add_hpwh_control_program(model, runner, obj_name, amb_temp_sensor, hpwh op_mode_schedule = nil if not schedules_file.nil? - op_mode_schedule = schedules_file.create_schedule_file(model, col_name: SchedulesFile::Columns[:WaterHeaterOperatingMode].name) + op_mode_schedule = schedules_file.create_schedule_file(model, col_name: SchedulesFile::Columns[:WaterHeaterOperatingMode].name, schedule_type_limits_name: EPlus::ScheduleTypeLimitsFraction) end # Sensor on op_mode_schedule if not op_mode_schedule.nil? - Schedule.set_schedule_type_limits(model, op_mode_schedule, EPlus::ScheduleTypeLimitsFraction) - op_mode_sensor = Model.add_ems_sensor( model, name: "#{obj_name} op_mode", @@ -1533,7 +1534,8 @@ def self.add_desuperheater(model, runner, water_heating_system, tank, loc_space, new_schedule = Model.add_schedule_constant( model, name: "#{desuperheater_name} setpoint schedule", - value: dsh_setpoint + value: dsh_setpoint, + limits: EPlus::ScheduleTypeLimitsTemperature ) # create a desuperheater object @@ -2192,7 +2194,8 @@ def self.create_new_loop(model, t_set_c, eri_version, unit_multiplier) temp_schedule = Model.add_schedule_constant( model, name: 'dhw temp', - value: t_set_c + value: t_set_c, + limits: EPlus::ScheduleTypeLimitsTemperature ) setpoint_manager = OpenStudio::Model::SetpointManagerScheduled.new(model, temp_schedule) setpoint_manager.addToNode(loop.supplyOutletNode) From edf3d2df7091bcc26f1e5f52ab40b29ee8621997 Mon Sep 17 00:00:00 2001 From: Scott Horowitz Date: Fri, 4 Oct 2024 21:30:24 -0600 Subject: [PATCH 02/11] update_measures --- HPXMLtoOpenStudio/measure.xml | 22 +++++++++++----------- HPXMLtoOpenStudio/resources/schedules.rb | 4 ++-- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/HPXMLtoOpenStudio/measure.xml b/HPXMLtoOpenStudio/measure.xml index 5f8ffc105d..d6fed4d037 100644 --- a/HPXMLtoOpenStudio/measure.xml +++ b/HPXMLtoOpenStudio/measure.xml @@ -3,8 +3,8 @@ 3.1 hpxm_lto_openstudio b1543b30-9465-45ff-ba04-1d1f85e763bc - 2ecbdcc0-d0e3-4c8f-b8f8-a839e9bdbee1 - 2024-10-04T17:02:56Z + c21de2f9-bf48-473d-bc0d-0f157851b1b1 + 2024-10-05T03:30:05Z D8922A73 HPXMLtoOpenStudio HPXML to OpenStudio Translator @@ -189,7 +189,7 @@ airflow.rb rb resource - AAA32BAD + 968E2184 battery.rb @@ -213,7 +213,7 @@ constructions.rb rb resource - 5D07F8B2 + B3B897EB data/Xing_okstate_0664D_13659_Table_A-3.csv @@ -345,13 +345,13 @@ geometry.rb rb resource - 7E3D612D + 6C147EFE hotwater_appliances.rb rb resource - E9F876DA + 3D172FC9 hpxml.rb @@ -387,7 +387,7 @@ hvac.rb rb resource - 3F8A3A86 + 4E2589F0 hvac_sizing.rb @@ -399,7 +399,7 @@ internal_gains.rb rb resource - 94B4EA05 + 9351BDC1 lighting.rb @@ -447,7 +447,7 @@ model.rb rb resource - 6933774F + D5AF5CAC output.rb @@ -591,7 +591,7 @@ schedules.rb rb resource - B73029E3 + 00395716 simcontrols.rb @@ -627,7 +627,7 @@ waterheater.rb rb resource - 1E7D40B1 + 448D5577 weather.rb diff --git a/HPXMLtoOpenStudio/resources/schedules.rb b/HPXMLtoOpenStudio/resources/schedules.rb index f7a6f4d692..0f895a2886 100644 --- a/HPXMLtoOpenStudio/resources/schedules.rb +++ b/HPXMLtoOpenStudio/resources/schedules.rb @@ -663,7 +663,7 @@ def self.set_unavailable_periods(schedule, sch_name, unavailable_periods, year) return if unavailable_periods.nil? # Add off rule(s), will override previous rules - unavailable_periods.each_with_index do |period, _i| + unavailable_periods.each do |period| # Special Values # FUTURE: Assign an object type to the schedules and use that to determine what # kind of schedule each is, rather than looking at object names. That would @@ -791,7 +791,7 @@ def self.create_ruleset_from_daily_season(model, sch_name, values) i += 1 next unless value != start_value || i == values.length - rule = Model.add_schedule_ruleset_rule( + Model.add_schedule_ruleset_rule( schedule, start_date: start_date, end_date: OpenStudio::Date::fromDayOfYear(i - 1, year), From 858350a9ce6ed19878f3651813bbcc973db8c206 Mon Sep 17 00:00:00 2001 From: Scott Horowitz Date: Fri, 4 Oct 2024 21:35:31 -0600 Subject: [PATCH 03/11] Bugfixes. --- HPXMLtoOpenStudio/measure.xml | 8 ++++---- HPXMLtoOpenStudio/resources/model.rb | 2 +- HPXMLtoOpenStudio/resources/waterheater.rb | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/HPXMLtoOpenStudio/measure.xml b/HPXMLtoOpenStudio/measure.xml index d6fed4d037..68b97cd5ce 100644 --- a/HPXMLtoOpenStudio/measure.xml +++ b/HPXMLtoOpenStudio/measure.xml @@ -3,8 +3,8 @@ 3.1 hpxm_lto_openstudio b1543b30-9465-45ff-ba04-1d1f85e763bc - c21de2f9-bf48-473d-bc0d-0f157851b1b1 - 2024-10-05T03:30:05Z + d874ae69-6285-488d-9f4a-9483db5dd0f7 + 2024-10-05T03:35:10Z D8922A73 HPXMLtoOpenStudio HPXML to OpenStudio Translator @@ -447,7 +447,7 @@ model.rb rb resource - D5AF5CAC + EB33A522 output.rb @@ -627,7 +627,7 @@ waterheater.rb rb resource - 448D5577 + 31337FBC weather.rb diff --git a/HPXMLtoOpenStudio/resources/model.rb b/HPXMLtoOpenStudio/resources/model.rb index e07ce7b7f7..053b263046 100644 --- a/HPXMLtoOpenStudio/resources/model.rb +++ b/HPXMLtoOpenStudio/resources/model.rb @@ -583,7 +583,7 @@ def self.add_schedule_ruleset_rule(schedule, start_date:, end_date:, apply_to_da # Allow for either 0-based or 1-based array for now # FUTURE: Restrict to 0-based - if (not hourly_values.is_a? Array) || (hourly_values.size != 24) || (hourly_values.size != 25) + if (not hourly_values.is_a? Array) || (hourly_values.size != 24 && hourly_values.size != 25) fail 'Unexpected hourly_values.' end diff --git a/HPXMLtoOpenStudio/resources/waterheater.rb b/HPXMLtoOpenStudio/resources/waterheater.rb index 30040ee701..0c2f1ddaba 100644 --- a/HPXMLtoOpenStudio/resources/waterheater.rb +++ b/HPXMLtoOpenStudio/resources/waterheater.rb @@ -2195,7 +2195,7 @@ def self.create_new_loop(model, t_set_c, eri_version, unit_multiplier) model, name: 'dhw temp', value: t_set_c, - limits: EPlus::ScheduleTypeLimitsTemperature + limits: nil ) setpoint_manager = OpenStudio::Model::SetpointManagerScheduled.new(model, temp_schedule) setpoint_manager.addToNode(loop.supplyOutletNode) From ee45a26d376481bd7a0c810676ef045a1bdc0984 Mon Sep 17 00:00:00 2001 From: Scott Horowitz Date: Fri, 4 Oct 2024 21:42:34 -0600 Subject: [PATCH 04/11] Bugfix. --- HPXMLtoOpenStudio/measure.xml | 6 +++--- HPXMLtoOpenStudio/resources/schedules.rb | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/HPXMLtoOpenStudio/measure.xml b/HPXMLtoOpenStudio/measure.xml index 68b97cd5ce..53f202b798 100644 --- a/HPXMLtoOpenStudio/measure.xml +++ b/HPXMLtoOpenStudio/measure.xml @@ -3,8 +3,8 @@ 3.1 hpxm_lto_openstudio b1543b30-9465-45ff-ba04-1d1f85e763bc - d874ae69-6285-488d-9f4a-9483db5dd0f7 - 2024-10-05T03:35:10Z + cbaa592e-636c-49e2-91f2-7adebc96285e + 2024-10-05T03:42:23Z D8922A73 HPXMLtoOpenStudio HPXML to OpenStudio Translator @@ -591,7 +591,7 @@ schedules.rb rb resource - 00395716 + 9B7CFB4D simcontrols.rb diff --git a/HPXMLtoOpenStudio/resources/schedules.rb b/HPXMLtoOpenStudio/resources/schedules.rb index 0f895a2886..29f1a9b852 100644 --- a/HPXMLtoOpenStudio/resources/schedules.rb +++ b/HPXMLtoOpenStudio/resources/schedules.rb @@ -1210,7 +1210,7 @@ def create_schedule_file(model, col_name:, rows_to_skip: 1, schedule_file = Model.add_schedule_file( model, name: col_name, - file_path: File.basename(@output_schedules_path), + file_path: @output_schedules_path, col_num: get_col_index(col_name: col_name) + 1, rows_to_skip: rows_to_skip, num_hours: num_hrs_in_year.to_i, From f6017611e80f331ce63e6a6644f573815d070a93 Mon Sep 17 00:00:00 2001 From: Scott Horowitz Date: Fri, 4 Oct 2024 21:50:13 -0600 Subject: [PATCH 05/11] Bugfix. --- HPXMLtoOpenStudio/measure.xml | 6 +++--- HPXMLtoOpenStudio/resources/hvac.rb | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/HPXMLtoOpenStudio/measure.xml b/HPXMLtoOpenStudio/measure.xml index 53f202b798..97293ee0be 100644 --- a/HPXMLtoOpenStudio/measure.xml +++ b/HPXMLtoOpenStudio/measure.xml @@ -3,8 +3,8 @@ 3.1 hpxm_lto_openstudio b1543b30-9465-45ff-ba04-1d1f85e763bc - cbaa592e-636c-49e2-91f2-7adebc96285e - 2024-10-05T03:42:23Z + 31166cea-42c7-4143-991c-abc8ee2ef483 + 2024-10-05T03:49:12Z D8922A73 HPXMLtoOpenStudio HPXML to OpenStudio Translator @@ -387,7 +387,7 @@ hvac.rb rb resource - 4E2589F0 + 4DAA4792 hvac_sizing.rb diff --git a/HPXMLtoOpenStudio/resources/hvac.rb b/HPXMLtoOpenStudio/resources/hvac.rb index 4eebf37c44..0323d5e62c 100644 --- a/HPXMLtoOpenStudio/resources/hvac.rb +++ b/HPXMLtoOpenStudio/resources/hvac.rb @@ -1242,7 +1242,7 @@ def self.apply_dehumidifiers(runner, model, spaces, hpxml_bldg, hpxml_header) model, name: "#{obj_name} rh setpoint", value: rh_setpoint, - limits: EPlus::ScheduleTypeLimitsFraction + limits: nil ) capacity_curve = Model.add_curve_biquadratic( From 7e241ad34e0b950cd9007c94991d6038f1200161 Mon Sep 17 00:00:00 2001 From: Scott Horowitz Date: Fri, 4 Oct 2024 22:07:55 -0600 Subject: [PATCH 06/11] Bugfix. --- HPXMLtoOpenStudio/measure.xml | 6 +++--- HPXMLtoOpenStudio/resources/schedules.rb | 18 +++++++++--------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/HPXMLtoOpenStudio/measure.xml b/HPXMLtoOpenStudio/measure.xml index 97293ee0be..62a9b91f0b 100644 --- a/HPXMLtoOpenStudio/measure.xml +++ b/HPXMLtoOpenStudio/measure.xml @@ -3,8 +3,8 @@ 3.1 hpxm_lto_openstudio b1543b30-9465-45ff-ba04-1d1f85e763bc - 31166cea-42c7-4143-991c-abc8ee2ef483 - 2024-10-05T03:49:12Z + 5ae03fb1-a496-41f9-8da5-4e85a23550d1 + 2024-10-05T04:07:26Z D8922A73 HPXMLtoOpenStudio HPXML to OpenStudio Translator @@ -591,7 +591,7 @@ schedules.rb rb resource - 9B7CFB4D + 1F088023 simcontrols.rb diff --git a/HPXMLtoOpenStudio/resources/schedules.rb b/HPXMLtoOpenStudio/resources/schedules.rb index 29f1a9b852..3244d0c2d4 100644 --- a/HPXMLtoOpenStudio/resources/schedules.rb +++ b/HPXMLtoOpenStudio/resources/schedules.rb @@ -699,7 +699,7 @@ def self.set_unavailable_periods(schedule, sch_name, unavailable_periods, year) schedule, start_date: date_s, end_date: date_e, - hourly_values: [0..23].map { |h| (h < period.begin_hour) || (h >= period.end_hour) ? begin_day_schedule.getValue(OpenStudio::Time.new(0, h + 1, 0, 0)) : value } + hourly_values: (0..23).map { |h| (h < period.begin_hour) || (h >= period.end_hour) ? begin_day_schedule.getValue(OpenStudio::Time.new(0, h + 1, 0, 0)) : value } ) else # outage is at least 1 calendar day if period.begin_hour == 0 && period.end_hour == 24 # 1 outage rule @@ -707,7 +707,7 @@ def self.set_unavailable_periods(schedule, sch_name, unavailable_periods, year) schedule, start_date: date_s, end_date: date_e, - hourly_values: [h] * 24 + hourly_values: [value] * 24 ) elsif (period.begin_hour == 0 && period.end_hour != 24) || (period.begin_hour != 0 && period.end_hour == 24) # 2 outage rules if period.begin_hour == 0 && period.end_hour != 24 @@ -716,7 +716,7 @@ def self.set_unavailable_periods(schedule, sch_name, unavailable_periods, year) schedule, start_date: date_e, end_date: date_e, - hourly_values: [0..23].map { |h| (h >= period.end_hour) ? end_day_schedule.getValue(OpenStudio::Time.new(0, h + 1, 0, 0)) : value } + hourly_values: (0..23).map { |h| (h >= period.end_hour) ? end_day_schedule.getValue(OpenStudio::Time.new(0, h + 1, 0, 0)) : value } ) # all other days @@ -724,7 +724,7 @@ def self.set_unavailable_periods(schedule, sch_name, unavailable_periods, year) schedule, start_date: date_s, end_date: OpenStudio::Date::fromDayOfYear(day_e - 1, year), - hourly_values: [h] * 24 + hourly_values: [value] * 24 ) elsif period.begin_hour != 0 && period.end_hour == 24 # first day @@ -732,7 +732,7 @@ def self.set_unavailable_periods(schedule, sch_name, unavailable_periods, year) schedule, start_date: date_s, end_date: date_s, - hourly_values: [0..23].map { |h| (h < period.begin_hour) ? begin_day_schedule.getValue(OpenStudio::Time.new(0, h + 1, 0, 0)) : value } + hourly_values: (0..23).map { |h| (h < period.begin_hour) ? begin_day_schedule.getValue(OpenStudio::Time.new(0, h + 1, 0, 0)) : value } ) # all other days @@ -740,7 +740,7 @@ def self.set_unavailable_periods(schedule, sch_name, unavailable_periods, year) schedule, start_date: OpenStudio::Date::fromDayOfYear(day_s + 1, year), end_date: date_e, - hourly_values: [h] * 24 + hourly_values: [value] * 24 ) end else # 3 outage rules @@ -749,7 +749,7 @@ def self.set_unavailable_periods(schedule, sch_name, unavailable_periods, year) schedule, start_date: date_s, end_date: date_s, - hourly_values: [0..23].map { |h| (h < period.begin_hour) ? begin_day_schedule.getValue(OpenStudio::Time.new(0, h + 1, 0, 0)) : value } + hourly_values: (0..23).map { |h| (h < period.begin_hour) ? begin_day_schedule.getValue(OpenStudio::Time.new(0, h + 1, 0, 0)) : value } ) # all other days @@ -757,7 +757,7 @@ def self.set_unavailable_periods(schedule, sch_name, unavailable_periods, year) schedule, start_date: OpenStudio::Date::fromDayOfYear(day_s + 1, year), end_date: OpenStudio::Date::fromDayOfYear(day_e - 1, year), - hourly_values: [h] * 24 + hourly_values: [value] * 24 ) # last day @@ -765,7 +765,7 @@ def self.set_unavailable_periods(schedule, sch_name, unavailable_periods, year) schedule, start_date: date_e, end_date: date_e, - hourly_values: [0..23].map { |h| (h >= period.end_hour) ? end_day_schedule.getValue(OpenStudio::Time.new(0, h + 1, 0, 0)) : value } + hourly_values: (0..23).map { |h| (h >= period.end_hour) ? end_day_schedule.getValue(OpenStudio::Time.new(0, h + 1, 0, 0)) : value } ) end end From 1043fbf38ecc33178c83191460ab74158fcaabb1 Mon Sep 17 00:00:00 2001 From: Scott Horowitz Date: Fri, 4 Oct 2024 22:28:53 -0600 Subject: [PATCH 07/11] Bugfix, simplify. --- HPXMLtoOpenStudio/measure.xml | 16 ++++++++-------- HPXMLtoOpenStudio/resources/geometry.rb | 3 +-- .../resources/hotwater_appliances.rb | 3 +-- HPXMLtoOpenStudio/resources/hvac.rb | 3 +-- HPXMLtoOpenStudio/resources/internal_gains.rb | 3 +-- HPXMLtoOpenStudio/resources/model.rb | 6 +++--- HPXMLtoOpenStudio/resources/waterheater.rb | 3 +-- 7 files changed, 16 insertions(+), 21 deletions(-) diff --git a/HPXMLtoOpenStudio/measure.xml b/HPXMLtoOpenStudio/measure.xml index 62a9b91f0b..6402ab65d2 100644 --- a/HPXMLtoOpenStudio/measure.xml +++ b/HPXMLtoOpenStudio/measure.xml @@ -3,8 +3,8 @@ 3.1 hpxm_lto_openstudio b1543b30-9465-45ff-ba04-1d1f85e763bc - 5ae03fb1-a496-41f9-8da5-4e85a23550d1 - 2024-10-05T04:07:26Z + 33102396-2989-4820-8fb7-0aa399d80344 + 2024-10-05T04:28:40Z D8922A73 HPXMLtoOpenStudio HPXML to OpenStudio Translator @@ -345,13 +345,13 @@ geometry.rb rb resource - 6C147EFE + 18098922 hotwater_appliances.rb rb resource - 3D172FC9 + 4A5DFE48 hpxml.rb @@ -387,7 +387,7 @@ hvac.rb rb resource - 4DAA4792 + D78CE661 hvac_sizing.rb @@ -399,7 +399,7 @@ internal_gains.rb rb resource - 9351BDC1 + 94B4EA05 lighting.rb @@ -447,7 +447,7 @@ model.rb rb resource - EB33A522 + 5D3674E4 output.rb @@ -627,7 +627,7 @@ waterheater.rb rb resource - 31337FBC + 4A4D4D35 weather.rb diff --git a/HPXMLtoOpenStudio/resources/geometry.rb b/HPXMLtoOpenStudio/resources/geometry.rb index 36965be122..9e0086c4a0 100644 --- a/HPXMLtoOpenStudio/resources/geometry.rb +++ b/HPXMLtoOpenStudio/resources/geometry.rb @@ -1802,8 +1802,7 @@ def self.get_space_temperature_schedule(model, location, spaces) sch = Model.add_schedule_constant( model, name: location, - value: nil, - limits: EPlus::ScheduleTypeLimitsTemperature + value: nil ) sch.additionalProperties.setFeature('ObjectType', location) diff --git a/HPXMLtoOpenStudio/resources/hotwater_appliances.rb b/HPXMLtoOpenStudio/resources/hotwater_appliances.rb index 76fad215d6..124cc2bed4 100644 --- a/HPXMLtoOpenStudio/resources/hotwater_appliances.rb +++ b/HPXMLtoOpenStudio/resources/hotwater_appliances.rb @@ -938,8 +938,7 @@ def self.get_fridge_or_freezer_coefficients_schedule(model, col_name, obj_name, schedule = Model.add_schedule_constant( model, name: "#{obj_name} schedule", - value: nil, - limits: nil + value: nil ) if not loc_space.nil? diff --git a/HPXMLtoOpenStudio/resources/hvac.rb b/HPXMLtoOpenStudio/resources/hvac.rb index 0323d5e62c..10999c07cd 100644 --- a/HPXMLtoOpenStudio/resources/hvac.rb +++ b/HPXMLtoOpenStudio/resources/hvac.rb @@ -1241,8 +1241,7 @@ def self.apply_dehumidifiers(runner, model, spaces, hpxml_bldg, hpxml_header) rh_setpoint_sch = Model.add_schedule_constant( model, name: "#{obj_name} rh setpoint", - value: rh_setpoint, - limits: nil + value: rh_setpoint ) capacity_curve = Model.add_curve_biquadratic( diff --git a/HPXMLtoOpenStudio/resources/internal_gains.rb b/HPXMLtoOpenStudio/resources/internal_gains.rb index ab957c94f5..3480915acd 100644 --- a/HPXMLtoOpenStudio/resources/internal_gains.rb +++ b/HPXMLtoOpenStudio/resources/internal_gains.rb @@ -51,8 +51,7 @@ def self.apply_building_occupants(runner, model, hpxml_bldg, hpxml_header, space activity_sch = Model.add_schedule_constant( model, name: "#{Constants::ObjectTypeOccupants} activity schedule", - value: activity_per_person, - limits: nil + value: activity_per_person ) # Add people definition for the occ diff --git a/HPXMLtoOpenStudio/resources/model.rb b/HPXMLtoOpenStudio/resources/model.rb index 053b263046..f4096fec30 100644 --- a/HPXMLtoOpenStudio/resources/model.rb +++ b/HPXMLtoOpenStudio/resources/model.rb @@ -544,7 +544,7 @@ def self.add_curve_quint_linear(model, name:, coeff:) # @param value [Double] Constant value for the year # @param limits [String] Data type for the values contained in the schedule (EPlus::ScheduleTypeXXX) # @return [OpenStudio::Model::ScheduleConstant] The model object - def self.add_schedule_constant(model, name:, value:, limits:) + def self.add_schedule_constant(model, name:, value:, limits: nil) sch = OpenStudio::Model::ScheduleConstant.new(model) sch.setName(name) sch.setValue(value) unless value.nil? # EMS-actuated if nil @@ -558,7 +558,7 @@ def self.add_schedule_constant(model, name:, value:, limits:) # @param name [String] Name for the OpenStudio object # @param limits [String] Data type for the values contained in the schedule (EPlus::ScheduleTypeXXX) # @return [OpenStudio::Model::ScheduleRuleset] The model object - def self.add_schedule_ruleset(model, name:, limits:) + def self.add_schedule_ruleset(model, name:, limits: nil) sch = OpenStudio::Model::ScheduleRuleset.new(model) sch.setName(name) sch.defaultDaySchedule.setName("#{name} default day") @@ -635,7 +635,7 @@ def self.add_schedule_ruleset_rule(schedule, start_date:, end_date:, apply_to_da # @param mins_per_item [Integer] Number of minutes associated with each line of the file # @param limits [String] Data type for the values contained in the schedule (EPlus::ScheduleTypeXXX) # @return [OpenStudio::Model::ScheduleFile] The model object - def self.add_schedule_file(model, name:, file_path:, col_num:, rows_to_skip:, num_hours:, mins_per_item:, limits:) + def self.add_schedule_file(model, name:, file_path:, col_num:, rows_to_skip:, num_hours:, mins_per_item:, limits: nil) file_dir = File.dirname(file_path) if not model.workflowJSON.filePaths.map(&:to_s).include?(file_dir) model.workflowJSON.addFilePath(file_dir) diff --git a/HPXMLtoOpenStudio/resources/waterheater.rb b/HPXMLtoOpenStudio/resources/waterheater.rb index 0c2f1ddaba..daf609c5f8 100644 --- a/HPXMLtoOpenStudio/resources/waterheater.rb +++ b/HPXMLtoOpenStudio/resources/waterheater.rb @@ -2194,8 +2194,7 @@ def self.create_new_loop(model, t_set_c, eri_version, unit_multiplier) temp_schedule = Model.add_schedule_constant( model, name: 'dhw temp', - value: t_set_c, - limits: nil + value: t_set_c ) setpoint_manager = OpenStudio::Model::SetpointManagerScheduled.new(model, temp_schedule) setpoint_manager.addToNode(loop.supplyOutletNode) From 100534ab8f984a0d297eb4e9914b12ca492fdcbf Mon Sep 17 00:00:00 2001 From: Scott Horowitz Date: Sat, 5 Oct 2024 01:38:48 -0600 Subject: [PATCH 08/11] Bugfix. --- HPXMLtoOpenStudio/measure.xml | 8 ++++---- HPXMLtoOpenStudio/resources/geometry.rb | 3 ++- HPXMLtoOpenStudio/resources/model.rb | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/HPXMLtoOpenStudio/measure.xml b/HPXMLtoOpenStudio/measure.xml index 6402ab65d2..e26ad1e829 100644 --- a/HPXMLtoOpenStudio/measure.xml +++ b/HPXMLtoOpenStudio/measure.xml @@ -3,8 +3,8 @@ 3.1 hpxm_lto_openstudio b1543b30-9465-45ff-ba04-1d1f85e763bc - 33102396-2989-4820-8fb7-0aa399d80344 - 2024-10-05T04:28:40Z + 108ac0f4-c659-4ec7-aa71-6b2f14f63f92 + 2024-10-05T07:38:26Z D8922A73 HPXMLtoOpenStudio HPXML to OpenStudio Translator @@ -345,7 +345,7 @@ geometry.rb rb resource - 18098922 + 6C147EFE hotwater_appliances.rb @@ -447,7 +447,7 @@ model.rb rb resource - 5D3674E4 + A578B92B output.rb diff --git a/HPXMLtoOpenStudio/resources/geometry.rb b/HPXMLtoOpenStudio/resources/geometry.rb index 9e0086c4a0..36965be122 100644 --- a/HPXMLtoOpenStudio/resources/geometry.rb +++ b/HPXMLtoOpenStudio/resources/geometry.rb @@ -1802,7 +1802,8 @@ def self.get_space_temperature_schedule(model, location, spaces) sch = Model.add_schedule_constant( model, name: location, - value: nil + value: nil, + limits: EPlus::ScheduleTypeLimitsTemperature ) sch.additionalProperties.setFeature('ObjectType', location) diff --git a/HPXMLtoOpenStudio/resources/model.rb b/HPXMLtoOpenStudio/resources/model.rb index f4096fec30..a30aacbbc5 100644 --- a/HPXMLtoOpenStudio/resources/model.rb +++ b/HPXMLtoOpenStudio/resources/model.rb @@ -676,7 +676,7 @@ def self.add_schedule_type_limits(model, schedule:, limits:) stl.setUpperLimitValue(1) stl.setNumericType('Discrete') elsif limits == EPlus::ScheduleTypeLimitsTemperature - stl.setNumericType('Continuous') + stl.setUnitType('Temperature') else fail "Unexpected schedule type limits: #{limits}" end From b41ae3de172d3ccca53a1aebdeebe9ee61fc65ed Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sat, 5 Oct 2024 08:30:07 +0000 Subject: [PATCH 09/11] Latest results. --- workflow/tests/base_results/results_simulations_bills.csv | 4 ++-- workflow/tests/base_results/results_simulations_energy.csv | 4 ++-- workflow/tests/base_results/results_simulations_loads.csv | 4 ++-- workflow/tests/base_results/results_simulations_misc.csv | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/workflow/tests/base_results/results_simulations_bills.csv b/workflow/tests/base_results/results_simulations_bills.csv index 7af179c1e5..e4dc605751 100644 --- a/workflow/tests/base_results/results_simulations_bills.csv +++ b/workflow/tests/base_results/results_simulations_bills.csv @@ -204,7 +204,7 @@ base-hvac-air-to-air-heat-pump-2-speed-research-features.xml,3065.84,144.0,2921. base-hvac-air-to-air-heat-pump-2-speed.xml,1670.23,144.0,1526.23,0.0,1670.23,0.0,0.0,0.0,0.0,0.0,0.0,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-hvac-air-to-air-heat-pump-var-speed-autosize-maxload.xml,1622.42,144.0,1478.42,0.0,1622.42,0.0,0.0,0.0,0.0,0.0,0.0,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-hvac-air-to-air-heat-pump-var-speed-backup-boiler-advanced-defrost.xml,1880.81,144.0,1424.72,0.0,1568.72,144.0,168.09,312.09,0.0,0.0,0.0,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-hvac-air-to-air-heat-pump-var-speed-backup-boiler-hvac-seasons.xml,1867.63,144.0,1419.54,0.0,1563.54,144.0,160.09,304.09,0.0,0.0,0.0,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-hvac-air-to-air-heat-pump-var-speed-backup-boiler-hvac-seasons.xml,1862.83,144.0,1419.45,0.0,1563.45,144.0,155.38,299.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,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, base-hvac-air-to-air-heat-pump-var-speed-backup-boiler-switchover-temperature.xml,1865.36,144.0,1372.75,0.0,1516.75,144.0,204.61,348.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,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, base-hvac-air-to-air-heat-pump-var-speed-backup-boiler.xml,1871.52,144.0,1423.37,0.0,1567.37,144.0,160.15,304.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,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, base-hvac-air-to-air-heat-pump-var-speed-backup-furnace-autosize-factor.xml,1833.11,144.0,1364.7,0.0,1508.7,144.0,180.41,324.41,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, @@ -326,7 +326,7 @@ base-hvac-room-ac-only-research-features.xml,1361.34,144.0,1217.34,0.0,1361.34,0 base-hvac-room-ac-only.xml,1422.98,144.0,1278.98,0.0,1422.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.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-hvac-room-ac-with-heating.xml,2061.47,144.0,1917.47,0.0,2061.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.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-hvac-room-ac-with-reverse-cycle.xml,1669.25,144.0,1525.25,0.0,1669.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.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-hvac-seasons.xml,1837.15,144.0,1301.8,0.0,1445.8,144.0,247.35,391.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.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-hvac-seasons.xml,1833.44,144.0,1301.48,0.0,1445.48,144.0,243.96,387.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.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-hvac-setpoints-daily-schedules.xml,1830.39,144.0,1285.24,0.0,1429.24,144.0,257.15,401.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.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-hvac-setpoints-daily-setbacks.xml,1816.78,144.0,1289.49,0.0,1433.49,144.0,239.29,383.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.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-hvac-setpoints.xml,1600.51,144.0,1225.24,0.0,1369.24,144.0,87.27,231.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.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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/workflow/tests/base_results/results_simulations_energy.csv b/workflow/tests/base_results/results_simulations_energy.csv index 7464647b52..97dcd5ec3f 100644 --- a/workflow/tests/base_results/results_simulations_energy.csv +++ b/workflow/tests/base_results/results_simulations_energy.csv @@ -204,7 +204,7 @@ base-hvac-air-to-air-heat-pump-2-speed-research-features.xml,78.01,78.01,78.01,7 base-hvac-air-to-air-heat-pump-2-speed.xml,41.93,41.93,41.93,41.93,0.0,0.0,0.0,0.0,0.0,0.0,7.764,0.961,0.296,0.019,2.245,0.493,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,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-hvac-air-to-air-heat-pump-var-speed-autosize-maxload.xml,40.616,40.616,40.616,40.616,0.0,0.0,0.0,0.0,0.0,0.0,8.198,0.134,0.0,0.0,2.052,0.081,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,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-hvac-air-to-air-heat-pump-var-speed-backup-boiler-advanced-defrost.xml,55.199,55.199,39.141,39.141,16.058,0.0,0.0,0.0,0.0,0.0,5.495,0.588,0.0,0.058,2.452,0.398,9.014,0.0,0.0,4.507,0.0,0.334,0.0,0.0,0.0,0.0,2.07,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,0.0,16.058,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-hvac-air-to-air-heat-pump-var-speed-backup-boiler-hvac-seasons.xml,54.292,54.292,38.999,38.999,15.293,0.0,0.0,0.0,0.0,0.0,5.378,0.581,0.0,0.058,2.436,0.396,9.015,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.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,0.0,15.293,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-hvac-air-to-air-heat-pump-var-speed-backup-boiler-hvac-seasons.xml,53.84,53.84,38.997,38.997,14.844,0.0,0.0,0.0,0.0,0.0,5.378,0.581,0.0,0.056,2.436,0.396,9.015,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.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,0.0,14.844,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-hvac-air-to-air-heat-pump-var-speed-backup-boiler-switchover-temperature.xml,57.26,57.26,37.713,37.713,19.547,0.0,0.0,0.0,0.0,0.0,4.255,0.389,0.0,0.071,2.452,0.398,9.015,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.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,0.0,19.547,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-hvac-air-to-air-heat-pump-var-speed-backup-boiler.xml,54.403,54.403,39.104,39.104,15.299,0.0,0.0,0.0,0.0,0.0,5.458,0.588,0.0,0.058,2.452,0.398,9.014,0.0,0.0,4.507,0.0,0.334,0.0,0.0,0.0,0.0,2.07,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,0.0,15.299,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-hvac-air-to-air-heat-pump-var-speed-backup-furnace-autosize-factor.xml,54.726,54.726,37.492,37.492,17.234,0.0,0.0,0.0,0.0,0.0,4.624,0.052,0.0,0.513,2.067,0.084,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,0.0,17.234,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 @@ -326,7 +326,7 @@ base-hvac-room-ac-only-research-features.xml,33.444,33.444,33.444,33.444,0.0,0.0 base-hvac-room-ac-only.xml,35.137,35.137,35.137,35.137,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,5.108,0.0,9.061,0.0,0.0,4.507,0.0,0.334,0.0,0.0,0.0,0.0,1.903,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,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-hvac-room-ac-with-heating.xml,52.679,52.679,52.679,52.679,0.0,0.0,0.0,0.0,0.0,0.0,17.271,0.0,0.0,0.0,5.256,0.0,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,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-hvac-room-ac-with-reverse-cycle.xml,41.903,41.903,41.903,41.903,0.0,0.0,0.0,0.0,0.0,0.0,7.658,0.0,0.053,0.0,4.041,0.0,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,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-hvac-seasons.xml,59.394,59.394,35.764,35.764,23.629,0.0,0.0,0.0,0.0,0.0,0.0,0.586,0.0,0.0,4.371,0.657,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.629,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-hvac-seasons.xml,59.061,59.061,35.756,35.756,23.305,0.0,0.0,0.0,0.0,0.0,0.0,0.578,0.0,0.0,4.371,0.657,9.014,0.0,0.0,4.507,0.0,0.334,0.0,0.0,0.0,0.0,2.07,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.305,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-hvac-setpoints-daily-schedules.xml,59.875,59.875,35.309,35.309,24.565,0.0,0.0,0.0,0.0,0.0,0.0,0.609,0.0,0.0,3.953,0.598,9.015,0.0,0.0,4.507,0.0,0.334,0.0,0.0,0.0,0.0,2.068,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,24.565,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-hvac-setpoints-daily-setbacks.xml,58.285,58.285,35.426,35.426,22.859,0.0,0.0,0.0,0.0,0.0,0.0,0.567,0.0,0.0,4.098,0.616,9.015,0.0,0.0,4.507,0.0,0.334,0.0,0.0,0.0,0.0,2.064,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.859,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-hvac-setpoints.xml,41.998,41.998,33.661,33.661,8.337,0.0,0.0,0.0,0.0,0.0,0.0,0.207,0.0,0.0,2.988,0.397,9.046,0.0,0.0,4.507,0.0,0.334,0.0,0.0,0.0,0.0,1.958,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.337,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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/workflow/tests/base_results/results_simulations_loads.csv b/workflow/tests/base_results/results_simulations_loads.csv index 3358c5e234..d17e4e0918 100644 --- a/workflow/tests/base_results/results_simulations_loads.csv +++ b/workflow/tests/base_results/results_simulations_loads.csv @@ -204,7 +204,7 @@ base-hvac-air-to-air-heat-pump-2-speed-research-features.xml,72.146,0.527,1.529, base-hvac-air-to-air-heat-pump-2-speed.xml,24.148,0.315,12.877,9.071,0.615,0.0,0.0,0.0,3.743,3.883,0.545,7.573,0.683,10.763,-13.574,0.0,0.0,0.0,8.368,-0.116,5.452,0.0,0.77,0.0,6.839,-8.475,-2.662,0.0,0.06,-0.188,-0.014,2.827,0.035,-0.633,10.839,0.0,0.0,0.0,-6.139,-0.112,-0.853,-3.882,-0.117,0.0,2.225,7.106,1.845 base-hvac-air-to-air-heat-pump-var-speed-autosize-maxload.xml,21.974,0.0,12.329,9.071,0.615,0.0,0.0,0.0,3.847,3.882,0.545,7.57,0.682,10.76,-13.574,0.0,0.0,0.0,8.363,-0.116,5.161,0.0,0.77,0.0,4.869,-8.475,-2.662,0.0,0.083,-0.188,-0.014,2.826,0.035,-0.633,10.839,0.0,0.0,0.0,-6.14,-0.112,-0.861,-3.881,-0.117,0.0,1.673,7.106,1.845 base-hvac-air-to-air-heat-pump-var-speed-backup-boiler-advanced-defrost.xml,29.603,11.42,15.796,9.071,0.616,0.0,0.0,0.0,3.54,3.9,0.548,7.558,0.686,10.822,-13.636,0.0,0.0,0.0,8.343,-0.128,6.992,0.0,0.772,0.0,11.05,-8.533,-2.68,0.0,-0.031,-0.163,-0.011,2.841,0.041,-0.546,10.777,0.0,0.0,0.0,-6.131,-0.124,-1.013,-3.829,-0.111,0.0,5.324,7.047,1.827 -base-hvac-air-to-air-heat-pump-var-speed-backup-boiler-hvac-seasons.xml,29.301,11.416,15.664,9.071,0.616,0.0,0.0,0.0,3.237,3.596,0.506,7.525,0.612,9.898,-12.635,0.0,0.0,0.0,8.256,-0.019,6.553,0.0,0.718,0.0,10.901,-7.712,-2.474,0.0,0.153,0.082,0.022,3.101,0.055,0.186,8.047,0.0,0.0,0.0,-4.058,-0.006,-0.546,-3.176,-0.036,0.0,5.277,5.301,1.326 +base-hvac-air-to-air-heat-pump-var-speed-backup-boiler-hvac-seasons.xml,28.983,11.078,15.664,9.071,0.616,0.0,0.0,0.0,3.231,3.589,0.506,7.478,0.611,9.888,-12.635,0.0,0.0,0.0,8.185,-0.053,6.53,0.0,0.717,0.0,10.82,-7.712,-2.474,0.0,0.153,0.082,0.022,3.101,0.055,0.186,8.047,0.0,0.0,0.0,-4.058,-0.006,-0.546,-3.176,-0.036,0.0,5.277,5.301,1.326 base-hvac-air-to-air-heat-pump-var-speed-backup-boiler-switchover-temperature.xml,28.759,14.615,15.806,9.071,0.616,0.0,0.0,0.0,3.493,3.82,0.535,7.388,0.656,10.391,-13.59,0.0,0.0,0.0,8.233,-0.032,6.81,0.0,0.751,0.0,10.037,-8.334,-2.611,0.0,-0.093,-0.234,-0.022,2.693,0.013,-0.952,10.823,0.0,0.0,0.0,-6.203,-0.029,-1.211,-3.828,-0.131,0.0,4.924,7.245,1.896 base-hvac-air-to-air-heat-pump-var-speed-backup-boiler.xml,29.603,11.42,15.796,9.071,0.616,0.0,0.0,0.0,3.54,3.9,0.548,7.558,0.686,10.822,-13.636,0.0,0.0,0.0,8.343,-0.128,6.992,0.0,0.772,0.0,11.05,-8.533,-2.68,0.0,-0.031,-0.163,-0.011,2.841,0.041,-0.546,10.777,0.0,0.0,0.0,-6.131,-0.124,-1.013,-3.829,-0.111,0.0,5.324,7.047,1.827 base-hvac-air-to-air-heat-pump-var-speed-backup-furnace-autosize-factor.xml,27.706,14.301,12.803,9.071,0.615,0.0,0.0,0.0,3.608,3.884,0.546,7.575,0.683,10.761,-13.574,0.0,0.0,0.0,8.373,-0.114,5.841,0.0,0.769,0.0,10.117,-8.472,-2.661,0.0,0.067,-0.188,-0.014,2.825,0.035,-0.638,10.839,0.0,0.0,0.0,-6.14,-0.11,-0.861,-3.882,-0.117,0.0,2.158,7.109,1.846 @@ -326,7 +326,7 @@ base-hvac-room-ac-only-research-features.xml,0.0,0.0,7.619,9.071,0.659,0.0,0.0,0 base-hvac-room-ac-only.xml,0.0,0.0,10.398,9.071,0.666,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.219,-0.152,-0.009,2.767,0.045,-0.542,10.592,0.0,0.0,0.0,-6.355,-0.119,-0.828,-3.753,-0.11,0.0,0.0,6.958,1.811 base-hvac-room-ac-with-heating.xml,17.257,0.0,10.74,9.071,0.615,0.0,0.0,0.0,4.108,3.88,0.545,7.563,0.682,10.754,-13.574,0.0,0.0,0.0,8.349,-0.116,5.08,0.0,0.77,0.0,0.0,-8.475,-2.662,0.0,0.18,-0.189,-0.014,2.824,0.035,-0.635,10.839,0.0,0.0,0.0,-6.144,-0.112,-0.865,-3.879,-0.116,0.0,0.0,7.106,1.845 base-hvac-room-ac-with-reverse-cycle.xml,17.258,0.053,10.74,9.071,0.615,0.0,0.0,0.0,4.108,3.88,0.545,7.563,0.682,10.754,-13.574,0.0,0.0,0.0,8.349,-0.116,5.08,0.0,0.77,0.0,0.0,-8.475,-2.662,0.0,0.18,-0.189,-0.014,2.824,0.035,-0.635,10.839,0.0,0.0,0.0,-6.144,-0.112,-0.865,-3.879,-0.116,0.0,0.0,7.106,1.845 -base-hvac-seasons.xml,22.326,0.0,13.628,9.071,0.615,0.0,0.0,0.0,3.529,3.596,0.507,7.525,0.612,9.907,-12.635,0.0,0.0,0.0,8.245,-0.023,4.928,0.0,0.72,0.0,5.285,-7.715,-2.475,0.0,0.236,0.081,0.022,3.099,0.054,0.187,8.047,0.0,0.0,0.0,-4.058,-0.008,-0.44,-3.188,-0.036,0.0,3.089,5.299,1.324 +base-hvac-seasons.xml,22.039,0.0,13.628,9.071,0.616,0.0,0.0,0.0,3.523,3.59,0.506,7.48,0.611,9.898,-12.635,0.0,0.0,0.0,8.177,-0.056,4.916,0.0,0.719,0.0,5.216,-7.715,-2.475,0.0,0.236,0.081,0.022,3.099,0.054,0.187,8.047,0.0,0.0,0.0,-4.058,-0.008,-0.44,-3.188,-0.036,0.0,3.089,5.299,1.324 base-hvac-setpoints-daily-schedules.xml,22.592,0.0,12.158,9.071,0.616,0.0,0.0,0.0,3.805,3.861,0.541,7.602,0.672,10.639,-13.646,0.0,0.0,0.0,8.854,-0.073,5.224,0.0,0.777,0.0,5.32,-8.488,-2.678,0.0,0.073,-0.182,-0.014,2.779,0.032,-0.667,10.768,0.0,0.0,0.0,-6.363,-0.083,-0.868,-4.381,-0.115,0.0,2.518,7.09,1.829 base-hvac-setpoints-daily-setbacks.xml,21.436,0.0,12.678,9.071,0.617,0.0,0.0,0.0,3.783,3.823,0.535,7.475,0.645,10.34,-13.901,0.0,0.0,0.0,8.476,0.033,5.099,0.0,0.77,0.0,4.989,-8.491,-2.682,0.0,0.058,-0.193,-0.017,2.8,0.011,-0.889,10.512,0.0,0.0,0.0,-6.2,0.032,-0.902,-4.233,-0.121,0.0,2.817,7.085,1.825 base-hvac-setpoints.xml,7.871,0.0,8.299,9.071,0.65,0.0,0.0,0.0,2.98,2.838,0.396,5.3,0.423,7.588,-13.122,0.0,0.0,0.0,5.694,-0.037,3.611,0.0,0.579,0.0,1.838,-7.994,-2.559,0.0,-0.169,-0.421,-0.046,2.579,-0.022,-1.33,11.291,0.0,0.0,0.0,-6.966,-0.037,-1.074,-6.646,-0.16,0.0,1.964,7.508,1.948 diff --git a/workflow/tests/base_results/results_simulations_misc.csv b/workflow/tests/base_results/results_simulations_misc.csv index bbd12ec0b1..6cc8d57be2 100644 --- a/workflow/tests/base_results/results_simulations_misc.csv +++ b/workflow/tests/base_results/results_simulations_misc.csv @@ -204,7 +204,7 @@ base-hvac-air-to-air-heat-pump-2-speed-research-features.xml,0.0,0.0,1354.7,998. base-hvac-air-to-air-heat-pump-2-speed.xml,0.0,0.0,1354.7,998.0,11171.6,2563.5,7067.1,3208.0,7067.1,24.675,17.153,0.0 base-hvac-air-to-air-heat-pump-var-speed-autosize-maxload.xml,0.0,0.0,1354.7,998.0,11171.6,2563.5,4175.1,2921.5,4175.1,22.454,15.609,0.0 base-hvac-air-to-air-heat-pump-var-speed-backup-boiler-advanced-defrost.xml,1.0,4.0,1354.7,998.0,11171.5,2563.5,3203.8,2926.5,3203.8,22.934,17.734,0.0 -base-hvac-air-to-air-heat-pump-var-speed-backup-boiler-hvac-seasons.xml,1.0,4.0,1354.7,998.0,11171.5,2563.5,3209.5,2994.7,3209.5,22.934,17.728,0.0 +base-hvac-air-to-air-heat-pump-var-speed-backup-boiler-hvac-seasons.xml,25.0,4.0,1354.7,998.0,11171.5,2563.5,3209.5,2994.7,3209.5,22.934,17.728,0.0 base-hvac-air-to-air-heat-pump-var-speed-backup-boiler-switchover-temperature.xml,160.0,4.0,1354.7,998.0,11171.6,2563.5,3297.3,3264.0,3297.3,31.627,17.728,0.0 base-hvac-air-to-air-heat-pump-var-speed-backup-boiler.xml,1.0,4.0,1354.7,998.0,11171.5,2563.5,3212.5,2926.5,3212.5,22.934,17.734,0.0 base-hvac-air-to-air-heat-pump-var-speed-backup-furnace-autosize-factor.xml,1.0,0.0,1354.7,998.0,11171.6,2563.5,3337.3,2938.8,3337.3,30.33,16.793,0.0 @@ -326,7 +326,7 @@ base-hvac-room-ac-only-research-features.xml,0.0,0.0,1354.7,998.0,11171.8,2563.6 base-hvac-room-ac-only.xml,0.0,0.0,1354.7,998.0,11171.5,2563.5,1924.5,3451.5,3451.5,0.0,11.827,0.0 base-hvac-room-ac-with-heating.xml,0.0,0.0,1354.7,998.0,11171.6,2563.5,5887.1,3815.0,5887.1,16.748,12.045,0.0 base-hvac-room-ac-with-reverse-cycle.xml,0.0,0.0,1354.7,998.0,11171.6,2563.5,4859.0,3364.3,4859.0,16.748,12.045,0.0 -base-hvac-seasons.xml,0.0,0.0,1354.7,998.0,11171.5,2563.5,2082.5,3485.7,3485.7,23.71,18.736,0.0 +base-hvac-seasons.xml,24.0,0.0,1354.7,998.0,11171.5,2563.5,2082.5,3485.7,3485.7,23.71,18.736,0.0 base-hvac-setpoints-daily-schedules.xml,103.0,39.0,1354.7,998.0,11171.5,2563.5,2123.8,3728.5,3728.5,35.224,21.227,0.0 base-hvac-setpoints-daily-setbacks.xml,0.0,12.0,1354.7,998.0,11171.6,2563.5,2090.6,3873.9,3873.9,32.297,21.204,0.0 base-hvac-setpoints.xml,0.0,0.0,1354.7,998.0,11171.5,2563.5,2032.2,3206.1,3206.1,18.069,15.967,0.0 From 72dab1d090f239568459be3de6063a6074143429 Mon Sep 17 00:00:00 2001 From: Scott Horowitz Date: Sat, 5 Oct 2024 12:14:19 -0600 Subject: [PATCH 10/11] Bugfix for season schedule. Misc code cleanup. --- HPXMLtoOpenStudio/measure.xml | 20 +++-- HPXMLtoOpenStudio/resources/airflow.rb | 3 +- HPXMLtoOpenStudio/resources/hvac.rb | 2 +- HPXMLtoOpenStudio/resources/schedules.rb | 47 ++++++----- HPXMLtoOpenStudio/resources/waterheater.rb | 95 +++++++--------------- HPXMLtoOpenStudio/tests/test_schedules.rb | 18 ++-- 6 files changed, 76 insertions(+), 109 deletions(-) diff --git a/HPXMLtoOpenStudio/measure.xml b/HPXMLtoOpenStudio/measure.xml index e26ad1e829..4fc0c7516b 100644 --- a/HPXMLtoOpenStudio/measure.xml +++ b/HPXMLtoOpenStudio/measure.xml @@ -3,8 +3,8 @@ 3.1 hpxm_lto_openstudio b1543b30-9465-45ff-ba04-1d1f85e763bc - 108ac0f4-c659-4ec7-aa71-6b2f14f63f92 - 2024-10-05T07:38:26Z + 1424b04d-aae3-4360-9d50-3324d0babb33 + 2024-10-05T18:13:33Z D8922A73 HPXMLtoOpenStudio HPXML to OpenStudio Translator @@ -189,7 +189,7 @@ airflow.rb rb resource - 968E2184 + CA1394A8 battery.rb @@ -387,7 +387,7 @@ hvac.rb rb resource - D78CE661 + CEDAF4B3 hvac_sizing.rb @@ -591,7 +591,7 @@ schedules.rb rb resource - 1F088023 + BB101800 simcontrols.rb @@ -627,7 +627,7 @@ waterheater.rb rb resource - 4A4D4D35 + 790B832E weather.rb @@ -647,6 +647,12 @@ resource 93120E27 + + in.schedules.csv + csv + test + C8EBFF38 + test_airflow.rb rb @@ -723,7 +729,7 @@ test_schedules.rb rb test - 703BFE7A + 62B8CE90 test_simcontrols.rb diff --git a/HPXMLtoOpenStudio/resources/airflow.rb b/HPXMLtoOpenStudio/resources/airflow.rb index bb3416c664..1c525d38e6 100644 --- a/HPXMLtoOpenStudio/resources/airflow.rb +++ b/HPXMLtoOpenStudio/resources/airflow.rb @@ -660,8 +660,7 @@ def self.create_nv_and_whf_avail_sch(model, obj_name, num_days_per_week, unavail hourly_values: [1] * 24 ) - year = model.getYearDescription.assumedYear - Schedule.set_unavailable_periods(avail_sch, sch_name, unavailable_periods, year) + Schedule.set_unavailable_periods(model, avail_sch, sch_name, unavailable_periods) return avail_sch end diff --git a/HPXMLtoOpenStudio/resources/hvac.rb b/HPXMLtoOpenStudio/resources/hvac.rb index 10999c07cd..a690a86e4c 100644 --- a/HPXMLtoOpenStudio/resources/hvac.rb +++ b/HPXMLtoOpenStudio/resources/hvac.rb @@ -4605,7 +4605,7 @@ def self.get_sequential_load_schedule(model, fractions, unavailable_periods) s = s.schedule else s = Schedule.create_ruleset_from_daily_season(model, sch_name, values) - Schedule.set_unavailable_periods(s, sch_name, unavailable_periods, model.getYearDescription.assumedYear) + Schedule.set_unavailable_periods(model, s, sch_name, unavailable_periods) end return s diff --git a/HPXMLtoOpenStudio/resources/schedules.rb b/HPXMLtoOpenStudio/resources/schedules.rb index 3244d0c2d4..3e5fe80170 100644 --- a/HPXMLtoOpenStudio/resources/schedules.rb +++ b/HPXMLtoOpenStudio/resources/schedules.rb @@ -8,8 +8,7 @@ class ScheduleConstant # @param schedule_type_limits_name [String] data type for the values contained in the schedule # @param unavailable_periods [HPXML::UnavailablePeriods] Object that defines periods for, e.g., power outages or vacancies def initialize(model, sch_name, val = 1.0, schedule_type_limits_name = nil, unavailable_periods: []) - year = model.getYearDescription.assumedYear - @schedule = create_schedule(model, sch_name, val, year, schedule_type_limits_name, unavailable_periods) + @schedule = create_schedule(model, sch_name, val, schedule_type_limits_name, unavailable_periods) end attr_accessor(:schedule) @@ -21,11 +20,10 @@ def initialize(model, sch_name, val = 1.0, schedule_type_limits_name = nil, unav # @param model [OpenStudio::Model::Model] OpenStudio Model object # @param sch_name [String] name that is assigned to the OpenStudio Schedule object # @param val [Double] the constant schedule value - # @param year [Integer] the calendar year # @param schedule_type_limits_name [String] data type for the values contained in the schedule # @param unavailable_periods [HPXML::UnavailablePeriods] Object that defines periods for, e.g., power outages or vacancies # @return [OpenStudio::Model::ScheduleConstant or OpenStudio::Model::ScheduleRuleset] the OpenStudio Schedule object with constant schedule - def create_schedule(model, sch_name, val, year, schedule_type_limits_name, unavailable_periods) + def create_schedule(model, sch_name, val, schedule_type_limits_name, unavailable_periods) if unavailable_periods.empty? if val == 1.0 && (schedule_type_limits_name.nil? || schedule_type_limits_name == EPlus::ScheduleTypeLimitsOnOff) schedule = model.alwaysOnDiscreteSchedule @@ -50,7 +48,7 @@ def create_schedule(model, sch_name, val, year, schedule_type_limits_name, unava default_day_sch.clearValues default_day_sch.addValue(OpenStudio::Time.new(0, 24, 0, 0), val) - Schedule.set_unavailable_periods(schedule, sch_name, unavailable_periods, year) + Schedule.set_unavailable_periods(model, schedule, sch_name, unavailable_periods) end return schedule @@ -68,7 +66,6 @@ class HourlyByMonthSchedule # @param unavailable_periods [HPXML::UnavailablePeriods] Object that defines periods for, e.g., power outages or vacancies def initialize(model, sch_name, weekday_month_by_hour_values, weekend_month_by_hour_values, schedule_type_limits_name = nil, normalize_values = true, unavailable_periods: nil) - year = model.getYearDescription.assumedYear @weekday_month_by_hour_values = validate_values(weekday_month_by_hour_values, 12, 24) @weekend_month_by_hour_values = validate_values(weekend_month_by_hour_values, 12, 24) if normalize_values @@ -76,7 +73,7 @@ def initialize(model, sch_name, weekday_month_by_hour_values, weekend_month_by_h else @maxval = 1.0 end - @schedule = create_schedule(model, sch_name, year, schedule_type_limits_name, unavailable_periods) + @schedule = create_schedule(model, sch_name, schedule_type_limits_name, unavailable_periods) end attr_accessor(:schedule, :maxval) @@ -129,11 +126,11 @@ def calc_max_val() # # @param model [OpenStudio::Model::Model] OpenStudio Model object # @param sch_name [String] name that is assigned to the OpenStudio Schedule object - # @param year [Integer] the calendar year # @param schedule_type_limits_name [String] data type for the values contained in the schedule # @param unavailable_periods [HPXML::UnavailablePeriods] Object that defines periods for, e.g., power outages or vacancies # @return [OpenStudio::Model::Ruleset] the OpenStudio Schedule object with rules - def create_schedule(model, sch_name, year, schedule_type_limits_name, unavailable_periods) + def create_schedule(model, sch_name, schedule_type_limits_name, unavailable_periods) + year = model.getYearDescription.assumedYear day_startm = Calendar.day_start_months(year) day_endm = Calendar.day_end_months(year) @@ -188,7 +185,7 @@ def create_schedule(model, sch_name, year, schedule_type_limits_name, unavailabl prev_wkdy_vals, prev_wknd_vals = wkdy_vals, wknd_vals end - Schedule.set_unavailable_periods(schedule, sch_name, unavailable_periods, year) + Schedule.set_unavailable_periods(model, schedule, sch_name, unavailable_periods) return schedule end @@ -204,8 +201,7 @@ class HourlyByDaySchedule # @param unavailable_periods [HPXML::UnavailablePeriods] Object that defines periods for, e.g., power outages or vacancies def initialize(model, sch_name, weekday_day_by_hour_values, weekend_day_by_hour_values, schedule_type_limits_name = nil, normalize_values = true, unavailable_periods: nil) - year = model.getYearDescription.assumedYear - num_days = Calendar.num_days_in_year(year) + num_days = Calendar.num_days_in_year(model.getYearDescription.assumedYear) @weekday_day_by_hour_values = validate_values(weekday_day_by_hour_values, num_days, 24) @weekend_day_by_hour_values = validate_values(weekend_day_by_hour_values, num_days, 24) if normalize_values @@ -213,7 +209,7 @@ def initialize(model, sch_name, weekday_day_by_hour_values, weekend_day_by_hour_ else @maxval = 1.0 end - @schedule = create_schedule(model, sch_name, year, num_days, schedule_type_limits_name, unavailable_periods) + @schedule = create_schedule(model, sch_name, num_days, schedule_type_limits_name, unavailable_periods) end attr_accessor(:schedule, :maxval) @@ -266,18 +262,19 @@ def calc_max_val() # # @param model [OpenStudio::Model::Model] OpenStudio Model object # @param sch_name [String] name that is assigned to the OpenStudio Schedule object - # @param year [Integer] the calendar year # @param num_days [Integer] the number of days in the calendar year # @param schedule_type_limits_name [String] data type for the values contained in the schedule # @param unavailable_periods [HPXML::UnavailablePeriods] Object that defines periods for, e.g., power outages or vacancies # @return [OpenStudio::Model::Ruleset] the OpenStudio Schedule object with rules - def create_schedule(model, sch_name, year, num_days, schedule_type_limits_name, unavailable_periods) + def create_schedule(model, sch_name, num_days, schedule_type_limits_name, unavailable_periods) schedule = Model.add_schedule_ruleset( model, name: sch_name, limits: schedule_type_limits_name ) + year = model.getYearDescription.assumedYear + prev_wkdy_vals, prev_wkdy_rule = nil, nil prev_wknd_vals, prev_wknd_rule = nil, nil for d in 1..num_days @@ -323,7 +320,7 @@ def create_schedule(model, sch_name, year, num_days, schedule_type_limits_name, prev_wkdy_vals, prev_wknd_vals = wkdy_vals, wknd_vals end - Schedule.set_unavailable_periods(schedule, sch_name, unavailable_periods, year) + Schedule.set_unavailable_periods(model, schedule, sch_name, unavailable_periods) return schedule end @@ -346,7 +343,6 @@ class MonthWeekdayWeekendSchedule def initialize(model, sch_name, weekday_hourly_values, weekend_hourly_values, monthly_values, schedule_type_limits_name = nil, normalize_values = true, begin_month = 1, begin_day = 1, end_month = 12, end_day = 31, unavailable_periods: nil) - year = model.getYearDescription.assumedYear @weekday_hourly_values = Schedule.validate_values(weekday_hourly_values, 24, 'weekday') @weekend_hourly_values = Schedule.validate_values(weekend_hourly_values, 24, 'weekend') @monthly_values = Schedule.validate_values(monthly_values, 12, 'monthly') @@ -360,7 +356,7 @@ def initialize(model, sch_name, weekday_hourly_values, weekend_hourly_values, mo @maxval = 1.0 @schadjust = 1.0 end - @schedule = create_schedule(model, sch_name, year, begin_month, begin_day, end_month, end_day, + @schedule = create_schedule(model, sch_name, begin_month, begin_day, end_month, end_day, schedule_type_limits_name, unavailable_periods) end @@ -458,7 +454,6 @@ def calc_sch_adjust() # # @param model [OpenStudio::Model::Model] OpenStudio Model object # @param sch_name [String] name that is assigned to the OpenStudio Schedule object - # @param year [Integer] the calendar year # @param begin_month [Integer] the begin month of the year # @param begin_day [Integer] the begin day of the begin month # @param end_month [Integer] the end month of the year @@ -466,8 +461,9 @@ def calc_sch_adjust() # @param schedule_type_limits_name [String] data type for the values contained in the schedule # @param unavailable_periods [HPXML::UnavailablePeriods] Object that defines periods for, e.g., power outages or vacancies # @return [OpenStudio::Model::ScheduleRuleset] the OpenStudio Schedule object with rules - def create_schedule(model, sch_name, year, begin_month, begin_day, end_month, end_day, + def create_schedule(model, sch_name, begin_month, begin_day, end_month, end_day, schedule_type_limits_name, unavailable_periods) + year = model.getYearDescription.assumedYear month_num_days = Calendar.num_days_in_months(year) month_num_days[end_month - 1] = end_day @@ -537,7 +533,7 @@ def create_schedule(model, sch_name, year, begin_month, begin_day, end_month, en end end - Schedule.set_unavailable_periods(schedule, sch_name, unavailable_periods, year) + Schedule.set_unavailable_periods(model, schedule, sch_name, unavailable_periods) return schedule end @@ -654,14 +650,16 @@ def self.get_unavailable_periods(runner, schedule_name, unavailable_periods) # Add unavailable period rules to the OpenStudio Schedule object. # + # @param model [OpenStudio::Model::Model] OpenStudio Model object # @param schedule [OpenStudio::Model::ScheduleRuleset] the OpenStudio Schedule object for which to set unavailable period rules # @param sch_name [String] name that is assigned to the OpenStudio Schedule object # @param unavailable_periods [HPXML::UnavailablePeriods] Object that defines periods for, e.g., power outages or vacancies - # @param year [Integer] the calendar year # @return [nil] - def self.set_unavailable_periods(schedule, sch_name, unavailable_periods, year) + def self.set_unavailable_periods(model, schedule, sch_name, unavailable_periods) return if unavailable_periods.nil? + year = model.getYearDescription.assumedYear + # Add off rule(s), will override previous rules unavailable_periods.each do |period| # Special Values @@ -791,6 +789,8 @@ def self.create_ruleset_from_daily_season(model, sch_name, values) i += 1 next unless value != start_value || i == values.length + i += 1 if i == values.length + Model.add_schedule_ruleset_rule( schedule, start_date: start_date, @@ -798,7 +798,6 @@ def self.create_ruleset_from_daily_season(model, sch_name, values) hourly_values: [start_value] * 24 ) - i += 1 if i == values.length break if i == values.length + 1 start_date = OpenStudio::Date::fromDayOfYear(i, year) diff --git a/HPXMLtoOpenStudio/resources/waterheater.rb b/HPXMLtoOpenStudio/resources/waterheater.rb index daf609c5f8..fd8a5d949e 100644 --- a/HPXMLtoOpenStudio/resources/waterheater.rb +++ b/HPXMLtoOpenStudio/resources/waterheater.rb @@ -2,6 +2,8 @@ # Collection of methods related to water heating systems. module Waterheater + DefaultTankHeight = 4.0 # ft, assumption from BEopt + # TODO # # @param runner [OpenStudio::Measure::OSRunner] Object typically used to display warnings @@ -425,7 +427,7 @@ def self.get_dist_energy_waste_factor(hot_water_distribution) # @param model [OpenStudio::Model::Model] OpenStudio Model object # @param water_heating_systems [Array] The HPXML water heaters of interest # @param plantloop_map [Hash] Map of HPXML System ID => OpenStudio PlantLoop objects - # @return [TODO] TODO + # @return [nil] def self.apply_combi_system_EMS(model, water_heating_systems, plantloop_map) water_heating_systems.select { |wh| [HPXML::WaterHeaterTypeCombiStorage, @@ -1394,7 +1396,7 @@ def self.add_hpwh_control_program(model, runner, obj_name, amb_temp_sensor, hpwh # @param tank [TODO] TODO # @param u_tank [TODO] TODO # @param unit_multiplier [Integer] Number of similar dwelling units - # @return [TODO] TODO + # @return [nil] def self.set_stratified_tank_ua(tank, u_tank, unit_multiplier) node_ua = [0] * 12 # Max number of nodes in E+ stratified tank model if unit_multiplier == 1 @@ -1553,19 +1555,6 @@ def self.add_desuperheater(model, runner, water_heating_system, tank, loc_space, desuperheater.additionalProperties.setFeature('HPXML_ID', water_heating_system.id) # Used by reporting measure end - # TODO - # - # @param model [OpenStudio::Model::Model] OpenStudio Model object - # @param name [TODO] TODO - # @return [TODO] TODO - def self.create_new_hx(model, name) - hx = OpenStudio::Model::HeatExchangerFluidToFluid.new(model) - hx.setName(name) - hx.setControlType('OperationSchemeModulated') - - return hx - end - # TODO # # @param water_heating_system [HPXML::WaterHeatingSystem] The HPXML water heating system of interest @@ -1597,7 +1586,7 @@ def self.calc_ef_from_uef(water_heating_system) # @return [TODO] TODO def self.calc_tank_areas(act_vol, height = nil) if height.nil? - height = get_tank_height() + height = DefaultTankHeight end diameter = 2.0 * (UnitConversions.convert(act_vol, 'gal', 'ft^3') / (height * Math::PI))**0.5 # feet a_top = Math::PI * diameter**2.0 / 4.0 # sqft @@ -1607,13 +1596,6 @@ def self.calc_tank_areas(act_vol, height = nil) return surface_area, a_side end - # TODO - # - # @return [TODO] TODO - def self.get_tank_height() - return 4.0 # feet, assumption from BEopt - end - # TODO # # @param act_vol [TODO] TODO @@ -1980,7 +1962,7 @@ def self.create_new_heater(name:, water_heating_system: nil, act_vol:, t_set_c: act_vol *= unit_multiplier if tank_model_type == HPXML::WaterHeaterTankModelTypeStratified - h_tank = UnitConversions.convert(get_tank_height(), 'ft', 'm') + h_tank = UnitConversions.convert(DefaultTankHeight, 'ft', 'm') # Add a WaterHeater:Stratified to the model new_heater = OpenStudio::Model::WaterHeaterStratified.new(model) @@ -1989,7 +1971,6 @@ def self.create_new_heater(name:, water_heating_system: nil, act_vol:, t_set_c: new_heater.setTankHeight(h_tank) new_heater.setMaximumTemperatureLimit(90) new_heater.setHeaterPriorityControl('MasterSlave') - configure_stratified_tank_setpoint_schedules(new_heater, schedules_file, t_set_c, model, runner, unavailable_periods) new_heater.setHeater1Capacity(UnitConversions.convert(cap, 'kBtu/hr', 'W')) new_heater.setHeater1Height((1.0 - (4 - 0.5) / 15) * h_tank) # in the 4th node of a 15-node tank (counting from top); height of upper element based on TRNSYS assumptions for an ERWH new_heater.setHeater1DeadbandTemperatureDifference(5.556) @@ -2011,7 +1992,6 @@ def self.create_new_heater(name:, water_heating_system: nil, act_vol:, t_set_c: new_heater = OpenStudio::Model::WaterHeaterMixed.new(model) new_heater.setTankVolume(UnitConversions.convert(act_vol, 'gal', 'm^3')) new_heater.setHeaterThermalEfficiency(eta_c) unless eta_c.nil? - configure_mixed_tank_setpoint_schedule(new_heater, schedules_file, t_set_c, model, runner, unavailable_periods) new_heater.setMaximumTemperatureLimit(99.0) if [HPXML::WaterHeaterTypeTankless, HPXML::WaterHeaterTypeCombiTankless].include? tank_type new_heater.setHeaterControlType('Modulate') @@ -2051,6 +2031,8 @@ def self.create_new_heater(name:, water_heating_system: nil, act_vol:, t_set_c: new_heater.setOffCycleLossCoefficienttoAmbientTemperature(ua_w_k) end + assign_water_heater_setpoint(runner, model, new_heater, schedules_file, t_set_c, unavailable_periods) + if not water_heating_system.nil? new_heater.additionalProperties.setFeature('HPXML_ID', water_heating_system.id) # Used by reporting measure end @@ -2078,7 +2060,7 @@ def self.create_new_heater(name:, water_heating_system: nil, act_vol:, t_set_c: # @param loc_space [OpenStudio::Model::Space] The space where the water heater is located # @param loc_schedule [OpenStudio::Model::ScheduleConstant] The temperature schedule for where the water heater is located, if not in a space # @param wh_obj [TODO] TODO - # @return [TODO] TODO + # @return [nil] def self.set_wh_ambient(loc_space, loc_schedule, wh_obj) if wh_obj.ambientTemperatureSchedule.is_initialized wh_obj.ambientTemperatureSchedule.get.remove @@ -2095,54 +2077,35 @@ def self.set_wh_ambient(loc_space, loc_schedule, wh_obj) # TODO # - # @param new_heater [TODO] TODO - # @param schedules_file [SchedulesFile] SchedulesFile wrapper class instance of detailed schedule files - # @param t_set_c [TODO] TODO - # @param model [OpenStudio::Model::Model] OpenStudio Model object # @param runner [OpenStudio::Measure::OSRunner] Object typically used to display warnings - # @param unavailable_periods [HPXML::UnavailablePeriods] Object that defines periods for, e.g., power outages or vacancies - # @return [TODO] TODO - 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::Columns[:WaterHeaterSetpoint].name) - end - if new_schedule.nil? # constant - new_schedule = ScheduleConstant.new(model, Constants::ObjectTypeWaterHeaterSetpoint, t_set_c, EPlus::ScheduleTypeLimitsTemperature, unavailable_periods: unavailable_periods) - new_schedule = new_schedule.schedule - else - 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 - end - new_heater.setSetpointTemperatureSchedule(new_schedule) - end - - # TODO - # - # @param new_heater [TODO] TODO + # @param model [OpenStudio::Model::Model] OpenStudio Model object + # @param water_heater [TODO] TODO # @param schedules_file [SchedulesFile] SchedulesFile wrapper class instance of detailed schedule files # @param t_set_c [TODO] TODO - # @param model [OpenStudio::Model::Model] OpenStudio Model object - # @param runner [OpenStudio::Measure::OSRunner] Object typically used to display warnings # @param unavailable_periods [HPXML::UnavailablePeriods] Object that defines periods for, e.g., power outages or vacancies - # @return [TODO] TODO - def self.configure_stratified_tank_setpoint_schedules(new_heater, schedules_file, t_set_c, model, runner, unavailable_periods) - new_schedule = nil + # @return [nil] + def self.assign_water_heater_setpoint(runner, model, water_heater, schedules_file, t_set_c, unavailable_periods) + setpoint_sch = nil if not schedules_file.nil? - new_schedule = schedules_file.create_schedule_file(model, col_name: SchedulesFile::Columns[:WaterHeaterSetpoint].name) + setpoint_sch = schedules_file.create_schedule_file(model, col_name: SchedulesFile::Columns[:WaterHeaterSetpoint].name) end - if new_schedule.nil? # constant - new_schedule = ScheduleConstant.new(model, Constants::ObjectTypeWaterHeaterSetpoint, t_set_c, EPlus::ScheduleTypeLimitsTemperature, unavailable_periods: unavailable_periods) - new_schedule = new_schedule.schedule + if setpoint_sch.nil? # constant + setpoint_sch = ScheduleConstant.new(model, Constants::ObjectTypeWaterHeaterSetpoint, t_set_c, EPlus::ScheduleTypeLimitsTemperature, unavailable_periods: unavailable_periods) + setpoint_sch = setpoint_sch.schedule else 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 - new_heater.setHeater1SetpointTemperatureSchedule(new_schedule) - new_heater.setHeater2SetpointTemperatureSchedule(new_schedule) + if water_heater.is_a? OpenStudio::Model::WaterHeaterStratified + water_heater.heater1SetpointTemperatureSchedule.remove + water_heater.heater2SetpointTemperatureSchedule.remove + water_heater.setHeater1SetpointTemperatureSchedule(setpoint_sch) + water_heater.setHeater2SetpointTemperatureSchedule(setpoint_sch) + elsif water_heater.is_a? OpenStudio::Model::WaterHeaterMixed + if water_heater.setpointTemperatureSchedule.is_initialized + water_heater.setpointTemperatureSchedule.get.remove + end + water_heater.setSetpointTemperatureSchedule(setpoint_sch) + end end # TODO diff --git a/HPXMLtoOpenStudio/tests/test_schedules.rb b/HPXMLtoOpenStudio/tests/test_schedules.rb index be6a42a5b6..aab2621538 100644 --- a/HPXMLtoOpenStudio/tests/test_schedules.rb +++ b/HPXMLtoOpenStudio/tests/test_schedules.rb @@ -508,7 +508,7 @@ def test_set_unavailable_periods_lighting unavailable_periods = _add_unavailable_period(hpxml, 'Power Outage', begin_month, begin_day, begin_hour, end_month, end_day, end_hour) schedule_rules = schedule.scheduleRules - Schedule.set_unavailable_periods(schedule, sch_name, unavailable_periods, year) + Schedule.set_unavailable_periods(model, schedule, sch_name, unavailable_periods) unavailable_schedule_rules = schedule.scheduleRules - schedule_rules assert_equal(1, unavailable_schedule_rules.size) @@ -529,7 +529,7 @@ def test_set_unavailable_periods_lighting unavailable_periods = _add_unavailable_period(hpxml, 'Power Outage', begin_month, begin_day, begin_hour, end_month, end_day, end_hour) # note the change of end month/day schedule_rules = schedule.scheduleRules - Schedule.set_unavailable_periods(schedule, sch_name, unavailable_periods, year) + Schedule.set_unavailable_periods(model, schedule, sch_name, unavailable_periods) unavailable_schedule_rules = schedule.scheduleRules - schedule_rules assert_equal(1, unavailable_schedule_rules.size) @@ -549,7 +549,7 @@ def test_set_unavailable_periods_lighting unavailable_periods = _add_unavailable_period(hpxml, 'Power Outage', begin_month, begin_day, begin_hour, end_month, end_day, end_hour) # note the change of end month/day schedule_rules = schedule.scheduleRules - Schedule.set_unavailable_periods(schedule, sch_name, unavailable_periods, year) + Schedule.set_unavailable_periods(model, schedule, sch_name, unavailable_periods) unavailable_schedule_rules = schedule.scheduleRules - schedule_rules assert_equal(2, unavailable_schedule_rules.size) @@ -570,7 +570,7 @@ def test_set_unavailable_periods_lighting unavailable_periods = _add_unavailable_period(hpxml, 'Power Outage', begin_month, begin_day, begin_hour, end_month, end_day, end_hour) # note the change of end month/day schedule_rules = schedule.scheduleRules - Schedule.set_unavailable_periods(schedule, sch_name, unavailable_periods, year) + Schedule.set_unavailable_periods(model, schedule, sch_name, unavailable_periods) unavailable_schedule_rules = schedule.scheduleRules - schedule_rules assert_equal(2, unavailable_schedule_rules.size) @@ -594,7 +594,7 @@ def test_set_unavailable_periods_lighting unavailable_periods = _add_unavailable_period(hpxml, 'Power Outage', begin_month, begin_day, begin_hour, end_month, end_day, end_hour) # note the change of end month/day schedule_rules = schedule.scheduleRules - Schedule.set_unavailable_periods(schedule, sch_name, unavailable_periods, year) + Schedule.set_unavailable_periods(model, schedule, sch_name, unavailable_periods) unavailable_schedule_rules = schedule.scheduleRules - schedule_rules assert_equal(3, unavailable_schedule_rules.size) @@ -626,7 +626,7 @@ def test_set_unavailable_periods_natvent unavailable_periods = _add_unavailable_period(hpxml, 'Power Outage', begin_month, begin_day, begin_hour, end_month, end_day, end_hour, natvent_availability) schedule_rules = schedule.scheduleRules - Schedule.set_unavailable_periods(schedule, sch_name, unavailable_periods, year) + Schedule.set_unavailable_periods(model, schedule, sch_name, unavailable_periods) unavailable_schedule_rules = schedule.scheduleRules - schedule_rules assert_equal(0, unavailable_schedule_rules.size) @@ -644,7 +644,7 @@ def test_set_unavailable_periods_natvent unavailable_periods = _add_unavailable_period(hpxml, 'Power Outage', begin_month, begin_day, begin_hour, end_month, end_day, end_hour, natvent_availability) schedule_rules = schedule.scheduleRules - Schedule.set_unavailable_periods(schedule, sch_name, unavailable_periods, year) + Schedule.set_unavailable_periods(model, schedule, sch_name, unavailable_periods) unavailable_schedule_rules = schedule.scheduleRules - schedule_rules assert_equal(1, unavailable_schedule_rules.size) @@ -662,7 +662,7 @@ def test_set_unavailable_periods_natvent unavailable_periods = _add_unavailable_period(hpxml, 'Power Outage', begin_month, begin_day, begin_hour, end_month, end_day, end_hour, natvent_availability) schedule_rules = schedule.scheduleRules - Schedule.set_unavailable_periods(schedule, sch_name, unavailable_periods, year) + Schedule.set_unavailable_periods(model, schedule, sch_name, unavailable_periods) unavailable_schedule_rules = schedule.scheduleRules - schedule_rules assert_equal(1, unavailable_schedule_rules.size) @@ -692,7 +692,7 @@ def test_set_unavailable_periods_leap_year unavailable_periods = _add_unavailable_period(hpxml, 'Power Outage', begin_month, begin_day, begin_hour, end_month, end_day, end_hour) schedule_rules = schedule.scheduleRules - Schedule.set_unavailable_periods(schedule, sch_name, unavailable_periods, year) + Schedule.set_unavailable_periods(model, schedule, sch_name, unavailable_periods) unavailable_schedule_rules = schedule.scheduleRules - schedule_rules assert_equal(1, unavailable_schedule_rules.size) From 0f2e6b7f71f0e086f5159b9927729cdfaed8fee4 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sat, 5 Oct 2024 19:05:14 +0000 Subject: [PATCH 11/11] Latest results. --- workflow/tests/base_results/results_simulations_bills.csv | 4 ++-- workflow/tests/base_results/results_simulations_energy.csv | 4 ++-- workflow/tests/base_results/results_simulations_loads.csv | 4 ++-- workflow/tests/base_results/results_simulations_misc.csv | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/workflow/tests/base_results/results_simulations_bills.csv b/workflow/tests/base_results/results_simulations_bills.csv index e4dc605751..7af179c1e5 100644 --- a/workflow/tests/base_results/results_simulations_bills.csv +++ b/workflow/tests/base_results/results_simulations_bills.csv @@ -204,7 +204,7 @@ base-hvac-air-to-air-heat-pump-2-speed-research-features.xml,3065.84,144.0,2921. base-hvac-air-to-air-heat-pump-2-speed.xml,1670.23,144.0,1526.23,0.0,1670.23,0.0,0.0,0.0,0.0,0.0,0.0,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-hvac-air-to-air-heat-pump-var-speed-autosize-maxload.xml,1622.42,144.0,1478.42,0.0,1622.42,0.0,0.0,0.0,0.0,0.0,0.0,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-hvac-air-to-air-heat-pump-var-speed-backup-boiler-advanced-defrost.xml,1880.81,144.0,1424.72,0.0,1568.72,144.0,168.09,312.09,0.0,0.0,0.0,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-hvac-air-to-air-heat-pump-var-speed-backup-boiler-hvac-seasons.xml,1862.83,144.0,1419.45,0.0,1563.45,144.0,155.38,299.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,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +base-hvac-air-to-air-heat-pump-var-speed-backup-boiler-hvac-seasons.xml,1867.63,144.0,1419.54,0.0,1563.54,144.0,160.09,304.09,0.0,0.0,0.0,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-hvac-air-to-air-heat-pump-var-speed-backup-boiler-switchover-temperature.xml,1865.36,144.0,1372.75,0.0,1516.75,144.0,204.61,348.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,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, base-hvac-air-to-air-heat-pump-var-speed-backup-boiler.xml,1871.52,144.0,1423.37,0.0,1567.37,144.0,160.15,304.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,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, base-hvac-air-to-air-heat-pump-var-speed-backup-furnace-autosize-factor.xml,1833.11,144.0,1364.7,0.0,1508.7,144.0,180.41,324.41,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, @@ -326,7 +326,7 @@ base-hvac-room-ac-only-research-features.xml,1361.34,144.0,1217.34,0.0,1361.34,0 base-hvac-room-ac-only.xml,1422.98,144.0,1278.98,0.0,1422.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.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-hvac-room-ac-with-heating.xml,2061.47,144.0,1917.47,0.0,2061.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.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-hvac-room-ac-with-reverse-cycle.xml,1669.25,144.0,1525.25,0.0,1669.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.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-hvac-seasons.xml,1833.44,144.0,1301.48,0.0,1445.48,144.0,243.96,387.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.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-hvac-seasons.xml,1837.15,144.0,1301.8,0.0,1445.8,144.0,247.35,391.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.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-hvac-setpoints-daily-schedules.xml,1830.39,144.0,1285.24,0.0,1429.24,144.0,257.15,401.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.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-hvac-setpoints-daily-setbacks.xml,1816.78,144.0,1289.49,0.0,1433.49,144.0,239.29,383.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.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-hvac-setpoints.xml,1600.51,144.0,1225.24,0.0,1369.24,144.0,87.27,231.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.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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/workflow/tests/base_results/results_simulations_energy.csv b/workflow/tests/base_results/results_simulations_energy.csv index 97dcd5ec3f..7464647b52 100644 --- a/workflow/tests/base_results/results_simulations_energy.csv +++ b/workflow/tests/base_results/results_simulations_energy.csv @@ -204,7 +204,7 @@ base-hvac-air-to-air-heat-pump-2-speed-research-features.xml,78.01,78.01,78.01,7 base-hvac-air-to-air-heat-pump-2-speed.xml,41.93,41.93,41.93,41.93,0.0,0.0,0.0,0.0,0.0,0.0,7.764,0.961,0.296,0.019,2.245,0.493,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,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-hvac-air-to-air-heat-pump-var-speed-autosize-maxload.xml,40.616,40.616,40.616,40.616,0.0,0.0,0.0,0.0,0.0,0.0,8.198,0.134,0.0,0.0,2.052,0.081,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,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-hvac-air-to-air-heat-pump-var-speed-backup-boiler-advanced-defrost.xml,55.199,55.199,39.141,39.141,16.058,0.0,0.0,0.0,0.0,0.0,5.495,0.588,0.0,0.058,2.452,0.398,9.014,0.0,0.0,4.507,0.0,0.334,0.0,0.0,0.0,0.0,2.07,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,0.0,16.058,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-hvac-air-to-air-heat-pump-var-speed-backup-boiler-hvac-seasons.xml,53.84,53.84,38.997,38.997,14.844,0.0,0.0,0.0,0.0,0.0,5.378,0.581,0.0,0.056,2.436,0.396,9.015,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.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,0.0,14.844,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-hvac-air-to-air-heat-pump-var-speed-backup-boiler-hvac-seasons.xml,54.292,54.292,38.999,38.999,15.293,0.0,0.0,0.0,0.0,0.0,5.378,0.581,0.0,0.058,2.436,0.396,9.015,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.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,0.0,15.293,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-hvac-air-to-air-heat-pump-var-speed-backup-boiler-switchover-temperature.xml,57.26,57.26,37.713,37.713,19.547,0.0,0.0,0.0,0.0,0.0,4.255,0.389,0.0,0.071,2.452,0.398,9.015,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.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,0.0,19.547,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-hvac-air-to-air-heat-pump-var-speed-backup-boiler.xml,54.403,54.403,39.104,39.104,15.299,0.0,0.0,0.0,0.0,0.0,5.458,0.588,0.0,0.058,2.452,0.398,9.014,0.0,0.0,4.507,0.0,0.334,0.0,0.0,0.0,0.0,2.07,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,0.0,15.299,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-hvac-air-to-air-heat-pump-var-speed-backup-furnace-autosize-factor.xml,54.726,54.726,37.492,37.492,17.234,0.0,0.0,0.0,0.0,0.0,4.624,0.052,0.0,0.513,2.067,0.084,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,0.0,17.234,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0 @@ -326,7 +326,7 @@ base-hvac-room-ac-only-research-features.xml,33.444,33.444,33.444,33.444,0.0,0.0 base-hvac-room-ac-only.xml,35.137,35.137,35.137,35.137,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,5.108,0.0,9.061,0.0,0.0,4.507,0.0,0.334,0.0,0.0,0.0,0.0,1.903,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,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-hvac-room-ac-with-heating.xml,52.679,52.679,52.679,52.679,0.0,0.0,0.0,0.0,0.0,0.0,17.271,0.0,0.0,0.0,5.256,0.0,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,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-hvac-room-ac-with-reverse-cycle.xml,41.903,41.903,41.903,41.903,0.0,0.0,0.0,0.0,0.0,0.0,7.658,0.0,0.053,0.0,4.041,0.0,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,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-hvac-seasons.xml,59.061,59.061,35.756,35.756,23.305,0.0,0.0,0.0,0.0,0.0,0.0,0.578,0.0,0.0,4.371,0.657,9.014,0.0,0.0,4.507,0.0,0.334,0.0,0.0,0.0,0.0,2.07,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.305,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-hvac-seasons.xml,59.394,59.394,35.764,35.764,23.629,0.0,0.0,0.0,0.0,0.0,0.0,0.586,0.0,0.0,4.371,0.657,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.629,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-hvac-setpoints-daily-schedules.xml,59.875,59.875,35.309,35.309,24.565,0.0,0.0,0.0,0.0,0.0,0.0,0.609,0.0,0.0,3.953,0.598,9.015,0.0,0.0,4.507,0.0,0.334,0.0,0.0,0.0,0.0,2.068,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,24.565,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-hvac-setpoints-daily-setbacks.xml,58.285,58.285,35.426,35.426,22.859,0.0,0.0,0.0,0.0,0.0,0.0,0.567,0.0,0.0,4.098,0.616,9.015,0.0,0.0,4.507,0.0,0.334,0.0,0.0,0.0,0.0,2.064,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.859,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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-hvac-setpoints.xml,41.998,41.998,33.661,33.661,8.337,0.0,0.0,0.0,0.0,0.0,0.0,0.207,0.0,0.0,2.988,0.397,9.046,0.0,0.0,4.507,0.0,0.334,0.0,0.0,0.0,0.0,1.958,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.337,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,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/workflow/tests/base_results/results_simulations_loads.csv b/workflow/tests/base_results/results_simulations_loads.csv index d17e4e0918..3358c5e234 100644 --- a/workflow/tests/base_results/results_simulations_loads.csv +++ b/workflow/tests/base_results/results_simulations_loads.csv @@ -204,7 +204,7 @@ base-hvac-air-to-air-heat-pump-2-speed-research-features.xml,72.146,0.527,1.529, base-hvac-air-to-air-heat-pump-2-speed.xml,24.148,0.315,12.877,9.071,0.615,0.0,0.0,0.0,3.743,3.883,0.545,7.573,0.683,10.763,-13.574,0.0,0.0,0.0,8.368,-0.116,5.452,0.0,0.77,0.0,6.839,-8.475,-2.662,0.0,0.06,-0.188,-0.014,2.827,0.035,-0.633,10.839,0.0,0.0,0.0,-6.139,-0.112,-0.853,-3.882,-0.117,0.0,2.225,7.106,1.845 base-hvac-air-to-air-heat-pump-var-speed-autosize-maxload.xml,21.974,0.0,12.329,9.071,0.615,0.0,0.0,0.0,3.847,3.882,0.545,7.57,0.682,10.76,-13.574,0.0,0.0,0.0,8.363,-0.116,5.161,0.0,0.77,0.0,4.869,-8.475,-2.662,0.0,0.083,-0.188,-0.014,2.826,0.035,-0.633,10.839,0.0,0.0,0.0,-6.14,-0.112,-0.861,-3.881,-0.117,0.0,1.673,7.106,1.845 base-hvac-air-to-air-heat-pump-var-speed-backup-boiler-advanced-defrost.xml,29.603,11.42,15.796,9.071,0.616,0.0,0.0,0.0,3.54,3.9,0.548,7.558,0.686,10.822,-13.636,0.0,0.0,0.0,8.343,-0.128,6.992,0.0,0.772,0.0,11.05,-8.533,-2.68,0.0,-0.031,-0.163,-0.011,2.841,0.041,-0.546,10.777,0.0,0.0,0.0,-6.131,-0.124,-1.013,-3.829,-0.111,0.0,5.324,7.047,1.827 -base-hvac-air-to-air-heat-pump-var-speed-backup-boiler-hvac-seasons.xml,28.983,11.078,15.664,9.071,0.616,0.0,0.0,0.0,3.231,3.589,0.506,7.478,0.611,9.888,-12.635,0.0,0.0,0.0,8.185,-0.053,6.53,0.0,0.717,0.0,10.82,-7.712,-2.474,0.0,0.153,0.082,0.022,3.101,0.055,0.186,8.047,0.0,0.0,0.0,-4.058,-0.006,-0.546,-3.176,-0.036,0.0,5.277,5.301,1.326 +base-hvac-air-to-air-heat-pump-var-speed-backup-boiler-hvac-seasons.xml,29.301,11.416,15.664,9.071,0.616,0.0,0.0,0.0,3.237,3.596,0.506,7.525,0.612,9.898,-12.635,0.0,0.0,0.0,8.256,-0.019,6.553,0.0,0.718,0.0,10.901,-7.712,-2.474,0.0,0.153,0.082,0.022,3.101,0.055,0.186,8.047,0.0,0.0,0.0,-4.058,-0.006,-0.546,-3.176,-0.036,0.0,5.277,5.301,1.326 base-hvac-air-to-air-heat-pump-var-speed-backup-boiler-switchover-temperature.xml,28.759,14.615,15.806,9.071,0.616,0.0,0.0,0.0,3.493,3.82,0.535,7.388,0.656,10.391,-13.59,0.0,0.0,0.0,8.233,-0.032,6.81,0.0,0.751,0.0,10.037,-8.334,-2.611,0.0,-0.093,-0.234,-0.022,2.693,0.013,-0.952,10.823,0.0,0.0,0.0,-6.203,-0.029,-1.211,-3.828,-0.131,0.0,4.924,7.245,1.896 base-hvac-air-to-air-heat-pump-var-speed-backup-boiler.xml,29.603,11.42,15.796,9.071,0.616,0.0,0.0,0.0,3.54,3.9,0.548,7.558,0.686,10.822,-13.636,0.0,0.0,0.0,8.343,-0.128,6.992,0.0,0.772,0.0,11.05,-8.533,-2.68,0.0,-0.031,-0.163,-0.011,2.841,0.041,-0.546,10.777,0.0,0.0,0.0,-6.131,-0.124,-1.013,-3.829,-0.111,0.0,5.324,7.047,1.827 base-hvac-air-to-air-heat-pump-var-speed-backup-furnace-autosize-factor.xml,27.706,14.301,12.803,9.071,0.615,0.0,0.0,0.0,3.608,3.884,0.546,7.575,0.683,10.761,-13.574,0.0,0.0,0.0,8.373,-0.114,5.841,0.0,0.769,0.0,10.117,-8.472,-2.661,0.0,0.067,-0.188,-0.014,2.825,0.035,-0.638,10.839,0.0,0.0,0.0,-6.14,-0.11,-0.861,-3.882,-0.117,0.0,2.158,7.109,1.846 @@ -326,7 +326,7 @@ base-hvac-room-ac-only-research-features.xml,0.0,0.0,7.619,9.071,0.659,0.0,0.0,0 base-hvac-room-ac-only.xml,0.0,0.0,10.398,9.071,0.666,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.219,-0.152,-0.009,2.767,0.045,-0.542,10.592,0.0,0.0,0.0,-6.355,-0.119,-0.828,-3.753,-0.11,0.0,0.0,6.958,1.811 base-hvac-room-ac-with-heating.xml,17.257,0.0,10.74,9.071,0.615,0.0,0.0,0.0,4.108,3.88,0.545,7.563,0.682,10.754,-13.574,0.0,0.0,0.0,8.349,-0.116,5.08,0.0,0.77,0.0,0.0,-8.475,-2.662,0.0,0.18,-0.189,-0.014,2.824,0.035,-0.635,10.839,0.0,0.0,0.0,-6.144,-0.112,-0.865,-3.879,-0.116,0.0,0.0,7.106,1.845 base-hvac-room-ac-with-reverse-cycle.xml,17.258,0.053,10.74,9.071,0.615,0.0,0.0,0.0,4.108,3.88,0.545,7.563,0.682,10.754,-13.574,0.0,0.0,0.0,8.349,-0.116,5.08,0.0,0.77,0.0,0.0,-8.475,-2.662,0.0,0.18,-0.189,-0.014,2.824,0.035,-0.635,10.839,0.0,0.0,0.0,-6.144,-0.112,-0.865,-3.879,-0.116,0.0,0.0,7.106,1.845 -base-hvac-seasons.xml,22.039,0.0,13.628,9.071,0.616,0.0,0.0,0.0,3.523,3.59,0.506,7.48,0.611,9.898,-12.635,0.0,0.0,0.0,8.177,-0.056,4.916,0.0,0.719,0.0,5.216,-7.715,-2.475,0.0,0.236,0.081,0.022,3.099,0.054,0.187,8.047,0.0,0.0,0.0,-4.058,-0.008,-0.44,-3.188,-0.036,0.0,3.089,5.299,1.324 +base-hvac-seasons.xml,22.326,0.0,13.628,9.071,0.615,0.0,0.0,0.0,3.529,3.596,0.507,7.525,0.612,9.907,-12.635,0.0,0.0,0.0,8.245,-0.023,4.928,0.0,0.72,0.0,5.285,-7.715,-2.475,0.0,0.236,0.081,0.022,3.099,0.054,0.187,8.047,0.0,0.0,0.0,-4.058,-0.008,-0.44,-3.188,-0.036,0.0,3.089,5.299,1.324 base-hvac-setpoints-daily-schedules.xml,22.592,0.0,12.158,9.071,0.616,0.0,0.0,0.0,3.805,3.861,0.541,7.602,0.672,10.639,-13.646,0.0,0.0,0.0,8.854,-0.073,5.224,0.0,0.777,0.0,5.32,-8.488,-2.678,0.0,0.073,-0.182,-0.014,2.779,0.032,-0.667,10.768,0.0,0.0,0.0,-6.363,-0.083,-0.868,-4.381,-0.115,0.0,2.518,7.09,1.829 base-hvac-setpoints-daily-setbacks.xml,21.436,0.0,12.678,9.071,0.617,0.0,0.0,0.0,3.783,3.823,0.535,7.475,0.645,10.34,-13.901,0.0,0.0,0.0,8.476,0.033,5.099,0.0,0.77,0.0,4.989,-8.491,-2.682,0.0,0.058,-0.193,-0.017,2.8,0.011,-0.889,10.512,0.0,0.0,0.0,-6.2,0.032,-0.902,-4.233,-0.121,0.0,2.817,7.085,1.825 base-hvac-setpoints.xml,7.871,0.0,8.299,9.071,0.65,0.0,0.0,0.0,2.98,2.838,0.396,5.3,0.423,7.588,-13.122,0.0,0.0,0.0,5.694,-0.037,3.611,0.0,0.579,0.0,1.838,-7.994,-2.559,0.0,-0.169,-0.421,-0.046,2.579,-0.022,-1.33,11.291,0.0,0.0,0.0,-6.966,-0.037,-1.074,-6.646,-0.16,0.0,1.964,7.508,1.948 diff --git a/workflow/tests/base_results/results_simulations_misc.csv b/workflow/tests/base_results/results_simulations_misc.csv index 6cc8d57be2..bbd12ec0b1 100644 --- a/workflow/tests/base_results/results_simulations_misc.csv +++ b/workflow/tests/base_results/results_simulations_misc.csv @@ -204,7 +204,7 @@ base-hvac-air-to-air-heat-pump-2-speed-research-features.xml,0.0,0.0,1354.7,998. base-hvac-air-to-air-heat-pump-2-speed.xml,0.0,0.0,1354.7,998.0,11171.6,2563.5,7067.1,3208.0,7067.1,24.675,17.153,0.0 base-hvac-air-to-air-heat-pump-var-speed-autosize-maxload.xml,0.0,0.0,1354.7,998.0,11171.6,2563.5,4175.1,2921.5,4175.1,22.454,15.609,0.0 base-hvac-air-to-air-heat-pump-var-speed-backup-boiler-advanced-defrost.xml,1.0,4.0,1354.7,998.0,11171.5,2563.5,3203.8,2926.5,3203.8,22.934,17.734,0.0 -base-hvac-air-to-air-heat-pump-var-speed-backup-boiler-hvac-seasons.xml,25.0,4.0,1354.7,998.0,11171.5,2563.5,3209.5,2994.7,3209.5,22.934,17.728,0.0 +base-hvac-air-to-air-heat-pump-var-speed-backup-boiler-hvac-seasons.xml,1.0,4.0,1354.7,998.0,11171.5,2563.5,3209.5,2994.7,3209.5,22.934,17.728,0.0 base-hvac-air-to-air-heat-pump-var-speed-backup-boiler-switchover-temperature.xml,160.0,4.0,1354.7,998.0,11171.6,2563.5,3297.3,3264.0,3297.3,31.627,17.728,0.0 base-hvac-air-to-air-heat-pump-var-speed-backup-boiler.xml,1.0,4.0,1354.7,998.0,11171.5,2563.5,3212.5,2926.5,3212.5,22.934,17.734,0.0 base-hvac-air-to-air-heat-pump-var-speed-backup-furnace-autosize-factor.xml,1.0,0.0,1354.7,998.0,11171.6,2563.5,3337.3,2938.8,3337.3,30.33,16.793,0.0 @@ -326,7 +326,7 @@ base-hvac-room-ac-only-research-features.xml,0.0,0.0,1354.7,998.0,11171.8,2563.6 base-hvac-room-ac-only.xml,0.0,0.0,1354.7,998.0,11171.5,2563.5,1924.5,3451.5,3451.5,0.0,11.827,0.0 base-hvac-room-ac-with-heating.xml,0.0,0.0,1354.7,998.0,11171.6,2563.5,5887.1,3815.0,5887.1,16.748,12.045,0.0 base-hvac-room-ac-with-reverse-cycle.xml,0.0,0.0,1354.7,998.0,11171.6,2563.5,4859.0,3364.3,4859.0,16.748,12.045,0.0 -base-hvac-seasons.xml,24.0,0.0,1354.7,998.0,11171.5,2563.5,2082.5,3485.7,3485.7,23.71,18.736,0.0 +base-hvac-seasons.xml,0.0,0.0,1354.7,998.0,11171.5,2563.5,2082.5,3485.7,3485.7,23.71,18.736,0.0 base-hvac-setpoints-daily-schedules.xml,103.0,39.0,1354.7,998.0,11171.5,2563.5,2123.8,3728.5,3728.5,35.224,21.227,0.0 base-hvac-setpoints-daily-setbacks.xml,0.0,12.0,1354.7,998.0,11171.6,2563.5,2090.6,3873.9,3873.9,32.297,21.204,0.0 base-hvac-setpoints.xml,0.0,0.0,1354.7,998.0,11171.5,2563.5,2032.2,3206.1,3206.1,18.069,15.967,0.0