Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Water Heater GEB #483

Merged
merged 86 commits into from
Jul 19, 2021
Merged

Water Heater GEB #483

merged 86 commits into from
Jul 19, 2021

Conversation

joseph-robertson
Copy link
Contributor

@joseph-robertson joseph-robertson commented Sep 3, 2020

Addresses #[issue number here].

Pull Request Description

Companion PR: https://github.com/NREL/resstock-estimation/pull/150

Adding in new GEB related features, including:

  • Allowing tanks to use either a mixed or stratified tank model (additional user argument)
  • Allowing setpoint to follow an hourly (8760) schedule rather than only fixed values.
  • Allowing HPWH operating mode to be scheduled (either "HP Only" or "standard"). This allows the elements to be disabled during peak periods.
  • Adding unmet shower (an unmet load metric for WHs) calculations into ResStock runs to quantify any unmet WH loads.

In addition to these GEB features, a few new HPWH options, corresponding the AO Smith's current product line, are added to options lookup as potential upgrade options.

Checklist

Not all may apply:

  • Unit tests have been added or updated
  • All rake tasks have been run, and pass
  • Documentation has been modified appropriately
  • Any new options are added to project_testing
  • project_testing runs without any failures
  • No unexpected regression test changes
  • All tests are passing (green) on circleci
  • The changelog has been updated appropriately
  • This branch is up-to-date with master

For more information on how to perform these checklist items, see the documentation's Advanced Tutorial.

jmaguire1 and others added 5 commits August 19, 2020 12:07
…into. Merged in waterheater.rb changes, TODO:

wh_measures
fixtures
use new schedule:file objects for SP and OP mode schedules
testing
additional unit tests for new features
…r HPWH), some additional merges in to the xml files and a couple other files I missed.
joseph-robertson added a commit that referenced this pull request Oct 19, 2020
dd46caa6fa Get warnings from validation.
98fff08ba2 Merge branch 'master' into build-res-hpxml-v3
d70f82b05a Merge pull request #516 from NREL/ashrae140
ead2599130 Merge pull request #518 from NREL/os310-official
e0c349821d Switch to official OS v3.1.0.
02d37af7e4 interior wall area is multiplied by 2.
02f831762f Merge pull request #483 from NREL/schematron_phase_2
9ad572af60 Merge branch 'master' of https://github.com/NREL/OpenStudio-HPXML into schematron_phase_2
5a249eb355 Minor changes.
d2e478ed1a Merge pull request #513 from NREL/add_schema_version_check
34905e8d4f Slightly different approach to give version error more prominence (rather than one error in a slue of others).
28349096de Add HPXML schamVersion check to schematron validator. Also fixes an error that might occur before schematron validation is executed.
db167d1307 Merge branch 'master' of https://github.com/NREL/OpenStudio-HPXML into schematron_phase_2
6483d593de Code update.
1d883049a5 Merge branch 'master' of https://github.com/NREL/OpenStudio-HPXML into schematron_phase_2
849899a4a6 Merge pull request #512 from NREL/os310-rc3
c0467d080b Merge branch 'master' into os310-rc3
f9ef06e769 Merge pull request #511 from NREL/appliances_remove_999
1538e47e85 Merge branch 'master' of https://github.com/NREL/OpenStudio-HPXML into appliances_remove_999
3ec682241c Merge branch 'master' of https://github.com/NREL/OpenStudio-HPXML into schematron_phase_2
6d2cb8c05c Test w/ OS 3.1.0-rc3.
f82322277b Update tests.
7192ca9c21 Merge pull request #510 from NREL/invalid_datatype_tests
e1089a38f2 Cleanup.
2b4277ef0f Missed some files.
2c501f38ca Adds test for invalid data types.
26088c771e Bugfix.
9f539e4392 Merge branch 'master' of https://github.com/NREL/OpenStudio-HPXML into schematron_phase_2
514efb9038 Address comments.
e8af342989 Fix test_invalid
25e68c5499 Merge branch 'master' of https://github.com/NREL/OpenStudio-HPXML into schematron_phase_2
14be068b4e implement the wildcard approach in EPvalidator.xml
b0ae7f55ec Place the location of the appliances in one pattern
42b469ee63 Add more warnings
f415ec97d5 Merge branch 'master' of https://github.com/NREL/OpenStudio-HPXML into schematron_phase_2
a78e937b89 Add an assert to check that every rule has a role attribute
66ed998b04 Bugfix.
00cd3e283f Replace not(foo) assertions with nested rules.
7647ace029 Add warning messages that are inadvertently deleted
a95525e4ed Merge branch 'master' of https://github.com/NREL/OpenStudio-HPXML into schematron_phase_2
db67c9dc21 Minor change to the role attributes
460ca51c8f Add the @ROLE attribute to EPvalidator.xml
74c6b2619c Fix test_invalid
732aceb210 update measures
545813c288 Add warnings for appliances via sch:report
7586bdd3ce Add test_schematron_asserts_by_alteration to test_validation.rb
dde03a604e Replace not(foo) assertions with nested rules.

git-subtree-dir: resources/hpxml-measures
git-subtree-split: dd46caa6fa21ce03b80c0ec3c3220785b5ee78ed
… but other objects make use of it)

- Actually removing the stratified tank, not just the setpoint schedules.
@joseph-robertson joseph-robertson changed the base branch from master to develop December 8, 2020 17:28
Copy link
Contributor

@ejhw ejhw left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @jmaguire1 ! This looks good.

  1. So HPWHs always use the stratified tank model? And non-HPWH tanks use mixed by default?
  2. When would you recommend using stratified for all tanks? What would the runtime implications be?

@ejhw ejhw self-requested a review July 16, 2021 18:18
@aspeake aspeake merged commit 4ec27a5 into develop Jul 19, 2021
@aspeake aspeake deleted the WH-GEB-ToMerge branch July 19, 2021 23:09
@shorowit
Copy link
Contributor

@jmaguire1 What was the cause for the small differences in energy?

Comment on lines +213 to +232
# Error checking: make sure the schedule file is an appropriate length and values are valid
# setpoint_hourly = HourlySchedule.new(model, runner, sch_name, dr_schedule_file, 0, false, [])
# setpoint_hourly_array = setpoint_hourly.schedule_array.map { |x| x.to_i }
# setpoint_hourly.schedule.remove

# year_description = model.getYearDescription
# assumed_year = year_description.assumedYear
# yr_hrs = Constants.NumHoursInYear(year_description.isLeapYear)
# run_period = model.getRunPeriod
# run_period_start = Time.new(assumed_year, run_period.getBeginMonth, run_period.getBeginDayOfMonth)
# run_period_end = Time.new(assumed_year, run_period.getEndMonth, run_period.getEndDayOfMonth, 24)
# sim_hours = (run_period_end - run_period_start) / 3600

# year_description = model.getYearDescription
# n_days = Constants.NumDaysInYear(year_description.isLeapYear)
# if (sp_hourly_array.length != sim_hours) and (sp_hourly_array.length != n_days * 24)
# runner.registerError("Hourly water heater setpoint schedule length must equal to a full year")
# return false
# end
# return true
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is all of this commented out?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@shorowit : I was going to add some additional error checking, got a little stuck getting it working, and left it commented out. I'm actually thinking I'll start a new branch to fix this, then get working on porting all of this code into HPXML.

expected_values = { 'InputCapacity' => 29307107, 'ThermalEfficiency' => 0.754, 'Setpoint' => 125, 'OnCycle' => 7.38, 'OffCycle' => 7.38, 'FuelType' => Constants.FuelTypeGas }
_test_measure('SFD_2000sqft_2story_FB_GRG_UA_3Beds_2Baths_Denver_HPWH.osm', args_hash, expected_num_del_objects, expected_num_new_objects, expected_values, 1)
end

def test_retrofit_replace_hpwh_scheduled_sp_with_tankless_gas
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

When you run this test (and several others), you get this OpenStudio warning:
[utilities.idf.WorkspaceObject] <2> Attempt to write a disconnected WorkspaceObject out to Idf.

This may indicate the code is not operating properly.

@@ -1016,7 +1218,7 @@ def self.get_plant_loop_from_string(model, runner, plantloop_s, unit)
end

model.getPlantLoops.each do |plant_loop|
next if plant_loop.name.to_s != plantloop_s
next if pl.name.to_s != plantloop_s
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@afontani Here's the issue.

@jmaguire1
Copy link
Contributor

@jmaguire1 What was the cause for the small differences in energy?

@shorowit: There's a slight change in the WH setpoint as part of this. What we've been doing since we added deadband control the to the WH is artificially increasing the setpoint slightly (by deadband/2), with the goal of maintaining consistency with what we had in BEopt where the WH always perfectly maintained setpoint in terms of annual energy consumption. But it's not what actually happens with real WHs and it's confusing for a user to be specifying a setpoint schedule and seeing in the results that they're getting a slightly higher setpoint, so I made a change so that the WH setpoint is just the WH setpoint, with no increase. This leads to the slight decrease in WH energy consumption and some small second order impacts on HVAC due to changes in tank losses.

@ejhw
Copy link
Contributor

ejhw commented Jul 22, 2021

@shorowit Where can I see the diff in energy? Is it this file b7c7d41 ?

@jmaguire1 I'm not seeing the setpoint change in options_lookup. Is that happening behind the scenes? Is it just for stratified tank or all WHs?

@jmaguire1
Copy link
Contributor

@shorowit Where can I see the diff in energy? Is it this file b7c7d41 ?

@jmaguire1 I'm not seeing the setpoint change in options_lookup. Is that happening behind the scenes? Is it just for stratified tank or all WHs?

I've been looking at https://github.com/NREL/resstock/actions/runs/1046573826 , in the comparisons zip file there's a results_output.csv. That has the delta between develop and this branch in there, and the results are consistent with what I'd expect (a slight decrease in WH energy consumption based on the slightly lower sepoint temperature)

@ejhw
Copy link
Contributor

ejhw commented Jul 22, 2021

@jmaguire1 Thanks, so if I'm looking at this right (dividing by base), it's ~1% decrease across those samples for both elec and gas WHs.

@jmaguire1
Copy link
Contributor

@ejhw Yup that's correct, it's a pretty small change. But it is a change and one that might not have been obvious to everyone as this pull request is primarily about adding new functionality that isn't installed in the baseline, which I think was why @shorowit asked why there's any change at all.

@shorowit
Copy link
Contributor

I think the setpoint code change is appropriate -- for a given setpoint value, this is how a water heater behaves. However, I've always wondered if, when we talk about a 125F or 130F number, that really represents A) the water heater setpoint or B) an average measured temperature from the field. If the latter, then we would really want to modify our assumed setpoint value in conjunction with the code change and the results would be unchanged. @jmaguire1 Any idea here?

@jmaguire1
Copy link
Contributor

@shorowit: It's much more A, but when we're using a mixed tank you're fully averaging the tank temperature which has some impact on the energy consumption compared to real tanks. Average tank temperature in the field/lab is always lower than the setpoint since there's a 10 F single sided deadband for most water heaters (so if you're set to 125 F, temperature by the sensor drops to 115 F before the heater kicks on, then it reheats to 125 F)

One of the things added in this PR was adding in the functionality to use stratified tank models, but I think with this E+ version we're not fully prepared to leverage the runtime updates Noel and I worked on. So the plan going forward when we port this to HPXML would be to switch to stratified tank models as the default, at least for ResStock use cases, which will have some additional energy consumption impacts.

@shorowit
Copy link
Contributor

Thanks @jmaguire1. FYI, we are quite close to updating ResStock to the latest EnergyPlus version.

# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants