-
Notifications
You must be signed in to change notification settings - Fork 23
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Update HVAC models per RESNET HVAC addendum #1879
base: master
Are you sure you want to change the base?
Conversation
…o resnet_heat_pump
…same resnet updates, remove in.schedules.csv in test_hvac.rb
…-HPXML into resnet_heat_pump
…o resnet_heat_pump
|
||
if (not heating_system.attached_cooling_system.nil?) && (not heating_system.attached_cooling_system.compressor_type.nil?) | ||
# Based on RESNET DX Modeling Appendix | ||
heating_system.fan_model_type = (heating_system.attached_cooling_system.compressor_type == HPXML::HVACCompressorTypeSingleStage) ? HPXML::HVACFanModelTypePSC : HPXML::HVACFanModelTypeBPM |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
For attached heating and cooling systems, grab the cooling compressor type first to default, otherwise follow the previous HEScore assumption (based on efficiency)
cooling_system.fan_model_type = (cooling_system.compressor_type == HPXML::HVACCompressorTypeSingleStage) ? HPXML::HVACFanModelTypePSC : HPXML::HVACFanModelTypeBPM | ||
cooling_system.fan_model_type_isdefaulted = true | ||
elsif [HPXML::HVACTypeMiniSplitAirConditioner].include? cooling_system.cooling_system_type | ||
cooling_system.fan_model_type = HPXML::HVACFanModelTypeBPM |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Always assume BPM for minisplit, as they're variable speed systems?
heat_pump.fan_model_type = (heat_pump.compressor_type == HPXML::HVACCompressorTypeSingleStage) ? HPXML::HVACFanModelTypePSC : HPXML::HVACFanModelTypeBPM | ||
heat_pump.fan_model_type_isdefaulted = true | ||
elsif [HPXML::HVACTypeHeatPumpGroundToAir].include? heat_pump.heat_pump_type | ||
if heat_pump.heating_efficiency_cop > 8.75 / 3.2 # HEScore assumption |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is kept the same as previous assumptions, need to discuss when we have two speed/var speed GSHP capabilities. Not sure for that case should it follow the RESNET assumption dependent on speed number or should it be something else (out of RESNET scope).
fan_power = max_fan_power * (fan_ratio**index) | ||
else | ||
# psc fan | ||
fan_power = max_fan_power * fan_ratio * (0.3 * fan_ratio + 0.7) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Different fan power equations
@@ -4489,21 +4511,19 @@ def self.calc_ceer_from_eer(cooling_system) | |||
def self.set_fan_power_rated(hvac_system, use_eer_cop) | |||
hvac_ap = hvac_system.additional_properties | |||
|
|||
# Based on RESNET DX Modeling Appendix | |||
psc_ducted_watts_per_cfm = 0.414 # W/cfm, PSC fan | |||
psc_ductless_watts_per_cfm = 0.414 # W/cfm, PSC fan |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
So far as I can tell, psc_ductless_watts_per_cfm is not used for any case. Ductless minisplit is always var speed and defaulted to bpm fans. Room AC and PTHPs are outside the scope.
@@ -5076,7 +5096,7 @@ def self.calculate_heat_pump_defrost_load_power_watts(heat_pump, unit_multiplier | |||
end | |||
# cooling capacity and airflow are already with unit multiplier, calculate the capacity w/o multiplier | |||
nominal_cooling_capacity = heat_pump.cooling_capacity / unit_multiplier | |||
defrost_power_fraction = (max_heating_airflow / design_airflow)**3 | |||
defrost_power_fraction = calculate_fan_power_from_curve(1.0, max_heating_airflow / design_airflow, heat_pump) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This should call the calculate_fan_power_from_curve in the first place, so I captured it here.
…-HPXML into resnet_heat_pump
…pumps and mini-splits.
…-HPXML into datapoint_extrapolation # Conflicts: # BuildResidentialHPXML/measure.xml # BuildResidentialHPXML/resources/version.txt
…anup and consolidation.
… extrapolation. Didn't see any impact on runtime.
…nStudio-HPXML into datapoint_extrapolation
Datapoint extrapolation
…o resnet_heat_pump
…solve the capacity retention.
…o resnet_heat_pump
…of additional code cleanup.
…o resnet_heat_pump # Conflicts: # BuildResidentialHPXML/measure.xml # HPXMLtoOpenStudio/measure.xml
<sch:assert role='ERROR' test='count(h:PerformanceDataPoint[h:OutdoorTemperature!=95 and h:CapacityDescription="minimum"]) >= 1'>Expected 1 or more element(s) for xpath: PerformanceDataPoint[OutdoorTemperature!=95 and CapacityDescription="minimum"]</sch:assert> <!-- See [PerformanceDataPoint] --> | ||
<sch:assert role='ERROR' test='count(h:PerformanceDataPoint[h:OutdoorTemperature!=95 and h:CapacityDescription="maximum"]) >= 1'>Expected 1 or more element(s) for xpath: PerformanceDataPoint[OutdoorTemperature!=95 and CapacityDescription="maximum"]</sch:assert> <!-- See [PerformanceDataPoint] --> | ||
<sch:assert role='ERROR' test='count(h:PerformanceDataPoint[h:OutdoorTemperature=82 and h:CapacityDescription="minimum"]) = 1'>Expected 1 element(s) for xpath: PerformanceDataPoint[OutdoorTemperature=82 and CapacityDescription="minimum"]</sch:assert> <!-- See [PerformanceDataPoint] --> | ||
<sch:assert role='ERROR' test='count(h:PerformanceDataPoint[h:OutdoorTemperature=82 and h:CapacityDescription="nominal"]) = 1'>Expected 1 element(s) for xpath: PerformanceDataPoint[OutdoorTemperature=82 and CapacityDescription="nominal"]</sch:assert> <!-- See [PerformanceDataPoint] --> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There is no nominal/rated 82F datapoint, we can't require this. Let's plan to discuss. (If we update this, also need to update docs and changelog.)
@@ -1584,7 +1584,7 @@ def arguments(model) # rubocop:disable Lint/UnusedMethodArgument | |||
|
|||
arg = OpenStudio::Measure::OSArgument.makeStringArgument('hvac_perf_data_heating_outdoor_temperatures', false) | |||
arg.setDisplayName('HVAC Detailed Performance Data: Heating Outdoor Temperatures') | |||
arg.setDescription('Outdoor temperatures of heating detailed performance data if available. Applies only to variable-speed air-source HVAC systems (central air conditioners, mini-split air conditioners, air-to-air heat pumps, and mini-split heat pumps). One of the outdoor temperatures must be 47 F. At least two performance data points are required using a comma-separated list.') | |||
arg.setDescription('Outdoor temperatures of heating detailed performance data if available. Applies only to variable-speed air-source HVAC systems (central air conditioners, mini-split air conditioners, air-to-air heat pumps, and mini-split heat pumps). Outdoor temperatures must be 47F, 17F, and 5F (and one optional temperature less than 5F). At least two performance data points are required using a comma-separated list.') |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Note to self: need to update all of these out-of-date descriptions ("At least two performance data points are required using a comma-separated list").
Pull Request Description
closes #1871
Checklist
Not all may apply:
EPvalidator.xml
) has been updatedopenstudio tasks.rb update_hpxmls
)HPXMLtoOpenStudio/tests/test*.rb
and/orworkflow/tests/test*.rb
)openstudio tasks.rb update_measures
has been run