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,92 @@
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
+ # import the honeybee objects which we will extend
33
+ require 'honeybee'
34
+
35
+ # extend the compound objects that house the other objects
36
+ require 'to_openstudio/model'
37
+ require 'to_openstudio/model_object'
38
+ require 'to_openstudio/construction_set'
39
+ require 'to_openstudio/program_type'
40
+
41
+ # extend the geometry objects
42
+ require 'to_openstudio/geometry/shade'
43
+ require 'to_openstudio/geometry/door'
44
+ require 'to_openstudio/geometry/aperture'
45
+ require 'to_openstudio/geometry/face'
46
+ require 'to_openstudio/geometry/room'
47
+
48
+ # extend the HVAC objects
49
+ require 'to_openstudio/hvac/ideal_air'
50
+ require 'to_openstudio/hvac/template'
51
+
52
+ # extend the construction objects
53
+ require 'to_openstudio/construction/opaque'
54
+ require 'to_openstudio/construction/window'
55
+ require 'to_openstudio/construction/windowshade'
56
+ require 'to_openstudio/construction/shade'
57
+ require 'to_openstudio/construction/air'
58
+
59
+ # extend the material objects
60
+ require 'to_openstudio/material/opaque'
61
+ require 'to_openstudio/material/opaque_no_mass'
62
+ require 'to_openstudio/material/window_gas'
63
+ require 'to_openstudio/material/window_gas_mixture'
64
+ require 'to_openstudio/material/window_gas_custom'
65
+ require 'to_openstudio/material/window_blind'
66
+ require 'to_openstudio/material/window_glazing'
67
+ require 'to_openstudio/material/window_shade'
68
+ require 'to_openstudio/material/window_simpleglazsys'
69
+
70
+ # extend the load objects
71
+ require 'to_openstudio/load/people'
72
+ require 'to_openstudio/load/lighting'
73
+ require 'to_openstudio/load/electric_equipment'
74
+ require 'to_openstudio/load/gas_equipment'
75
+ require 'to_openstudio/load/infiltration'
76
+ require 'to_openstudio/load/ventilation'
77
+ require 'to_openstudio/load/setpoint_thermostat'
78
+ require 'to_openstudio/load/setpoint_humidistat'
79
+
80
+ # extend the schedule objects
81
+ require 'to_openstudio/schedule/type_limit'
82
+ require 'to_openstudio/schedule/fixed_interval'
83
+ require 'to_openstudio/schedule/ruleset'
84
+
85
+ # import the ventilation objects
86
+ require 'to_openstudio/ventcool/control'
87
+ require 'to_openstudio/ventcool/opening'
88
+ require 'to_openstudio/ventcool/simulation'
89
+
90
+ # extend the simulation objects
91
+ require 'to_openstudio/simulation/design_day'
92
+ require 'to_openstudio/simulation/parameter_model'
@@ -0,0 +1,56 @@
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/construction/air'
33
+
34
+ require 'to_openstudio/model_object'
35
+
36
+ module Honeybee
37
+ class AirBoundaryConstructionAbridged
38
+
39
+ def find_existing_openstudio_object(openstudio_model)
40
+ object = openstudio_model.getConstructionByName(@hash[:identifier])
41
+ return object.get if object.is_initialized
42
+ nil
43
+ end
44
+
45
+ def to_openstudio(openstudio_model)
46
+ os_construction = OpenStudio::Model::ConstructionAirBoundary.new(openstudio_model)
47
+ os_construction.setName(@hash[:identifier])
48
+ os_construction.setSolarAndDaylightingMethod('GroupedZones')
49
+ os_construction.setRadiantExchangeMethod('GroupedZones')
50
+ os_construction.setAirExchangeMethod('None')
51
+
52
+ os_construction
53
+ end
54
+
55
+ end #AirBoundaryConstructionAbridged
56
+ end #Honeybee
@@ -0,0 +1,67 @@
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/construction/opaque'
33
+
34
+ require 'to_openstudio/model_object'
35
+
36
+ module Honeybee
37
+ class OpaqueConstructionAbridged
38
+
39
+ def find_existing_openstudio_object(openstudio_model)
40
+ object = openstudio_model.getConstructionByName(@hash[:identifier])
41
+ return object.get if object.is_initialized
42
+ nil
43
+ end
44
+
45
+ def to_openstudio(openstudio_model)
46
+ # create construction and set identifier
47
+ os_construction = OpenStudio::Model::Construction.new(openstudio_model)
48
+ os_construction.setName(@hash[:identifier])
49
+
50
+ # create material vector
51
+ os_materials = OpenStudio::Model::MaterialVector.new
52
+ # loop through each layer and add to material vector
53
+ @hash[:layers].each do |layer|
54
+ material_identifier = layer
55
+ material = openstudio_model.getMaterialByName(material_identifier)
56
+ unless material.empty?
57
+ os_material = material.get
58
+ os_materials << os_material
59
+ end
60
+ end
61
+ os_construction.setLayers(os_materials)
62
+
63
+ os_construction
64
+ end
65
+
66
+ end #OpaqueConstructionAbridged
67
+ end #Honeybee
@@ -0,0 +1,99 @@
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/construction/shade'
33
+
34
+ require 'to_openstudio/model_object'
35
+
36
+ module Honeybee
37
+ class ShadeConstruction < ModelObject
38
+
39
+ def find_existing_openstudio_object(openstudio_model)
40
+ object = openstudio_model.getConstructionByName(@hash[:identifier])
41
+ return object.get if object.is_initialized
42
+ nil
43
+ end
44
+
45
+ def to_openstudio(openstudio_model)
46
+
47
+ os_construction = OpenStudio::Model::Construction.new(openstudio_model)
48
+ os_construction.setName(@hash[:identifier])
49
+ os_materials = OpenStudio::Model::MaterialVector.new
50
+
51
+ # create standard glazing if is specular is true
52
+ if @hash[:is_specular] == true
53
+ os_material = OpenStudio::Model::StandardGlazing.new(openstudio_model)
54
+
55
+ # assign solar reflectance
56
+ if @hash[:solar_reflectance]
57
+ os_material.setFrontSideSolarReflectanceatNormalIncidence(@hash[:solar_reflectance])
58
+ else
59
+ os_material.setFrontSideSolarReflectanceatNormalIncidence(defaults[:solar_reflectance][:default])
60
+ end
61
+
62
+ # assign visible reflectance
63
+ if @hash[:visible_reflectance]
64
+ os_material.setFrontSideVisibleReflectanceatNormalIncidence(@hash[:visible_reflectance])
65
+ else
66
+ os_material.setFrontSideVisibleReflectanceatNormalIncidence(defaults[:solar_reflectance][:default])
67
+ end
68
+
69
+ # create standard opaque material if is specular is false
70
+ else
71
+ os_material = OpenStudio::Model::StandardOpaqueMaterial.new(openstudio_model)
72
+
73
+ # assign solar reflectance
74
+ if @hash[:solar_reflectance]
75
+ os_material.setSolarReflectance(OpenStudio::OptionalDouble.new(@hash[:solar_reflectance]))
76
+ else
77
+ os_material.setSolarReflectance(OpenStudio::OptionalDouble.new(defaults[:visible_reflectance][:default]))
78
+ end
79
+
80
+ # assign visible reflectance
81
+ if @hash[:visible_reflectance]
82
+ os_material.setVisibleReflectance(OpenStudio::OptionalDouble.new(@hash[:visible_reflectance]))
83
+ else
84
+ os_material.setVisibleReflectance(OpenStudio::OptionalDouble.new(defaults[:solar_reflectance][:default]))
85
+ end
86
+
87
+ # assign specific heat
88
+ os_material.setSpecificHeat(100) # bug in OpenStudio default Specific Heat is 0.1.
89
+ end
90
+
91
+ # add materials and set layers to construction
92
+ os_materials << os_material
93
+ os_construction.setLayers(os_materials)
94
+ os_construction
95
+
96
+ end
97
+
98
+ end #ShadeConstruction
99
+ end #Honeybee
@@ -0,0 +1,70 @@
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/construction/window'
33
+
34
+ require 'to_openstudio/model_object'
35
+
36
+ module Honeybee
37
+ class WindowConstructionAbridged
38
+
39
+ def find_existing_openstudio_object(openstudio_model)
40
+ object = openstudio_model.getConstructionByName(@hash[:identifier])
41
+ return object.get if object.is_initialized
42
+ nil
43
+ end
44
+
45
+ def to_openstudio(openstudio_model)
46
+ # create construction and set identifier
47
+ os_construction = OpenStudio::Model::Construction.new(openstudio_model)
48
+ os_construction.setName(@hash[:identifier])
49
+
50
+ # create material vector
51
+ os_materials = OpenStudio::Model::MaterialVector.new
52
+ # loop through each layer and add to material vector
53
+ @hash[:layers].each do |layer|
54
+ material_identifier = layer
55
+ material = openstudio_model.getMaterialByName(material_identifier)
56
+ unless material.empty?
57
+ os_material = material.get
58
+ os_materials << os_material
59
+ end
60
+ end
61
+ os_construction.setLayers(os_materials)
62
+
63
+ os_construction
64
+ end
65
+
66
+ end #WindowConstructionAbridged
67
+ end #Honeybee
68
+
69
+
70
+
@@ -0,0 +1,196 @@
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/construction/windowshade'
33
+
34
+ require 'to_openstudio/model_object'
35
+
36
+ module Honeybee
37
+ class WindowConstructionShadeAbridged
38
+
39
+ attr_reader :construction, :shade_construction, :shade_location, :shade_material, :control_type, :setpoint, :schedule
40
+
41
+ def find_existing_openstudio_object(openstudio_model)
42
+ object = openstudio_model.getConstructionByName(@hash[:identifier])
43
+ return object.get if object.is_initialized
44
+ nil
45
+ end
46
+
47
+ def to_openstudio(openstudio_model)
48
+ # write the shaded and unsaded versions of the construciton into the model
49
+ # reverse the shaded and unshaded identifiers so unshaded one is assigned to apertures
50
+ unshd_id = @hash[:identifier]
51
+ shd_id = @hash[:window_construction][:identifier]
52
+ @hash[:window_construction][:identifier] = unshd_id
53
+ @hash[:identifier] = shd_id
54
+
55
+ # create the unshaded construction
56
+ unshd_constr_obj = WindowConstructionAbridged.new(@hash[:window_construction])
57
+ @construction = unshd_constr_obj.to_openstudio(openstudio_model)
58
+
59
+ # create the shaded construction
60
+ @shade_construction = OpenStudio::Model::Construction.new(openstudio_model)
61
+ @shade_construction.setName(shd_id)
62
+
63
+ # create the layers of the unshaded construction into which we will insert the shade
64
+ os_materials = []
65
+ @hash[:window_construction][:layers].each do |layer|
66
+ material_identifier = layer
67
+ material = openstudio_model.getMaterialByName(material_identifier)
68
+ unless material.empty?
69
+ os_material = material.get
70
+ os_materials << os_material
71
+ end
72
+ end
73
+
74
+ # figure out where to insert the shade material and insert it
75
+ if @hash[:shade_location]
76
+ @shade_location = @hash[:shade_location]
77
+ else
78
+ @shade_location = defaults[:shade_location][:default]
79
+ end
80
+
81
+ # insert the shade material
82
+ shd_mat_name = openstudio_model.getMaterialByName(@hash[:shade_material])
83
+ unless shd_mat_name.empty?
84
+ @shade_material = shd_mat_name.get
85
+ obj_type = @shade_material.iddObject.name
86
+ end
87
+ unless @shade_material.nil?
88
+ if obj_type == 'OS:WindowMaterial:StandardGlazing'
89
+ if @shade_location == 'Interior'
90
+ os_materials[-1] = @shade_material
91
+ elsif @shade_location == 'Exterior' | os_materials.length < 2
92
+ os_materials[0] = @shade_material
93
+ else # middle glass pane
94
+ os_materials[-3] = @shade_material
95
+ end
96
+ else
97
+ if @shade_location == 'Interior'
98
+ os_materials << @shade_material
99
+ elsif @shade_location == 'Exterior'
100
+ os_materials.unshift(@shade_material)
101
+ else # between glass shade/blind
102
+ split_gap = split_gas_gap(openstudio_model, os_materials[-2], @shade_material)
103
+ os_materials[-2] = split_gap
104
+ os_materials.insert(-2, @shade_material)
105
+ os_materials.insert(-2, split_gap)
106
+ end
107
+ end
108
+ end
109
+
110
+ # assign the layers to the shaded construction
111
+ os_materials_vec = OpenStudio::Model::MaterialVector.new
112
+ os_materials.each do |mat|
113
+ os_materials_vec << mat
114
+ end
115
+ @shade_construction.setLayers(os_materials)
116
+
117
+ # set defaults for control type, setpoint, and schedule
118
+ if @hash[:control_type]
119
+ @control_type = @hash[:control_type]
120
+ else
121
+ @control_type = defaults[:control_type][:default]
122
+ end
123
+
124
+ if @hash[:setpoint]
125
+ @setpoint = @hash[:setpoint]
126
+ else
127
+ @setpoint = defaults[:setpoint][:default]
128
+ end
129
+
130
+ unless @hash[:schedule].nil?
131
+ schedule_ref = openstudio_model.getScheduleByName(@hash[:schedule])
132
+ unless schedule_ref.empty?
133
+ @schedule = schedule_ref.get
134
+ if @control_type == 'AlwaysOn'
135
+ @control_type = 'OnIfScheduleAllows'
136
+ end
137
+ end
138
+ end
139
+
140
+ @shade_construction
141
+ end
142
+
143
+ def to_openstudio_shading_control(openstudio_model)
144
+ # add a WindowShadingControl object to a model for a given aperture and room
145
+ os_shade_control = OpenStudio::Model::ShadingControl.new(@shade_construction)
146
+
147
+ # figure out the shading type
148
+ unless @shade_material.nil?
149
+ obj_type = @shade_material.iddObject.name
150
+ end
151
+ if obj_type == 'OS:WindowMaterial:StandardGlazing'
152
+ shd_type = 'SwitchableGlazing'
153
+ elsif obj_type == 'OS:WindowMaterial:Blind'
154
+ if @shade_location == 'Between'
155
+ shd_type = 'BetweenGlassBlind'
156
+ else
157
+ shd_type = @shade_location + 'Blind'
158
+ end
159
+ else
160
+ if @shade_location == 'Between'
161
+ shd_type = 'BetweenGlassShade'
162
+ else
163
+ shd_type = @shade_location + 'Shade'
164
+ end
165
+ end
166
+ os_shade_control.setShadingType(shd_type)
167
+
168
+ # set the shade control type and schedule
169
+ os_shade_control.setShadingControlType(@control_type)
170
+ unless @setpoint.nil?
171
+ os_shade_control.setSetpoint(@setpoint)
172
+ end
173
+ unless @schedule.nil?
174
+ os_shade_control.setSchedule(@schedule)
175
+ end
176
+
177
+ os_shade_control
178
+ end
179
+
180
+ def split_gas_gap(openstudio_model, original_gap, shade_material)
181
+ # split a gas gap material in two when it is interrupeted by a shade/blind
182
+ if shade_material.is_a? OpenStudio::Model::Blind
183
+ shd_thick = 0
184
+ else
185
+ shd_thick = shade_material.thickness
186
+ end
187
+ gap_thick = (original_gap.thickness - shd_thick) / 2
188
+ gap_obj = $gas_gap_hash[original_gap.name.get]
189
+ new_gap = gap_obj.to_openstudio(openstudio_model)
190
+ new_gap.setName(original_gap.name.get + gap_thick.to_s)
191
+ new_gap.setThickness(gap_thick)
192
+ new_gap
193
+ end
194
+
195
+ end #WindowConstructionShadeAbridged
196
+ end #Honeybee