honeybee-openstudio 0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/ci.yaml +88 -0
  3. data/.gitignore +33 -0
  4. data/.releaserc.json +7 -0
  5. data/Gemfile +14 -0
  6. data/LICENSE.md +23 -0
  7. data/README.md +95 -0
  8. data/Rakefile +16 -0
  9. data/doc_templates/LICENSE.md +23 -0
  10. data/doc_templates/README.md.erb +42 -0
  11. data/doc_templates/copyright_erb.txt +32 -0
  12. data/doc_templates/copyright_js.txt +5 -0
  13. data/doc_templates/copyright_ruby.txt +30 -0
  14. data/honeybee-openstudio.gemspec +38 -0
  15. data/lib/files/Honeybee.rb +113 -0
  16. data/lib/files/honeybee_workflow.osw +48 -0
  17. data/lib/files/urbanopt_Gemfile +32 -0
  18. data/lib/from_openstudio.rb +49 -0
  19. data/lib/from_openstudio/geometry/aperture.rb +136 -0
  20. data/lib/from_openstudio/geometry/door.rb +136 -0
  21. data/lib/from_openstudio/geometry/face.rb +174 -0
  22. data/lib/from_openstudio/geometry/room.rb +121 -0
  23. data/lib/from_openstudio/geometry/shade.rb +87 -0
  24. data/lib/from_openstudio/model.rb +123 -0
  25. data/lib/from_openstudio/model_object.rb +43 -0
  26. data/lib/from_openstudio/simulation/design_day.rb +123 -0
  27. data/lib/from_openstudio/simulation/parameter_model.rb +93 -0
  28. data/lib/from_openstudio/simulation/simulation_output.rb +67 -0
  29. data/lib/honeybee.rb +93 -0
  30. data/lib/honeybee/_defaults/energy_default.json +1682 -0
  31. data/lib/honeybee/_defaults/model.json +11311 -0
  32. data/lib/honeybee/_defaults/simulation-parameter.json +973 -0
  33. data/lib/honeybee/construction/air.rb +42 -0
  34. data/lib/honeybee/construction/opaque.rb +42 -0
  35. data/lib/honeybee/construction/shade.rb +42 -0
  36. data/lib/honeybee/construction/window.rb +51 -0
  37. data/lib/honeybee/construction/windowshade.rb +43 -0
  38. data/lib/honeybee/construction_set.rb +42 -0
  39. data/lib/honeybee/extension.rb +129 -0
  40. data/lib/honeybee/geometry/aperture.rb +42 -0
  41. data/lib/honeybee/geometry/door.rb +42 -0
  42. data/lib/honeybee/geometry/face.rb +48 -0
  43. data/lib/honeybee/geometry/room.rb +56 -0
  44. data/lib/honeybee/geometry/shade.rb +42 -0
  45. data/lib/honeybee/hvac/ideal_air.rb +42 -0
  46. data/lib/honeybee/hvac/template.rb +73 -0
  47. data/lib/honeybee/load/electric_equipment.rb +42 -0
  48. data/lib/honeybee/load/gas_equipment.rb +42 -0
  49. data/lib/honeybee/load/infiltration.rb +42 -0
  50. data/lib/honeybee/load/lighting.rb +43 -0
  51. data/lib/honeybee/load/people.rb +42 -0
  52. data/lib/honeybee/load/setpoint_humidistat.rb +46 -0
  53. data/lib/honeybee/load/setpoint_thermostat.rb +46 -0
  54. data/lib/honeybee/load/ventilation.rb +42 -0
  55. data/lib/honeybee/material/opaque.rb +42 -0
  56. data/lib/honeybee/material/opaque_no_mass.rb +42 -0
  57. data/lib/honeybee/material/window_blind.rb +42 -0
  58. data/lib/honeybee/material/window_gas.rb +42 -0
  59. data/lib/honeybee/material/window_gas_custom.rb +42 -0
  60. data/lib/honeybee/material/window_gas_mixture.rb +42 -0
  61. data/lib/honeybee/material/window_glazing.rb +42 -0
  62. data/lib/honeybee/material/window_shade.rb +42 -0
  63. data/lib/honeybee/material/window_simpleglazsys.rb +42 -0
  64. data/lib/honeybee/model.rb +87 -0
  65. data/lib/honeybee/model_object.rb +108 -0
  66. data/lib/honeybee/program_type.rb +56 -0
  67. data/lib/honeybee/schedule/fixed_interval.rb +42 -0
  68. data/lib/honeybee/schedule/ruleset.rb +42 -0
  69. data/lib/honeybee/schedule/type_limit.rb +42 -0
  70. data/lib/honeybee/simulation/design_day.rb +42 -0
  71. data/lib/honeybee/simulation/parameter_model.rb +86 -0
  72. data/lib/honeybee/simulation/simulation_output.rb +42 -0
  73. data/lib/honeybee/ventcool/control.rb +42 -0
  74. data/lib/honeybee/ventcool/opening.rb +46 -0
  75. data/lib/honeybee/ventcool/simulation.rb +42 -0
  76. data/lib/measures/.gitkeep +0 -0
  77. data/lib/measures/from_honeybee_model/LICENSE.md +23 -0
  78. data/lib/measures/from_honeybee_model/README.md +32 -0
  79. data/lib/measures/from_honeybee_model/measure.rb +91 -0
  80. data/lib/measures/from_honeybee_model/measure.xml +80 -0
  81. data/lib/measures/from_honeybee_model/tests/from_honeybee_model_test.rb +126 -0
  82. data/lib/measures/from_honeybee_simulation_parameter/LICENSE.md +23 -0
  83. data/lib/measures/from_honeybee_simulation_parameter/README.md +32 -0
  84. data/lib/measures/from_honeybee_simulation_parameter/measure.rb +95 -0
  85. data/lib/measures/from_honeybee_simulation_parameter/measure.xml +86 -0
  86. data/lib/measures/from_honeybee_simulation_parameter/tests/from_honeybee_simulation_parameter_test.rb +109 -0
  87. data/lib/to_openstudio.rb +92 -0
  88. data/lib/to_openstudio/construction/air.rb +56 -0
  89. data/lib/to_openstudio/construction/opaque.rb +67 -0
  90. data/lib/to_openstudio/construction/shade.rb +99 -0
  91. data/lib/to_openstudio/construction/window.rb +70 -0
  92. data/lib/to_openstudio/construction/windowshade.rb +196 -0
  93. data/lib/to_openstudio/construction_set.rb +266 -0
  94. data/lib/to_openstudio/geometry/aperture.rb +157 -0
  95. data/lib/to_openstudio/geometry/door.rb +150 -0
  96. data/lib/to_openstudio/geometry/face.rb +178 -0
  97. data/lib/to_openstudio/geometry/room.rb +442 -0
  98. data/lib/to_openstudio/geometry/shade.rb +79 -0
  99. data/lib/to_openstudio/hvac/Model.hvac.rb +641 -0
  100. data/lib/to_openstudio/hvac/ideal_air.rb +141 -0
  101. data/lib/to_openstudio/hvac/template.rb +169 -0
  102. data/lib/to_openstudio/load/electric_equipment.rb +87 -0
  103. data/lib/to_openstudio/load/gas_equipment.rb +88 -0
  104. data/lib/to_openstudio/load/infiltration.rb +86 -0
  105. data/lib/to_openstudio/load/lighting.rb +89 -0
  106. data/lib/to_openstudio/load/people.rb +91 -0
  107. data/lib/to_openstudio/load/setpoint_humidistat.rb +66 -0
  108. data/lib/to_openstudio/load/setpoint_thermostat.rb +62 -0
  109. data/lib/to_openstudio/load/ventilation.rb +87 -0
  110. data/lib/to_openstudio/material/opaque.rb +85 -0
  111. data/lib/to_openstudio/material/opaque_no_mass.rb +85 -0
  112. data/lib/to_openstudio/material/window_blind.rb +229 -0
  113. data/lib/to_openstudio/material/window_gas.rb +67 -0
  114. data/lib/to_openstudio/material/window_gas_custom.rb +108 -0
  115. data/lib/to_openstudio/material/window_gas_mixture.rb +70 -0
  116. data/lib/to_openstudio/material/window_glazing.rb +157 -0
  117. data/lib/to_openstudio/material/window_shade.rb +151 -0
  118. data/lib/to_openstudio/material/window_simpleglazsys.rb +64 -0
  119. data/lib/to_openstudio/model.rb +497 -0
  120. data/lib/to_openstudio/model_object.rb +52 -0
  121. data/lib/to_openstudio/program_type.rb +104 -0
  122. data/lib/to_openstudio/schedule/fixed_interval.rb +105 -0
  123. data/lib/to_openstudio/schedule/ruleset.rb +164 -0
  124. data/lib/to_openstudio/schedule/type_limit.rb +76 -0
  125. data/lib/to_openstudio/simulation/design_day.rb +96 -0
  126. data/lib/to_openstudio/simulation/parameter_model.rb +243 -0
  127. data/lib/to_openstudio/ventcool/control.rb +185 -0
  128. data/lib/to_openstudio/ventcool/opening.rb +189 -0
  129. data/lib/to_openstudio/ventcool/simulation.rb +101 -0
  130. metadata +301 -0
@@ -0,0 +1,52 @@
1
+ # *******************************************************************************
2
+ # Honeybee OpenStudio Gem, Copyright (c) 2020, Alliance for Sustainable
3
+ # Energy, LLC, Ladybug Tools LLC and other contributors. All rights reserved.
4
+ #
5
+ # Redistribution and use in source and binary forms, with or without
6
+ # modification, are permitted provided that the following conditions are met:
7
+ #
8
+ # (1) Redistributions of source code must retain the above copyright notice,
9
+ # this list of conditions and the following disclaimer.
10
+ #
11
+ # (2) Redistributions in binary form must reproduce the above copyright notice,
12
+ # this list of conditions and the following disclaimer in the documentation
13
+ # and/or other materials provided with the distribution.
14
+ #
15
+ # (3) Neither the name of the copyright holder nor the names of any contributors
16
+ # may be used to endorse or promote products derived from this software without
17
+ # specific prior written permission from the respective party.
18
+ #
19
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) AND ANY CONTRIBUTORS
20
+ # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21
+ # THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
+ # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER(S), ANY CONTRIBUTORS, THE
23
+ # UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY, NOR ANY OF
24
+ # THEIR EMPLOYEES, BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25
+ # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
26
+ # OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27
+ # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
28
+ # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29
+ # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
+ # *******************************************************************************
31
+
32
+ require 'honeybee/model_object'
33
+
34
+ require 'openstudio'
35
+
36
+ module Honeybee
37
+ class ModelObject
38
+
39
+ attr_reader :openstudio_object
40
+
41
+ # find an equivalent existing object in the openstudio model, return nil if not found
42
+ def find_existing_openstudio_object(openstudio_model)
43
+ raise 'find_existing_openstudio_object is not yet implemented for this ModelObject.'
44
+ end
45
+
46
+ # create a new object in the openstudio model and return it
47
+ def to_openstudio(openstudio_model)
48
+ raise 'to_openstudio is not yet implemented for this ModelObject.'
49
+ end
50
+
51
+ end # ModelObject
52
+ end # Honeybee
@@ -0,0 +1,104 @@
1
+ # *******************************************************************************
2
+ # Honeybee OpenStudio Gem, Copyright (c) 2020, Alliance for Sustainable
3
+ # Energy, LLC, Ladybug Tools LLC and other contributors. All rights reserved.
4
+ #
5
+ # Redistribution and use in source and binary forms, with or without
6
+ # modification, are permitted provided that the following conditions are met:
7
+ #
8
+ # (1) Redistributions of source code must retain the above copyright notice,
9
+ # this list of conditions and the following disclaimer.
10
+ #
11
+ # (2) Redistributions in binary form must reproduce the above copyright notice,
12
+ # this list of conditions and the following disclaimer in the documentation
13
+ # and/or other materials provided with the distribution.
14
+ #
15
+ # (3) Neither the name of the copyright holder nor the names of any contributors
16
+ # may be used to endorse or promote products derived from this software without
17
+ # specific prior written permission from the respective party.
18
+ #
19
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) AND ANY CONTRIBUTORS
20
+ # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21
+ # THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
+ # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER(S), ANY CONTRIBUTORS, THE
23
+ # UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY, NOR ANY OF
24
+ # THEIR EMPLOYEES, BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25
+ # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
26
+ # OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27
+ # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
28
+ # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29
+ # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
+ # *******************************************************************************
31
+
32
+ require 'honeybee/program_type'
33
+
34
+ require 'to_openstudio/model_object'
35
+
36
+ module Honeybee
37
+ class ProgramTypeAbridged
38
+
39
+ def find_existing_openstudio_object(openstudio_model)
40
+ model_space_type = openstudio_model.getSpaceTypeByName(@hash[:identifier])
41
+ return model_space_type.get unless model_space_type.empty?
42
+ nil
43
+ end
44
+
45
+ def to_openstudio(openstudio_model)
46
+ # create openstudio space type object
47
+ os_space_type = OpenStudio::Model::SpaceType.new(openstudio_model)
48
+ os_space_type.setName(@hash[:identifier])
49
+
50
+ # assign people
51
+ if @hash[:people]
52
+ people = PeopleAbridged.new(@hash[:people])
53
+ os_people = people.to_openstudio(openstudio_model)
54
+ os_people.setSpaceType(os_space_type)
55
+ end
56
+
57
+ # assign lighting
58
+ if @hash[:lighting]
59
+ lights = LightingAbridged.new(@hash[:lighting])
60
+ os_lights = lights.to_openstudio(openstudio_model)
61
+ os_lights.setSpaceType(os_space_type)
62
+ end
63
+
64
+ # assign electric equipment
65
+ if @hash[:electric_equipment]
66
+ electric_equipment = ElectricEquipmentAbridged.new(@hash[:electric_equipment])
67
+ os_electric_equipment = electric_equipment.to_openstudio(openstudio_model)
68
+ os_electric_equipment.setSpaceType(os_space_type)
69
+ end
70
+
71
+ # assign gas equipment
72
+ if @hash[:gas_equipment]
73
+ gas_equipment = GasEquipmentAbridged.new(@hash[:gas_equipment])
74
+ os_gas_equipment = gas_equipment.to_openstudio(openstudio_model)
75
+ os_gas_equipment.setSpaceType(os_space_type)
76
+ end
77
+
78
+ # assign infiltration
79
+ if @hash[:infiltration] && $use_simple_vent # only use infiltration with simple ventilation
80
+ infiltration = InfiltrationAbridged.new(@hash[:infiltration])
81
+ os_infiltration = infiltration.to_openstudio(openstudio_model)
82
+ os_infiltration.setSpaceType(os_space_type)
83
+ end
84
+
85
+ # assign ventilation
86
+ if @hash[:ventilation]
87
+ ventilation = VentilationAbridged.new(@hash[:ventilation])
88
+ os_ventilation = ventilation.to_openstudio(openstudio_model)
89
+ os_space_type.setDesignSpecificationOutdoorAir(os_ventilation)
90
+ end
91
+
92
+ # add setpoints from to a global hash that will be used to assign them to rooms
93
+ if @hash[:setpoint]
94
+ $programtype_setpoint_hash[@hash[:identifier]] = @hash[:setpoint]
95
+ end
96
+
97
+ os_space_type
98
+ end
99
+
100
+ end #ProgramTypeAbridged
101
+ end #Honeybee
102
+
103
+
104
+
@@ -0,0 +1,105 @@
1
+ # *******************************************************************************
2
+ # Honeybee OpenStudio Gem, Copyright (c) 2020, Alliance for Sustainable
3
+ # Energy, LLC, Ladybug Tools LLC and other contributors. All rights reserved.
4
+ #
5
+ # Redistribution and use in source and binary forms, with or without
6
+ # modification, are permitted provided that the following conditions are met:
7
+ #
8
+ # (1) Redistributions of source code must retain the above copyright notice,
9
+ # this list of conditions and the following disclaimer.
10
+ #
11
+ # (2) Redistributions in binary form must reproduce the above copyright notice,
12
+ # this list of conditions and the following disclaimer in the documentation
13
+ # and/or other materials provided with the distribution.
14
+ #
15
+ # (3) Neither the name of the copyright holder nor the names of any contributors
16
+ # may be used to endorse or promote products derived from this software without
17
+ # specific prior written permission from the respective party.
18
+ #
19
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) AND ANY CONTRIBUTORS
20
+ # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21
+ # THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
+ # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER(S), ANY CONTRIBUTORS, THE
23
+ # UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY, NOR ANY OF
24
+ # THEIR EMPLOYEES, BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25
+ # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
26
+ # OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27
+ # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
28
+ # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29
+ # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
+ # *******************************************************************************
31
+
32
+ require 'honeybee/schedule/fixed_interval'
33
+
34
+ require 'to_openstudio/model_object'
35
+
36
+ module Honeybee
37
+ class ScheduleFixedIntervalAbridged
38
+
39
+ def find_existing_openstudio_object(openstudio_model)
40
+ model_schedule = openstudio_model.getScheduleFixedIntervalByName(@hash[:identifier])
41
+ return model_schedule.get unless model_schedule.empty?
42
+ nil
43
+ end
44
+
45
+ def to_openstudio(openstudio_model)
46
+ # create the new schedule
47
+ os_fi_schedule = OpenStudio::Model::ScheduleFixedInterval.new(openstudio_model)
48
+ os_fi_schedule.setName(@hash[:identifier])
49
+
50
+ # assign start date
51
+ if @hash[:start_date]
52
+ os_fi_schedule.setStartMonth(@hash[:start_date][0])
53
+ os_fi_schedule.setStartDay(@hash[:start_date][1])
54
+ else
55
+ os_fi_schedule.setStartMonth(defaults[:start_date][:default][0])
56
+ os_fi_schedule.setStartDay(defaults[:start_date][:default][1])
57
+ end
58
+
59
+ # assign the interpolate value
60
+ unless @hash[:interpolate].nil?
61
+ os_fi_schedule.setInterpolatetoTimestep(@hash[:interpolate])
62
+ else
63
+ os_fi_schedule.setInterpolatetoTimestep(defaults[:interpolate][:default])
64
+ end
65
+
66
+ # assign the schedule type limit
67
+ if @hash[:schedule_type_limit]
68
+ schedule_type_limit = openstudio_model.getScheduleTypeLimitsByName(@hash[:schedule_type_limit])
69
+ unless schedule_type_limit.empty?
70
+ schedule_type_limit_object = schedule_type_limit.get
71
+ os_fi_schedule.setScheduleTypeLimits(schedule_type_limit_object)
72
+ end
73
+ end
74
+
75
+ # assign the timestep
76
+ if @hash[:timestep]
77
+ timestep = @hash[:timestep]
78
+ interval_length = 60 / timestep
79
+ os_fi_schedule.setIntervalLength(interval_length)
80
+ else
81
+ timestep = defaults[:timestep][:default]
82
+ interval_length = 60 / timestep
83
+ os_fi_schedule.setIntervalLength(interval_length)
84
+ end
85
+ openstudio_interval_length = OpenStudio::Time.new(0, 0, interval_length)
86
+
87
+ # assign the values as a timeseries
88
+ year_description = openstudio_model.getYearDescription
89
+
90
+ # set is leap year = true in case start date has 3 integers
91
+ if @hash[:start_date][2]
92
+ year_description.setIsLeapYear(true)
93
+ end
94
+
95
+ start_date = year_description.makeDate(@hash[:start_date][0], @hash[:start_date][1])
96
+
97
+ values = @hash[:values]
98
+ timeseries = OpenStudio::TimeSeries.new(start_date, openstudio_interval_length, OpenStudio.createVector(values), '')
99
+ os_fi_schedule.setTimeSeries(timeseries)
100
+
101
+ os_fi_schedule
102
+ end
103
+
104
+ end #ScheduleFixedIntervalAbridged
105
+ end #Honeybee
@@ -0,0 +1,164 @@
1
+ # *******************************************************************************
2
+ # Honeybee OpenStudio Gem, Copyright (c) 2020, Alliance for Sustainable
3
+ # Energy, LLC, Ladybug Tools LLC and other contributors. All rights reserved.
4
+ #
5
+ # Redistribution and use in source and binary forms, with or without
6
+ # modification, are permitted provided that the following conditions are met:
7
+ #
8
+ # (1) Redistributions of source code must retain the above copyright notice,
9
+ # this list of conditions and the following disclaimer.
10
+ #
11
+ # (2) Redistributions in binary form must reproduce the above copyright notice,
12
+ # this list of conditions and the following disclaimer in the documentation
13
+ # and/or other materials provided with the distribution.
14
+ #
15
+ # (3) Neither the name of the copyright holder nor the names of any contributors
16
+ # may be used to endorse or promote products derived from this software without
17
+ # specific prior written permission from the respective party.
18
+ #
19
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) AND ANY CONTRIBUTORS
20
+ # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21
+ # THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
+ # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER(S), ANY CONTRIBUTORS, THE
23
+ # UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY, NOR ANY OF
24
+ # THEIR EMPLOYEES, BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25
+ # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
26
+ # OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27
+ # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
28
+ # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29
+ # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
+ # *******************************************************************************
31
+
32
+ require 'honeybee/schedule/ruleset'
33
+
34
+ require 'to_openstudio/model_object'
35
+
36
+ module Honeybee
37
+ class ScheduleRulesetAbridged
38
+
39
+ def find_existing_openstudio_object(openstudio_model)
40
+ object = openstudio_model.getScheduleRulesetByName(@hash[:identifier])
41
+ return object.get if object.is_initialized
42
+ nil
43
+ end
44
+
45
+ def to_openstudio(openstudio_model)
46
+ # create openstudio schedule ruleset object
47
+ os_sch_ruleset = OpenStudio::Model::ScheduleRuleset.new(openstudio_model)
48
+ os_sch_ruleset.setName(@hash[:identifier])
49
+
50
+ # assign schedule type limit
51
+ sch_type_limit_obj = nil
52
+ if @hash[:schedule_type_limit]
53
+ schedule_type_limit = openstudio_model.getScheduleTypeLimitsByName(@hash[:schedule_type_limit])
54
+ unless schedule_type_limit.empty?
55
+ sch_type_limit_obj = schedule_type_limit.get
56
+ os_sch_ruleset.setScheduleTypeLimits(sch_type_limit_obj)
57
+ end
58
+ end
59
+
60
+ # loop through day schedules and create openstudio schedule day object
61
+ def_day_id = @hash[:default_day_schedule]
62
+ def_day_hash = nil
63
+ @hash[:day_schedules].each do |day_schedule|
64
+ if day_schedule[:identifier] != def_day_id
65
+ day_schedule_new = OpenStudio::Model::ScheduleDay.new(openstudio_model)
66
+ day_schedule_new.setName(day_schedule[:identifier])
67
+ unless sch_type_limit_obj.nil?
68
+ day_schedule_new.setScheduleTypeLimits(sch_type_limit_obj)
69
+ end
70
+ values_day_new = day_schedule[:values]
71
+ times_day_new = day_schedule[:times]
72
+ times_day_new.delete_at(0) # Remove [0, 0] from array at index 0.
73
+ times_day_new.push([24, 0]) # Add [24, 0] at index 0
74
+ values_day_new.each_index do |i|
75
+ time_until = OpenStudio::Time.new(0, times_day_new[i][0], times_day_new[i][1], 0)
76
+ day_schedule_new.addValue(time_until, values_day_new[i])
77
+ end
78
+ else
79
+ def_day_hash = day_schedule
80
+ end
81
+ end
82
+
83
+ # assign holiday schedule
84
+ if @hash[:holiday_schedule]
85
+ holiday_schedule = openstudio_model.getScheduleDayByName(@hash[:holiday_schedule])
86
+ unless holiday_schedule.empty?
87
+ holiday_schedule_object = holiday_schedule.get
88
+ os_sch_ruleset.setHolidaySchedule(holiday_schedule_object)
89
+ end
90
+ end
91
+
92
+ # assign summer design day schedule
93
+ if @hash[:summer_designday_schedule]
94
+ summer_design_day = openstudio_model.getScheduleDayByName(@hash[:summer_designday_schedule])
95
+ unless summer_design_day.empty?
96
+ summer_design_day_object = summer_design_day.get
97
+ os_sch_ruleset.setSummerDesignDaySchedule(summer_design_day_object)
98
+ end
99
+ end
100
+
101
+ # assign winter design day schedule
102
+ if @hash[:winter_designday_schedule]
103
+ winter_design_day = openstudio_model.getScheduleDayByName(@hash[:winter_designday_schedule])
104
+ unless winter_design_day.empty?
105
+ winter_design_day_object = winter_design_day.get
106
+ os_sch_ruleset.setWinterDesignDaySchedule(winter_design_day_object)
107
+ end
108
+ end
109
+
110
+ # assign default day schedule
111
+ def_day_sch = os_sch_ruleset.defaultDaySchedule
112
+ def_day_sch.setName(def_day_id)
113
+ unless sch_type_limit_obj.nil?
114
+ def_day_sch.setScheduleTypeLimits(sch_type_limit_obj)
115
+ end
116
+ values_day_new = def_day_hash[:values]
117
+ times_day_new = def_day_hash[:times]
118
+ times_day_new.delete_at(0) # Remove [0, 0] from array at index 0.
119
+ times_day_new.push([24, 0]) # Add [24, 0] at index 0
120
+ values_day_new.each_index do |i|
121
+ time_until = OpenStudio::Time.new(0, times_day_new[i][0], times_day_new[i][1], 0)
122
+ def_day_sch.addValue(time_until, values_day_new[i])
123
+ end
124
+
125
+ # assign schedule rules
126
+ if @hash[:schedule_rules]
127
+ @hash[:schedule_rules].each do |rule|
128
+ openstudio_schedule_rule = OpenStudio::Model::ScheduleRule.new(os_sch_ruleset)
129
+ openstudio_schedule_rule.setApplySunday(rule[:apply_sunday])
130
+ openstudio_schedule_rule.setApplyMonday(rule[:apply_monday])
131
+ openstudio_schedule_rule.setApplyTuesday(rule[:apply_tuesday])
132
+ openstudio_schedule_rule.setApplyWednesday(rule[:apply_wednesday])
133
+ openstudio_schedule_rule.setApplyThursday(rule[:apply_thursday])
134
+ openstudio_schedule_rule.setApplyFriday(rule[:apply_friday])
135
+ openstudio_schedule_rule.setApplySaturday(rule[:apply_saturday])
136
+ year_description = openstudio_model.getYearDescription
137
+ start_date = year_description.makeDate(rule[:start_date][0], rule[:start_date][1])
138
+ end_date = year_description.makeDate(rule[:end_date][0], rule[:end_date][1])
139
+ openstudio_schedule_rule.setStartDate(start_date)
140
+ openstudio_schedule_rule.setEndDate(end_date)
141
+
142
+ schedule_rule_day = openstudio_model.getScheduleDayByName(rule[:schedule_day])
143
+ unless schedule_rule_day.empty?
144
+ schedule_rule_day_object = schedule_rule_day.get
145
+
146
+ values_day = schedule_rule_day_object.values
147
+ times_day = schedule_rule_day_object.times
148
+
149
+ values_day.each_index do |i|
150
+ openstudio_schedule_rule.daySchedule.addValue(times_day[i], values_day[i])
151
+ end
152
+ end
153
+
154
+ #set schedule rule index
155
+ index = @hash[:schedule_rules].find_index(rule)
156
+ os_sch_ruleset.setScheduleRuleIndex(openstudio_schedule_rule, index)
157
+ end
158
+ end
159
+
160
+ os_sch_ruleset
161
+ end
162
+
163
+ end #ScheduleRulesetAbridged
164
+ end #Honeybee
@@ -0,0 +1,76 @@
1
+ # *******************************************************************************
2
+ # Honeybee OpenStudio Gem, Copyright (c) 2020, Alliance for Sustainable
3
+ # Energy, LLC, Ladybug Tools LLC and other contributors. All rights reserved.
4
+ #
5
+ # Redistribution and use in source and binary forms, with or without
6
+ # modification, are permitted provided that the following conditions are met:
7
+ #
8
+ # (1) Redistributions of source code must retain the above copyright notice,
9
+ # this list of conditions and the following disclaimer.
10
+ #
11
+ # (2) Redistributions in binary form must reproduce the above copyright notice,
12
+ # this list of conditions and the following disclaimer in the documentation
13
+ # and/or other materials provided with the distribution.
14
+ #
15
+ # (3) Neither the name of the copyright holder nor the names of any contributors
16
+ # may be used to endorse or promote products derived from this software without
17
+ # specific prior written permission from the respective party.
18
+ #
19
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) AND ANY CONTRIBUTORS
20
+ # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21
+ # THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
+ # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER(S), ANY CONTRIBUTORS, THE
23
+ # UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY, NOR ANY OF
24
+ # THEIR EMPLOYEES, BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25
+ # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
26
+ # OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27
+ # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
28
+ # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29
+ # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
+ # *******************************************************************************
31
+
32
+ require 'honeybee/schedule/type_limit'
33
+
34
+ require 'to_openstudio/model_object'
35
+
36
+ module Honeybee
37
+ class ScheduleTypeLimit
38
+
39
+ def find_existing_openstudio_object(openstudio_model)
40
+ object = openstudio_model.getScheduleTypeLimitsByName(@hash[:identifier])
41
+ return object.get if object.is_initialized
42
+ nil
43
+ end
44
+
45
+ def to_openstudio(openstudio_model)
46
+ # create schedule type limits openstudio object
47
+ os_type_limit = OpenStudio::Model::ScheduleTypeLimits.new(openstudio_model)
48
+ os_type_limit.setName(@hash[:identifier])
49
+
50
+ if @hash[:lower_limit] != nil and @hash[:lower_limit] != {:type => 'NoLimit'}
51
+ os_type_limit.setLowerLimitValue(@hash[:lower_limit])
52
+ end
53
+
54
+ if @hash[:upper_limit] != nil and @hash[:upper_limit] != {:type => 'NoLimit'}
55
+ os_type_limit.setUpperLimitValue(@hash[:upper_limit])
56
+ end
57
+
58
+ # assign numeric type
59
+ if @hash[:numeric_type]
60
+ os_type_limit.setNumericType(@hash[:numeric_type])
61
+ else
62
+ os_type_limit.setNumericType(defaults[:numeric_type])
63
+ end
64
+
65
+ # assign unit type
66
+ if @hash[:unit_type]
67
+ os_type_limit.setUnitType(@hash[:unit_type])
68
+ else
69
+ os_type_limit.setUnitType(defaults[:unit_type])
70
+ end
71
+
72
+ os_type_limit
73
+ end
74
+
75
+ end # ScheduleTypeLimit
76
+ end # Honeybee