openstudio-geb 0.3.2 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (29) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -1
  3. data/Gemfile +1 -1
  4. data/README.md +36 -19
  5. data/lib/measures/GEB Metrics Report/resources/os_lib_reporting.rb +5 -24
  6. data/lib/measures/add_fan_assist_night_ventilation_with_hybrid_control/LICENSE.md +13 -0
  7. data/lib/measures/add_fan_assist_night_ventilation_with_hybrid_control/README.md +152 -0
  8. data/lib/measures/add_fan_assist_night_ventilation_with_hybrid_control/README.md.erb +45 -0
  9. data/lib/measures/add_fan_assist_night_ventilation_with_hybrid_control/docs/.gitkeep +0 -0
  10. data/lib/measures/add_fan_assist_night_ventilation_with_hybrid_control/measure.rb +604 -0
  11. data/lib/measures/add_fan_assist_night_ventilation_with_hybrid_control/measure.xml +265 -0
  12. data/lib/measures/add_fan_assist_night_ventilation_with_hybrid_control/tests/USA_NY_Buffalo.Niagara.Intl.AP.725280_TMY3.epw +8768 -0
  13. data/lib/measures/add_fan_assist_night_ventilation_with_hybrid_control/tests/add_fan_assist_night_ventilation_with_hybrid_control_test.rb +94 -0
  14. data/lib/measures/add_fan_assist_night_ventilation_with_hybrid_control/tests/medium_office_with_internal_windows.osm +13459 -0
  15. data/lib/measures/add_heat_pump_water_heater/measure.rb +2 -2
  16. data/lib/measures/apply_dynamic_coating_to_roof_wall/LICENSE.md +1 -0
  17. data/lib/measures/apply_dynamic_coating_to_roof_wall/README.md +101 -0
  18. data/lib/measures/apply_dynamic_coating_to_roof_wall/README.md.erb +45 -0
  19. data/lib/measures/apply_dynamic_coating_to_roof_wall/docs/.gitkeep +0 -0
  20. data/lib/measures/apply_dynamic_coating_to_roof_wall/measure.rb +421 -0
  21. data/lib/measures/apply_dynamic_coating_to_roof_wall/measure.xml +204 -0
  22. data/lib/measures/apply_dynamic_coating_to_roof_wall/tests/MediumOffice-90.1-2010-ASHRAE 169-2013-5A.osm +13669 -0
  23. data/lib/measures/apply_dynamic_coating_to_roof_wall/tests/SF-CACZ6-HPWH-pre1978.osm +16130 -0
  24. data/lib/measures/apply_dynamic_coating_to_roof_wall/tests/USA_NY_Buffalo.Niagara.Intl.AP.725280_TMY3.epw +8768 -0
  25. data/lib/measures/apply_dynamic_coating_to_roof_wall/tests/apply_dynamic_coating_to_roof_wall_test.rb +81 -0
  26. data/lib/openstudio/geb/run.rb +34 -0
  27. data/lib/openstudio/geb/version.rb +1 -1
  28. data/openstudio-geb.gemspec +2 -2
  29. metadata +26 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2d4e3aa64d8c0c4b47747c35b4fead34ddf0b0bdb1700832b9b1aa4028114d5a
4
- data.tar.gz: 0437b10703119326e2c34600effbff9b9a80a86965393e05841f39d8f01fb493
3
+ metadata.gz: d3d8c2734323d3dac92db55bde46204f9c052b560d38e4d6bfe96875056c43fe
4
+ data.tar.gz: 94dcdbe7b1feb6e66d9177a4839b62be0250de781acdaf323ad3977966200f0b
5
5
  SHA512:
6
- metadata.gz: c3556d1e23800d744b5406a04e959aa178399ae59ebd937771948949b34d56d3ac7c27d76227ddadacdc64848a1c777e7bb70b2ac292285f4688b53939f8dd2a
7
- data.tar.gz: 457854c8ae8d77a8dd46d800a648fb80eb72089773a29673a2964e2d6a37188b0af030cf490727976c6275972d90b3771b1d6810ef01b78643779792cb680a71
6
+ metadata.gz: a015c54e0e3b62a8286b5d8ad7b328708deb654aa2c13cd945564309f1f3b2599bda685b522a3509c4406a6bfd820ec4f4edd6d1d5e3081eab5d7ff5d12fe8a8
7
+ data.tar.gz: 2ec84897e39c80f0c0a1e19fad7c535048ef189e4331be54947efee6d5717bb97475b55a81a0cea1cfb1c831b18fbbf804d6983ab1e5fa6fa1d46a321e0798ef
data/CHANGELOG.md CHANGED
@@ -1,5 +1,8 @@
1
1
  # OpenStudio GEB Gem
2
2
 
3
+ ## Version 0.4.0
4
+ - Support for OpenStudio 3.7 (upgrade to standards gem 0.5.0, extension gem 0.7.0)
5
+
3
6
  ## Version 0.3.0
4
7
  - Support for OpenStudio 3.6 (upgrade to standards gem 0.4.0, extension gem 0.6.1)
5
8
 
@@ -13,4 +16,4 @@
13
16
 
14
17
  ## Versions 0.1.0 and 0.1.1
15
18
 
16
- - Initial releases
19
+ - Initial releases
data/Gemfile CHANGED
@@ -24,4 +24,4 @@ gem 'simplecov', '~> 0.18.2'
24
24
  # pin this dependency to avoid unicode_normalize error
25
25
  gem 'addressable', '2.8.1'
26
26
  # pin this dependency to avoid using racc dependency (which has native extensions)
27
- gem 'parser', '3.2.2.2'
27
+ gem 'parser', '3.2.2.2'
data/README.md CHANGED
@@ -1,6 +1,13 @@
1
1
  # Openstudio Geb Gem
2
2
 
3
- TODO: Add a description of this gem
3
+ The OpenStudio GEB measure gem is an open source OpenStudio library that can be plug-and-play into existing
4
+ OpenStudio-based platforms. It was developed by Lawrence Berkeley National Laboratory since 2020. It now has
5
+ 22 GEB measures implemented, spanning various building systems like lighting, plug load, envelope, hvac,
6
+ domestic hot water, electric vehicle, and PV.
7
+
8
+ Three of the GEB measures in this gem were integrated into NREL's [URBANopt](https://docs.urbanopt.net/) platform to support load
9
+ flexibility analysis. They are "Reduce EPD by Percentage for Peak Hours", "Adjust thermostat setpoint
10
+ by degrees for peak hours", and "Add Chilled Water Storage Tank".
4
11
 
5
12
  ## Installation
6
13
 
@@ -12,26 +19,36 @@ gem 'openstudio-geb'
12
19
 
13
20
  And then execute:
14
21
 
15
- $ bundle
22
+ $ bundle install
16
23
 
17
24
  Or install it yourself as:
18
25
 
19
26
  $ gem install 'openstudio-geb'
20
27
 
21
- ## Usage
22
-
23
- To be filled out later.
24
-
25
- ## TODO
26
-
27
- - [ ] Remove measures from OpenStudio-Measures to standardize on this location
28
- - [ ] Update measures to code standards
29
- - [ ] Review and fill out the gemspec file with author and gem description
30
-
31
- # Releasing
32
-
33
- * Update change log
34
- * Update version in `/lib/openstudio/openstudio-geb/version.rb`
35
- * Merge down to master
36
- * Release via github
37
- * run `rake release` from master
28
+ ## Available GEB measures list
29
+ * Reduce EPD by percentage for peak hours
30
+ * Reduce LPD by percentage for peak hours
31
+ * Adjust thermostat setpoint by degrees for peak hours
32
+ * Reduce domestic hot water use for peak hours
33
+ * Average ventilation for peak hours
34
+ * Add chilled water storage tank
35
+ * Add electrochromic windows
36
+ * add_exterior_blinds_and_control
37
+ * add_interior_blinds_and_control
38
+ * Add fan assist night ventilation with hybrid control
39
+ * Add natural ventilation with hybrid control
40
+ * Add heat pump water heater
41
+ * Adjust domestic hot water setpoint
42
+ * Add rooftop PV
43
+ * Add electric vehicle charging load
44
+ * Add ceiling fan
45
+ * Apply dynamic coating to roof wall
46
+ * Enable demand controlled ventilation
47
+ * Enable occupancy-driven lighting
48
+ * Precooling
49
+ * Preheating
50
+ * Reduce exterior lighting loads
51
+
52
+ ## Contact
53
+ Kaiyu Sun (Lead developer), [ksun@lbl.gov](mailto:ksun@lbl.gov)\
54
+ Tianzhen Hong (Principal investigator), [thong@lbl.gov](mailto:thong@lbl.gov)
@@ -1,8 +1,8 @@
1
- # *******************************************************************************
2
- # OpenStudio(R), Copyright (c) Alliance for Sustainable Energy, LLC.
3
- # See also https://openstudio.net/license
4
- # *******************************************************************************
5
-
1
+ # *******************************************************************************
2
+ # OpenStudio(R), Copyright (c) Alliance for Sustainable Energy, LLC.
3
+ # See also https://openstudio.net/license
4
+ # *******************************************************************************
5
+
6
6
  require 'json'
7
7
  require 'openstudio-standards'
8
8
  require 'yaml'
@@ -447,7 +447,6 @@ module OsLib_Reporting
447
447
  winter_demand_geb_values = []
448
448
  step_per_h = model.getTimestep.numberOfTimestepsPerHour.to_f
449
449
  floor_area_ft2 = OpenStudio.convert(model.building.get.floorArea.to_f, 'm^2', 'ft^2').get
450
- puts "*************step 1*************"
451
450
 
452
451
  datetimes.each_with_index do |time, idx|
453
452
  # get results for the event day
@@ -479,14 +478,6 @@ module OsLib_Reporting
479
478
  end
480
479
  end
481
480
 
482
- puts "event_day_times: #{event_day_times.inspect}"
483
- puts "event_day_base_values: #{event_day_base_values.inspect}"
484
- puts "event_day_geb_values: #{event_day_geb_values.inspect}"
485
- puts "summer_demand_base_values.size: #{summer_demand_base_values.size}"
486
- puts "summer_demand_geb_values.size: #{summer_demand_geb_values.size}"
487
- puts "winter_demand_base_values.size: #{winter_demand_base_values.size}"
488
- puts "winter_demand_geb_values.size: #{winter_demand_geb_values.size}"
489
-
490
481
  if (shed_start.is_a?Time) && (shed_end.is_a?Time)
491
482
  shed_range = [shed_start.strftime("%H:%M"), shed_end.strftime("%H:%M")]
492
483
  demand_decrease_shed_period = []
@@ -514,11 +505,6 @@ module OsLib_Reporting
514
505
  end
515
506
  end
516
507
 
517
- puts "demand_base_shed_period: #{demand_base_shed_period.inspect}"
518
- puts "demand_decrease_shed_period: #{demand_decrease_shed_period.inspect}"
519
- puts "demand_base_take_period: #{demand_base_take_period.inspect}"
520
- puts "demand_increase_take_period: #{demand_increase_take_period.inspect}"
521
-
522
508
  # table: list all the primary DF metrics
523
509
  demand_decrease_primary_metrics_table = {}
524
510
  demand_decrease_primary_metrics_table[:title] = 'Demand Decrease (Shed) Primary Metrics'
@@ -569,8 +555,6 @@ module OsLib_Reporting
569
555
  end
570
556
  end
571
557
 
572
- puts "demand_decrease_primary_metrics_table[:data]: #{demand_decrease_primary_metrics_table[:data].inspect}"
573
-
574
558
  # plot: event day timestep demand profiles of baseline and GEB measures
575
559
  bldg_demand_chart = {}
576
560
  bldg_demand_chart[:title] = 'Whole Building Net Electricity Consumption on selected day (W)'
@@ -602,9 +586,6 @@ module OsLib_Reporting
602
586
  y: event_day_geb_values
603
587
  )
604
588
 
605
- puts "demand_decrease_primary_metrics_table: #{demand_decrease_primary_metrics_table.inspect}"
606
- puts "bldg_demand_chart: #{bldg_demand_chart.inspect}"
607
-
608
589
  @geb_metrics_section[:tables] << demand_decrease_primary_metrics_table
609
590
  @geb_metrics_section[:bldg_demand_charts] << bldg_demand_chart
610
591
  # @geb_metrics_section[:tables] << demand_increase_primary_metrics_table
@@ -0,0 +1,13 @@
1
+ OpenStudio(R), Copyright (c) 2008, 2023 Alliance for Sustainable Energy, LLC.
2
+
3
+ Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
4
+
5
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
6
+
7
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
8
+
9
+ 3. Redistribution of this software, without modification, must refer to the software by the same designation. Redistribution of a modified version of this software (i) may not refer to the modified version by the same designation, or by any confusingly similar designation, and (ii) must refer to the underlying software originally provided by Alliance as “OpenStudio®”. Except to comply with the foregoing, the term “OpenStudio®”, or any confusingly similar designation may not be used to refer to any modified version of this software or any modified version of the underlying software originally provided by Alliance without the prior written consent of Alliance.
10
+
11
+ 4. The name of the copyright holder(s), any contributors, the United States Government, the United States Department of Energy, or any of their employees may not be used to endorse or promote products derived from this software without specific prior written permission from the respective party.
12
+
13
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) AND ANY CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER(S), ANY CONTRIBUTORS, THE UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY, NOR ANY OF THEIR EMPLOYEES, BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,152 @@
1
+
2
+
3
+ ###### (Automatically generated documentation)
4
+
5
+ # Add fan assist night ventilation with hybrid control
6
+
7
+ ## Description
8
+ This measure is modified based on the OS measure "fan_assist_night_ventilation" from "openstudio-ee-gem". It adds night ventilation that is enabled by opening windows assisted by exhaust fans. Hybrid ventilation control is added to avoid simultaneous operation of windows and HVAC.
9
+
10
+ ## Modeler Description
11
+ This measure adds a zone ventilation object to each zone with operable windwos. The measure will first look for a celing opening to find a connection for zone a zone mixing object. If a ceiling isn't found, then it looks for a wall. The end result is zone ventilation object followed by a path of zone mixing objects. The exhaust fan consumption is modeled in the zone ventilation object, but no heat is brought in from the fan.
12
+ Different from the original 'fan_assist_night_ventilation' measure, this measure can be applied to models with mechenical systems. HybridVentilationAvailabilityManager is added to airloops and zonal systems to avoid simultaneous operation of windows and HVAC. The zone ventilation is controlled by a combination of schedule, indoor and outdoor temperature, and wind speed.
13
+
14
+ ## Measure Type
15
+ ModelMeasure
16
+
17
+ ## Taxonomy
18
+
19
+
20
+ ## Arguments
21
+
22
+
23
+ ### Design night ventilation air change rate defined by ACH-air changes per hour
24
+
25
+ **Name:** design_night_vent_ach,
26
+ **Type:** Double,
27
+ **Units:** ,
28
+ **Required:** true,
29
+ **Model Dependent:** false
30
+
31
+
32
+ ### Fan Pressure Rise
33
+
34
+ **Name:** fan_pressure_rise,
35
+ **Type:** Double,
36
+ **Units:** Pa,
37
+ **Required:** true,
38
+ **Model Dependent:** false
39
+
40
+
41
+ ### Fan Total Efficiency
42
+
43
+ **Name:** efficiency,
44
+ **Type:** Double,
45
+ **Units:** ,
46
+ **Required:** true,
47
+ **Model Dependent:** false
48
+
49
+
50
+ ### Minimum Indoor Temperature (degC)
51
+ The indoor temperature below which ventilation is shutoff.
52
+ **Name:** min_indoor_temp,
53
+ **Type:** Double,
54
+ **Units:** ,
55
+ **Required:** false,
56
+ **Model Dependent:** false
57
+
58
+
59
+ ### Maximum Indoor Temperature (degC)
60
+ The indoor temperature above which ventilation is shutoff.
61
+ **Name:** max_indoor_temp,
62
+ **Type:** Double,
63
+ **Units:** ,
64
+ **Required:** false,
65
+ **Model Dependent:** false
66
+
67
+
68
+ ### Minimum Indoor-Outdoor Temperature Difference (degC)
69
+ This is the temperature difference between the indoor and outdoor air dry-bulb temperatures below which ventilation is shutoff. For example, a delta temperature of 2 degC means ventilation is available if the outside air temperature is at least 2 degC cooler than the zone air temperature. Values can be negative.
70
+ **Name:** delta_temp,
71
+ **Type:** Double,
72
+ **Units:** ,
73
+ **Required:** false,
74
+ **Model Dependent:** false
75
+
76
+
77
+ ### Minimum Outdoor Temperature (degC)
78
+ The outdoor temperature below which ventilation is shut off.
79
+ **Name:** min_outdoor_temp,
80
+ **Type:** Double,
81
+ **Units:** ,
82
+ **Required:** true,
83
+ **Model Dependent:** false
84
+
85
+
86
+ ### Maximum Outdoor Temperature (degC)
87
+ The outdoor temperature above which ventilation is shut off.
88
+ **Name:** max_outdoor_temp,
89
+ **Type:** Double,
90
+ **Units:** ,
91
+ **Required:** true,
92
+ **Model Dependent:** false
93
+
94
+
95
+ ### Maximum Wind Speed (m/s)
96
+ This is the wind speed above which ventilation is shut off. The default values assume windows are closed when wind is above a gentle breeze to avoid blowing around papers in the space.
97
+ **Name:** max_wind_speed,
98
+ **Type:** Double,
99
+ **Units:** ,
100
+ **Required:** false,
101
+ **Model Dependent:** false
102
+
103
+
104
+ ### Daily Start Time for natural ventilation
105
+ Use 24 hour format (HR:MM)
106
+ **Name:** night_vent_starttime,
107
+ **Type:** String,
108
+ **Units:** ,
109
+ **Required:** false,
110
+ **Model Dependent:** false
111
+
112
+
113
+ ### Daily End Time for natural ventilation
114
+ Use 24 hour format (HR:MM)
115
+ **Name:** night_vent_endtime,
116
+ **Type:** String,
117
+ **Units:** ,
118
+ **Required:** false,
119
+ **Model Dependent:** false
120
+
121
+
122
+ ### Start Date for natural ventilation
123
+ In MM-DD format
124
+ **Name:** night_vent_startdate,
125
+ **Type:** String,
126
+ **Units:** ,
127
+ **Required:** false,
128
+ **Model Dependent:** false
129
+
130
+
131
+ ### End Date for natural ventilation
132
+ In MM-DD format
133
+ **Name:** night_vent_enddate,
134
+ **Type:** String,
135
+ **Units:** ,
136
+ **Required:** false,
137
+ **Model Dependent:** false
138
+
139
+
140
+ ### Allow night time ventilation on weekends
141
+
142
+ **Name:** wknds,
143
+ **Type:** Boolean,
144
+ **Units:** ,
145
+ **Required:** false,
146
+ **Model Dependent:** false
147
+
148
+
149
+
150
+
151
+
152
+
@@ -0,0 +1,45 @@
1
+ <%#= README.md.erb is used to auto-generate README.md. %>
2
+ <%#= To manually maintain README.md throw away README.md.erb and manually edit README.md %>
3
+ ###### (Automatically generated documentation)
4
+
5
+ # <%= name %>
6
+
7
+ ## Description
8
+ <%= description %>
9
+
10
+ ## Modeler Description
11
+ <%= modelerDescription %>
12
+
13
+ ## Measure Type
14
+ <%= measureType %>
15
+
16
+ ## Taxonomy
17
+ <%= taxonomy %>
18
+
19
+ ## Arguments
20
+
21
+ <% arguments.each do |argument| %>
22
+ ### <%= argument[:display_name] %>
23
+ <%= argument[:description] %>
24
+ **Name:** <%= argument[:name] %>,
25
+ **Type:** <%= argument[:type] %>,
26
+ **Units:** <%= argument[:units] %>,
27
+ **Required:** <%= argument[:required] %>,
28
+ **Model Dependent:** <%= argument[:model_dependent] %>
29
+ <% if argument[:type] == "Choice" && !argument[:model_dependent]%>
30
+ **Choice Display Names** <%= argument[:choice_display_names] %>
31
+ <% end %>
32
+ <% end %>
33
+
34
+ <% if arguments.size == 0 %>
35
+ <%= "This measure does not have any user arguments" %>
36
+ <% end %>
37
+
38
+ <% if outputs.size > 0 %>
39
+ ## Outputs
40
+ <% output_names = [] %>
41
+ <% outputs.each do |output| %>
42
+ <% output_names << output[:display_name] %>
43
+ <% end %>
44
+ <%= output_names.join(", ") %>
45
+ <% end %>