honeybee-openstudio 2.6.9 → 2.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (120) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/pull_request.yaml +25 -0
  3. data/.gitignore +1 -0
  4. data/README.md +5 -5
  5. data/Rakefile +2 -7
  6. data/doc_templates/README.md.erb +42 -0
  7. data/doc_templates/copyright_erb.txt +2 -2
  8. data/doc_templates/copyright_ruby.txt +2 -2
  9. data/honeybee-openstudio.gemspec +11 -7
  10. data/lib/files/Honeybee.rb +7 -7
  11. data/lib/from_openstudio.rb +49 -0
  12. data/lib/from_openstudio/geometry/aperture.rb +136 -0
  13. data/lib/from_openstudio/geometry/door.rb +136 -0
  14. data/lib/from_openstudio/geometry/face.rb +174 -0
  15. data/lib/from_openstudio/geometry/room.rb +121 -0
  16. data/lib/from_openstudio/geometry/shade.rb +87 -0
  17. data/lib/from_openstudio/model.rb +123 -0
  18. data/lib/from_openstudio/model_object.rb +43 -0
  19. data/lib/from_openstudio/simulation/design_day.rb +123 -0
  20. data/lib/from_openstudio/simulation/parameter_model.rb +93 -0
  21. data/lib/from_openstudio/simulation/simulation_output.rb +67 -0
  22. data/lib/{from_honeybee.rb → honeybee.rb} +47 -40
  23. data/lib/{from_honeybee → honeybee}/_defaults/energy_default.json +0 -0
  24. data/lib/{from_honeybee → honeybee}/_defaults/model.json +0 -0
  25. data/lib/{from_honeybee → honeybee}/_defaults/simulation-parameter.json +1 -0
  26. data/lib/honeybee/construction/air.rb +42 -0
  27. data/lib/honeybee/construction/opaque.rb +42 -0
  28. data/lib/honeybee/construction/shade.rb +42 -0
  29. data/lib/honeybee/construction/window.rb +51 -0
  30. data/lib/honeybee/construction/windowshade.rb +43 -0
  31. data/lib/honeybee/construction_set.rb +42 -0
  32. data/lib/{from_honeybee → honeybee}/extension.rb +5 -5
  33. data/lib/honeybee/geometry/aperture.rb +42 -0
  34. data/lib/honeybee/geometry/door.rb +42 -0
  35. data/lib/honeybee/geometry/face.rb +48 -0
  36. data/lib/honeybee/geometry/room.rb +56 -0
  37. data/lib/honeybee/geometry/shade.rb +42 -0
  38. data/lib/honeybee/hvac/ideal_air.rb +42 -0
  39. data/lib/honeybee/hvac/template.rb +73 -0
  40. data/lib/honeybee/load/electric_equipment.rb +42 -0
  41. data/lib/honeybee/load/gas_equipment.rb +42 -0
  42. data/lib/honeybee/load/infiltration.rb +42 -0
  43. data/lib/{from_honeybee/simulation/extension.rb → honeybee/load/lighting.rb} +10 -13
  44. data/lib/honeybee/load/people.rb +42 -0
  45. data/lib/honeybee/load/setpoint_humidistat.rb +46 -0
  46. data/lib/honeybee/load/setpoint_thermostat.rb +46 -0
  47. data/lib/honeybee/load/ventilation.rb +42 -0
  48. data/lib/honeybee/material/opaque.rb +42 -0
  49. data/lib/honeybee/material/opaque_no_mass.rb +42 -0
  50. data/lib/honeybee/material/window_blind.rb +42 -0
  51. data/lib/honeybee/material/window_gas.rb +42 -0
  52. data/lib/honeybee/material/window_gas_custom.rb +42 -0
  53. data/lib/honeybee/material/window_gas_mixture.rb +42 -0
  54. data/lib/honeybee/material/window_glazing.rb +42 -0
  55. data/lib/honeybee/material/window_shade.rb +42 -0
  56. data/lib/honeybee/material/window_simpleglazsys.rb +42 -0
  57. data/lib/honeybee/model.rb +87 -0
  58. data/lib/{from_honeybee → honeybee}/model_object.rb +16 -18
  59. data/lib/honeybee/program_type.rb +56 -0
  60. data/lib/honeybee/schedule/fixed_interval.rb +42 -0
  61. data/lib/honeybee/schedule/ruleset.rb +42 -0
  62. data/lib/honeybee/schedule/type_limit.rb +42 -0
  63. data/lib/honeybee/simulation/design_day.rb +42 -0
  64. data/lib/honeybee/simulation/parameter_model.rb +86 -0
  65. data/lib/honeybee/simulation/simulation_output.rb +42 -0
  66. data/lib/honeybee/ventcool/control.rb +42 -0
  67. data/lib/honeybee/ventcool/opening.rb +46 -0
  68. data/lib/honeybee/ventcool/simulation.rb +42 -0
  69. data/lib/measures/from_honeybee_model/LICENSE.md +18 -22
  70. data/lib/measures/from_honeybee_model/measure.rb +4 -4
  71. data/lib/measures/from_honeybee_model/measure.xml +14 -37
  72. data/lib/measures/from_honeybee_model/tests/from_honeybee_model_test.rb +2 -2
  73. data/lib/measures/from_honeybee_simulation_parameter/LICENSE.md +18 -22
  74. data/lib/measures/from_honeybee_simulation_parameter/measure.rb +4 -4
  75. data/lib/measures/from_honeybee_simulation_parameter/measure.xml +15 -20
  76. data/lib/measures/from_honeybee_simulation_parameter/tests/from_honeybee_simulation_parameter_test.rb +3 -3
  77. data/lib/to_openstudio.rb +92 -0
  78. data/lib/{from_honeybee → to_openstudio}/construction/air.rb +7 -16
  79. data/lib/{from_honeybee → to_openstudio}/construction/opaque.rb +9 -19
  80. data/lib/{from_honeybee → to_openstudio}/construction/shade.rb +17 -26
  81. data/lib/{from_honeybee → to_openstudio}/construction/window.rb +12 -21
  82. data/lib/{from_honeybee → to_openstudio}/construction/windowshade.rb +8 -23
  83. data/lib/{from_honeybee → to_openstudio}/construction_set.rb +11 -23
  84. data/lib/{from_honeybee → to_openstudio}/geometry/aperture.rb +22 -32
  85. data/lib/{from_honeybee → to_openstudio}/geometry/door.rb +21 -31
  86. data/lib/{from_honeybee → to_openstudio}/geometry/face.rb +11 -28
  87. data/lib/{from_honeybee → to_openstudio}/geometry/room.rb +15 -38
  88. data/lib/{from_honeybee → to_openstudio}/geometry/shade.rb +8 -18
  89. data/lib/{from_honeybee → to_openstudio}/hvac/Model.hvac.rb +2 -2
  90. data/lib/{from_honeybee → to_openstudio}/hvac/ideal_air.rb +10 -19
  91. data/lib/{from_honeybee → to_openstudio}/hvac/template.rb +9 -43
  92. data/lib/{from_honeybee → to_openstudio}/load/electric_equipment.rb +12 -21
  93. data/lib/{from_honeybee → to_openstudio}/load/gas_equipment.rb +13 -22
  94. data/lib/{from_honeybee → to_openstudio}/load/infiltration.rb +14 -23
  95. data/lib/{from_honeybee → to_openstudio}/load/lighting.rb +10 -19
  96. data/lib/{from_honeybee → to_openstudio}/load/people.rb +9 -18
  97. data/lib/{from_honeybee → to_openstudio}/load/setpoint_humidistat.rb +8 -17
  98. data/lib/{from_honeybee → to_openstudio}/load/setpoint_thermostat.rb +8 -17
  99. data/lib/{from_honeybee → to_openstudio}/load/ventilation.rb +11 -20
  100. data/lib/{from_honeybee → to_openstudio}/material/opaque.rb +7 -16
  101. data/lib/{from_honeybee → to_openstudio}/material/opaque_no_mass.rb +8 -17
  102. data/lib/{from_honeybee → to_openstudio}/material/window_blind.rb +27 -36
  103. data/lib/{from_honeybee → to_openstudio}/material/window_gas.rb +8 -17
  104. data/lib/{from_honeybee → to_openstudio}/material/window_gas_custom.rb +10 -20
  105. data/lib/{from_honeybee → to_openstudio}/material/window_gas_mixture.rb +9 -18
  106. data/lib/{from_honeybee → to_openstudio}/material/window_glazing.rb +21 -30
  107. data/lib/{from_honeybee → to_openstudio}/material/window_shade.rb +17 -26
  108. data/lib/{from_honeybee → to_openstudio}/material/window_simpleglazsys.rb +7 -16
  109. data/lib/{from_honeybee → to_openstudio}/model.rb +13 -103
  110. data/lib/to_openstudio/model_object.rb +52 -0
  111. data/lib/{from_honeybee → to_openstudio}/program_type.rb +14 -34
  112. data/lib/{from_honeybee → to_openstudio}/schedule/fixed_interval.rb +11 -21
  113. data/lib/{from_honeybee → to_openstudio}/schedule/ruleset.rb +43 -44
  114. data/lib/{from_honeybee → to_openstudio}/schedule/type_limit.rb +9 -21
  115. data/lib/{from_honeybee/simulation/designday.rb → to_openstudio/simulation/design_day.rb} +7 -16
  116. data/lib/{from_honeybee/simulation/parameter.rb → to_openstudio/simulation/parameter_model.rb} +8 -57
  117. data/lib/{from_honeybee → to_openstudio}/ventcool/control.rb +8 -17
  118. data/lib/{from_honeybee → to_openstudio}/ventcool/opening.rb +8 -22
  119. data/lib/{from_honeybee → to_openstudio}/ventcool/simulation.rb +7 -16
  120. metadata +105 -134
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e9807e9ab401382c3e1b8e98b86e5fe65c3efa5172ddd77103964f5bf69a7a8b
4
- data.tar.gz: bec119606bedf177e4d6c77a80f6768fddd248545c73082d5808d0245724611c
3
+ metadata.gz: 0c308040a73a632d6641d26c48070ce70d7d5330759f4a7f218c8f28b59eb22f
4
+ data.tar.gz: 9e07605c838a6f27c172aafb9e86bf2182d038b15b50009328eb8c2a0c9e9051
5
5
  SHA512:
6
- metadata.gz: 3a68b8ffb0e9cbf31578366fde5120249016529862a1c984339b3946110c7a526de5375291d22e43f2fd565655dda0ddf1310eeec11d9d17b7c2000677e0214e
7
- data.tar.gz: 8fddadbc9346bc173447a88a747dc4cd424966d4050a686be799fe52b64643977efe4d33b8e83269b395fc9b4233e9f08ff810a854b10c10b69e9281b0c9c982
6
+ metadata.gz: 120ea2c1d4b8f7d9cfef3d504ac0a10de92672d0e51866016503e65b5af020b89c8971599d758b0e06530ee9937bb0b3c3b0b68ca07cc491fa3aa81f47538948
7
+ data.tar.gz: fb9ae57299da465ae81a8a6e1c758842cd616f1ab5623a80d53b8c6f1166bf528ce32ae6d1a6e3ebc6b56fe7ee47c39f20927ce937f065237bf14ddade7a7125
@@ -0,0 +1,25 @@
1
+ name: Pull Request CI
2
+
3
+ on:
4
+ pull_request:
5
+ branches:
6
+ - master
7
+ - develop
8
+
9
+ jobs:
10
+ test_3x:
11
+ runs-on: ubuntu-18.04
12
+ steps:
13
+ - name: Check out repository
14
+ uses: actions/checkout@v2
15
+ - name: Run Tests
16
+ run: |
17
+ echo $(pwd)
18
+ echo $(ls)
19
+ docker pull nrel/openstudio:3.1.0
20
+ docker run --name test --rm -d -t -v $(pwd):/work -w /work nrel/openstudio:3.1.0
21
+ docker exec -t test pwd
22
+ docker exec -t test ls
23
+ docker exec -t test bundle update
24
+ docker exec -t test bundle exec rake
25
+ docker kill test
data/.gitignore CHANGED
@@ -7,6 +7,7 @@
7
7
  /coverage/
8
8
  /doc/
9
9
  /pkg/
10
+ /spec/output/
10
11
  /spec/reports/
11
12
  /spec/test/
12
13
  /tmp/
data/README.md CHANGED
@@ -18,15 +18,15 @@ parameter JSON files to the measures. Here is a sample where the items in parent
18
18
  should be replaced with specific file paths:
19
19
 
20
20
  ```
21
- {
22
- "measure_paths": [(PATH TO THIS REPOSITORY)/lib/measures"],
21
+ {
22
+ "measure_paths": [(PATH TO THIS REPOSITORY)/lib/measures"],
23
23
  "steps": [
24
24
  {
25
- "arguments": {"model_json": (PATH TO MODEL JSON)},
25
+ "arguments": {"model_json": (PATH TO MODEL JSON)},
26
26
  "measure_dir_name": "from_honeybee_model"
27
- },
27
+ },
28
28
  {
29
- "arguments": {"simulation_parameter_json": (PATH TO SIMULATION PARAMETER JSON)},
29
+ "arguments": {"simulation_parameter_json": (PATH TO SIMULATION PARAMETER JSON)},
30
30
  "measure_dir_name": "from_honeybee_simulation_parameter"
31
31
  }
32
32
  ]
data/Rakefile CHANGED
@@ -8,14 +8,9 @@ RuboCop::RakeTask.new
8
8
 
9
9
  # Load in the rake tasks from the base openstudio-extension gem
10
10
  require 'openstudio/extension/rake_task'
11
- require 'from_honeybee/extension'
12
- #require 'from_honeybee/simulation/extension'
11
+ require 'honeybee/extension'
13
12
 
14
13
  os_extension = OpenStudio::Extension::RakeTask.new
15
- os_extension.set_extension_class(FromHoneybee::Extension)
16
-
17
- #TODO: Does this need to be implemented?
18
- #os_extension.set_extension_class(FromHoneybee::ExtensionSimulationParameter)
14
+ os_extension.set_extension_class(Honeybee::Extension)
19
15
 
20
16
  task default: :spec
21
-
@@ -0,0 +1,42 @@
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
+ <% end %>
30
+
31
+ <% if arguments.size == 0 %>
32
+ <%= "This measure does not have any user arguments" %>
33
+ <% end %>
34
+
35
+ <% if outputs.size > 0 %>
36
+ ## Outputs
37
+ <% output_names = [] %>
38
+ <% outputs.each do |output| %>
39
+ <% output_names << output[:display_name] %>
40
+ <% end %>
41
+ <%= output_names.join(", ") %>
42
+ <% end %>
@@ -1,8 +1,8 @@
1
1
  <%
2
2
  # *******************************************************************************
3
- # Honeybee OpenStudio Gem, Copyright (c) 2020, Alliance for Sustainable
3
+ # Honeybee OpenStudio Gem, Copyright (c) 2020, Alliance for Sustainable
4
4
  # Energy, LLC, Ladybug Tools LLC and other contributors. All rights reserved.
5
- #
5
+ #
6
6
  # Redistribution and use in source and binary forms, with or without
7
7
  # modification, are permitted provided that the following conditions are met:
8
8
  #
@@ -1,7 +1,7 @@
1
1
  # *******************************************************************************
2
- # Honeybee OpenStudio Gem, Copyright (c) 2020, Alliance for Sustainable
2
+ # Honeybee OpenStudio Gem, Copyright (c) 2020, Alliance for Sustainable
3
3
  # Energy, LLC, Ladybug Tools LLC and other contributors. All rights reserved.
4
- #
4
+ #
5
5
  # Redistribution and use in source and binary forms, with or without
6
6
  # modification, are permitted provided that the following conditions are met:
7
7
  #
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = 'honeybee-openstudio'
7
- spec.version = '2.6.9'
7
+ spec.version = '2.7.0'
8
8
  spec.authors = ['Tanushree Charan', 'Dan Macumber', 'Chris Mackey', 'Mostapha Sadeghipour Roudsari']
9
9
  spec.email = ['tanushree.charan@nrel.gov', 'chris@ladybug.tools']
10
10
 
@@ -21,14 +21,18 @@ Gem::Specification.new do |spec|
21
21
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
22
  spec.require_paths = ['lib']
23
23
 
24
- spec.add_development_dependency 'bundler', '~> 2.1'
25
- spec.add_development_dependency 'rake', '13.0'
26
- spec.add_development_dependency 'rspec', '3.9'
27
- spec.add_development_dependency 'rubocop', '~> 0.54.0'
24
+ if /^2.5/.match(RUBY_VERSION)
25
+ spec.required_ruby_version = "~> 2.5.0"
26
+
27
+ spec.add_development_dependency "bundler", "~> 2.1"
28
+ spec.add_development_dependency "public_suffix", "~> 3.1.1"
29
+ spec.add_development_dependency "json-schema", "~> 2.8.1"
30
+ spec.add_development_dependency "rake", "~> 13.0"
31
+ spec.add_development_dependency "rspec", "~> 3.9"
32
+ spec.add_development_dependency "rubocop", "~> 0.54.0"
33
+ end
28
34
 
29
- spec.add_dependency 'json-schema'
30
35
  spec.add_dependency 'json_pure'
31
36
  spec.add_dependency 'openstudio-extension', '0.2.3'
32
37
  spec.add_dependency 'openstudio-standards', '~> 0.2.11'
33
- spec.add_dependency 'public_suffix', '~> 3.1.1'
34
38
  end
@@ -1,7 +1,7 @@
1
1
  # *******************************************************************************
2
- # Honeybee OpenStudio Gem, Copyright (c) 2020, Alliance for Sustainable
2
+ # Honeybee OpenStudio Gem, Copyright (c) 2020, Alliance for Sustainable
3
3
  # Energy, LLC, Ladybug Tools LLC and other contributors. All rights reserved.
4
- #
4
+ #
5
5
  # Redistribution and use in source and binary forms, with or without
6
6
  # modification, are permitted provided that the following conditions are met:
7
7
  #
@@ -49,7 +49,7 @@ module URBANopt
49
49
  # do initialization of class variables in thread safe way
50
50
  @@instance_lock.synchronize do
51
51
  if @@osw.nil?
52
-
52
+
53
53
  # load the OSW for this class
54
54
  osw_path = File.join(File.dirname(__FILE__), 'honeybee_workflow.osw')
55
55
  File.open(osw_path, 'r') do |file|
@@ -74,7 +74,7 @@ module URBANopt
74
74
  feature_name = feature.name
75
75
  if feature_names.size == 1
76
76
  feature_name = feature_names[0]
77
- end
77
+ end
78
78
 
79
79
  # deep clone of @@osw before we configure it
80
80
  osw = Marshal.load(Marshal.dump(@@osw))
@@ -84,7 +84,7 @@ module URBANopt
84
84
  osw[:description] = feature_name
85
85
 
86
86
  if feature_type == 'Building'
87
- # set the honeybee JSON key to the from_honeybee_model measure
87
+ # set the honeybee JSON key to the honeybee_model measure
88
88
  OpenStudio::Extension.set_measure_argument(
89
89
  osw, 'from_honeybee_model', 'model_json', feature.detailed_model_filename)
90
90
 
@@ -95,7 +95,7 @@ module URBANopt
95
95
  OpenStudio::Extension.set_measure_argument(
96
96
  osw, 'create_typical_building_from_model', 'system_type', system_type)
97
97
  end
98
-
98
+
99
99
  # add the feature id and name to the reporting measure
100
100
  OpenStudio::Extension.set_measure_argument(
101
101
  osw, 'default_feature_reports', 'feature_id', feature_id)
@@ -107,7 +107,7 @@ module URBANopt
107
107
  end
108
108
  return osw
109
109
  end
110
-
110
+
111
111
  end #HoneybeeMapper
112
112
  end #Scenario
113
113
  end #URBANopt
@@ -0,0 +1,49 @@
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 'from_openstudio/model'
37
+ require 'from_openstudio/model_object'
38
+
39
+ # extend the geometry objects
40
+ require 'from_openstudio/geometry/aperture'
41
+ require 'from_openstudio/geometry/door'
42
+ require 'from_openstudio/geometry/face'
43
+ require 'from_openstudio/geometry/room'
44
+ require 'from_openstudio/geometry/shade'
45
+
46
+ # extend the simulation objects
47
+ require 'from_openstudio/simulation/design_day'
48
+ require 'from_openstudio/simulation/parameter_model'
49
+ require 'from_openstudio/simulation/simulation_output'
@@ -0,0 +1,136 @@
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/geometry/aperture'
33
+
34
+ require 'to_openstudio/model_object'
35
+
36
+ module Honeybee
37
+ class Aperture < ModelObject
38
+
39
+ def self.from_sub_surface(sub_surface, site_transformation)
40
+ hash = {}
41
+ hash[:type] = 'Aperture'
42
+ hash[:identifier] = clean_identifier(sub_surface.nameString)
43
+ hash[:display_name] = sub_surface.nameString
44
+ hash[:user_data] = {handle: sub_surface.handle.to_s}
45
+ hash[:properties] = properties_from_sub_surface(sub_surface)
46
+ hash[:geometry] = geometry_from_sub_surface(sub_surface, site_transformation)
47
+ hash[:boundary_condition] = boundary_condition_from_sub_surface(sub_surface)
48
+
49
+ sub_surface_type = sub_surface.subSurfaceType
50
+ hash[:is_operable] = (sub_surface_type == 'OperableWindow')
51
+
52
+ indoor_shades = indoor_shades_from_sub_surface(sub_surface)
53
+ hash[:indoor_shades] = indoor_shades if !indoor_shades.empty?
54
+
55
+ outdoor_shades = outdoor_shades_from_sub_surface(sub_surface)
56
+ hash[:outdoor_shades] = outdoor_shades if !outdoor_shades.empty?
57
+
58
+ hash
59
+ end
60
+
61
+ def self.properties_from_sub_surface(sub_surface)
62
+ hash = {}
63
+ hash[:type] = 'AperturePropertiesAbridged'
64
+ hash[:energy] = energy_properties_from_sub_surface(sub_surface)
65
+ hash
66
+ end
67
+
68
+ def self.energy_properties_from_sub_surface(sub_surface)
69
+ hash = {}
70
+ hash[:type] = 'ApertureEnergyPropertiesAbridged'
71
+
72
+ construction = sub_surface.construction
73
+ if !construction.empty?
74
+ hash[:construction] = clean_identifier(construction.get.nameString)
75
+ end
76
+
77
+ hash
78
+ end
79
+
80
+ def self.geometry_from_sub_surface(sub_surface, site_transformation)
81
+ result = {}
82
+ result[:type] = 'Face3D'
83
+ result[:boundary] = []
84
+ vertices = site_transformation * sub_surface.vertices
85
+ vertices.each do |v|
86
+ result[:boundary] << [v.x, v.y, v.z]
87
+ end
88
+ result
89
+ end
90
+
91
+ def self.boundary_condition_from_sub_surface(sub_surface)
92
+ result = {}
93
+ surface = sub_surface.surface.get
94
+ surface_type = surface.surfaceType
95
+ adjacent_sub_surface = sub_surface.adjacentSubSurface
96
+ if !adjacent_sub_surface.empty?
97
+ adjacent_space = clean_identifier(adjacent_sub_surface.get.space.get.nameString)
98
+ adjacent_surface = clean_identifier(adjacent_sub_surface.get.surface.get.nameString)
99
+ adjacent_sub_surface = clean_identifier(adjacent_sub_surface.get.nameString)
100
+ result = {type: 'Surface', boundary_condition_objects: [adjacent_sub_surface, adjacent_surface, adjacent_space]}
101
+ elsif surface.isGroundSurface
102
+ result = {type: 'Ground'}
103
+ elsif surface_type == 'Adiabatic'
104
+ result = {type: 'Adiabatic'}
105
+ else
106
+ sun_exposure = (surface.sunExposure == 'SunExposed')
107
+ wind_exposure = (surface.windExposure == 'WindExposed')
108
+ view_factor = sub_surface.viewFactortoGround
109
+ if view_factor.empty?
110
+ view_factor = {type: 'Autocalculate'}
111
+ else
112
+ view_factor = view_factor.get
113
+ end
114
+ result = {type: 'Outdoors', sun_exposure: sun_exposure,
115
+ wind_exposure: wind_exposure, view_factor: view_factor}
116
+ end
117
+ result
118
+ end
119
+
120
+ def self.indoor_shades_from_sub_surface(sub_surface)
121
+ []
122
+ end
123
+
124
+ def self.outdoor_shades_from_sub_surface(sub_surface)
125
+ result = []
126
+ sub_surface.shadingSurfaceGroups.each do |shading_surface_group|
127
+ site_transformation = shading_surface_group.siteTransformation
128
+ shading_surface_group.shadingSurfaces.each do |shading_surface|
129
+ result << Shade.from_shading_surface(shading_surface, site_transformation)
130
+ end
131
+ end
132
+ result
133
+ end
134
+
135
+ end # Aperture
136
+ end # Honeybee
@@ -0,0 +1,136 @@
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/geometry/door'
33
+
34
+ require 'to_openstudio/model_object'
35
+
36
+ module Honeybee
37
+ class Door
38
+
39
+ def self.from_sub_surface(sub_surface, site_transformation)
40
+ hash = {}
41
+ hash[:type] = 'Door'
42
+ hash[:identifier] = clean_identifier(sub_surface.nameString)
43
+ hash[:display_name] = sub_surface.nameString
44
+ hash[:user_data] = {handle: sub_surface.handle.to_s}
45
+ hash[:properties] = properties_from_sub_surface(sub_surface)
46
+ hash[:geometry] = geometry_from_sub_surface(sub_surface, site_transformation)
47
+ hash[:boundary_condition] = boundary_condition_from_sub_surface(sub_surface)
48
+
49
+ sub_surface_type = sub_surface.subSurfaceType
50
+ hash[:is_glass] = (sub_surface_type == 'GlassDoor')
51
+
52
+ indoor_shades = indoor_shades_from_sub_surface(sub_surface)
53
+ hash[:indoor_shades] = indoor_shades if !indoor_shades.empty?
54
+
55
+ outdoor_shades = outdoor_shades_from_sub_surface(sub_surface)
56
+ hash[:outdoor_shades] = outdoor_shades if !outdoor_shades.empty?
57
+
58
+ hash
59
+ end
60
+
61
+ def self.properties_from_sub_surface(sub_surface)
62
+ hash = {}
63
+ hash[:type] = 'DoorPropertiesAbridged'
64
+ hash[:energy] = energy_properties_from_sub_surface(sub_surface)
65
+ hash
66
+ end
67
+
68
+ def self.energy_properties_from_sub_surface(sub_surface)
69
+ hash = {}
70
+ hash[:type] = 'DoorEnergyPropertiesAbridged'
71
+
72
+ construction = sub_surface.construction
73
+ if !construction.empty?
74
+ hash[:construction] = clean_identifier(construction.get.nameString)
75
+ end
76
+
77
+ hash
78
+ end
79
+
80
+ def self.geometry_from_sub_surface(sub_surface, site_transformation)
81
+ result = {}
82
+ result[:type] = 'Face3D'
83
+ result[:boundary] = []
84
+ vertices = site_transformation * sub_surface.vertices
85
+ vertices.each do |v|
86
+ result[:boundary] << [v.x, v.y, v.z]
87
+ end
88
+ result
89
+ end
90
+
91
+ def self.boundary_condition_from_sub_surface(sub_surface)
92
+ result = {}
93
+ surface = sub_surface.surface.get
94
+ surface_type = surface.surfaceType
95
+ adjacent_sub_surface = sub_surface.adjacentSubSurface
96
+ if !adjacent_sub_surface.empty?
97
+ adjacent_space = clean_identifier(adjacent_sub_surface.get.space.get.nameString)
98
+ adjacent_surface = clean_identifier(adjacent_sub_surface.get.surface.get.nameString)
99
+ adjacent_sub_surface = clean_identifier(adjacent_sub_surface.get.nameString)
100
+ result = {type: 'Surface', boundary_condition_objects: [adjacent_sub_surface, adjacent_surface, adjacent_space]}
101
+ elsif surface.isGroundSurface
102
+ result = {type: 'Ground'}
103
+ elsif surface_type == 'Adiabatic'
104
+ result = {type: 'Adiabatic'}
105
+ else
106
+ sun_exposure = (surface.sunExposure == 'SunExposed')
107
+ wind_exposure = (surface.windExposure == 'WindExposed')
108
+ view_factor = sub_surface.viewFactortoGround
109
+ if view_factor.empty?
110
+ view_factor = {type: 'Autocalculate'}
111
+ else
112
+ view_factor = view_factor.get
113
+ end
114
+ result = {type: 'Outdoors', sun_exposure: sun_exposure,
115
+ wind_exposure: wind_exposure, view_factor: view_factor}
116
+ end
117
+ result
118
+ end
119
+
120
+ def self.indoor_shades_from_sub_surface(sub_surface)
121
+ []
122
+ end
123
+
124
+ def self.outdoor_shades_from_sub_surface(sub_surface)
125
+ result = []
126
+ sub_surface.shadingSurfaceGroups.each do |shading_surface_group|
127
+ site_transformation = shading_surface_group.siteTransformation
128
+ shading_surface_group.shadingSurfaces.each do |shading_surface|
129
+ result << Shade.from_shading_surface(shading_surface, site_transformation)
130
+ end
131
+ end
132
+ result
133
+ end
134
+
135
+ end # Door
136
+ end # Honeybee