honeybee-openstudio 2.6.9 → 2.7.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/pull_request.yaml +25 -0
- data/.gitignore +1 -0
- data/Gemfile +1 -1
- data/README.md +5 -5
- data/Rakefile +2 -7
- data/doc_templates/README.md.erb +42 -0
- data/doc_templates/copyright_erb.txt +2 -2
- data/doc_templates/copyright_ruby.txt +2 -2
- data/honeybee-openstudio.gemspec +13 -9
- data/lib/files/Honeybee.rb +8 -8
- data/lib/files/urbanopt_Gemfile +14 -6
- data/lib/from_openstudio.rb +49 -0
- data/lib/from_openstudio/geometry/aperture.rb +136 -0
- data/lib/from_openstudio/geometry/door.rb +136 -0
- data/lib/from_openstudio/geometry/face.rb +174 -0
- data/lib/from_openstudio/geometry/room.rb +121 -0
- data/lib/from_openstudio/geometry/shade.rb +87 -0
- data/lib/from_openstudio/model.rb +123 -0
- data/lib/from_openstudio/model_object.rb +43 -0
- data/lib/from_openstudio/simulation/design_day.rb +123 -0
- data/lib/from_openstudio/simulation/parameter_model.rb +93 -0
- data/lib/from_openstudio/simulation/simulation_output.rb +67 -0
- data/lib/{from_honeybee.rb → honeybee.rb} +47 -40
- data/lib/{from_honeybee → honeybee}/_defaults/energy_default.json +0 -0
- data/lib/{from_honeybee → honeybee}/_defaults/model.json +0 -0
- data/lib/{from_honeybee → honeybee}/_defaults/simulation-parameter.json +1 -0
- data/lib/honeybee/construction/air.rb +42 -0
- data/lib/honeybee/construction/opaque.rb +42 -0
- data/lib/honeybee/construction/shade.rb +42 -0
- data/lib/honeybee/construction/window.rb +51 -0
- data/lib/honeybee/construction/windowshade.rb +43 -0
- data/lib/honeybee/construction_set.rb +42 -0
- data/lib/{from_honeybee → honeybee}/extension.rb +5 -5
- data/lib/honeybee/geometry/aperture.rb +42 -0
- data/lib/honeybee/geometry/door.rb +42 -0
- data/lib/honeybee/geometry/face.rb +48 -0
- data/lib/honeybee/geometry/room.rb +56 -0
- data/lib/honeybee/geometry/shade.rb +42 -0
- data/lib/honeybee/hvac/ideal_air.rb +42 -0
- data/lib/honeybee/hvac/template.rb +73 -0
- data/lib/honeybee/load/electric_equipment.rb +42 -0
- data/lib/honeybee/load/gas_equipment.rb +42 -0
- data/lib/honeybee/load/infiltration.rb +42 -0
- data/lib/{from_honeybee/simulation/extension.rb → honeybee/load/lighting.rb} +10 -13
- data/lib/honeybee/load/people.rb +42 -0
- data/lib/honeybee/load/setpoint_humidistat.rb +46 -0
- data/lib/honeybee/load/setpoint_thermostat.rb +46 -0
- data/lib/honeybee/load/ventilation.rb +42 -0
- data/lib/honeybee/material/opaque.rb +42 -0
- data/lib/honeybee/material/opaque_no_mass.rb +42 -0
- data/lib/honeybee/material/window_blind.rb +42 -0
- data/lib/honeybee/material/window_gas.rb +42 -0
- data/lib/honeybee/material/window_gas_custom.rb +42 -0
- data/lib/honeybee/material/window_gas_mixture.rb +42 -0
- data/lib/honeybee/material/window_glazing.rb +42 -0
- data/lib/honeybee/material/window_shade.rb +42 -0
- data/lib/honeybee/material/window_simpleglazsys.rb +42 -0
- data/lib/honeybee/model.rb +87 -0
- data/lib/{from_honeybee → honeybee}/model_object.rb +16 -18
- data/lib/honeybee/program_type.rb +56 -0
- data/lib/honeybee/schedule/fixed_interval.rb +42 -0
- data/lib/honeybee/schedule/ruleset.rb +42 -0
- data/lib/honeybee/schedule/type_limit.rb +42 -0
- data/lib/honeybee/simulation/design_day.rb +42 -0
- data/lib/honeybee/simulation/parameter_model.rb +86 -0
- data/lib/honeybee/simulation/simulation_output.rb +42 -0
- data/lib/honeybee/ventcool/control.rb +42 -0
- data/lib/honeybee/ventcool/opening.rb +46 -0
- data/lib/honeybee/ventcool/simulation.rb +42 -0
- data/lib/measures/from_honeybee_model/LICENSE.md +18 -22
- data/lib/measures/from_honeybee_model/measure.rb +4 -4
- data/lib/measures/from_honeybee_model/measure.xml +14 -37
- data/lib/measures/from_honeybee_model/tests/from_honeybee_model_test.rb +2 -2
- data/lib/measures/from_honeybee_simulation_parameter/LICENSE.md +18 -22
- data/lib/measures/from_honeybee_simulation_parameter/measure.rb +4 -4
- data/lib/measures/from_honeybee_simulation_parameter/measure.xml +15 -20
- data/lib/measures/from_honeybee_simulation_parameter/tests/from_honeybee_simulation_parameter_test.rb +3 -3
- data/lib/to_openstudio.rb +92 -0
- data/lib/{from_honeybee → to_openstudio}/construction/air.rb +7 -16
- data/lib/{from_honeybee → to_openstudio}/construction/opaque.rb +9 -19
- data/lib/{from_honeybee → to_openstudio}/construction/shade.rb +17 -26
- data/lib/{from_honeybee → to_openstudio}/construction/window.rb +12 -21
- data/lib/{from_honeybee → to_openstudio}/construction/windowshade.rb +8 -23
- data/lib/{from_honeybee → to_openstudio}/construction_set.rb +11 -23
- data/lib/{from_honeybee → to_openstudio}/geometry/aperture.rb +22 -32
- data/lib/{from_honeybee → to_openstudio}/geometry/door.rb +21 -31
- data/lib/{from_honeybee → to_openstudio}/geometry/face.rb +11 -28
- data/lib/{from_honeybee → to_openstudio}/geometry/room.rb +15 -38
- data/lib/{from_honeybee → to_openstudio}/geometry/shade.rb +8 -18
- data/lib/{from_honeybee → to_openstudio}/hvac/Model.hvac.rb +17 -11
- data/lib/{from_honeybee → to_openstudio}/hvac/ideal_air.rb +10 -19
- data/lib/{from_honeybee → to_openstudio}/hvac/template.rb +9 -43
- data/lib/{from_honeybee → to_openstudio}/load/electric_equipment.rb +12 -21
- data/lib/{from_honeybee → to_openstudio}/load/gas_equipment.rb +13 -22
- data/lib/{from_honeybee → to_openstudio}/load/infiltration.rb +14 -23
- data/lib/{from_honeybee → to_openstudio}/load/lighting.rb +10 -19
- data/lib/{from_honeybee → to_openstudio}/load/people.rb +9 -18
- data/lib/{from_honeybee → to_openstudio}/load/setpoint_humidistat.rb +8 -17
- data/lib/{from_honeybee → to_openstudio}/load/setpoint_thermostat.rb +8 -17
- data/lib/{from_honeybee → to_openstudio}/load/ventilation.rb +11 -20
- data/lib/{from_honeybee → to_openstudio}/material/opaque.rb +7 -16
- data/lib/{from_honeybee → to_openstudio}/material/opaque_no_mass.rb +8 -17
- data/lib/{from_honeybee → to_openstudio}/material/window_blind.rb +27 -36
- data/lib/{from_honeybee → to_openstudio}/material/window_gas.rb +8 -17
- data/lib/{from_honeybee → to_openstudio}/material/window_gas_custom.rb +10 -20
- data/lib/{from_honeybee → to_openstudio}/material/window_gas_mixture.rb +9 -18
- data/lib/{from_honeybee → to_openstudio}/material/window_glazing.rb +21 -30
- data/lib/{from_honeybee → to_openstudio}/material/window_shade.rb +17 -26
- data/lib/{from_honeybee → to_openstudio}/material/window_simpleglazsys.rb +7 -16
- data/lib/{from_honeybee → to_openstudio}/model.rb +13 -103
- data/lib/to_openstudio/model_object.rb +52 -0
- data/lib/{from_honeybee → to_openstudio}/program_type.rb +14 -34
- data/lib/{from_honeybee → to_openstudio}/schedule/fixed_interval.rb +11 -21
- data/lib/{from_honeybee → to_openstudio}/schedule/ruleset.rb +43 -44
- data/lib/{from_honeybee → to_openstudio}/schedule/type_limit.rb +9 -21
- data/lib/{from_honeybee/simulation/designday.rb → to_openstudio/simulation/design_day.rb} +7 -16
- data/lib/{from_honeybee/simulation/parameter.rb → to_openstudio/simulation/parameter_model.rb} +8 -57
- data/lib/{from_honeybee → to_openstudio}/ventcool/control.rb +8 -17
- data/lib/{from_honeybee → to_openstudio}/ventcool/opening.rb +8 -22
- data/lib/{from_honeybee → to_openstudio}/ventcool/simulation.rb +7 -16
- metadata +109 -138
@@ -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
|
#
|
@@ -29,29 +29,19 @@
|
|
29
29
|
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
30
30
|
# *******************************************************************************
|
31
31
|
|
32
|
-
require '
|
33
|
-
require 'from_honeybee/model_object'
|
34
|
-
|
35
|
-
module FromHoneybee
|
36
|
-
class ScheduleFixedIntervalAbridged < ModelObject
|
37
|
-
attr_reader :errors, :warnings
|
32
|
+
require 'honeybee/schedule/fixed_interval'
|
38
33
|
|
39
|
-
|
40
|
-
super(hash)
|
34
|
+
require 'to_openstudio/model_object'
|
41
35
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
def defaults
|
46
|
-
@@schema[:components][:schemas][:ScheduleFixedIntervalAbridged][:properties]
|
47
|
-
end
|
36
|
+
module Honeybee
|
37
|
+
class ScheduleFixedIntervalAbridged
|
48
38
|
|
49
39
|
def find_existing_openstudio_object(openstudio_model)
|
50
40
|
model_schedule = openstudio_model.getScheduleFixedIntervalByName(@hash[:identifier])
|
51
41
|
return model_schedule.get unless model_schedule.empty?
|
52
42
|
nil
|
53
43
|
end
|
54
|
-
|
44
|
+
|
55
45
|
def to_openstudio(openstudio_model)
|
56
46
|
# create the new schedule
|
57
47
|
os_fi_schedule = OpenStudio::Model::ScheduleFixedInterval.new(openstudio_model)
|
@@ -92,13 +82,13 @@ module FromHoneybee
|
|
92
82
|
interval_length = 60 / timestep
|
93
83
|
os_fi_schedule.setIntervalLength(interval_length)
|
94
84
|
end
|
95
|
-
openstudio_interval_length = OpenStudio::Time.new(0, 0, interval_length)
|
85
|
+
openstudio_interval_length = OpenStudio::Time.new(0, 0, interval_length)
|
96
86
|
|
97
87
|
# assign the values as a timeseries
|
98
88
|
year_description = openstudio_model.getYearDescription
|
99
89
|
|
100
90
|
# set is leap year = true in case start date has 3 integers
|
101
|
-
if @hash[:start_date][2]
|
91
|
+
if @hash[:start_date][2]
|
102
92
|
year_description.setIsLeapYear(true)
|
103
93
|
end
|
104
94
|
|
@@ -110,6 +100,6 @@ module FromHoneybee
|
|
110
100
|
|
111
101
|
os_fi_schedule
|
112
102
|
end
|
113
|
-
|
103
|
+
|
114
104
|
end #ScheduleFixedIntervalAbridged
|
115
|
-
end #
|
105
|
+
end #Honeybee
|
@@ -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
|
#
|
@@ -29,23 +29,12 @@
|
|
29
29
|
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
30
30
|
# *******************************************************************************
|
31
31
|
|
32
|
-
require '
|
33
|
-
|
34
|
-
require 'openstudio'
|
32
|
+
require 'honeybee/schedule/ruleset'
|
35
33
|
|
36
|
-
|
37
|
-
class ScheduleRulesetAbridged < ModelObject
|
38
|
-
attr_reader :errors, :warnings
|
34
|
+
require 'to_openstudio/model_object'
|
39
35
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
raise "Incorrect model type '#{@type}'" unless @type == 'ScheduleRulesetAbridged'
|
44
|
-
end
|
45
|
-
|
46
|
-
def defaults
|
47
|
-
@@schema[:components][:schemas][:ScheduleRulesetAbridged][:properties]
|
48
|
-
end
|
36
|
+
module Honeybee
|
37
|
+
class ScheduleRulesetAbridged
|
49
38
|
|
50
39
|
def find_existing_openstudio_object(openstudio_model)
|
51
40
|
object = openstudio_model.getScheduleRulesetByName(@hash[:identifier])
|
@@ -69,24 +58,30 @@ module FromHoneybee
|
|
69
58
|
end
|
70
59
|
|
71
60
|
# loop through day schedules and create openstudio schedule day object
|
61
|
+
def_day_id = @hash[:default_day_schedule]
|
62
|
+
def_day_hash = nil
|
72
63
|
@hash[:day_schedules].each do |day_schedule|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
64
|
+
if day_schedule[:identifier] != def_day_id
|
65
|
+
day_schedule_new = OpenStudio::Model::ScheduleDay.new(openstudio_model)
|
66
|
+
day_schedule_new.setName(day_schedule[:identifier])
|
67
|
+
unless sch_type_limit_obj.nil?
|
68
|
+
day_schedule_new.setScheduleTypeLimits(sch_type_limit_obj)
|
69
|
+
end
|
70
|
+
values_day_new = day_schedule[:values]
|
71
|
+
times_day_new = day_schedule[:times]
|
72
|
+
times_day_new.delete_at(0) # Remove [0, 0] from array at index 0.
|
73
|
+
times_day_new.push([24, 0]) # Add [24, 0] at index 0
|
74
|
+
values_day_new.each_index do |i|
|
75
|
+
time_until = OpenStudio::Time.new(0, times_day_new[i][0], times_day_new[i][1], 0)
|
76
|
+
day_schedule_new.addValue(time_until, values_day_new[i])
|
77
|
+
end
|
78
|
+
else
|
79
|
+
def_day_hash = day_schedule
|
85
80
|
end
|
86
81
|
end
|
87
82
|
|
88
|
-
# assign holiday schedule
|
89
|
-
if @hash[:holiday_schedule]
|
83
|
+
# assign holiday schedule
|
84
|
+
if @hash[:holiday_schedule]
|
90
85
|
holiday_schedule = openstudio_model.getScheduleDayByName(@hash[:holiday_schedule])
|
91
86
|
unless holiday_schedule.empty?
|
92
87
|
holiday_schedule_object = holiday_schedule.get
|
@@ -97,7 +92,7 @@ module FromHoneybee
|
|
97
92
|
end
|
98
93
|
end
|
99
94
|
|
100
|
-
# assign summer design day schedule
|
95
|
+
# assign summer design day schedule
|
101
96
|
if @hash[:summer_designday_schedule]
|
102
97
|
summer_design_day = openstudio_model.getScheduleDayByName(@hash[:summer_designday_schedule])
|
103
98
|
unless summer_design_day.empty?
|
@@ -113,22 +108,26 @@ module FromHoneybee
|
|
113
108
|
winter_design_day_object = winter_design_day.get
|
114
109
|
os_sch_ruleset.setWinterDesignDaySchedule(winter_design_day_object)
|
115
110
|
end
|
116
|
-
end
|
117
|
-
|
111
|
+
end
|
112
|
+
|
118
113
|
# assign default day schedule
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
114
|
+
def_day_sch = os_sch_ruleset.defaultDaySchedule
|
115
|
+
def_day_sch.setName(def_day_id)
|
116
|
+
unless sch_type_limit_obj.nil?
|
117
|
+
def_day_sch.setScheduleTypeLimits(sch_type_limit_obj)
|
118
|
+
end
|
119
|
+
values_day_new = def_day_hash[:values]
|
120
|
+
times_day_new = def_day_hash[:times]
|
121
|
+
times_day_new.delete_at(0) # Remove [0, 0] from array at index 0.
|
122
|
+
times_day_new.push([24, 0]) # Add [24, 0] at index 0
|
123
|
+
values_day_new.each_index do |i|
|
124
|
+
time_until = OpenStudio::Time.new(0, times_day_new[i][0], times_day_new[i][1], 0)
|
125
|
+
def_day_sch.addValue(time_until, values_day_new[i])
|
127
126
|
end
|
128
127
|
|
129
128
|
# assign schedule rules
|
130
129
|
if @hash[:schedule_rules]
|
131
|
-
@hash[:schedule_rules].each do |rule|
|
130
|
+
@hash[:schedule_rules].each do |rule|
|
132
131
|
openstudio_schedule_rule = OpenStudio::Model::ScheduleRule.new(os_sch_ruleset)
|
133
132
|
openstudio_schedule_rule.setApplySunday(rule[:apply_sunday])
|
134
133
|
openstudio_schedule_rule.setApplyMonday(rule[:apply_monday])
|
@@ -165,4 +164,4 @@ module FromHoneybee
|
|
165
164
|
end
|
166
165
|
|
167
166
|
end #ScheduleRulesetAbridged
|
168
|
-
end #
|
167
|
+
end #Honeybee
|
@@ -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
|
#
|
@@ -29,24 +29,12 @@
|
|
29
29
|
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
30
30
|
# *******************************************************************************
|
31
31
|
|
32
|
-
require '
|
33
|
-
require 'from_honeybee/model_object'
|
34
|
-
|
35
|
-
require 'openstudio'
|
36
|
-
|
37
|
-
module FromHoneybee
|
38
|
-
class ScheduleTypeLimit < ModelObject
|
39
|
-
attr_reader :errors, :warnings
|
40
|
-
|
41
|
-
def initialize(hash = {})
|
42
|
-
super(hash)
|
32
|
+
require 'honeybee/schedule/type_limit'
|
43
33
|
|
44
|
-
|
45
|
-
end
|
34
|
+
require 'to_openstudio/model_object'
|
46
35
|
|
47
|
-
|
48
|
-
|
49
|
-
end
|
36
|
+
module Honeybee
|
37
|
+
class ScheduleTypeLimit
|
50
38
|
|
51
39
|
def find_existing_openstudio_object(openstudio_model)
|
52
40
|
object = openstudio_model.getScheduleTypeLimitsByName(@hash[:identifier])
|
@@ -77,12 +65,12 @@ module FromHoneybee
|
|
77
65
|
# assign unit type
|
78
66
|
if @hash[:unit_type]
|
79
67
|
os_type_limit.setUnitType(@hash[:unit_type])
|
80
|
-
else
|
68
|
+
else
|
81
69
|
os_type_limit.setUnitType(defaults[:unit_type])
|
82
70
|
end
|
83
|
-
|
71
|
+
|
84
72
|
os_type_limit
|
85
73
|
end
|
86
74
|
|
87
75
|
end # ScheduleTypeLimit
|
88
|
-
end #
|
76
|
+
end # Honeybee
|
@@ -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
|
#
|
@@ -29,21 +29,12 @@
|
|
29
29
|
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
30
30
|
# *******************************************************************************
|
31
31
|
|
32
|
-
require '
|
33
|
-
|
34
|
-
require 'openstudio'
|
32
|
+
require 'honeybee/simulation/design_day'
|
35
33
|
|
36
|
-
|
37
|
-
class DesignDay < ModelObject
|
38
|
-
attr_reader :errors, :warnings
|
34
|
+
require 'to_openstudio/model_object'
|
39
35
|
|
40
|
-
|
41
|
-
|
42
|
-
end
|
43
|
-
|
44
|
-
def defaults
|
45
|
-
@@schema[:components][:schemas][:DesignDay][:properties]
|
46
|
-
end
|
36
|
+
module Honeybee
|
37
|
+
class DesignDay
|
47
38
|
|
48
39
|
def find_existing_openstudio_object(openstudio_model)
|
49
40
|
object = openstudio_model.getDesignDayByName(@hash[:name])
|
@@ -102,4 +93,4 @@ module FromHoneybee
|
|
102
93
|
os_des_day
|
103
94
|
end
|
104
95
|
end # DesignDay
|
105
|
-
end #
|
96
|
+
end # Honeybee
|
data/lib/{from_honeybee/simulation/parameter.rb → to_openstudio/simulation/parameter_model.rb}
RENAMED
@@ -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
|
#
|
@@ -29,61 +29,12 @@
|
|
29
29
|
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
30
30
|
# *******************************************************************************
|
31
31
|
|
32
|
-
require '
|
33
|
-
require 'from_honeybee/simulation/extension'
|
34
|
-
require 'from_honeybee/simulation/designday'
|
32
|
+
require 'honeybee/simulation/parameter_model'
|
35
33
|
|
36
34
|
require 'openstudio'
|
37
35
|
|
38
|
-
module
|
39
|
-
class SimulationParameter
|
40
|
-
attr_reader :errors, :warnings
|
41
|
-
|
42
|
-
# Read Simulation Parameter JSON from disk
|
43
|
-
def self.read_from_disk(file)
|
44
|
-
hash = nil
|
45
|
-
File.open(File.join(file), 'r') do |f|
|
46
|
-
hash = JSON.parse(f.read, symbolize_names: true)
|
47
|
-
end
|
48
|
-
|
49
|
-
SimulationParameter.new(hash)
|
50
|
-
end
|
51
|
-
|
52
|
-
# Load ModelObject from symbolized hash
|
53
|
-
def initialize(hash)
|
54
|
-
# initialize class variable @@extension only once
|
55
|
-
@@extension = ExtensionSimulationParameter.new
|
56
|
-
@@schema = nil
|
57
|
-
File.open(@@extension.schema_file) do |f|
|
58
|
-
@@schema = JSON.parse(f.read, symbolize_names: true)
|
59
|
-
end
|
60
|
-
|
61
|
-
@hash = hash
|
62
|
-
@type = @hash[:type]
|
63
|
-
raise 'Unknown model type' if @type.nil?
|
64
|
-
raise "Incorrect model type for SimulationParameter '#{@type}'" unless @type == 'SimulationParameter'
|
65
|
-
end
|
66
|
-
|
67
|
-
# check if the model is valid
|
68
|
-
def valid?
|
69
|
-
if Gem.loaded_specs.has_key?("json-schema")
|
70
|
-
return validation_errors.empty?
|
71
|
-
else
|
72
|
-
return true
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
# return detailed model validation errors
|
77
|
-
def validation_errors
|
78
|
-
if Gem.loaded_specs.has_key?("json-schema")
|
79
|
-
require 'json-schema'
|
80
|
-
JSON::Validator.fully_validate(@@schema, @hash)
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
def defaults
|
85
|
-
@@schema[:components][:schemas]
|
86
|
-
end
|
36
|
+
module Honeybee
|
37
|
+
class SimulationParameter
|
87
38
|
|
88
39
|
# convert to openstudio model, clears errors and warnings
|
89
40
|
def to_openstudio_model(openstudio_model=nil, log_report=false)
|
@@ -132,7 +83,7 @@ module FromHoneybee
|
|
132
83
|
os_sim_control.setDoZoneSizingCalculation(@hash[:simulation_control][:do_zone_sizing])
|
133
84
|
end
|
134
85
|
unless @hash[:simulation_control][:do_system_sizing].nil?
|
135
|
-
os_sim_control.setDoSystemSizingCalculation(@hash[:simulation_control][:do_system_sizing])
|
86
|
+
os_sim_control.setDoSystemSizingCalculation(@hash[:simulation_control][:do_system_sizing])
|
136
87
|
end
|
137
88
|
unless @hash[:simulation_control][:do_plant_sizing].nil?
|
138
89
|
os_sim_control.setDoPlantSizingCalculation(@hash[:simulation_control][:do_plant_sizing])
|
@@ -205,7 +156,7 @@ module FromHoneybee
|
|
205
156
|
@hash[:shadow_calculation][:solar_distribution])
|
206
157
|
end
|
207
158
|
end
|
208
|
-
|
159
|
+
|
209
160
|
# set defaults for the Model's SizingParameter object
|
210
161
|
os_sizing_par = @openstudio_model.getSizingParameters
|
211
162
|
os_sizing_par.setHeatingSizingFactor(siz_defaults[:heating_factor][:default])
|
@@ -324,4 +275,4 @@ module FromHoneybee
|
|
324
275
|
end
|
325
276
|
|
326
277
|
end #SimulationParameter
|
327
|
-
end #
|
278
|
+
end #Honeybee
|
@@ -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
|
#
|
@@ -29,27 +29,18 @@
|
|
29
29
|
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
30
30
|
# *******************************************************************************
|
31
31
|
|
32
|
-
require '
|
32
|
+
require 'honeybee/ventcool/opening'
|
33
33
|
|
34
|
-
require '
|
34
|
+
require 'to_openstudio/model_object'
|
35
35
|
|
36
|
-
module
|
37
|
-
class
|
38
|
-
attr_reader :errors, :warnings
|
36
|
+
module Honeybee
|
37
|
+
class VentilationControlAbridged
|
39
38
|
@@outdoor_node = nil
|
40
39
|
@@program_manager = nil
|
41
40
|
@@sensor_count = 1
|
42
41
|
@@actuator_count = 1
|
43
42
|
@@program_count = 1
|
44
43
|
|
45
|
-
def initialize(hash = {})
|
46
|
-
super(hash)
|
47
|
-
end
|
48
|
-
|
49
|
-
def defaults
|
50
|
-
@@schema[:components][:schemas][:VentilationControlAbridged][:properties]
|
51
|
-
end
|
52
|
-
|
53
44
|
def get_outdoor_node(openstudio_model)
|
54
45
|
# get the EMS sensor for the outdoor node if it exists or generate it if it doesn't
|
55
46
|
if @@outdoor_node.nil?
|
@@ -182,7 +173,7 @@ module FromHoneybee
|
|
182
173
|
ems_program.addLine('SET ' + act_name + ' = 0')
|
183
174
|
end
|
184
175
|
ems_program.addLine('ENDIF')
|
185
|
-
|
176
|
+
|
186
177
|
# add the program object the the global program manager for all window opening
|
187
178
|
prog_manager = get_program_manager(openstudio_model)
|
188
179
|
prog_manager.addProgram(ems_program)
|
@@ -191,4 +182,4 @@ module FromHoneybee
|
|
191
182
|
end
|
192
183
|
|
193
184
|
end #VentilationControl
|
194
|
-
end #
|
185
|
+
end #Honeybee
|