honeybee-openstudio 2.17.3 → 2.19.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.
@@ -0,0 +1,42 @@
1
+ # *******************************************************************************
2
+ # Honeybee OpenStudio Gem, Copyright (c) 2020, Alliance for Sustainable
3
+ # Energy, LLC, Ladybug Tools LLC and other contributors. All rights reserved.
4
+ #
5
+ # Redistribution and use in source and binary forms, with or without
6
+ # modification, are permitted provided that the following conditions are met:
7
+ #
8
+ # (1) Redistributions of source code must retain the above copyright notice,
9
+ # this list of conditions and the following disclaimer.
10
+ #
11
+ # (2) Redistributions in binary form must reproduce the above copyright notice,
12
+ # this list of conditions and the following disclaimer in the documentation
13
+ # and/or other materials provided with the distribution.
14
+ #
15
+ # (3) Neither the name of the copyright holder nor the names of any contributors
16
+ # may be used to endorse or promote products derived from this software without
17
+ # specific prior written permission from the respective party.
18
+ #
19
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) AND ANY CONTRIBUTORS
20
+ # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21
+ # THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
+ # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER(S), ANY CONTRIBUTORS, THE
23
+ # UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY, NOR ANY OF
24
+ # THEIR EMPLOYEES, BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25
+ # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
26
+ # OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27
+ # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
28
+ # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29
+ # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
+ # *******************************************************************************
31
+
32
+ require 'honeybee/model_object'
33
+
34
+ module Honeybee
35
+ class InternalMassAbridged < ModelObject
36
+
37
+ def defaults
38
+ @@schema[:components][:schemas][:InternalMassAbridged][:properties]
39
+ end
40
+
41
+ end #InternalMassAbridged
42
+ end #Honeybee
@@ -34,7 +34,7 @@ require 'honeybee/model_object'
34
34
  module Honeybee
35
35
  class EnergyMaterialNoMass < ModelObject
36
36
 
37
- def defaults
37
+ def self.defaults
38
38
  @@schema[:components][:schemas][:EnergyMaterialNoMass][:properties]
39
39
  end
40
40
 
@@ -34,6 +34,9 @@
34
34
 
35
35
  require 'to_openstudio'
36
36
 
37
+ require 'fileutils'
38
+ require 'pathname'
39
+
37
40
  # start the measure
38
41
  class FromHoneybeeModel < OpenStudio::Measure::ModelMeasure
39
42
  # human readable name
@@ -96,6 +99,7 @@ class FromHoneybeeModel < OpenStudio::Measure::ModelMeasure
96
99
  honeybee_model = Honeybee::Model.read_from_disk(model_json)
97
100
 
98
101
  if schedule_csv_dir && !schedule_csv_dir.empty?
102
+ schedule_csv_dir = Pathname.new(schedule_csv_dir).cleanpath
99
103
  if !Dir.exist?(schedule_csv_dir)
100
104
  runner.registerError("Directory for exported CSV Schedules does not exist '#{schedule_csv_dir}'")
101
105
  return false
@@ -106,6 +110,18 @@ class FromHoneybeeModel < OpenStudio::Measure::ModelMeasure
106
110
  STDOUT.flush
107
111
  honeybee_model.to_openstudio_model(model)
108
112
  STDOUT.flush
113
+
114
+ generated_files_dir = "#{runner.workflow.absoluteRootDir}/generated_files"
115
+ if schedule_csv_dir && !schedule_csv_dir.empty?
116
+ if Dir.exist?(schedule_csv_dir)
117
+ runner.registerInfo("Copying exported schedules from '#{schedule_csv_dir}' to '#{generated_files_dir}'")
118
+ FileUtils.mkdir_p(generated_files_dir)
119
+ Dir.glob("#{schedule_csv_dir}/*.csv").each do |file|
120
+ FileUtils.cp(file, generated_files_dir)
121
+ end
122
+ end
123
+ end
124
+
109
125
  return true
110
126
  end
111
127
  end
data/lib/to_openstudio.rb CHANGED
@@ -84,10 +84,11 @@ require 'to_openstudio/schedule/type_limit'
84
84
  require 'to_openstudio/schedule/fixed_interval'
85
85
  require 'to_openstudio/schedule/ruleset'
86
86
 
87
- # import the ventilation objects
87
+ # import the ventilation and internal mass objects
88
88
  require 'to_openstudio/ventcool/control'
89
89
  require 'to_openstudio/ventcool/opening'
90
90
  require 'to_openstudio/ventcool/simulation'
91
+ require 'to_openstudio/internalmass'
91
92
 
92
93
  # extend the simulation objects
93
94
  require 'to_openstudio/simulation/design_day'
@@ -45,7 +45,7 @@ module Honeybee
45
45
  end
46
46
 
47
47
  def to_openstudio(openstudio_model)
48
- # write the shaded and unsaded versions of the construciton into the model
48
+ # write the shaded and unsaded versions of the construction into the model
49
49
  # reverse the shaded and unshaded identifiers so unshaded one is assigned to apertures
50
50
  unshd_id = @hash[:identifier]
51
51
  shd_id = @hash[:window_construction][:identifier]
@@ -180,7 +180,7 @@ module Honeybee
180
180
 
181
181
  if !face[:properties][:energy][:construction]
182
182
  if face[:boundary_condition][:type] == 'Adiabatic'
183
- # assign default interior construciton for Adiabatic Faces
183
+ # assign default interior construction for Adiabatic Faces
184
184
  if face[:face_type] != 'Wall'
185
185
  interior_construction = closest_interior_construction(openstudio_model, os_space, face[:face_type])
186
186
  unless interior_construction.nil?
@@ -188,7 +188,7 @@ module Honeybee
188
188
  end
189
189
  end
190
190
  elsif face[:face_type] == 'AirBoundary'
191
- # assign default air boundary construciton for AirBoundary face types
191
+ # assign default air boundary construction for AirBoundary face types
192
192
  air_construction = closest_air_construction(openstudio_model, os_space)
193
193
  unless air_construction.nil?
194
194
  os_surface.setConstruction(air_construction)
@@ -362,6 +362,15 @@ module Honeybee
362
362
  end
363
363
  end
364
364
 
365
+ # assign any internal masses if specified
366
+ if @hash[:properties][:energy][:internal_masses]
367
+ @hash[:properties][:energy][:internal_masses].each do |int_mass|
368
+ hb_int_mass = InternalMassAbridged.new(int_mass)
369
+ os_int_mass = hb_int_mass.to_openstudio(openstudio_model, os_space)
370
+ os_int_mass.setSpace(os_space)
371
+ end
372
+ end
373
+
365
374
  os_space
366
375
  end
367
376
 
@@ -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 'to_openstudio/model_object'
33
+
34
+ module Honeybee
35
+ class InternalMassAbridged
36
+
37
+ def to_openstudio(openstudio_model, parent)
38
+ # create the internal mass definition and set properties
39
+ os_mass_def = OpenStudio::Model::InternalMassDefinition.new(openstudio_model)
40
+ os_mass_def.setName(@hash[:identifier] + '::' + parent.name.get)
41
+ os_mass_def.setSurfaceArea(@hash[:area])
42
+ construction = openstudio_model.getConstructionByName(@hash[:construction])
43
+ unless construction.empty?
44
+ os_construction = construction.get
45
+ os_mass_def.setConstruction(os_construction)
46
+ end
47
+
48
+ # assign the internal mass definition to an internal mass object
49
+ os_mass = OpenStudio::Model::InternalMass.new(os_mass_def)
50
+ os_mass.setName(@hash[:identifier] + '::' + parent.name.get)
51
+
52
+ os_mass
53
+ end
54
+
55
+ end #InternalMassAbridged
56
+ end #Honeybee
@@ -49,6 +49,13 @@ module Honeybee
49
49
  end
50
50
  file.puts row.join(',')
51
51
  end
52
+
53
+ # make sure data is written to the disk one way or the other
54
+ begin
55
+ file.fsync
56
+ rescue
57
+ file.flush
58
+ end
52
59
  end
53
60
  end
54
61
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: honeybee-openstudio
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.17.3
4
+ version: 2.19.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tanushree Charan
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: exe
13
13
  cert_chain: []
14
- date: 2021-05-21 00:00:00.000000000 Z
14
+ date: 2021-06-15 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: bundler
@@ -168,6 +168,10 @@ files:
168
168
  - lib/files/reopt_assumptions.json
169
169
  - lib/files/urbanopt_Gemfile
170
170
  - lib/from_openstudio.rb
171
+ - lib/from_openstudio/construction/air.rb
172
+ - lib/from_openstudio/construction/opaque.rb
173
+ - lib/from_openstudio/construction/shade.rb
174
+ - lib/from_openstudio/construction/window.rb
171
175
  - lib/from_openstudio/geometry/aperture.rb
172
176
  - lib/from_openstudio/geometry/door.rb
173
177
  - lib/from_openstudio/geometry/face.rb
@@ -204,6 +208,7 @@ files:
204
208
  - lib/honeybee/geometry/shade.rb
205
209
  - lib/honeybee/hvac/ideal_air.rb
206
210
  - lib/honeybee/hvac/template.rb
211
+ - lib/honeybee/internalmass.rb
207
212
  - lib/honeybee/load/daylight.rb
208
213
  - lib/honeybee/load/electric_equipment.rb
209
214
  - lib/honeybee/load/gas_equipment.rb
@@ -281,6 +286,7 @@ files:
281
286
  - lib/to_openstudio/hvac/Model.hvac.rb
282
287
  - lib/to_openstudio/hvac/ideal_air.rb
283
288
  - lib/to_openstudio/hvac/template.rb
289
+ - lib/to_openstudio/internalmass.rb
284
290
  - lib/to_openstudio/load/daylight.rb
285
291
  - lib/to_openstudio/load/electric_equipment.rb
286
292
  - lib/to_openstudio/load/gas_equipment.rb