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,85 @@
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/material/opaque'
33
+
34
+ require 'to_openstudio/model_object'
35
+
36
+ module Honeybee
37
+ class EnergyMaterial < ModelObject
38
+
39
+ def find_existing_openstudio_object(openstudio_model)
40
+ object = openstudio_model.getStandardOpaqueMaterialByName(@hash[:identifier])
41
+ return object.get if object.is_initialized
42
+ nil
43
+ end
44
+
45
+ def to_openstudio(openstudio_model)
46
+ # create standard opaque OpenStudio material
47
+ os_opaque_mat = OpenStudio::Model::StandardOpaqueMaterial.new(openstudio_model)
48
+ os_opaque_mat.setName(@hash[:identifier])
49
+ os_opaque_mat.setThickness(@hash[:thickness])
50
+ os_opaque_mat.setConductivity(@hash[:conductivity])
51
+ os_opaque_mat.setDensity(@hash[:density])
52
+ os_opaque_mat.setSpecificHeat(@hash[:specific_heat])
53
+
54
+ # assign roughness if it exists
55
+ if @hash[:roughness]
56
+ os_opaque_mat.setRoughness(@hash[:roughness])
57
+ else
58
+ os_opaque_mat.setRoughness(defaults[:roughness][:default])
59
+ end
60
+
61
+ # assign thermal absorptance if it exists
62
+ if @hash[:thermal_absorptance]
63
+ os_opaque_mat.setThermalAbsorptance(@hash[:thermal_absorptance])
64
+ else
65
+ os_opaque_mat.setThermalAbsorptance(defaults[:thermal_absorptance][:default])
66
+ end
67
+
68
+ # assign solar absorptance if it exists
69
+ if @hash[:solar_absorptance]
70
+ os_opaque_mat.setSolarAbsorptance(@hash[:solar_absorptance])
71
+ else
72
+ os_opaque_mat.setSolarAbsorptance(defaults[:solar_absorptance][:default])
73
+ end
74
+
75
+ # assign visible absorptance if it exists
76
+ if @hash[:visible_absorptance]
77
+ os_opaque_mat.setVisibleAbsorptance(@hash[:visible_absorptance])
78
+ else
79
+ os_opaque_mat.setVisibleAbsorptance(defaults[:visible_absorptance][:default])
80
+ end
81
+
82
+ os_opaque_mat
83
+ end
84
+ end # EnergyEnergyMaterial
85
+ end # Honeybee
@@ -0,0 +1,85 @@
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/material/opaque_no_mass'
33
+
34
+ require 'to_openstudio/model_object'
35
+
36
+ module Honeybee
37
+ class EnergyMaterialNoMass < ModelObject
38
+
39
+ def find_existing_openstudio_object(openstudio_model)
40
+ object = openstudio_model.getMasslessOpaqueMaterialByName(@hash[:identifier])
41
+ return object.get if object.is_initialized
42
+ nil
43
+ end
44
+
45
+ def to_openstudio(openstudio_model)
46
+
47
+ # create no mass material OpenStudio object and set identifier
48
+ os_nomass_mat = OpenStudio::Model::MasslessOpaqueMaterial.new(openstudio_model)
49
+ os_nomass_mat.setName(@hash[:identifier])
50
+
51
+ # assign thermal resistance
52
+ os_nomass_mat.setThermalResistance(@hash[:r_value])
53
+
54
+ # assign roughness if it exists
55
+ if @hash[:roughness]
56
+ os_nomass_mat.setRoughness(@hash[:roughness])
57
+ else
58
+ os_nomass_mat.setRoughness(defaults[:roughness][:default])
59
+ end
60
+
61
+ # assign thermal absorptance if it exists
62
+ if @hash[:thermal_absorptance]
63
+ os_nomass_mat.setThermalAbsorptance(@hash[:thermal_absorptance])
64
+ else
65
+ os_nomass_mat.setThermalAbsorptance(defaults[:thermal_absorptance][:default])
66
+ end
67
+
68
+ # assign solar absorptance if it exists
69
+ if @hash[:solar_absorptance]
70
+ os_nomass_mat.setSolarAbsorptance(@hash[:solar_absorptance])
71
+ else
72
+ os_nomass_mat.setSolarAbsorptance(defaults[:solar_absorptance][:default])
73
+ end
74
+
75
+ # assign visible absorptance if it exists
76
+ if @hash[:visible_absorptance]
77
+ os_nomass_mat.setVisibleAbsorptance(@hash[:visible_absorptance])
78
+ else
79
+ os_nomass_mat.setVisibleAbsorptance(defaults[:visible_absorptance][:default])
80
+ end
81
+
82
+ os_nomass_mat
83
+ end
84
+ end # EnergyMaterialNoMass
85
+ end # Honeybee
@@ -0,0 +1,229 @@
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/material/window_blind'
33
+
34
+ require 'to_openstudio/model_object'
35
+
36
+ module Honeybee
37
+ class EnergyWindowMaterialBlind
38
+
39
+ def find_existing_openstudio_object(openstudio_model)
40
+ object = openstudio_model.getBlindByName(@hash[:identifier])
41
+ return object.get if object.is_initialized
42
+ nil
43
+ end
44
+
45
+ def to_openstudio(openstudio_model)
46
+ # create blind OpenStudio object
47
+ os_blind = OpenStudio::Model::Blind.new(openstudio_model)
48
+ os_blind.setName(@hash[:identifier])
49
+
50
+ # assign slat orientation
51
+ if @hash[:slat_orientation]
52
+ os_blind.setSlatOrientation(@hash[:slat_orientation])
53
+ else
54
+ os_blind.setSlatOrientation(defaults[:slat_orientation][:default])
55
+ end
56
+
57
+ # assign slat width
58
+ if @hash[:slat_width]
59
+ os_blind.setSlatWidth(@hash[:slat_width])
60
+ else
61
+ os_blind.setSlatWidth(defaults[:slat_width][:default])
62
+ end
63
+
64
+ # assign slat separation if it exists
65
+ if @hash[:slat_separation]
66
+ os_blind.setSlatSeparation(@hash[:slat_separation])
67
+ else
68
+ os_blind.setSlatSeparation(defaults[:slat_separation][:default])
69
+ end
70
+
71
+ # assign slat thickness if it exists
72
+ if @hash[:slat_thickness]
73
+ os_blind.setSlatThickness(@hash[:slat_thickness])
74
+ else
75
+ os_blind.setSlatThickness(defaults[:slat_thickness][:default])
76
+ end
77
+
78
+ # assign slat angle if it exists
79
+ if @hash[:slat_angle]
80
+ os_blind.setSlatAngle(@hash[:slat_angle])
81
+ else
82
+ os_blind.setSlatAngle(defaults[:slat_angle][:default])
83
+ end
84
+
85
+ # assign slat conductivity if it exists
86
+ if @hash[:slat_conductivity]
87
+ os_blind.setSlatConductivity(@hash[:slat_conductivity])
88
+ else
89
+ os_blind.setSlatConductivity(defaults[:slat_conductivity][:default])
90
+ end
91
+
92
+ # assign beam solar transmittance if it exists
93
+ if @hash[:beam_solar_transmittance]
94
+ os_blind.setSlatBeamSolarTransmittance(@hash[:beam_solar_transmittance])
95
+ else
96
+ os_blind.setSlatBeamSolarTransmittance(defaults[:beam_solar_transmittance][:default])
97
+ end
98
+
99
+ # assign beam solar reflectance front if it exists
100
+ if @hash[:beam_solar_reflectance]
101
+ os_blind.setFrontSideSlatBeamSolarReflectance(@hash[:beam_solar_reflectance])
102
+ else
103
+ os_blind.setFrontSideSlatBeamSolarReflectance(
104
+ defaults[:beam_solar_reflectance][:default])
105
+ end
106
+
107
+ # assign beam solar reflectance back
108
+ if @hash[:beam_solar_reflectance_back]
109
+ os_blind.setBackSideSlatBeamSolarReflectance(@hash[:beam_solar_reflectance_back])
110
+ else
111
+ os_blind.setBackSideSlatBeamSolarReflectance(
112
+ defaults[:beam_solar_reflectance_back][:default])
113
+ end
114
+
115
+ # assign diffuse solar transmittance
116
+ if @hash[:diffuse_solar_transmittance]
117
+ os_blind.setSlatDiffuseSolarTransmittance(@hash[:diffuse_solar_transmittance])
118
+ else
119
+ os_blind.setSlatDiffuseSolarTransmittance(
120
+ defaults[:diffuse_solar_transmittance][:default])
121
+ end
122
+
123
+ # assign front diffuse solar reflectance
124
+ if @hash[:diffuse_solar_reflectance]
125
+ os_blind.setFrontSideSlatDiffuseSolarReflectance(@hash[:diffuse_solar_reflectance])
126
+ else
127
+ os_blind.setFrontSideSlatDiffuseSolarReflectance(
128
+ defaults[:diffuse_solar_reflectance][:default])
129
+ end
130
+
131
+ # assign back diffuse solar reflectance
132
+ if @hash[:diffuse_solar_reflectance_back]
133
+ os_blind.setBackSideSlatDiffuseSolarReflectance(@hash[:diffuse_solar_reflectance_back])
134
+ else
135
+ os_blind.setBackSideSlatDiffuseSolarReflectance(
136
+ defaults[:diffuse_solar_reflectance_back][:default])
137
+ end
138
+
139
+ # assign front diffuse visible transmittance
140
+ if @hash[:diffuse_visible_transmittance]
141
+ os_blind.setSlatDiffuseVisibleTransmittance(@hash[:diffuse_visible_transmittance])
142
+ else
143
+ os_blind.setSlatDiffuseVisibleTransmittance(
144
+ defaults[:diffuse_visible_transmittance][:default])
145
+ end
146
+
147
+ # assign front diffuse visible reflectance
148
+ if @hash[:diffuse_visible_reflectance]
149
+ os_blind.setFrontSideSlatDiffuseVisibleReflectance(@hash[:diffuse_visible_reflectance])
150
+ else
151
+ os_blind.setFrontSideSlatDiffuseVisibleReflectance(
152
+ defaults[:diffuse_visible_reflectance][:default])
153
+ end
154
+
155
+ # assign back diffuse visible reflectance
156
+ if @hash[:diffuse_visible_reflectance_back]
157
+ os_blind.setBackSideSlatDiffuseVisibleReflectance(@hash[:diffuse_visible_reflectance_back])
158
+ else
159
+ os_blind.setBackSideSlatDiffuseVisibleReflectance(
160
+ defaults[:diffuse_visible_reflectance_back][:default])
161
+ end
162
+
163
+ # assign infrared transmittance
164
+ if @hash[:infrared_transmittance]
165
+ os_blind.setSlatInfraredHemisphericalTransmittance(@hash[:infrared_transmittance])
166
+ else
167
+ os_blind.setSlatInfraredHemisphericalTransmittance(
168
+ defaults[:infrared_transmittance][:default])
169
+ end
170
+
171
+ # assign front side emissivity
172
+ if @hash[:emissivity]
173
+ os_blind.setFrontSideSlatInfraredHemisphericalEmissivity(@hash[:emissivity])
174
+ else
175
+ os_blind.setFrontSideSlatInfraredHemisphericalEmissivity(
176
+ defaults[:emissivity][:default])
177
+ end
178
+
179
+ # assign back side emissivity
180
+ if @hash[:emissivity_back]
181
+ os_blind.setBackSideSlatInfraredHemisphericalEmissivity(@hash[:emissivity_back])
182
+ else
183
+ os_blind.setBackSideSlatInfraredHemisphericalEmissivity(
184
+ defaults[:emissivity_back][:default])
185
+ end
186
+
187
+ # assign distance to glass
188
+ if @hash[:distance_to_glass]
189
+ os_blind.setBlindtoGlassDistance(@hash[:distance_to_glass])
190
+ else
191
+ os_blind.setBlindtoGlassDistance(defaults[:distance_to_glass][:default])
192
+ end
193
+
194
+ # assign top opening multiplier
195
+ if @hash[:top_opening_multiplier]
196
+ os_blind.setBlindTopOpeningMultiplier(@hash[:top_opening_multiplier])
197
+ else
198
+ os_blind.setBlindTopOpeningMultiplier(
199
+ defaults[:top_opening_multiplier][:default])
200
+ end
201
+
202
+ # assign bottom opening multiplier
203
+ if @hash[:bottom_opening_multiplier]
204
+ os_blind.setBlindBottomOpeningMultiplier(@hash[:bottom_opening_multiplier])
205
+ else
206
+ os_blind.setBlindBottomOpeningMultiplier(
207
+ defaults[:bottom_opening_multiplier][:default])
208
+ end
209
+
210
+ # assign left opening multiplier
211
+ if @hash[:left_opening_multiplier]
212
+ os_blind.setBlindLeftSideOpeningMultiplier(@hash[:left_opening_multiplier])
213
+ else
214
+ os_blind.setBlindLeftSideOpeningMultiplier(
215
+ defaults[:left_opening_multiplier][:default])
216
+ end
217
+
218
+ # assign right opening multiplier
219
+ if @hash[:right_opening_multiplier]
220
+ os_blind.setBlindRightSideOpeningMultiplier(@hash[:right_opening_multiplier])
221
+ else
222
+ os_blind.setBlindRightSideOpeningMultiplier(
223
+ defaults[:right_opening_multiplier][:default])
224
+ end
225
+
226
+ os_blind
227
+ end
228
+ end # EnergyWindowMaterialBlind
229
+ 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/material/window_gas'
33
+
34
+ require 'to_openstudio/model_object'
35
+
36
+ module Honeybee
37
+ class EnergyWindowMaterialGas
38
+
39
+ def find_existing_openstudio_object(openstudio_model)
40
+ object = openstudio_model.getGasByName(@hash[:identifier])
41
+ return object.get if object.is_initialized
42
+ nil
43
+ end
44
+
45
+ def to_openstudio(openstudio_model)
46
+ # create window gas OpenStudio object
47
+ os_window_gas = OpenStudio::Model::Gas.new(openstudio_model)
48
+ os_window_gas.setName(@hash[:identifier])
49
+
50
+ # assign thickness
51
+ if @hash[:thickness]
52
+ os_window_gas.setThickness(@hash[:thickness])
53
+ else
54
+ os_window_gas.setThickness(defaults[:thickness][:default])
55
+ end
56
+
57
+ # assign gas type
58
+ if @hash[:gas_type]
59
+ os_window_gas.setGasType(@hash[:gas_type])
60
+ else
61
+ os_window_gas.setGasType(defaults[:gas_type][:default])
62
+ end
63
+
64
+ os_window_gas
65
+ end
66
+ end # EnergyWindowMaterialGas
67
+ end # Honeybee