openstudio-geb 0.4.0 → 0.6.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 (29) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +7 -3
  3. data/CHANGELOG.md +7 -0
  4. data/Gemfile +7 -17
  5. data/files/seasonal_shedding_peak_hours.json +1 -0
  6. data/files/seasonal_shifting_peak_hours.json +1 -0
  7. data/files/seasonal_shifting_take_hours.json +1 -0
  8. data/lib/measures/AddElectricVehicleChargingLoad/measure.rb +247 -21
  9. data/lib/measures/AddElectricVehicleChargingLoad/tests/CZ06RV2.epw +8768 -0
  10. data/lib/measures/AddElectricVehicleChargingLoad/tests/add_electric_vehicle_charging_load_test.rb +40 -141
  11. data/lib/measures/AddElectricVehicleChargingLoad/tests/test.osm +55 -55
  12. data/lib/measures/AdjustThermostatSetpointsByDegreesForPeakHours/measure.rb +963 -442
  13. data/lib/measures/add_ceiling_fan/measure.rb +2 -2
  14. data/lib/measures/add_chilled_water_storage_tank/measure.rb +2 -2
  15. data/lib/measures/add_exterior_blinds_and_control/measure.rb +6 -5
  16. data/lib/measures/add_interior_blinds_and_control/measure.rb +5 -5
  17. data/lib/measures/add_rooftop_pv_simple/measure.rb +13 -10
  18. data/lib/measures/apply_dynamic_coating_to_roof_wall/measure.rb +2 -2
  19. data/lib/measures/average_ventilation_for_peak_hours/measure.rb +5 -5
  20. data/lib/measures/enable_occupancy_driven_lighting/measure.rb +2 -2
  21. data/lib/measures/precooling/measure.rb +964 -354
  22. data/lib/measures/preheating/measure.rb +940 -356
  23. data/lib/measures/reduce_epd_by_percentage_for_peak_hours/measure.rb +509 -300
  24. data/lib/measures/reduce_lpd_by_percentage_for_peak_hours/measure.rb +534 -309
  25. data/lib/openstudio/geb/run.rb +5 -1
  26. data/lib/openstudio/geb/utilities.rb +3 -2
  27. data/lib/openstudio/geb/version.rb +1 -1
  28. data/openstudio-geb.gemspec +7 -6
  29. metadata +24 -48
@@ -406,7 +406,7 @@ class AddCeilingFan < OpenStudio::Measure::ModelMeasure
406
406
 
407
407
  end
408
408
 
409
- def adjust_cool_sch(model, sch, cool_stp_inc, start_date, end_date, start_time, end_time)
409
+ def adjust_cool_sch(model, runner, sch, cool_stp_inc, start_date, end_date, start_time, end_time)
410
410
  new_sch = sch.get.clone(model)
411
411
  new_sch = new_sch.to_Schedule.get
412
412
  new_sch.setName("#{sch.get.name.to_s} increased by #{cool_stp_inc}C due to ceiling fan")
@@ -532,7 +532,7 @@ class AddCeilingFan < OpenStudio::Measure::ModelMeasure
532
532
  end
533
533
 
534
534
  runner.registerInfo("adjusting schedule #{clg_set_sch.get.name.to_s}")
535
- new_sch = adjust_cool_sch(model, clg_set_sch, cool_stp_increase_C, os_start_date, os_end_date, os_start_time, os_end_time)
535
+ new_sch = adjust_cool_sch(model, runner, clg_set_sch, cool_stp_increase_C, os_start_date, os_end_date, os_start_time, os_end_time)
536
536
 
537
537
  # hook up clone to thermostat
538
538
  thermostat.setCoolingSetpointTemperatureSchedule(new_sch)
@@ -477,9 +477,9 @@ class AddChilledWaterStorageTank < OpenStudio::Measure::ModelMeasure
477
477
  # return false
478
478
  # end
479
479
  run_output_path = runner.getPathArgumentValue('run_output_path', user_arguments)
480
- Dir.mkdir(run_output_path.to_s) unless File.exists?(run_output_path.to_s)
480
+ Dir.mkdir(run_output_path.to_s) unless File.exist?(run_output_path.to_s)
481
481
  sizing_output_path = File.expand_path(File.join(run_output_path.to_s, 'sizing_run'))
482
- Dir.mkdir(sizing_output_path.to_s) unless File.exists?(sizing_output_path.to_s)
482
+ Dir.mkdir(sizing_output_path.to_s) unless File.exist?(sizing_output_path.to_s)
483
483
 
484
484
  # Change the simulation to only run the sizing days
485
485
  sim_control = model.getSimulationControl
@@ -7,11 +7,11 @@
7
7
  # http://nrel.github.io/OpenStudio-user-documentation/reference/measure_writing_guide/
8
8
 
9
9
  # start the measure
10
- require 'openstudio/extension/core/os_lib_helper_methods'
11
- require 'openstudio/extension/core/os_lib_schedules'
10
+ # require 'openstudio/extension/core/os_lib_helper_methods'
11
+ # require 'openstudio/extension/core/os_lib_schedules'
12
+ require 'openstudio-standards'
12
13
  class AddExteriorBlindsAndControl < OpenStudio::Measure::ModelMeasure
13
- include OsLib_HelperMethods
14
- include OsLib_Schedules
14
+
15
15
  # human readable name
16
16
  def name
17
17
  # Measure name should be the title case of the class name.
@@ -142,7 +142,8 @@ class AddExteriorBlindsAndControl < OpenStudio::Measure::ModelMeasure
142
142
  'default_day' => ["default day"] + normal_day_data_pairs,
143
143
  'rules' => [['Adjusted days', "#{start_month}/#{start_day}-#{end_month}/#{end_day}",
144
144
  'Sun/Mon/Tue/Wed/Thu/Fri/Sat'] + adjusted_day_data_pairs] }
145
- global_shading_schedule = OsLib_Schedules.createComplexSchedule(model, options)
145
+ # global_shading_schedule = OsLib_Schedules.createComplexSchedule(model, options)
146
+ global_shading_schedule = OpenstudioStandards::Schedules.create_complex_schedule(model, options)
146
147
  runner.registerInfo("A new schedule 'Exterior blinds schedule' has been created for new shading control objects.")
147
148
  end
148
149
  unless space_shading_control
@@ -9,11 +9,10 @@
9
9
  # http://nrel.github.io/OpenStudio-user-documentation/reference/measure_writing_guide/
10
10
 
11
11
  # start the measure
12
- require 'openstudio/extension/core/os_lib_helper_methods'
13
- require 'openstudio/extension/core/os_lib_schedules'
12
+ # require 'openstudio/extension/core/os_lib_helper_methods'
13
+ # require 'openstudio/extension/core/os_lib_schedules'
14
+ require 'openstudio-standards'
14
15
  class AddInteriorBlindsAndControl < OpenStudio::Measure::ModelMeasure
15
- include OsLib_HelperMethods
16
- include OsLib_Schedules
17
16
  # human readable name
18
17
  def name
19
18
  # Measure name should be the title case of the class name.
@@ -144,7 +143,8 @@ class AddInteriorBlindsAndControl < OpenStudio::Measure::ModelMeasure
144
143
  'default_day' => ["default day"] + normal_day_data_pairs,
145
144
  'rules' => [['Adjusted days', "#{start_month}/#{start_day}-#{end_month}/#{end_day}",
146
145
  'Sun/Mon/Tue/Wed/Thu/Fri/Sat'] + adjusted_day_data_pairs] }
147
- global_shading_schedule = OsLib_Schedules.createComplexSchedule(model, options)
146
+ # global_shading_schedule = OsLib_Schedules.createComplexSchedule(model, options)
147
+ global_shading_schedule = OpenstudioStandards::Schedules.create_complex_schedule(model, options)
148
148
  runner.registerInfo("A new schedule 'Interior blinds schedule' has been created for new shading control objects.")
149
149
  end
150
150
  unless space_shading_control
@@ -7,9 +7,10 @@
7
7
  # http://nrel.github.io/OpenStudio-user-documentation/measures/measure_writing_guide/
8
8
 
9
9
  # load OpenStudio measure libraries from openstudio-extension gem
10
- require 'openstudio-extension'
11
- require 'openstudio/extension/core/os_lib_helper_methods'
12
- require 'openstudio/extension/core/os_lib_schedules'
10
+ # require 'openstudio-extension'
11
+ # require 'openstudio/extension/core/os_lib_helper_methods'
12
+ # require 'openstudio/extension/core/os_lib_schedules'
13
+ require 'openstudio-standards'
13
14
 
14
15
  # start the measure
15
16
  # this measure originally came from BCL (https://bcl.nrel.gov/results/?fq=bundle:measure&fq=measure_tags:Onsite%20Power%20Generation.Photovoltaic&show_rows=25)
@@ -69,8 +70,9 @@ class AddRooftopPV < OpenStudio::Measure::ModelMeasure
69
70
  end
70
71
 
71
72
  # assign the user inputs to variables
72
- args = OsLib_HelperMethods.createRunVariables(runner, model, user_arguments, arguments(model))
73
- if !args then return false end
73
+ # args = OsLib_HelperMethods.createRunVariables(runner, model, user_arguments, arguments(model))
74
+ args = runner.getArgumentValues(arguments(model), user_arguments)
75
+ unless args then return false end
74
76
 
75
77
  # check expected values of double arguments
76
78
  # todo - not sure why this isn't working. Elsewhere it is used on E+ and reporting measures.
@@ -87,7 +89,7 @@ class AddRooftopPV < OpenStudio::Measure::ModelMeasure
87
89
 
88
90
  # create the inverter
89
91
  inverter = OpenStudio::Model::ElectricLoadCenterInverterSimple.new(model)
90
- inverter.setInverterEfficiency(args['inverter_efficiency'])
92
+ inverter.setInverterEfficiency(args[:inverter_efficiency])
91
93
  runner.registerInfo("Created inverter with efficiency of #{inverter.inverterEfficiency}")
92
94
 
93
95
  # create the distribution system
@@ -95,14 +97,15 @@ class AddRooftopPV < OpenStudio::Measure::ModelMeasure
95
97
  elcd.setInverter(inverter)
96
98
 
97
99
  # create shared shading transmittance schedule
98
- target_transmittance = 1.0 - args['fraction_of_surface'].to_f
100
+ target_transmittance = 1.0 - args[:fraction_of_surface].to_f
99
101
  inputs = {
100
102
  'name' => 'PV Shading Transmittance Schedule',
101
103
  'winterTimeValuePairs' => { 24.0 => target_transmittance },
102
104
  'summerTimeValuePairs' => { 24.0 => target_transmittance },
103
105
  'defaultTimeValuePairs' => { 24.0 => target_transmittance }
104
106
  }
105
- pv_shading_transmittance_schedule = OsLib_Schedules.createSimpleSchedule(model, inputs)
107
+ # pv_shading_transmittance_schedule = OsLib_Schedules.createSimpleSchedule(model, inputs)
108
+ pv_shading_transmittance_schedule = OpenstudioStandards::Schedules.create_simple_schedule(model, inputs)
106
109
  runner.registerInfo("Created transmittance schedule for PV shading surfaces with constant value of #{target_transmittance}")
107
110
 
108
111
  model.getSurfaces.each do |surface|
@@ -129,8 +132,8 @@ class AddRooftopPV < OpenStudio::Measure::ModelMeasure
129
132
  panel = OpenStudio::Model::GeneratorPhotovoltaic.simple(model)
130
133
  panel.setSurface(shading_surface)
131
134
  performance = panel.photovoltaicPerformance.to_PhotovoltaicPerformanceSimple.get
132
- performance.setFractionOfSurfaceAreaWithActiveSolarCells(args['fraction_of_surface'])
133
- performance.setFixedEfficiency(args['cell_efficiency'])
135
+ performance.setFractionOfSurfaceAreaWithActiveSolarCells(args[:fraction_of_surface])
136
+ performance.setFixedEfficiency(args[:cell_efficiency])
134
137
 
135
138
  # connect panel to electric load center distribution
136
139
  elcd.addGenerator(panel)
@@ -332,9 +332,9 @@ class ApplyDynamicCoatingToRoofWall < OpenStudio::Measure::EnergyPlusMeasure
332
332
  string_objects = []
333
333
 
334
334
  mat_list.each do |mat|
335
- puts "mat: #{mat}"
336
- mat_name = mat.getString(0).to_s # name
335
+ mat_name = mat.getString(0) # name
337
336
  # no need to clone the material object (in case it is also used in other constructions) because thermal and solar absorptances only matter when the material is on the outside layer
337
+ puts mat_name.to_s.split(',')
338
338
  puts "mat_name: #{mat_name}"
339
339
 
340
340
  # based on applied surfaces type, add material objects
@@ -9,11 +9,10 @@
9
9
  # http://nrel.github.io/OpenStudio-user-documentation/reference/measure_writing_guide/
10
10
 
11
11
  # start the measure
12
- require 'openstudio/extension/core/os_lib_helper_methods'
13
- require 'openstudio/extension/core/os_lib_schedules'
12
+ # require 'openstudio/extension/core/os_lib_helper_methods'
13
+ # require 'openstudio/extension/core/os_lib_schedules'
14
+ require 'openstudio-standards'
14
15
  class AverageVentilationForPeakHours < OpenStudio::Measure::ModelMeasure
15
- include OsLib_HelperMethods
16
- include OsLib_Schedules
17
16
  # human readable name
18
17
  def name
19
18
  return "Average Ventilation for Peak Hours"
@@ -188,7 +187,8 @@ class AverageVentilationForPeakHours < OpenStudio::Measure::ModelMeasure
188
187
  'default_day' => ["default day"] + normal_day_data_pairs,
189
188
  'rules' => [['Adjusted days', "#{start_month1}/#{start_day1}-#{end_month1}/#{end_day1}",
190
189
  'Sun/Mon/Tue/Wed/Thu/Fri/Sat'] + adjusted_day_data_pairs] }
191
- new_oa_sch = OsLib_Schedules.createComplexSchedule(model, options)
190
+ # new_oa_sch = OsLib_Schedules.createComplexSchedule(model, options)
191
+ new_oa_sch = OpenstudioStandards::Schedules.create_complex_schedule(model, options)
192
192
  outdoor_air_object.setOutdoorAirFlowRateFractionSchedule(new_oa_sch)
193
193
  else
194
194
  if schedules.key?(oa_sch.get.name.to_s)
@@ -66,9 +66,9 @@ class EnableOccupancyDrivenLighting < OpenStudio::Measure::ModelMeasure
66
66
  end
67
67
  runner.registerInfo("Pre-run output path: #{run_output_path}")
68
68
 
69
- Dir.mkdir(run_output_path) unless File.exists?(run_output_path)
69
+ Dir.mkdir(run_output_path) unless File.exist?(run_output_path)
70
70
  prerun_dir = File.join(run_output_path, 'pre-run')
71
- Dir.mkdir(prerun_dir) unless File.exists?(prerun_dir)
71
+ Dir.mkdir(prerun_dir) unless File.exist?(prerun_dir)
72
72
  prerun_osw_path = File.join(prerun_dir, 'sizing.osm')
73
73
  model.save(prerun_osw_path, true) # true is overwrite
74
74