openstudio-standards 0.1.4 → 0.1.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/data/standards/OpenStudio_Standards.xlsx +0 -0
- data/data/standards/OpenStudio_Standards_boilers.json +62 -4
- data/data/standards/OpenStudio_Standards_chillers.json +778 -68
- data/data/standards/OpenStudio_Standards_construction_sets.json +52 -93
- data/data/standards/OpenStudio_Standards_curve_biquadratics.json +36 -36
- data/data/standards/OpenStudio_Standards_curve_quadratics.json +3 -3
- data/data/standards/OpenStudio_Standards_heat_pumps.json +840 -0
- data/data/standards/OpenStudio_Standards_heat_pumps_heating.json +352 -0
- data/data/standards/OpenStudio_Standards_heat_rejection.json +48 -0
- data/data/standards/OpenStudio_Standards_motors.json +270 -0
- data/data/standards/OpenStudio_Standards_space_types.json +10390 -2824
- data/data/standards/OpenStudio_Standards_unitary_acs.json +794 -18
- data/data/weather/USA_CO_Boulder-Broomfield-Jefferson.County.AP.724699_TMY3.ddy +538 -0
- data/data/weather/USA_CO_Boulder-Broomfield-Jefferson.County.AP.724699_TMY3.epw +8768 -0
- data/data/weather/USA_CO_Boulder-Broomfield-Jefferson.County.AP.724699_TMY3.stat +493 -0
- data/data/weather/USA_CO_Denver.Intl.AP.725650_TMY3.ddy +536 -0
- data/data/weather/USA_CO_Denver.Intl.AP.725650_TMY3.epw +8768 -0
- data/data/weather/USA_CO_Denver.Intl.AP.725650_TMY3.stat +554 -0
- data/data/weather/USA_CO_Fort.Collins.AWOS.724769_TMY3.ddy +536 -0
- data/data/weather/USA_CO_Fort.Collins.AWOS.724769_TMY3.epw +8768 -0
- data/data/weather/USA_CO_Fort.Collins.AWOS.724769_TMY3.stat +554 -0
- data/data/weather/envelope_info.csv +6 -0
- data/lib/openstudio-standards.rb +10 -11
- data/lib/openstudio-standards/btap/compliance.rb +251 -969
- data/lib/openstudio-standards/btap/envelope.rb +1 -1
- data/lib/openstudio-standards/btap/fileio.rb +37 -5
- data/lib/openstudio-standards/btap/geometry.rb +27 -17
- data/lib/openstudio-standards/btap/hvac.rb +80 -27
- data/lib/openstudio-standards/hvac_sizing/{HVACSizing.CoilHeatingDXMultiSpeed.rb → Siz.CoilHeatingDXMultiSpeed.rb} +0 -0
- data/lib/openstudio-standards/hvac_sizing/Siz.ControllerOutdoorAir.rb +30 -4
- data/lib/openstudio-standards/hvac_sizing/Siz.CoolingTowerTwoSpeed.rb +61 -5
- data/lib/openstudio-standards/hvac_sizing/Siz.CoolingTowerVariableSpeed.rb +37 -7
- data/lib/openstudio-standards/hvac_sizing/Siz.DistrictCooling.rb +27 -0
- data/lib/openstudio-standards/hvac_sizing/Siz.DistrictHeating.rb +27 -0
- data/lib/openstudio-standards/hvac_sizing/Siz.HeaderedPumpsConstantSpeed.rb +55 -0
- data/lib/openstudio-standards/hvac_sizing/Siz.HeaderedPumpsVariableSpeed.rb +55 -0
- data/lib/openstudio-standards/hvac_sizing/Siz.HeatingCoolingFuels.rb +51 -9
- data/lib/openstudio-standards/hvac_sizing/Siz.Model.rb +99 -17
- data/lib/openstudio-standards/hvac_sizing/Siz.PumpConstantSpeed.rb +1 -1
- data/lib/openstudio-standards/hvac_sizing/Siz.ThermalZone.rb +29 -6
- data/lib/openstudio-standards/hvac_sizing/Siz.WaterHeaterMixed.rb +16 -0
- data/lib/openstudio-standards/prototypes/Prototype.AirTerminalSingleDuctVAVReheat.rb +43 -48
- data/lib/openstudio-standards/prototypes/Prototype.ControllerWaterCoil.rb +5 -9
- data/lib/openstudio-standards/prototypes/Prototype.Fan.rb +68 -0
- data/lib/openstudio-standards/prototypes/Prototype.FanConstantVolume.rb +39 -43
- data/lib/openstudio-standards/prototypes/Prototype.FanOnOff.rb +49 -51
- data/lib/openstudio-standards/prototypes/Prototype.FanVariableVolume.rb +55 -61
- data/lib/openstudio-standards/prototypes/Prototype.FanZoneExhaust.rb +8 -10
- data/lib/openstudio-standards/prototypes/Prototype.HeatExchangerAirToAirSensibleAndLatent.rb +15 -20
- data/lib/openstudio-standards/prototypes/Prototype.Model.hvac.rb +330 -322
- data/lib/openstudio-standards/prototypes/Prototype.Model.rb +501 -446
- data/lib/openstudio-standards/prototypes/Prototype.Model.swh.rb +221 -230
- data/lib/openstudio-standards/prototypes/Prototype.add_objects.rb +0 -2
- data/lib/openstudio-standards/prototypes/Prototype.full_service_restaurant.rb +130 -137
- data/lib/openstudio-standards/prototypes/Prototype.high_rise_apartment.rb +374 -291
- data/lib/openstudio-standards/prototypes/Prototype.hospital.rb +146 -193
- data/lib/openstudio-standards/prototypes/Prototype.hvac_systems.rb +1315 -1113
- data/lib/openstudio-standards/prototypes/Prototype.large_hotel.rb +65 -88
- data/lib/openstudio-standards/prototypes/Prototype.large_office.rb +101 -156
- data/lib/openstudio-standards/prototypes/Prototype.medium_office.rb +46 -96
- data/lib/openstudio-standards/prototypes/Prototype.mid_rise_apartment.rb +113 -123
- data/lib/openstudio-standards/prototypes/Prototype.outpatient.rb +356 -345
- data/lib/openstudio-standards/prototypes/Prototype.primary_school.rb +48 -103
- data/lib/openstudio-standards/prototypes/Prototype.quick_service_restaurant.rb +115 -123
- data/lib/openstudio-standards/prototypes/Prototype.retail_standalone.rb +30 -39
- data/lib/openstudio-standards/prototypes/Prototype.retail_stripmall.rb +32 -45
- data/lib/openstudio-standards/prototypes/Prototype.secondary_school.rb +98 -258
- data/lib/openstudio-standards/prototypes/Prototype.small_hotel.rb +429 -474
- data/lib/openstudio-standards/prototypes/Prototype.small_office.rb +28 -36
- data/lib/openstudio-standards/prototypes/Prototype.strip_model.rb +7 -7
- data/lib/openstudio-standards/prototypes/Prototype.utilities.rb +172 -146
- data/lib/openstudio-standards/prototypes/Prototype.warehouse.rb +46 -53
- data/lib/openstudio-standards/standards/Standards.AirLoopHVAC.rb +885 -707
- data/lib/openstudio-standards/standards/Standards.AirTerminalSingleDuctParallelPIUReheat.rb +48 -57
- data/lib/openstudio-standards/standards/Standards.AirTerminalSingleDuctVAVReheat.rb +24 -31
- data/lib/openstudio-standards/standards/Standards.BoilerHotWater.rb +80 -93
- data/lib/openstudio-standards/standards/Standards.BuildingStory.rb +69 -0
- data/lib/openstudio-standards/standards/Standards.ChillerElectricEIR.rb +60 -72
- data/lib/openstudio-standards/standards/Standards.CoilCoolingDXMultiSpeed.rb +104 -108
- data/lib/openstudio-standards/standards/Standards.CoilCoolingDXSingleSpeed.rb +190 -198
- data/lib/openstudio-standards/standards/Standards.CoilCoolingDXTwoSpeed.rb +134 -146
- data/lib/openstudio-standards/standards/Standards.CoilHeatingDXMultiSpeed.rb +56 -60
- data/lib/openstudio-standards/standards/Standards.CoilHeatingDXSingleSpeed.rb +151 -161
- data/lib/openstudio-standards/standards/Standards.CoilHeatingGasMultiStage.rb +30 -34
- data/lib/openstudio-standards/standards/Standards.Construction.rb +116 -132
- data/lib/openstudio-standards/standards/Standards.CoolingTower.rb +138 -0
- data/lib/openstudio-standards/standards/Standards.CoolingTowerSingleSpeed.rb +11 -0
- data/lib/openstudio-standards/standards/Standards.CoolingTowerTwoSpeed.rb +11 -0
- data/lib/openstudio-standards/standards/Standards.CoolingTowerVariableSpeed.rb +16 -0
- data/lib/openstudio-standards/standards/Standards.Fan.rb +190 -236
- data/lib/openstudio-standards/standards/Standards.FanConstantVolume.rb +0 -2
- data/lib/openstudio-standards/standards/Standards.FanOnOff.rb +0 -2
- data/lib/openstudio-standards/standards/Standards.FanVariableVolume.rb +168 -14
- data/lib/openstudio-standards/standards/Standards.FanZoneExhaust.rb +0 -2
- data/lib/openstudio-standards/standards/Standards.HeaderedPumpsConstantSpeed.rb +33 -0
- data/lib/openstudio-standards/standards/Standards.HeaderedPumpsVariableSpeed.rb +83 -0
- data/lib/openstudio-standards/standards/Standards.HeatExchangerSensLat.rb +22 -0
- data/lib/openstudio-standards/standards/Standards.Model.rb +2385 -1622
- data/lib/openstudio-standards/standards/Standards.PlanarSurface.rb +83 -35
- data/lib/openstudio-standards/standards/Standards.PlantLoop.rb +805 -395
- data/lib/openstudio-standards/standards/Standards.Pump.rb +139 -119
- data/lib/openstudio-standards/standards/Standards.PumpConstantSpeed.rb +0 -2
- data/lib/openstudio-standards/standards/Standards.PumpVariableSpeed.rb +16 -15
- data/lib/openstudio-standards/standards/Standards.ScheduleCompact.rb +35 -0
- data/lib/openstudio-standards/standards/Standards.ScheduleConstant.rb +7 -13
- data/lib/openstudio-standards/standards/Standards.ScheduleRuleset.rb +144 -59
- data/lib/openstudio-standards/standards/Standards.Space.rb +1509 -1326
- data/lib/openstudio-standards/standards/Standards.SpaceType.rb +254 -262
- data/lib/openstudio-standards/standards/Standards.SubSurface.rb +105 -105
- data/lib/openstudio-standards/standards/Standards.Surface.rb +27 -31
- data/lib/openstudio-standards/standards/Standards.ThermalZone.rb +882 -157
- data/lib/openstudio-standards/standards/Standards.WaterHeaterMixed.rb +179 -69
- data/lib/openstudio-standards/standards/Standards.ZoneHVACComponent.rb +75 -0
- data/lib/openstudio-standards/utilities/logging.rb +31 -38
- data/lib/openstudio-standards/utilities/simulation.rb +118 -82
- data/lib/openstudio-standards/version.rb +1 -1
- data/lib/openstudio-standards/weather/Weather.Model.rb +382 -390
- data/lib/openstudio-standards/weather/Weather.stat_file.rb +159 -78
- metadata +59 -6
@@ -1,38 +1,40 @@
|
|
1
1
|
|
2
2
|
# Extend the class
|
3
3
|
class OpenStudio::Model::Model
|
4
|
-
|
5
4
|
def run_simulation_and_log_errors(run_dir = "#{Dir.pwd}/Run")
|
6
|
-
|
7
5
|
# Make the directory if it doesn't exist
|
8
|
-
|
9
|
-
|
6
|
+
unless Dir.exist?(run_dir)
|
7
|
+
FileUtils.mkdir_p(run_dir)
|
10
8
|
end
|
11
|
-
|
9
|
+
|
12
10
|
# Save the model to energyplus idf
|
13
11
|
idf_name = 'in.idf'
|
14
12
|
osm_name = 'in.osm'
|
15
|
-
OpenStudio
|
13
|
+
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.model.Model', "Starting simulation here: #{run_dir}.")
|
14
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.Model', "Running simulation #{run_dir}.")
|
16
15
|
forward_translator = OpenStudio::EnergyPlus::ForwardTranslator.new
|
17
16
|
idf = forward_translator.translateModel(self)
|
18
|
-
idf_path = OpenStudio::Path.new("#{run_dir}/#{idf_name}")
|
17
|
+
idf_path = OpenStudio::Path.new("#{run_dir}/#{idf_name}")
|
19
18
|
osm_path = OpenStudio::Path.new("#{run_dir}/#{osm_name}")
|
20
|
-
idf.save(idf_path,true)
|
21
|
-
|
22
|
-
|
19
|
+
idf.save(idf_path, true)
|
20
|
+
save(osm_path, true)
|
21
|
+
|
23
22
|
# Set up the simulation
|
24
23
|
# Find the weather file
|
25
|
-
epw_path =
|
24
|
+
epw_path = get_full_weather_file_path
|
26
25
|
if epw_path.empty?
|
27
26
|
return false
|
28
27
|
end
|
29
28
|
epw_path = epw_path.get
|
30
|
-
|
29
|
+
|
30
|
+
# close current sql file
|
31
|
+
resetSqlFile
|
32
|
+
|
31
33
|
# If running on a regular desktop, use RunManager.
|
32
34
|
# If running on OpenStudio Server, use WorkFlowMananger
|
33
|
-
# to avoid slowdown from the run.
|
35
|
+
# to avoid slowdown from the run.
|
34
36
|
use_runmanager = true
|
35
|
-
|
37
|
+
|
36
38
|
begin
|
37
39
|
require 'openstudio-workflow'
|
38
40
|
use_runmanager = false
|
@@ -42,86 +44,122 @@ class OpenStudio::Model::Model
|
|
42
44
|
|
43
45
|
sql_path = nil
|
44
46
|
if use_runmanager
|
45
|
-
OpenStudio
|
47
|
+
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.model.Model', 'Running with RunManager.')
|
46
48
|
|
47
49
|
# Find EnergyPlus
|
48
50
|
ep_dir = OpenStudio.getEnergyPlusDirectory
|
49
51
|
ep_path = OpenStudio.getEnergyPlusExecutable
|
50
52
|
ep_tool = OpenStudio::Runmanager::ToolInfo.new(ep_path)
|
51
|
-
idd_path = OpenStudio::Path.new(ep_dir.to_s +
|
53
|
+
idd_path = OpenStudio::Path.new(ep_dir.to_s + '/Energy+.idd')
|
52
54
|
output_path = OpenStudio::Path.new("#{run_dir}/")
|
53
|
-
|
55
|
+
|
54
56
|
# Make a run manager and queue up the run
|
55
57
|
run_manager_db_path = OpenStudio::Path.new("#{run_dir}/run.db")
|
56
58
|
# HACK: workaround for Mac with Qt 5.4, need to address in the future.
|
57
|
-
OpenStudio::Application
|
59
|
+
OpenStudio::Application.instance.application(false)
|
58
60
|
run_manager = OpenStudio::Runmanager::RunManager.new(run_manager_db_path, true, false, false, false)
|
59
|
-
job = OpenStudio::Runmanager::JobFactory
|
61
|
+
job = OpenStudio::Runmanager::JobFactory.createEnergyPlusJob(ep_tool,
|
60
62
|
idd_path,
|
61
63
|
idf_path,
|
62
64
|
epw_path,
|
63
65
|
output_path)
|
64
|
-
|
66
|
+
|
65
67
|
run_manager.enqueue(job, true)
|
66
68
|
|
67
69
|
# Start the run and wait for it to finish.
|
68
70
|
while run_manager.workPending
|
69
71
|
sleep 1
|
70
|
-
OpenStudio::Application
|
72
|
+
OpenStudio::Application.instance.processEvents
|
71
73
|
end
|
72
|
-
|
74
|
+
|
73
75
|
sql_path = OpenStudio::Path.new("#{run_dir}/EnergyPlus/eplusout.sql")
|
74
|
-
|
75
|
-
OpenStudio
|
76
|
-
|
76
|
+
|
77
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.Model', 'Finished run.')
|
78
|
+
|
77
79
|
elsif OpenStudio::Workflow::VERSION >= '1.0.0' # Use the OS 2.0 openstudio-workflow gem
|
78
|
-
OpenStudio
|
80
|
+
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.model.Model', 'Running with OS 2.0 openstudio-workflow gem.')
|
79
81
|
|
80
82
|
# Write OSW file for the simulation
|
81
|
-
require '
|
83
|
+
require 'json'
|
84
|
+
osw_dir = File.dirname(osm_path.to_s)
|
82
85
|
osw_hash = {
|
83
|
-
|
84
|
-
|
86
|
+
run_directory: File.join(osw_dir, 'run'),
|
87
|
+
seed_file: File.absolute_path(osm_path.to_s),
|
85
88
|
weather_file: File.absolute_path(epw_path.to_s),
|
86
89
|
steps: []
|
87
90
|
}
|
88
|
-
osw_path = File.join(
|
91
|
+
osw_path = File.join(osw_dir, 'workflow.osw')
|
89
92
|
File.open(osw_path, 'wb') { |f| f << JSON.pretty_generate(osw_hash) }
|
90
93
|
|
91
|
-
# Create local adapters
|
92
|
-
adapter_options = {workflow_filename: File.basename(osw_path), output_directory: File.join(Dir.pwd, 'run')}
|
93
|
-
input_adapter = OpenStudio::Workflow.load_input_adapter 'local', adapter_options
|
94
|
-
output_adapter = OpenStudio::Workflow.load_output_adapter 'local', adapter_options
|
95
|
-
|
96
94
|
# Run workflow.osw
|
97
|
-
run_options =
|
95
|
+
run_options = {}
|
96
|
+
#run_options[:debug] = true
|
97
|
+
|
98
|
+
# jobs for running IDF
|
99
|
+
# run_options[:jobs] = [
|
100
|
+
# { state: :queued, next_state: :initialization, options: { initial: true } },
|
101
|
+
# { state: :initialization, next_state: :preprocess, job: :RunInitialization,
|
102
|
+
# file: 'openstudio/workflow/jobs/run_initialization.rb', options: {} },
|
103
|
+
# { state: :preprocess, next_state: :simulation, job: :RunPreprocess,
|
104
|
+
# file: 'openstudio/workflow/jobs/run_preprocess.rb' , options: {} },
|
105
|
+
# { state: :simulation, next_state: :finished, job: :RunEnergyPlus,
|
106
|
+
# file: 'openstudio/workflow/jobs/run_energyplus.rb', options: {} },
|
107
|
+
# { state: :finished },
|
108
|
+
# { state: :errored }
|
109
|
+
# ]
|
110
|
+
|
111
|
+
# jobs for running OSM
|
98
112
|
run_options[:jobs] = [
|
99
113
|
{ state: :queued, next_state: :initialization, options: { initial: true } },
|
100
|
-
{ state: :initialization, next_state: :
|
101
|
-
file: '
|
114
|
+
{ state: :initialization, next_state: :os_measures, job: :RunInitialization,
|
115
|
+
file: 'openstudio/workflow/jobs/run_initialization.rb', options: {} },
|
116
|
+
{ state: :os_measures, next_state: :translator, job: :RunOpenStudioMeasures,
|
117
|
+
file: 'openstudio/workflow/jobs/run_os_measures.rb', options: {} },
|
118
|
+
{ state: :translator, next_state: :ep_measures, job: :RunTranslation,
|
119
|
+
file: 'openstudio/workflow/jobs/run_translation.rb', options: {} },
|
120
|
+
{ state: :ep_measures, next_state: :preprocess, job: :RunEnergyPlusMeasures,
|
121
|
+
file: 'openstudio/workflow/jobs/run_ep_measures.rb', options: {} },
|
102
122
|
{ state: :preprocess, next_state: :simulation, job: :RunPreprocess,
|
103
|
-
file: '
|
104
|
-
{ state: :simulation, next_state: :
|
105
|
-
file: '
|
123
|
+
file: 'openstudio/workflow/jobs/run_preprocess.rb', options: {} },
|
124
|
+
{ state: :simulation, next_state: :reporting_measures, job: :RunEnergyPlus,
|
125
|
+
file: 'openstudio/workflow/jobs/run_energyplus.rb', options: {} },
|
126
|
+
{ state: :reporting_measures, next_state: :postprocess, job: :RunReportingMeasures,
|
127
|
+
file: 'openstudio/workflow/jobs/run_reporting_measures.rb', options: {} },
|
128
|
+
{ state: :postprocess, next_state: :finished, job: :RunPostprocess,
|
129
|
+
file: 'openstudio/workflow/jobs/run_postprocess.rb', options: {} },
|
106
130
|
{ state: :finished },
|
107
131
|
{ state: :errored }
|
108
132
|
]
|
109
|
-
|
133
|
+
|
134
|
+
begin
|
135
|
+
# earlier version of the Workflow::Run method
|
136
|
+
|
137
|
+
# Create local adapters
|
138
|
+
adapter_options = { workflow_filename: File.basename(osw_path), output_directory: File.join(Dir.pwd, 'run') }
|
139
|
+
input_adapter = OpenStudio::Workflow.load_input_adapter 'local', adapter_options
|
140
|
+
output_adapter = OpenStudio::Workflow.load_output_adapter 'local', adapter_options
|
141
|
+
|
142
|
+
k = OpenStudio::Workflow::Run.new input_adapter, output_adapter, File.dirname(osw_path), run_options
|
143
|
+
rescue
|
144
|
+
# current version of the Workflow::Run method
|
145
|
+
k = OpenStudio::Workflow::Run.new osw_path, run_options
|
146
|
+
end
|
147
|
+
|
110
148
|
final_state = k.run
|
111
149
|
|
112
150
|
# Check run status and return the sql_path
|
113
151
|
if final_state == :finished
|
114
|
-
OpenStudio
|
152
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.Model', 'Finished run.')
|
115
153
|
else
|
116
|
-
OpenStudio
|
154
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.Model', 'Run completed with errors.')
|
117
155
|
end
|
118
|
-
sql_path = OpenStudio::Path.new(
|
119
|
-
|
120
|
-
OpenStudio
|
156
|
+
sql_path = OpenStudio::Path.new(File.join(osw_dir, 'run/eplusout.sql'))
|
157
|
+
|
158
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.Model', 'Finished simulation.')
|
121
159
|
|
122
160
|
else # Use the pre OS 2.0 openstudio-workflow gem
|
123
|
-
OpenStudio
|
124
|
-
|
161
|
+
OpenStudio.logFree(OpenStudio::Debug, 'openstudio.model.Model', 'Running with pre OS 2.0 openstudio-workflow gem.')
|
162
|
+
|
125
163
|
# Copy the weather file to this directory
|
126
164
|
FileUtils.copy(epw_path.to_s, run_dir)
|
127
165
|
|
@@ -130,69 +168,67 @@ class OpenStudio::Model::Model
|
|
130
168
|
final_state = sim.run
|
131
169
|
|
132
170
|
if final_state == :finished
|
133
|
-
OpenStudio
|
171
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.model.Model', 'Finished run.')
|
134
172
|
end
|
135
|
-
|
173
|
+
|
136
174
|
sql_path = OpenStudio::Path.new("#{run_dir}/run/eplusout.sql")
|
137
|
-
|
175
|
+
|
138
176
|
end
|
139
|
-
|
140
|
-
# TODO Delete the eplustbl.htm and other files created
|
177
|
+
|
178
|
+
# TODO: Delete the eplustbl.htm and other files created
|
141
179
|
# by the run for cleanliness.
|
142
|
-
|
143
|
-
if OpenStudio
|
180
|
+
|
181
|
+
if OpenStudio.exists(sql_path)
|
144
182
|
sql = OpenStudio::SqlFile.new(sql_path)
|
145
183
|
# Check to make sure the sql file is readable,
|
146
184
|
# which won't be true if EnergyPlus crashed during simulation.
|
147
|
-
|
148
|
-
OpenStudio
|
185
|
+
unless sql.connectionOpen
|
186
|
+
OpenStudio.logFree(OpenStudio::Error, 'openstudio.model.Model', "The run failed, cannot create model. Look at the eplusout.err file in #{File.dirname(sql_path.to_s)} to see the cause.")
|
149
187
|
return false
|
150
188
|
end
|
151
189
|
# Attach the sql file from the run to the model
|
152
|
-
|
153
|
-
else
|
154
|
-
OpenStudio
|
190
|
+
setSqlFile(sql)
|
191
|
+
else
|
192
|
+
OpenStudio.logFree(OpenStudio::Error, 'openstudio.model.Model', "Results for the run couldn't be found here: #{sql_path}.")
|
155
193
|
return false
|
156
194
|
end
|
157
|
-
|
195
|
+
|
158
196
|
# Report severe errors in the run
|
159
|
-
error_query = "SELECT ErrorMessage
|
160
|
-
FROM Errors
|
197
|
+
error_query = "SELECT ErrorMessage
|
198
|
+
FROM Errors
|
161
199
|
WHERE ErrorType in(1,2)"
|
162
|
-
errs =
|
200
|
+
errs = sqlFile.get.execAndReturnVectorOfString(error_query)
|
163
201
|
if errs.is_initialized
|
164
202
|
errs = errs.get
|
165
203
|
end
|
166
204
|
|
167
205
|
# Check that the run completed
|
168
|
-
completed_query =
|
169
|
-
completed =
|
206
|
+
completed_query = 'SELECT Completed FROM Simulations'
|
207
|
+
completed = sqlFile.get.execAndReturnFirstDouble(completed_query)
|
170
208
|
if completed.is_initialized
|
171
209
|
completed = completed.get
|
172
|
-
if completed
|
173
|
-
OpenStudio
|
210
|
+
if completed.zero?
|
211
|
+
OpenStudio.logFree(OpenStudio::Error, 'openstudio.model.Model', "The run did not finish and had following errors: #{errs.join('\n')}")
|
174
212
|
return false
|
175
213
|
end
|
176
|
-
end
|
177
|
-
|
214
|
+
end
|
215
|
+
|
178
216
|
# Check that the run completed with no severe errors
|
179
|
-
completed_successfully_query =
|
180
|
-
completed_successfully =
|
217
|
+
completed_successfully_query = 'SELECT CompletedSuccessfully FROM Simulations'
|
218
|
+
completed_successfully = sqlFile.get.execAndReturnFirstDouble(completed_successfully_query)
|
181
219
|
if completed_successfully.is_initialized
|
182
220
|
completed_successfully = completed_successfully.get
|
183
|
-
if completed_successfully
|
184
|
-
OpenStudio
|
221
|
+
if completed_successfully.zero?
|
222
|
+
OpenStudio.logFree(OpenStudio::Error, 'openstudio.model.Model', "The run failed with the following severe or fatal errors: #{errs.join('\n')}")
|
185
223
|
return false
|
186
224
|
end
|
187
|
-
end
|
188
|
-
|
225
|
+
end
|
226
|
+
|
189
227
|
# Log any severe errors that did not cause simulation to fail
|
190
|
-
|
191
|
-
OpenStudio
|
228
|
+
unless errs.empty?
|
229
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.model.Model', "The run completed but had the following severe errors: #{errs.join('\n')}")
|
192
230
|
end
|
193
231
|
|
194
232
|
return true
|
195
|
-
|
196
233
|
end
|
197
|
-
|
198
|
-
end
|
234
|
+
end
|
@@ -1,19 +1,15 @@
|
|
1
1
|
|
2
2
|
# Open the class to add methods to put weather info into the model
|
3
3
|
class OpenStudio::Model::Model
|
4
|
-
|
5
4
|
# Helper method to set the weather file, import the design days, set
|
6
5
|
# water mains temperature, and set ground temperature.
|
7
6
|
# Based on ChangeBuildingLocation measure by Nicholas Long
|
8
7
|
|
9
|
-
def add_design_days_and_weather_file(building_type,
|
8
|
+
def add_design_days_and_weather_file(building_type, template, climate_zone, epw_file)
|
9
|
+
require_relative 'Weather.stat_file'
|
10
10
|
|
11
|
+
OpenStudio.logFree(OpenStudio::Info, 'openstudio.weather.Model', "Started adding weather file for climate zone: #{climate_zone}.")
|
11
12
|
|
12
|
-
require_relative 'Weather.stat_file'
|
13
|
-
|
14
|
-
OpenStudio::logFree(OpenStudio::Info, 'openstudio.weather.Model', "Started adding weather file for climate zone: #{climate_zone}.")
|
15
|
-
|
16
|
-
|
17
13
|
# Define the weather file for each climate zone
|
18
14
|
climate_zone_weather_file_map = {
|
19
15
|
'ASHRAE 169-2006-1A' => 'USA_FL_Miami.Intl.AP.722020_TMY3.epw',
|
@@ -35,32 +31,51 @@ class OpenStudio::Model::Model
|
|
35
31
|
'ASHRAE 169-2006-7B' => 'USA_MN_Duluth.Intl.AP.727450_TMY3.epw',
|
36
32
|
'ASHRAE 169-2006-8A' => 'USA_AK_Fairbanks.Intl.AP.702610_TMY3.epw',
|
37
33
|
'ASHRAE 169-2006-8B' => 'USA_AK_Fairbanks.Intl.AP.702610_TMY3.epw',
|
38
|
-
#For measure input
|
39
|
-
'NECB HDD Method'
|
40
|
-
#For testing
|
41
|
-
'NECB-CNEB-5' =>
|
42
|
-
'NECB-CNEB-6' =>
|
43
|
-
'NECB-CNEB-7a' =>
|
44
|
-
'NECB-CNEB-7b' =>
|
45
|
-
'NECB-CNEB-8' =>
|
34
|
+
# For measure input
|
35
|
+
'NECB HDD Method' => epw_file.to_s,
|
36
|
+
# For testing
|
37
|
+
'NECB-CNEB-5' => epw_file.to_s,
|
38
|
+
'NECB-CNEB-6' => epw_file.to_s,
|
39
|
+
'NECB-CNEB-7a' => epw_file.to_s,
|
40
|
+
'NECB-CNEB-7b' => epw_file.to_s,
|
41
|
+
'NECB-CNEB-8' => epw_file.to_s
|
46
42
|
}
|
47
43
|
|
48
|
-
# Define where the weather files live
|
49
|
-
top_dir = File.expand_path( '../../..',File.dirname(__FILE__))
|
50
|
-
weather_dir = "#{top_dir}/data/weather"
|
51
|
-
|
52
44
|
# Get the weather file name from the hash
|
53
|
-
weather_file_name = climate_zone_weather_file_map[climate_zone]
|
45
|
+
weather_file_name = climate_zone_weather_file_map[climate_zone]
|
54
46
|
if weather_file_name.nil?
|
55
|
-
OpenStudio
|
47
|
+
OpenStudio.logFree(OpenStudio::Error, 'openstudio.weather.Model', "Could not determine the weather file for climate zone: #{climate_zone}.")
|
56
48
|
return false
|
57
49
|
end
|
50
|
+
|
51
|
+
# Define where the weather files lives
|
52
|
+
weather_dir = nil
|
53
|
+
if File.dirname(__FILE__)[0] == ':'
|
54
|
+
# running embedded copy of the gem
|
55
|
+
|
56
|
+
# load weather file from embedded files
|
57
|
+
epw_string = load_resource_relative("../../../data/weather/#{weather_file_name}")
|
58
|
+
ddy_string = load_resource_relative("../../../data/weather/#{weather_file_name.gsub('.epw','.ddy')}")
|
59
|
+
stat_string = load_resource_relative("../../../data/weather/#{weather_file_name.gsub('.epw','.stat')}")
|
60
|
+
|
61
|
+
# extract to local weather dir
|
62
|
+
weather_dir = File.expand_path(File.join(Dir.pwd, "extracted_files/weather/"))
|
63
|
+
puts "Extracting weather files to #{weather_dir}"
|
64
|
+
FileUtils.mkdir_p(weather_dir)
|
65
|
+
File.open("#{weather_dir}/#{weather_file_name}", 'wb') {|f| f << epw_string ; f.flush}
|
66
|
+
File.open("#{weather_dir}/#{weather_file_name.gsub('.epw','.ddy')}", 'wb') {|f| f << ddy_string ; f.flush}
|
67
|
+
File.open("#{weather_dir}/#{weather_file_name.gsub('.epw','.stat')}", 'wb') {|f| f << stat_string ; f.flush}
|
68
|
+
else
|
69
|
+
# loaded gem from system path
|
70
|
+
top_dir = File.expand_path('../../..', File.dirname(__FILE__))
|
71
|
+
weather_dir = File.expand_path("#{top_dir}/data/weather")
|
72
|
+
end
|
58
73
|
|
59
74
|
# Add Weather File
|
60
75
|
unless (Pathname.new weather_dir).absolute?
|
61
76
|
weather_dir = File.expand_path(File.join(File.dirname(__FILE__), weather_dir))
|
62
77
|
end
|
63
|
-
|
78
|
+
|
64
79
|
weather_file = File.join(weather_dir, weather_file_name)
|
65
80
|
epw_file = OpenStudio::EpwFile.new(weather_file)
|
66
81
|
OpenStudio::Model::WeatherFile.setWeatherFile(self, epw_file).get
|
@@ -71,65 +86,63 @@ class OpenStudio::Model::Model
|
|
71
86
|
weather_time = epw_file.timeZone
|
72
87
|
weather_elev = epw_file.elevation
|
73
88
|
|
74
|
-
|
75
89
|
# Add or update site data
|
76
|
-
site =
|
90
|
+
site = getSite
|
77
91
|
site.setName(weather_name)
|
78
92
|
site.setLatitude(weather_lat)
|
79
93
|
site.setLongitude(weather_lon)
|
80
94
|
site.setTimeZone(weather_time)
|
81
95
|
site.setElevation(weather_elev)
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
ground_temp_vals = self.find_object($os_standards["ground_temperatures"], {'template'=>building_vintage, 'climate_zone'=>climate_zone, 'building_type'=>building_type})
|
96
|
+
|
97
|
+
# Add or update ground temperature data
|
98
|
+
ground_temp_vals = find_object($os_standards['ground_temperatures'], 'template' => template, 'climate_zone' => climate_zone, 'building_type' => building_type)
|
86
99
|
if ground_temp_vals && ground_temp_vals['jan']
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
+
ground_temp = getSiteGroundTemperatureBuildingSurface
|
101
|
+
ground_temp.setJanuaryGroundTemperature(ground_temp_vals['jan'])
|
102
|
+
ground_temp.setFebruaryGroundTemperature(ground_temp_vals['feb'])
|
103
|
+
ground_temp.setMarchGroundTemperature(ground_temp_vals['mar'])
|
104
|
+
ground_temp.setAprilGroundTemperature(ground_temp_vals['apr'])
|
105
|
+
ground_temp.setMayGroundTemperature(ground_temp_vals['may'])
|
106
|
+
ground_temp.setJuneGroundTemperature(ground_temp_vals['jun'])
|
107
|
+
ground_temp.setJulyGroundTemperature(ground_temp_vals['jul'])
|
108
|
+
ground_temp.setAugustGroundTemperature(ground_temp_vals['aug'])
|
109
|
+
ground_temp.setSeptemberGroundTemperature(ground_temp_vals['sep'])
|
110
|
+
ground_temp.setOctoberGroundTemperature(ground_temp_vals['oct'])
|
111
|
+
ground_temp.setNovemberGroundTemperature(ground_temp_vals['nov'])
|
112
|
+
ground_temp.setDecemberGroundTemperature(ground_temp_vals['dec'])
|
100
113
|
else
|
101
|
-
OpenStudio
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
114
|
+
OpenStudio.logFree(OpenStudio::Warn, 'openstudio.weather.Model', 'Could not find ground temperatures; will use generic temperatures, which will skew results.')
|
115
|
+
ground_temp = getSiteGroundTemperatureBuildingSurface
|
116
|
+
ground_temp.setJanuaryGroundTemperature(19.527)
|
117
|
+
ground_temp.setFebruaryGroundTemperature(19.502)
|
118
|
+
ground_temp.setMarchGroundTemperature(19.536)
|
119
|
+
ground_temp.setAprilGroundTemperature(19.598)
|
120
|
+
ground_temp.setMayGroundTemperature(20.002)
|
121
|
+
ground_temp.setJuneGroundTemperature(21.640)
|
122
|
+
ground_temp.setJulyGroundTemperature(22.225)
|
123
|
+
ground_temp.setAugustGroundTemperature(22.375)
|
124
|
+
ground_temp.setSeptemberGroundTemperature(21.449)
|
125
|
+
ground_temp.setOctoberGroundTemperature(20.121)
|
126
|
+
ground_temp.setNovemberGroundTemperature(19.802)
|
127
|
+
ground_temp.setDecemberGroundTemperature(19.633)
|
115
128
|
end
|
116
129
|
|
117
130
|
# Add SiteWaterMainsTemperature -- via parsing of STAT file.
|
118
131
|
stat_filename = "#{File.join(File.dirname(weather_file), File.basename(weather_file, '.*'))}.stat"
|
119
132
|
if File.exist? stat_filename
|
120
133
|
stat_file = EnergyPlus::StatFile.new(stat_filename)
|
121
|
-
water_temp =
|
134
|
+
water_temp = getSiteWaterMainsTemperature
|
122
135
|
water_temp.setAnnualAverageOutdoorAirTemperature(stat_file.mean_dry_bulb)
|
123
136
|
water_temp.setMaximumDifferenceInMonthlyAverageOutdoorAirTemperatures(stat_file.delta_dry_bulb)
|
124
|
-
#OpenStudio::logFree(OpenStudio::Info, "openstudio.weather.Model", "Mean dry bulb is #{stat_file.mean_dry_bulb}")
|
125
|
-
#OpenStudio::logFree(OpenStudio::Info, "openstudio.weather.Model", "Delta dry bulb is #{stat_file.delta_dry_bulb}")
|
137
|
+
# OpenStudio::logFree(OpenStudio::Info, "openstudio.weather.Model", "Mean dry bulb is #{stat_file.mean_dry_bulb}")
|
138
|
+
# OpenStudio::logFree(OpenStudio::Info, "openstudio.weather.Model", "Delta dry bulb is #{stat_file.delta_dry_bulb}")
|
126
139
|
else
|
127
|
-
OpenStudio
|
140
|
+
OpenStudio.logFree(OpenStudio::Error, 'openstudio.weather.Model', "Could not find .stat file for: #{stat_filename}.")
|
128
141
|
return false
|
129
142
|
end
|
130
143
|
|
131
144
|
# Remove any existing Design Day objects that are in the file
|
132
|
-
|
145
|
+
getDesignDays.each(&:remove)
|
133
146
|
|
134
147
|
# Load in the ddy file based on convention that it is in
|
135
148
|
# the same directory and has the same basename as the epw file.
|
@@ -139,26 +152,20 @@ class OpenStudio::Model::Model
|
|
139
152
|
ddy_model.getObjectsByType('OS:SizingPeriod:DesignDay'.to_IddObjectType).each do |d|
|
140
153
|
# Import the 99.6% Heating and 0.4% Cooling design days
|
141
154
|
ddy_list = /(Htg 99.6. Condns DB)|(Clg .4% Condns DB=>MWB)/
|
142
|
-
if d.name.get =~ ddy_list
|
143
|
-
|
144
|
-
#OpenStudio::logFree(OpenStudio::Info, 'openstudio.weather.Model', "Added #{d.name} design day.")
|
155
|
+
if d.name.get =~ ddy_list
|
156
|
+
addObject(d.clone)
|
157
|
+
# OpenStudio::logFree(OpenStudio::Info, 'openstudio.weather.Model', "Added #{d.name} design day.")
|
145
158
|
end
|
146
159
|
end
|
147
160
|
else
|
148
|
-
OpenStudio
|
149
|
-
puts "Could not find .
|
161
|
+
OpenStudio.logFree(OpenStudio::Error, 'openstudio.weather.Model', "Could not find .ddy file for: #{ddy_file}.")
|
162
|
+
puts "Could not find .ddy file for: #{ddy_file}."
|
150
163
|
return false
|
151
164
|
end
|
152
165
|
|
153
|
-
OpenStudio::logFree(OpenStudio::Info, 'openstudio.weather.Model', "Finished adding weather file for climate zone: #{climate_zone}.")
|
154
|
-
puts "Could not find .stat file for: #{stat_filename}."
|
155
|
-
|
156
166
|
return true
|
157
|
-
|
158
167
|
end
|
159
|
-
|
160
|
-
end
|
161
|
-
|
168
|
+
end
|
162
169
|
|
163
170
|
# *********************************************************************
|
164
171
|
# * Copyright (c) 2008-2015, Natural Resources Canada
|
@@ -179,257 +186,252 @@ end
|
|
179
186
|
# * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
180
187
|
# **********************************************************************/
|
181
188
|
|
182
|
-
|
183
|
-
#This module has been created to make it easier to manipulate weather files can contains region specific data.
|
184
|
-
|
189
|
+
# This module has been created to make it easier to manipulate weather files can contains region specific data.
|
185
190
|
|
186
191
|
module BTAP
|
187
192
|
module Environment
|
188
193
|
require_relative 'Weather.stat_file'
|
189
|
-
|
190
|
-
#keeping data is hash/json for now. Can always export / import to csv if required automatically.
|
191
|
-
WeatherData1 = [
|
192
|
-
{:
|
193
|
-
{:
|
194
|
-
{:
|
195
|
-
{:
|
196
|
-
{:
|
197
|
-
{:
|
198
|
-
{:
|
199
|
-
{:
|
200
|
-
{:
|
201
|
-
{:
|
202
|
-
{:
|
203
|
-
{:
|
204
|
-
{:
|
205
|
-
{:
|
206
|
-
{:
|
207
|
-
{:
|
208
|
-
{:
|
209
|
-
{:
|
210
|
-
{:
|
211
|
-
{:
|
212
|
-
{:
|
213
|
-
{:
|
214
|
-
{:
|
215
|
-
{:
|
216
|
-
{:
|
217
|
-
{:
|
218
|
-
{:
|
219
|
-
{:
|
220
|
-
{:
|
221
|
-
{:
|
222
|
-
{:
|
223
|
-
{:
|
224
|
-
{:
|
225
|
-
{:
|
226
|
-
{:
|
227
|
-
{:
|
228
|
-
{:
|
229
|
-
{:
|
230
|
-
{:
|
231
|
-
{:
|
232
|
-
{:
|
233
|
-
{:
|
234
|
-
{:
|
235
|
-
{:
|
236
|
-
{:
|
237
|
-
{:
|
238
|
-
{:
|
239
|
-
{:
|
240
|
-
{:
|
241
|
-
{:
|
242
|
-
{:
|
243
|
-
{:
|
244
|
-
{:
|
245
|
-
{:
|
246
|
-
{:
|
247
|
-
{:
|
248
|
-
{:
|
249
|
-
{:
|
250
|
-
{:
|
251
|
-
{:
|
252
|
-
{:
|
253
|
-
{:
|
254
|
-
{:
|
255
|
-
{:
|
256
|
-
{:
|
257
|
-
{:
|
258
|
-
{:
|
259
|
-
{:
|
260
|
-
{:
|
261
|
-
{:
|
262
|
-
{:
|
263
|
-
{:
|
264
|
-
{:
|
265
|
-
{:
|
266
|
-
{:
|
267
|
-
{:
|
268
|
-
{:
|
269
|
-
{:
|
270
|
-
{:
|
271
|
-
]
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
def self.get_canadian_weather_file_names()
|
194
|
+
|
195
|
+
# keeping data is hash/json for now. Can always export / import to csv if required automatically.
|
196
|
+
WeatherData1 = [
|
197
|
+
{ file: 'CAN_BC_Abbotsford.711080_CWEC.epw', location_name: ' CAN-BC-Abbotsford', energy_plus_location_name: 'Abbotsford_BC_CAN', country: 'CAN', state_province_region: 'BC', city: 'Abbotsford', hdd18: 3134, cdd18: 33, latitude: 49.03, longitude: -122.37, elevation: 58, deltadb: 14.3, a90_1_2004_climate_zone: '5C', boiler_fueltype: 'NaturalGas', baseboard_type: 'Hot Water', mau_type: true, mau_heating_coil_type: 'Hot Water', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Gas', heating_coil_type_sys4: 'Gas', heating_coil_type_sys6: 'Hot Water', fan_type: 'var_speed_drive' },
|
198
|
+
{ file: 'CAN_PQ_Bagotville.717270_CWEC.epw', location_name: ' CAN-PQ-Bagotville', energy_plus_location_name: 'Bagotville_PQ_CAN', country: 'CAN', state_province_region: 'PQ', city: 'Bagotville', hdd18: 5781, cdd18: 49, latitude: 48.33, longitude: -71, elevation: 159, deltadb: 32.4, a90_1_2004_climate_zone: 7, boiler_fueltype: 'Electricity', baseboard_type: 'Electric', mau_type: true, mau_heating_coil_type: 'Electric', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Electric', heating_coil_type_sys4: 'Electric', heating_coil_type_sys6: 'Electric', fan_type: 'var_speed_drive' },
|
199
|
+
{ file: 'CAN_PQ_Baie.Comeau.711870_CWEC.epw', location_name: ' CAN-PQ-Baie Comeau', energy_plus_location_name: 'Baie Comeau_PQ_CAN', country: 'CAN', state_province_region: 'PQ', city: 'Baie Comeau', hdd18: 5889, cdd18: 3, latitude: 49.13, longitude: -68.2, elevation: 22, deltadb: 29.8, a90_1_2004_climate_zone: 7, boiler_fueltype: 'Electricity', baseboard_type: 'Electric', mau_type: true, mau_heating_coil_type: 'Electric', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Electric', heating_coil_type_sys4: 'Electric', heating_coil_type_sys6: 'Electric', fan_type: 'var_speed_drive' },
|
200
|
+
{ file: 'CAN_NF_Battle.Harbour.718170_CWEC.epw', location_name: ' CAN-NF-Battle Harbour', energy_plus_location_name: 'Battle Harbour_NF_CAN', country: 'CAN', state_province_region: 'NF', city: 'Battle Harbour', hdd18: 6462, cdd18: 0, latitude: 52.3, longitude: -55.83, elevation: 8, deltadb: 21.6, a90_1_2004_climate_zone: 7, boiler_fueltype: 'Electricity', baseboard_type: 'Electric', mau_type: true, mau_heating_coil_type: 'Electric', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Electric', heating_coil_type_sys4: 'Electric', heating_coil_type_sys6: 'Electric', fan_type: 'var_speed_drive' },
|
201
|
+
{ file: 'CAN_MB_Brandon.711400_CWEC.epw', location_name: ' CAN-MB-Brandon', energy_plus_location_name: 'Brandon_MB_CAN', country: 'CAN', state_province_region: 'MB', city: 'Brandon', hdd18: 5912, cdd18: 95, latitude: 49.92, longitude: -99.95, elevation: 409, deltadb: 36.7, a90_1_2004_climate_zone: 7, boiler_fueltype: 'Electricity', baseboard_type: 'Electric', mau_type: true, mau_heating_coil_type: 'Electric', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Electric', heating_coil_type_sys4: 'Electric', heating_coil_type_sys6: 'Electric', fan_type: 'var_speed_drive' },
|
202
|
+
{ file: 'CAN_AB_Calgary.718770_CWEC.epw', location_name: " CAN-AB-Calgary Int'l", energy_plus_location_name: "Calgary Int'l_AB_CAN", country: 'CAN', state_province_region: 'AB', city: "Calgary Int'l", hdd18: 5146, cdd18: 40, latitude: 51.12, longitude: -114.02, elevation: 1084, deltadb: 25, a90_1_2004_climate_zone: 7, boiler_fueltype: 'NaturalGas', baseboard_type: 'Hot Water', mau_type: true, mau_heating_coil_type: 'Hot Water', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Gas', heating_coil_type_sys4: 'Electric', heating_coil_type_sys6: 'Electric', fan_type: 'var_speed_drive' },
|
203
|
+
{ file: 'CAN_PE_Charlottetown.717060_CWEC.epw', location_name: ' CAN-PE-Charlottetown CDA', energy_plus_location_name: 'Charlottetown CDA_PE_CAN', country: 'CAN', state_province_region: 'PE', city: 'Charlottetown CDA', hdd18: 4647, cdd18: 72, latitude: 46.28, longitude: -63.13, elevation: 54, deltadb: 25.6, a90_1_2004_climate_zone: '6A', boiler_fueltype: 'Electricity', baseboard_type: 'Electric', mau_type: true, mau_heating_coil_type: 'Electric', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Electric', heating_coil_type_sys4: 'Electric', heating_coil_type_sys6: 'Electric', fan_type: 'var_speed_drive' },
|
204
|
+
{ file: 'CAN_MB_Churchill.719130_CWEC.epw', location_name: ' CAN-MB-Churchill', energy_plus_location_name: 'Churchill_MB_CAN', country: 'CAN', state_province_region: 'MB', city: 'Churchill', hdd18: 9114, cdd18: 3, latitude: 58.75, longitude: -94.07, elevation: 29, deltadb: 37.7, a90_1_2004_climate_zone: 8, boiler_fueltype: 'Electricity', baseboard_type: 'Electric', mau_type: true, mau_heating_coil_type: 'Electric', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Electric', heating_coil_type_sys4: 'Electric', heating_coil_type_sys6: 'Electric', fan_type: 'var_speed_drive' },
|
205
|
+
{ file: 'CAN_BC_Comox.718930_CWEC.epw', location_name: ' CAN-BC-Comox', energy_plus_location_name: 'Comox_BC_CAN', country: 'CAN', state_province_region: 'BC', city: 'Comox', hdd18: 3177, cdd18: 30, latitude: 49.72, longitude: -124.9, elevation: 24, deltadb: 15.2, a90_1_2004_climate_zone: '5C', boiler_fueltype: 'NaturalGas', baseboard_type: 'Hot Water', mau_type: true, mau_heating_coil_type: 'Hot Water', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Gas', heating_coil_type_sys4: 'Gas', heating_coil_type_sys6: 'Hot Water', fan_type: 'var_speed_drive' },
|
206
|
+
{ file: 'CAN_BC_Cranbrook.718800_CWEC.epw', location_name: ' CAN-BC-Cranbrook', energy_plus_location_name: 'Cranbrook_BC_CAN', country: 'CAN', state_province_region: 'BC', city: 'Cranbrook', hdd18: 4645, cdd18: 118, latitude: 49.6, longitude: -115.78, elevation: 940, deltadb: 26.6, a90_1_2004_climate_zone: '6A', boiler_fueltype: 'NaturalGas', baseboard_type: 'Hot Water', mau_type: true, mau_heating_coil_type: 'Hot Water', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Gas', heating_coil_type_sys4: 'Gas', heating_coil_type_sys6: 'Hot Water', fan_type: 'var_speed_drive' },
|
207
|
+
{ file: 'CAN_AB_Edmonton.711230_CWEC.epw', location_name: ' CAN-AB-Edmonton Stony Plain', energy_plus_location_name: 'Edmonton Stony Plain_AB_CAN', country: 'CAN', state_province_region: 'AB', city: 'Edmonton Stony Plain', hdd18: 5583, cdd18: 22, latitude: 53.53, longitude: -114.1, elevation: 723, deltadb: 27.5, a90_1_2004_climate_zone: 7, boiler_fueltype: 'NaturalGas', baseboard_type: 'Hot Water', mau_type: true, mau_heating_coil_type: 'Hot Water', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Gas', heating_coil_type_sys4: 'Gas', heating_coil_type_sys6: 'Hot Water', fan_type: 'var_speed_drive' },
|
208
|
+
{ file: 'CAN_SK_Estevan.718620_CWEC.epw', location_name: ' CAN-SK-Estevan', energy_plus_location_name: 'Estevan_SK_CAN', country: 'CAN', state_province_region: 'SK', city: 'Estevan', hdd18: 5370, cdd18: 189, latitude: 49.22, longitude: -102.97, elevation: 581, deltadb: 35.1, a90_1_2004_climate_zone: 7, boiler_fueltype: 'NaturalGas', baseboard_type: 'Hot Water', mau_type: true, mau_heating_coil_type: 'Hot Water', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Gas', heating_coil_type_sys4: 'Gas', heating_coil_type_sys6: 'Hot Water', fan_type: 'var_speed_drive' },
|
209
|
+
{ file: 'CAN_AB_Fort.McMurray.719320_CWEC.epw', location_name: ' CAN-AB-Fort McMurray', energy_plus_location_name: 'Fort McMurray_AB_CAN', country: 'CAN', state_province_region: 'AB', city: 'Fort McMurray', hdd18: 6191, cdd18: 65, latitude: 56.65, longitude: -111.22, elevation: 369, deltadb: 33.5, a90_1_2004_climate_zone: 7, boiler_fueltype: 'NaturalGas', baseboard_type: 'Hot Water', mau_type: true, mau_heating_coil_type: 'Hot Water', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Gas', heating_coil_type_sys4: 'Gas', heating_coil_type_sys6: 'Hot Water', fan_type: 'var_speed_drive' },
|
210
|
+
{ file: 'CAN_BC_Fort.St.John.719430_CWEC.epw', location_name: ' CAN-BC-Fort St John', energy_plus_location_name: 'Fort St John_BC_CAN', country: 'CAN', state_province_region: 'BC', city: 'Fort St John', hdd18: 5863, cdd18: 25, latitude: 56.23, longitude: -120.73, elevation: 695, deltadb: 29.1, a90_1_2004_climate_zone: 7, boiler_fueltype: 'NaturalGas', baseboard_type: 'Hot Water', mau_type: true, mau_heating_coil_type: 'Hot Water', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Gas', heating_coil_type_sys4: 'Gas', heating_coil_type_sys6: 'Hot Water', fan_type: 'var_speed_drive' },
|
211
|
+
{ file: 'CAN_NB_Fredericton.717000_CWEC.epw', location_name: ' CAN-NB-Fredericton', energy_plus_location_name: 'Fredericton_NB_CAN', country: 'CAN', state_province_region: 'NB', city: 'Fredericton', hdd18: 4734, cdd18: 132, latitude: 45.87, longitude: -66.53, elevation: 20, deltadb: 29.5, a90_1_2004_climate_zone: '6A', boiler_fueltype: 'NaturalGas', baseboard_type: 'Hot Water', mau_type: true, mau_heating_coil_type: 'Hot Water', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Gas', heating_coil_type_sys4: 'Gas', heating_coil_type_sys6: 'Hot Water', fan_type: 'var_speed_drive' },
|
212
|
+
{ file: 'CAN_NF_Gander.718030_CWEC.epw', location_name: " CAN-NF-Gander Int'l", energy_plus_location_name: "Gander Int'l_NF_CAN", country: 'CAN', state_province_region: 'NF', city: "Gander Int'l", hdd18: 5101, cdd18: 25, latitude: 48.95, longitude: -54.57, elevation: 151, deltadb: 22.6, a90_1_2004_climate_zone: 7, boiler_fueltype: 'Electricity', baseboard_type: 'Electric', mau_type: true, mau_heating_coil_type: 'Electric', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Electric', heating_coil_type_sys4: 'Electric', heating_coil_type_sys6: 'Electric', fan_type: 'var_speed_drive' },
|
213
|
+
{ file: 'CAN_NF_Goose.718160_CWEC.epw', location_name: ' CAN-NF-Goose', energy_plus_location_name: 'Goose_NF_CAN', country: 'CAN', state_province_region: 'NF', city: 'Goose', hdd18: 6558, cdd18: 38, latitude: 53.32, longitude: -60.37, elevation: 49, deltadb: 33, a90_1_2004_climate_zone: 7, boiler_fueltype: 'Electricity', baseboard_type: 'Electric', mau_type: true, mau_heating_coil_type: 'Electric', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Electric', heating_coil_type_sys4: 'Electric', heating_coil_type_sys6: 'Electric', fan_type: 'var_speed_drive' },
|
214
|
+
{ file: 'CAN_AB_Grande.Prairie.719400_CWEC.epw', location_name: ' CAN-AB-Grand Prairie', energy_plus_location_name: 'Grand Prairie_AB_CAN', country: 'CAN', state_province_region: 'AB', city: 'Grand Prairie', hdd18: 5897, cdd18: 26, latitude: 55.18, longitude: -118.88, elevation: 669, deltadb: 28.9, a90_1_2004_climate_zone: 7, boiler_fueltype: 'NaturalGas', baseboard_type: 'Hot Water', mau_type: true, mau_heating_coil_type: 'Hot Water', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Gas', heating_coil_type_sys4: 'Gas', heating_coil_type_sys6: 'Hot Water', fan_type: 'var_speed_drive' },
|
215
|
+
{ file: 'CAN_NS_Greenwood.713970_CWEC.epw', location_name: ' CAN-NS-Greenwood', energy_plus_location_name: 'Greenwood_NS_CAN', country: 'CAN', state_province_region: 'NS', city: 'Greenwood', hdd18: 4131, cdd18: 128, latitude: 44.98, longitude: -64.92, elevation: 28, deltadb: 23.8, a90_1_2004_climate_zone: '6A', boiler_fueltype: 'NaturalGas', baseboard_type: 'Hot Water', mau_type: true, mau_heating_coil_type: 'Hot Water', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Gas', heating_coil_type_sys4: 'Gas', heating_coil_type_sys6: 'Hot Water', fan_type: 'var_speed_drive' },
|
216
|
+
{ file: 'CAN_PQ_Grindstone.Island_CWEC.epw', location_name: ' CAN-PQ-Grindstone Island', energy_plus_location_name: 'Grindstone Island_PQ_CAN', country: 'CAN', state_province_region: 'PQ', city: 'Grindstone Island', hdd18: 4941, cdd18: 18, latitude: 47.38, longitude: -61.87, elevation: 59, deltadb: 23.8, a90_1_2004_climate_zone: '6A', boiler_fueltype: 'Electricity', baseboard_type: 'Electric', mau_type: true, mau_heating_coil_type: 'Electric', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Electric', heating_coil_type_sys4: 'Electric', heating_coil_type_sys6: 'Electric', fan_type: 'var_speed_drive' },
|
217
|
+
{ file: 'CAN_NT_Inuvik.719570_CWEC.epw', location_name: ' CAN-NT-Inuvik Ua', energy_plus_location_name: 'Inuvik Ua_NT_CAN', country: 'CAN', state_province_region: 'NT', city: 'Inuvik Ua', hdd18: 9952, cdd18: 17, latitude: 68.3, longitude: -133.48, elevation: 68, deltadb: 40.6, a90_1_2004_climate_zone: 8, boiler_fueltype: 'FuelOil#1', baseboard_type: 'Hot Water', mau_type: true, mau_heating_coil_type: 'Hot Water', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Electric', heating_coil_type_sys4: 'Electric', heating_coil_type_sys6: 'Electric', fan_type: 'var_speed_drive' },
|
218
|
+
{ file: 'CAN_BC_Kamloops.718870_CWEC.epw', location_name: ' CAN-BC-Kamloops', energy_plus_location_name: 'Kamloops_BC_CAN', country: 'CAN', state_province_region: 'BC', city: 'Kamloops', hdd18: 3629, cdd18: 287, latitude: 50.7, longitude: -120.45, elevation: 346, deltadb: 25.6, a90_1_2004_climate_zone: '5B', boiler_fueltype: 'NaturalGas', baseboard_type: 'Hot Water', mau_type: true, mau_heating_coil_type: 'Hot Water', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Gas', heating_coil_type_sys4: 'Gas', heating_coil_type_sys6: 'Hot Water', fan_type: 'var_speed_drive' },
|
219
|
+
{ file: 'CAN_ON_Kingston.716200_CWEC.epw', location_name: ' CAN-ON-Kingston', energy_plus_location_name: 'Kingston_ON_CAN', country: 'CAN', state_province_region: 'ON', city: 'Kingston', hdd18: 4287, cdd18: 187, latitude: 44.22, longitude: -76.6, elevation: 93, deltadb: 27.7, a90_1_2004_climate_zone: '6A', boiler_fueltype: 'NaturalGas', baseboard_type: 'Hot Water', mau_type: true, mau_heating_coil_type: 'Hot Water', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Gas', heating_coil_type_sys4: 'Gas', heating_coil_type_sys6: 'Hot Water', fan_type: 'var_speed_drive' },
|
220
|
+
{ file: 'CAN_PQ_Kuujjuarapik.719050_CWEC.epw', location_name: ' CAN-PQ-Kuujjuarapik', energy_plus_location_name: 'Kuujjuarapik_PQ_CAN', country: 'CAN', state_province_region: 'PQ', city: 'Kuujjuarapik', hdd18: 7986, cdd18: 12, latitude: 55.28, longitude: -77.77, elevation: 12, deltadb: 32, a90_1_2004_climate_zone: 8, boiler_fueltype: 'Electricity', baseboard_type: 'Electric', mau_type: true, mau_heating_coil_type: 'Electric', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Electric', heating_coil_type_sys4: 'Electric', heating_coil_type_sys6: 'Electric', fan_type: 'var_speed_drive' },
|
221
|
+
{ file: 'CAN_PQ_Kuujuaq.719060_CWEC.epw', location_name: ' CAN-PQ-Kuujuaq', energy_plus_location_name: 'Kuujuaq_PQ_CAN', country: 'CAN', state_province_region: 'PQ', city: 'Kuujuaq', hdd18: 8491, cdd18: 0, latitude: 58.1, longitude: -68.42, elevation: 37, deltadb: 31.8, a90_1_2004_climate_zone: 8, boiler_fueltype: 'Electricity', baseboard_type: 'Electric', mau_type: true, mau_heating_coil_type: 'Electric', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Electric', heating_coil_type_sys4: 'Electric', heating_coil_type_sys6: 'Electric', fan_type: 'var_speed_drive' },
|
222
|
+
{ file: 'CAN_PQ_La.Grande.Riviere.718270_CWEC.epw', location_name: ' CAN-PQ-La Grande Riviere', energy_plus_location_name: 'La Grande Riviere_PQ_CAN', country: 'CAN', state_province_region: 'PQ', city: 'La Grande Riviere', hdd18: 7616, cdd18: 11, latitude: 53.63, longitude: -77.7, elevation: 195, deltadb: 35.2, a90_1_2004_climate_zone: 8, boiler_fueltype: 'Electricity', baseboard_type: 'Electric', mau_type: true, mau_heating_coil_type: 'Electric', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Electric', heating_coil_type_sys4: 'Electric', heating_coil_type_sys6: 'Electric', fan_type: 'var_speed_drive' },
|
223
|
+
{ file: 'CAN_PQ_Lake.Eon.714210_CWEC.epw', location_name: ' CAN-PQ-Lake Eon', energy_plus_location_name: 'Lake Eon_PQ_CAN', country: 'CAN', state_province_region: 'PQ', city: 'Lake Eon', hdd18: 7383, cdd18: 8, latitude: 51.87, longitude: -63.28, elevation: 561, deltadb: 33.9, a90_1_2004_climate_zone: 8, boiler_fueltype: 'Electricity', baseboard_type: 'Electric', mau_type: true, mau_heating_coil_type: 'Electric', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Electric', heating_coil_type_sys4: 'Electric', heating_coil_type_sys6: 'Electric', fan_type: 'var_speed_drive' },
|
224
|
+
{ file: 'CAN_AB_Lethbridge.712430_CWEC.epw', location_name: ' CAN-AB-Lethbridge', energy_plus_location_name: 'Lethbridge_AB_CAN', country: 'CAN', state_province_region: 'AB', city: 'Lethbridge', hdd18: 4432, cdd18: 126, latitude: 49.63, longitude: -112.8, elevation: 921, deltadb: 26.5, a90_1_2004_climate_zone: '6B', boiler_fueltype: 'NaturalGas', baseboard_type: 'Hot Water', mau_type: true, mau_heating_coil_type: 'Hot Water', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Gas', heating_coil_type_sys4: 'Gas', heating_coil_type_sys6: 'Hot Water', fan_type: 'var_speed_drive' },
|
225
|
+
{ file: 'CAN_ON_London.716230_CWEC.epw', location_name: ' CAN-ON-London', energy_plus_location_name: 'London_ON_CAN', country: 'CAN', state_province_region: 'ON', city: 'London', hdd18: 4111, cdd18: 211, latitude: 43.03, longitude: -81.15, elevation: 278, deltadb: 27.9, a90_1_2004_climate_zone: '6A', boiler_fueltype: 'NaturalGas', baseboard_type: 'Hot Water', mau_type: true, mau_heating_coil_type: 'Hot Water', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Gas', heating_coil_type_sys4: 'Gas', heating_coil_type_sys6: 'Hot Water', fan_type: 'var_speed_drive' },
|
226
|
+
{ file: 'CAN_AB_Medicine.Hat.718720_CWEC.epw', location_name: ' CAN-AB-Medicine Hat', energy_plus_location_name: 'Medicine Hat_AB_CAN', country: 'CAN', state_province_region: 'AB', city: 'Medicine Hat', hdd18: 4678, cdd18: 199, latitude: 50.02, longitude: -110.72, elevation: 716, deltadb: 31.6, a90_1_2004_climate_zone: '6B', boiler_fueltype: 'NaturalGas', baseboard_type: 'Hot Water', mau_type: true, mau_heating_coil_type: 'Hot Water', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Gas', heating_coil_type_sys4: 'Gas', heating_coil_type_sys6: 'Hot Water', fan_type: 'var_speed_drive' },
|
227
|
+
{ file: 'CAN_NB_Miramichi.717440_CWEC.epw', location_name: ' CAN-NB-Miramichi', energy_plus_location_name: 'Miramichi_NB_CAN', country: 'CAN', state_province_region: 'NB', city: 'Miramichi', hdd18: 4921, cdd18: 141, latitude: 47.02, longitude: -65.45, elevation: 33, deltadb: 29.6, a90_1_2004_climate_zone: '6A', boiler_fueltype: 'NaturalGas', baseboard_type: 'Hot Water', mau_type: true, mau_heating_coil_type: 'Hot Water', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Gas', heating_coil_type_sys4: 'Gas', heating_coil_type_sys6: 'Hot Water', fan_type: 'var_speed_drive' },
|
228
|
+
{ file: 'CAN_PQ_Mont.Joli.717180_CWEC.epw', location_name: ' CAN-PQ-Mont Joli', energy_plus_location_name: 'Mont Joli_PQ_CAN', country: 'CAN', state_province_region: 'PQ', city: 'Mont Joli', hdd18: 5522, cdd18: 65, latitude: 48.6, longitude: -68.22, elevation: 52, deltadb: 30.8, a90_1_2004_climate_zone: 7, boiler_fueltype: 'Electricity', baseboard_type: 'Electric', mau_type: true, mau_heating_coil_type: 'Electric', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Electric', heating_coil_type_sys4: 'Electric', heating_coil_type_sys6: 'Electric', fan_type: 'var_speed_drive' },
|
229
|
+
{ file: 'CAN_PQ_Montreal.Intl.AP.716270_CWEC.epw', location_name: " CAN-PQ-Montreal Int'l", energy_plus_location_name: "Montreal Int'l_PQ_CAN", country: 'CAN', state_province_region: 'PQ', city: "Montreal Int'l", hdd18: 4493, cdd18: 234, latitude: 45.47, longitude: -73.75, elevation: 36, deltadb: 30.2, a90_1_2004_climate_zone: '6A', boiler_fueltype: 'Electricity', baseboard_type: 'Electric', mau_type: true, mau_heating_coil_type: 'Electric', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Electric', heating_coil_type_sys4: 'Electric', heating_coil_type_sys6: 'Electric', fan_type: 'var_speed_drive' },
|
230
|
+
{ file: 'CAN_PQ_Montreal.Jean.Brebeuf.716278_CWEC.epw', location_name: ' CAN-PQ-Montreal Jean Brebeuf', energy_plus_location_name: 'Montreal Jean Brebeuf_PQ_CAN', country: 'CAN', state_province_region: 'PQ', city: 'Montreal Jean Brebeuf', hdd18: 4616, cdd18: 209, latitude: 45.5, longitude: -73.62, elevation: 133, deltadb: 31.2, a90_1_2004_climate_zone: '6A', boiler_fueltype: 'Electricity', baseboard_type: 'Electric', mau_type: true, mau_heating_coil_type: 'Electric', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Electric', heating_coil_type_sys4: 'Electric', heating_coil_type_sys6: 'Electric', fan_type: 'var_speed_drive' },
|
231
|
+
{ file: 'CAN_PQ_Montreal.Mirabel.716278_CWEC.epw', location_name: ' CAN-PQ-Montreal Mirabel', energy_plus_location_name: 'Montreal Mirabel_PQ_CAN', country: 'CAN', state_province_region: 'PQ', city: 'Montreal Mirabel', hdd18: 4861, cdd18: 102, latitude: 45.68, longitude: -74.03, elevation: 82, deltadb: 33.4, a90_1_2004_climate_zone: '6A', boiler_fueltype: 'Electricity', baseboard_type: 'Electric', mau_type: true, mau_heating_coil_type: 'Electric', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Electric', heating_coil_type_sys4: 'Electric', heating_coil_type_sys6: 'Electric', fan_type: 'var_speed_drive' },
|
232
|
+
{ file: 'CAN_ON_Mount.Forest.716310_CWEC.epw', location_name: ' CAN-ON-Mount Forest', energy_plus_location_name: 'Mount Forest_ON_CAN', country: 'CAN', state_province_region: 'ON', city: 'Mount Forest', hdd18: 4578, cdd18: 121, latitude: 43.98, longitude: -80.75, elevation: 415, deltadb: 27.7, a90_1_2004_climate_zone: '6A', boiler_fueltype: 'NaturalGas', baseboard_type: 'Hot Water', mau_type: true, mau_heating_coil_type: 'Hot Water', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Gas', heating_coil_type_sys4: 'Gas', heating_coil_type_sys6: 'Hot Water', fan_type: 'var_speed_drive' },
|
233
|
+
{ file: 'CAN_ON_Muskoka.716300_CWEC.epw', location_name: ' CAN-ON-Muskoka', energy_plus_location_name: 'Muskoka_ON_CAN', country: 'CAN', state_province_region: 'ON', city: 'Muskoka', hdd18: 4774, cdd18: 97, latitude: 44.97, longitude: -79.3, elevation: 282, deltadb: 29.3, a90_1_2004_climate_zone: '6A', boiler_fueltype: 'NaturalGas', baseboard_type: 'Hot Water', mau_type: true, mau_heating_coil_type: 'Hot Water', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Gas', heating_coil_type_sys4: 'Gas', heating_coil_type_sys6: 'Hot Water', fan_type: 'var_speed_drive' },
|
234
|
+
{ file: 'CAN_PQ_Nitchequon.CAN270_CWEC.epw', location_name: ' CAN-PQ-Nitchequon', energy_plus_location_name: 'Nitchequon_PQ_CAN', country: 'CAN', state_province_region: 'PQ', city: 'Nitchequon', hdd18: 7922, cdd18: 6, latitude: 53.2, longitude: -70.9, elevation: 536, deltadb: 35.8, a90_1_2004_climate_zone: 8, boiler_fueltype: 'Electricity', baseboard_type: 'Electric', mau_type: true, mau_heating_coil_type: 'Electric', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Electric', heating_coil_type_sys4: 'Electric', heating_coil_type_sys6: 'Electric', fan_type: 'var_speed_drive' },
|
235
|
+
{ file: 'CAN_SK_North.Battleford.718760_CWEC.epw', location_name: ' CAN-SK-North Battleford', energy_plus_location_name: 'North Battleford_SK_CAN', country: 'CAN', state_province_region: 'SK', city: 'North Battleford', hdd18: 5962, cdd18: 75, latitude: 52.77, longitude: -108.25, elevation: 548, deltadb: 35.4, a90_1_2004_climate_zone: 7, boiler_fueltype: 'NaturalGas', baseboard_type: 'Hot Water', mau_type: true, mau_heating_coil_type: 'Hot Water', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Gas', heating_coil_type_sys4: 'Gas', heating_coil_type_sys6: 'Hot Water', fan_type: 'var_speed_drive' },
|
236
|
+
{ file: 'CAN_ON_North.Bay.717310_CWEC.epw', location_name: ' CAN-ON-North Bay', energy_plus_location_name: 'North Bay_ON_CAN', country: 'CAN', state_province_region: 'ON', city: 'North Bay', hdd18: 5341, cdd18: 103, latitude: 46.35, longitude: -79.43, elevation: 371, deltadb: 32.2, a90_1_2004_climate_zone: 7, boiler_fueltype: 'NaturalGas', baseboard_type: 'Hot Water', mau_type: true, mau_heating_coil_type: 'Hot Water', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Gas', heating_coil_type_sys4: 'Gas', heating_coil_type_sys6: 'Hot Water', fan_type: 'var_speed_drive' },
|
237
|
+
{ file: 'CAN_ON_Ottawa.716280_CWEC.epw', location_name: " CAN-ON-Ottawa Int'l", energy_plus_location_name: "Ottawa Int'l_ON_CAN", country: 'CAN', state_province_region: 'ON', city: "Ottawa Int'l", hdd18: 4664, cdd18: 189, latitude: 45.32, longitude: -75.67, elevation: 114, deltadb: 31.8, a90_1_2004_climate_zone: '6A', boiler_fueltype: 'NaturalGas', baseboard_type: 'Hot Water', mau_type: true, mau_heating_coil_type: 'Hot Water', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Gas', heating_coil_type_sys4: 'Gas', heating_coil_type_sys6: 'Hot Water', fan_type: 'var_speed_drive' },
|
238
|
+
{ file: 'CAN_BC_Port.Hardy.711090_CWEC.epw', location_name: ' CAN-BC-Port Hardy', energy_plus_location_name: 'Port Hardy_BC_CAN', country: 'CAN', state_province_region: 'BC', city: 'Port Hardy', hdd18: 3712, cdd18: 0, latitude: 50.68, longitude: -127.37, elevation: 22, deltadb: 10.8, a90_1_2004_climate_zone: '5C', boiler_fueltype: 'NaturalGas', baseboard_type: 'Hot Water', mau_type: true, mau_heating_coil_type: 'Hot Water', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Gas', heating_coil_type_sys4: 'Gas', heating_coil_type_sys6: 'Hot Water', fan_type: 'var_speed_drive' },
|
239
|
+
{ file: 'CAN_BC_Prince.George.718960_CWEC.epw', location_name: ' CAN-BC-Prince George', energy_plus_location_name: 'Prince George_BC_CAN', country: 'CAN', state_province_region: 'BC', city: 'Prince George', hdd18: 5070, cdd18: 15, latitude: 53.88, longitude: -122.68, elevation: 691, deltadb: 26, a90_1_2004_climate_zone: 7, boiler_fueltype: 'NaturalGas', baseboard_type: 'Hot Water', mau_type: true, mau_heating_coil_type: 'Hot Water', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Gas', heating_coil_type_sys4: 'Gas', heating_coil_type_sys6: 'Hot Water', fan_type: 'var_speed_drive' },
|
240
|
+
{ file: 'CAN_BC_Prince.Rupert.718980_CWEC.epw', location_name: ' CAN-BC-Prince Rupert', energy_plus_location_name: 'Prince Rupert_BC_CAN', country: 'CAN', state_province_region: 'BC', city: 'Prince Rupert', hdd18: 4151, cdd18: 0, latitude: 54.3, longitude: -130.43, elevation: 34, deltadb: 13.5, a90_1_2004_climate_zone: '6A', boiler_fueltype: 'NaturalGas', baseboard_type: 'Hot Water', mau_type: true, mau_heating_coil_type: 'Hot Water', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Gas', heating_coil_type_sys4: 'Gas', heating_coil_type_sys6: 'Hot Water', fan_type: 'var_speed_drive' },
|
241
|
+
{ file: 'CAN_PQ_Quebec.717140_CWEC.epw', location_name: ' CAN-PQ-Quebec City', energy_plus_location_name: 'Quebec City_PQ_CAN', country: 'CAN', state_province_region: 'PQ', city: 'Quebec City', hdd18: 4964, cdd18: 111, latitude: 46.8, longitude: -71.38, elevation: 73, deltadb: 31, a90_1_2004_climate_zone: '6A', boiler_fueltype: 'Electricity', baseboard_type: 'Electric', mau_type: true, mau_heating_coil_type: 'Electric', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Electric', heating_coil_type_sys4: 'Electric', heating_coil_type_sys6: 'Electric', fan_type: 'var_speed_drive' },
|
242
|
+
{ file: 'CAN_SK_Regina.718630_CWEC.epw', location_name: ' CAN-SK-Regina', energy_plus_location_name: 'Regina_SK_CAN', country: 'CAN', state_province_region: 'SK', city: 'Regina', hdd18: 5646, cdd18: 129, latitude: 50.43, longitude: -104.67, elevation: 577, deltadb: 35.4, a90_1_2004_climate_zone: 7, boiler_fueltype: 'NaturalGas', baseboard_type: 'Hot Water', mau_type: true, mau_heating_coil_type: 'Hot Water', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Gas', heating_coil_type_sys4: 'Gas', heating_coil_type_sys6: 'Hot Water', fan_type: 'var_speed_drive' },
|
243
|
+
{ file: 'CAN_NU_Resolute.719240_CWEC.epw', location_name: ' CAN-NU-Resolute', energy_plus_location_name: 'Resolute_NU_CAN', country: 'CAN', state_province_region: 'NU', city: 'Resolute', hdd18: 12_570, cdd18: 0, latitude: 74.72, longitude: -94.98, elevation: 67, deltadb: 35.9, a90_1_2004_climate_zone: 8, boiler_fueltype: 'FuelOil#2', baseboard_type: 'Hot Water', mau_type: true, mau_heating_coil_type: 'Hot Water', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Electric', heating_coil_type_sys4: 'Electric', heating_coil_type_sys6: 'Electric', fan_type: 'var_speed_drive' },
|
244
|
+
{ file: 'CAN_PQ_Riviere.du.Loup.717150_CWEC.epw', location_name: ' CAN-PQ-Riviere Du Loup', energy_plus_location_name: 'Riviere Du Loup_PQ_CAN', country: 'CAN', state_province_region: 'PQ', city: 'Riviere Du Loup', hdd18: 5424, cdd18: 82, latitude: 47.8, longitude: -69.55, elevation: 148, deltadb: 30.1, a90_1_2004_climate_zone: 7, boiler_fueltype: 'Electricity', baseboard_type: 'Electric', mau_type: true, mau_heating_coil_type: 'Electric', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Electric', heating_coil_type_sys4: 'Electric', heating_coil_type_sys6: 'Electric', fan_type: 'var_speed_drive' },
|
245
|
+
{ file: 'CAN_PQ_Roberval.717280_CWEC.epw', location_name: ' CAN-PQ-Roberval', energy_plus_location_name: 'Roberval_PQ_CAN', country: 'CAN', state_province_region: 'PQ', city: 'Roberval', hdd18: 5757, cdd18: 97, latitude: 48.52, longitude: -72.27, elevation: 179, deltadb: 35.6, a90_1_2004_climate_zone: 7, boiler_fueltype: 'Electricity', baseboard_type: 'Electric', mau_type: true, mau_heating_coil_type: 'Electric', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Electric', heating_coil_type_sys4: 'Electric', heating_coil_type_sys6: 'Electric', fan_type: 'var_speed_drive' },
|
246
|
+
{ file: 'CAN_NS_Sable.Island.716000_CWEC.epw', location_name: ' CAN-NS-Sable Island', energy_plus_location_name: 'Sable Island_NS_CAN', country: 'CAN', state_province_region: 'NS', city: 'Sable Island', hdd18: 3860, cdd18: 14, latitude: 43.93, longitude: -60.02, elevation: 4, deltadb: 18.3, a90_1_2004_climate_zone: '5A', boiler_fueltype: 'NaturalGas', baseboard_type: 'Hot Water', mau_type: true, mau_heating_coil_type: 'Hot Water', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Gas', heating_coil_type_sys4: 'Gas', heating_coil_type_sys6: 'Hot Water', fan_type: 'var_speed_drive' },
|
247
|
+
{ file: 'CAN_NB_Saint.John.716090_CWEC.epw', location_name: ' CAN-NB-Saint John', energy_plus_location_name: 'Saint John_NB_CAN', country: 'CAN', state_province_region: 'NB', city: 'Saint John', hdd18: 4695, cdd18: 12, latitude: 45.32, longitude: -65.88, elevation: 109, deltadb: 23.8, a90_1_2004_climate_zone: '6A', boiler_fueltype: 'NaturalGas', baseboard_type: 'Hot Water', mau_type: true, mau_heating_coil_type: 'Hot Water', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Gas', heating_coil_type_sys4: 'Gas', heating_coil_type_sys6: 'Hot Water', fan_type: 'var_speed_drive' },
|
248
|
+
{ file: 'CAN_BC_Sandspit.711010_CWEC.epw', location_name: ' CAN-BC-Sandspit', energy_plus_location_name: 'Sandspit_BC_CAN', country: 'CAN', state_province_region: 'BC', city: 'Sandspit', hdd18: 3644, cdd18: 0, latitude: 53.25, longitude: -131.82, elevation: 6, deltadb: 13.1, a90_1_2004_climate_zone: '5C', boiler_fueltype: 'NaturalGas', baseboard_type: 'Hot Water', mau_type: true, mau_heating_coil_type: 'Hot Water', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Gas', heating_coil_type_sys4: 'Gas', heating_coil_type_sys6: 'Hot Water', fan_type: 'var_speed_drive' },
|
249
|
+
{ file: 'CAN_SK_Saskatoon.718660_CWEC.epw', location_name: ' CAN-SK-Saskatoon', energy_plus_location_name: 'Saskatoon_SK_CAN', country: 'CAN', state_province_region: 'SK', city: 'Saskatoon', hdd18: 5812, cdd18: 84, latitude: 52.17, longitude: -106.68, elevation: 504, deltadb: 34.4, a90_1_2004_climate_zone: 7, boiler_fueltype: 'NaturalGas', baseboard_type: 'Hot Water', mau_type: true, mau_heating_coil_type: 'Hot Water', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Gas', heating_coil_type_sys4: 'Gas', heating_coil_type_sys6: 'Hot Water', fan_type: 'var_speed_drive' },
|
250
|
+
{ file: 'CAN_ON_Sault.Ste.Marie.712600_CWEC.epw', location_name: ' CAN-ON-Sault Ste Marie', energy_plus_location_name: 'Sault Ste Marie_ON_CAN', country: 'CAN', state_province_region: 'ON', city: 'Sault Ste Marie', hdd18: 4993, cdd18: 75, latitude: 46.48, longitude: -84.52, elevation: 192, deltadb: 28.3, a90_1_2004_climate_zone: '6A', boiler_fueltype: 'NaturalGas', baseboard_type: 'Hot Water', mau_type: true, mau_heating_coil_type: 'Hot Water', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Gas', heating_coil_type_sys4: 'Gas', heating_coil_type_sys6: 'Hot Water', fan_type: 'var_speed_drive' },
|
251
|
+
{ file: 'CAN_PQ_Schefferville.718280_CWEC.epw', location_name: ' CAN-PQ-Schefferville', energy_plus_location_name: 'Schefferville_PQ_CAN', country: 'CAN', state_province_region: 'PQ', city: 'Schefferville', hdd18: 8057, cdd18: 7, latitude: 54.8, longitude: -66.82, elevation: 521, deltadb: 34.6, a90_1_2004_climate_zone: 8, boiler_fueltype: 'Electricity', baseboard_type: 'Electric', mau_type: true, mau_heating_coil_type: 'Electric', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Electric', heating_coil_type_sys4: 'Electric', heating_coil_type_sys6: 'Electric', fan_type: 'var_speed_drive' },
|
252
|
+
{ file: 'CAN_PQ_Sept-Iles.718110_CWEC.epw', location_name: ' CAN-PQ-Sept-Iles', energy_plus_location_name: 'Sept-Iles_PQ_CAN', country: 'CAN', state_province_region: 'PQ', city: 'Sept-Iles', hdd18: 6134, cdd18: 4, latitude: 50.22, longitude: -66.27, elevation: 55, deltadb: 30.9, a90_1_2004_climate_zone: 7, boiler_fueltype: 'Electricity', baseboard_type: 'Electric', mau_type: true, mau_heating_coil_type: 'Electric', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Electric', heating_coil_type_sys4: 'Electric', heating_coil_type_sys6: 'Electric', fan_type: 'var_speed_drive' },
|
253
|
+
{ file: 'CAN_NS_Shearwater.716010_CWEC.epw', location_name: ' CAN-NS-Shearwater', energy_plus_location_name: 'Shearwater_NS_CAN', country: 'CAN', state_province_region: 'NS', city: 'Shearwater', hdd18: 4197, cdd18: 58, latitude: 44.63, longitude: -63.5, elevation: 51, deltadb: 22, a90_1_2004_climate_zone: '6A', boiler_fueltype: 'NaturalGas', baseboard_type: 'Hot Water', mau_type: true, mau_heating_coil_type: 'Hot Water', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Gas', heating_coil_type_sys4: 'Gas', heating_coil_type_sys6: 'Hot Water', fan_type: 'var_speed_drive' },
|
254
|
+
{ file: 'CAN_PQ_Sherbrooke.716100_CWEC.epw', location_name: ' CAN-PQ-Sherbrooke', energy_plus_location_name: 'Sherbrooke_PQ_CAN', country: 'CAN', state_province_region: 'PQ', city: 'Sherbrooke', hdd18: 5068, cdd18: 93, latitude: 45.43, longitude: -71.68, elevation: 241, deltadb: 28.2, a90_1_2004_climate_zone: 7, boiler_fueltype: 'Electricity', baseboard_type: 'Electric', mau_type: true, mau_heating_coil_type: 'Electric', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Electric', heating_coil_type_sys4: 'Electric', heating_coil_type_sys6: 'Electric', fan_type: 'var_speed_drive' },
|
255
|
+
{ file: 'CAN_ON_Simcoe.715270_CWEC.epw', location_name: ' CAN-ON-Simcoe', energy_plus_location_name: 'Simcoe_ON_CAN', country: 'CAN', state_province_region: 'ON', city: 'Simcoe', hdd18: 4066, cdd18: 190, latitude: 42.85, longitude: -80.27, elevation: 241, deltadb: 26.4, a90_1_2004_climate_zone: '6A', boiler_fueltype: 'NaturalGas', baseboard_type: 'Hot Water', mau_type: true, mau_heating_coil_type: 'Hot Water', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Gas', heating_coil_type_sys4: 'Gas', heating_coil_type_sys6: 'Hot Water', fan_type: 'var_speed_drive' },
|
256
|
+
{ file: 'CAN_BC_Smithers.719500_CWEC.epw', location_name: ' CAN-BC-Smithers', energy_plus_location_name: 'Smithers_BC_CAN', country: 'CAN', state_province_region: 'BC', city: 'Smithers', hdd18: 5265, cdd18: 22, latitude: 54.82, longitude: -127.18, elevation: 523, deltadb: 24.2, a90_1_2004_climate_zone: 7, boiler_fueltype: 'NaturalGas', baseboard_type: 'Hot Water', mau_type: true, mau_heating_coil_type: 'Hot Water', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Gas', heating_coil_type_sys4: 'Gas', heating_coil_type_sys6: 'Hot Water', fan_type: 'var_speed_drive' },
|
257
|
+
{ file: 'CAN_PQ_St.Hubert.713710_CWEC.epw', location_name: ' CAN-PQ-St Hubert', energy_plus_location_name: 'St Hubert_PQ_CAN', country: 'CAN', state_province_region: 'PQ', city: 'St Hubert', hdd18: 4566, cdd18: 251, latitude: 45.52, longitude: -73.42, elevation: 27, deltadb: 31.2, a90_1_2004_climate_zone: '6A', boiler_fueltype: 'Electricity', baseboard_type: 'Electric', mau_type: true, mau_heating_coil_type: 'Electric', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Electric', heating_coil_type_sys4: 'Electric', heating_coil_type_sys6: 'Electric', fan_type: 'var_speed_drive' },
|
258
|
+
{ file: 'CAN_NF_St.Johns.718010_CWEC.epw', location_name: " CAN-NF-St John's", energy_plus_location_name: "St John's_NF_CAN", country: 'CAN', state_province_region: 'NF', city: "St John's", hdd18: 4886, cdd18: 24, latitude: 47.62, longitude: -52.73, elevation: 140, deltadb: 20.5, a90_1_2004_climate_zone: '6A', boiler_fueltype: 'Electricity', baseboard_type: 'Electric', mau_type: true, mau_heating_coil_type: 'Electric', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Electric', heating_coil_type_sys4: 'Electric', heating_coil_type_sys6: 'Electric', fan_type: 'var_speed_drive' },
|
259
|
+
{ file: 'CAN_PQ_Ste.Agathe.des.Monts.717200_CWEC.epw', location_name: ' CAN-PQ-Ste Agathe Des Monts', energy_plus_location_name: 'Ste Agathe Des Monts_PQ_CAN', country: 'CAN', state_province_region: 'PQ', city: 'Ste Agathe Des Monts', hdd18: 5350, cdd18: 45, latitude: 46.05, longitude: -74.28, elevation: 395, deltadb: 29.6, a90_1_2004_climate_zone: 7, boiler_fueltype: 'Electricity', baseboard_type: 'Electric', mau_type: true, mau_heating_coil_type: 'Electric', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Electric', heating_coil_type_sys4: 'Electric', heating_coil_type_sys6: 'Electric', fan_type: 'var_speed_drive' },
|
260
|
+
{ file: 'CAN_NF_Stephenville.718150_CWEC.epw', location_name: ' CAN-NF-Stephenville', energy_plus_location_name: 'Stephenville_NF_CAN', country: 'CAN', state_province_region: 'NF', city: 'Stephenville', hdd18: 4724, cdd18: 10, latitude: 48.53, longitude: -58.55, elevation: 26, deltadb: 23.1, a90_1_2004_climate_zone: '6A', boiler_fueltype: 'Electricity', baseboard_type: 'Electric', mau_type: true, mau_heating_coil_type: 'Electric', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Electric', heating_coil_type_sys4: 'Electric', heating_coil_type_sys6: 'Electric', fan_type: 'var_speed_drive' },
|
261
|
+
{ file: 'CAN_BC_Summerland.717680_CWEC.epw', location_name: ' CAN-BC-Summerland', energy_plus_location_name: 'Summerland_BC_CAN', country: 'CAN', state_province_region: 'BC', city: 'Summerland', hdd18: 3388, cdd18: 199, latitude: 49.57, longitude: -119.65, elevation: 479, deltadb: 21.8, a90_1_2004_climate_zone: '5A', boiler_fueltype: 'NaturalGas', baseboard_type: 'Hot Water', mau_type: true, mau_heating_coil_type: 'Hot Water', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Gas', heating_coil_type_sys4: 'Gas', heating_coil_type_sys6: 'Hot Water', fan_type: 'var_speed_drive' },
|
262
|
+
{ file: 'CAN_SK_Swift.Current.718700_CWEC.epw', location_name: ' CAN-SK-Swift Current', energy_plus_location_name: 'Swift Current_SK_CAN', country: 'CAN', state_province_region: 'SK', city: 'Swift Current', hdd18: 5227, cdd18: 96, latitude: 50.28, longitude: -107.68, elevation: 818, deltadb: 30.8, a90_1_2004_climate_zone: 7, boiler_fueltype: 'NaturalGas', baseboard_type: 'Hot Water', mau_type: true, mau_heating_coil_type: 'Hot Water', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Gas', heating_coil_type_sys4: 'Gas', heating_coil_type_sys6: 'Hot Water', fan_type: 'var_speed_drive' },
|
263
|
+
{ file: 'CAN_NS_Sydney.717070_CWEC.epw', location_name: ' CAN-NS-Sydney', energy_plus_location_name: 'Sydney_NS_CAN', country: 'CAN', state_province_region: 'NS', city: 'Sydney', hdd18: 4634, cdd18: 51, latitude: 46.17, longitude: -60.05, elevation: 62, deltadb: 24, a90_1_2004_climate_zone: '6A', boiler_fueltype: 'NaturalGas', baseboard_type: 'Hot Water', mau_type: true, mau_heating_coil_type: 'Hot Water', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Gas', heating_coil_type_sys4: 'Gas', heating_coil_type_sys6: 'Hot Water', fan_type: 'var_speed_drive' },
|
264
|
+
{ file: 'CAN_MB_The.Pas.718670_CWEC.epw', location_name: ' CAN-MB-The Pas', energy_plus_location_name: 'The Pas_MB_CAN', country: 'CAN', state_province_region: 'MB', city: 'The Pas', hdd18: 6442, cdd18: 106, latitude: 53.97, longitude: -101.1, elevation: 271, deltadb: 37.9, a90_1_2004_climate_zone: 7, boiler_fueltype: 'Electricity', baseboard_type: 'Electric', mau_type: true, mau_heating_coil_type: 'Electric', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Electric', heating_coil_type_sys4: 'Electric', heating_coil_type_sys6: 'Electric', fan_type: 'var_speed_drive' },
|
265
|
+
{ file: 'CAN_ON_Thunder.Bay.717490_CWEC.epw', location_name: ' CAN-ON-Thunder Bay', energy_plus_location_name: 'Thunder Bay_ON_CAN', country: 'CAN', state_province_region: 'ON', city: 'Thunder Bay', hdd18: 5624, cdd18: 60, latitude: 48.37, longitude: -89.32, elevation: 199, deltadb: 33.8, a90_1_2004_climate_zone: 7, boiler_fueltype: 'NaturalGas', baseboard_type: 'Hot Water', mau_type: true, mau_heating_coil_type: 'Hot Water', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Gas', heating_coil_type_sys4: 'Gas', heating_coil_type_sys6: 'Hot Water', fan_type: 'var_speed_drive' },
|
266
|
+
{ file: 'CAN_ON_Timmins.717390_CWEC.epw', location_name: ' CAN-ON-Timmins', energy_plus_location_name: 'Timmins_ON_CAN', country: 'CAN', state_province_region: 'ON', city: 'Timmins', hdd18: 5952, cdd18: 63, latitude: 48.57, longitude: -81.37, elevation: 295, deltadb: 33.8, a90_1_2004_climate_zone: 7, boiler_fueltype: 'NaturalGas', baseboard_type: 'Hot Water', mau_type: true, mau_heating_coil_type: 'Hot Water', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Gas', heating_coil_type_sys4: 'Gas', heating_coil_type_sys6: 'Hot Water', fan_type: 'var_speed_drive' },
|
267
|
+
{ file: 'CAN_ON_Toronto.716240_CWEC.epw', location_name: " CAN-ON-Toronto Int'l", energy_plus_location_name: "Toronto Int'l_ON_CAN", country: 'CAN', state_province_region: 'ON', city: "Toronto Int'l", hdd18: 4088, cdd18: 231, latitude: 43.67, longitude: -79.63, elevation: 173, deltadb: 26.6, a90_1_2004_climate_zone: '6A', boiler_fueltype: 'NaturalGas', baseboard_type: 'Hot Water', mau_type: true, mau_heating_coil_type: 'Hot Water', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Gas', heating_coil_type_sys4: 'Gas', heating_coil_type_sys6: 'Hot Water', fan_type: 'var_speed_drive' },
|
268
|
+
{ file: 'CAN_ON_Trenton.716210_CWEC.epw', location_name: ' CAN-ON-Trenton', energy_plus_location_name: 'Trenton_ON_CAN', country: 'CAN', state_province_region: 'ON', city: 'Trenton', hdd18: 4176, cdd18: 207, latitude: 44.12, longitude: -77.53, elevation: 86, deltadb: 27.7, a90_1_2004_climate_zone: '6A', boiler_fueltype: 'NaturalGas', baseboard_type: 'Hot Water', mau_type: true, mau_heating_coil_type: 'Hot Water', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Gas', heating_coil_type_sys4: 'Gas', heating_coil_type_sys6: 'Hot Water', fan_type: 'var_speed_drive' },
|
269
|
+
{ file: 'CAN_NS_Truro.713980_CWEC.epw', location_name: ' CAN-NS-Truro', energy_plus_location_name: 'Truro_NS_CAN', country: 'CAN', state_province_region: 'NS', city: 'Truro', hdd18: 4537, cdd18: 35, latitude: 45.37, longitude: -63.27, elevation: 40, deltadb: 25.2, a90_1_2004_climate_zone: '6A', boiler_fueltype: 'NaturalGas', baseboard_type: 'Hot Water', mau_type: true, mau_heating_coil_type: 'Hot Water', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Gas', heating_coil_type_sys4: 'Gas', heating_coil_type_sys6: 'Hot Water', fan_type: 'var_speed_drive' },
|
270
|
+
{ file: 'CAN_PQ_Val.d.Or.717250_CWEC.epw', location_name: " CAN-PQ-Val d'Or", energy_plus_location_name: "Val d'Or_PQ_CAN", country: 'CAN', state_province_region: 'PQ', city: "Val d'Or", hdd18: 6129, cdd18: 79, latitude: 48.07, longitude: -77.78, elevation: 337, deltadb: 35, a90_1_2004_climate_zone: 7, boiler_fueltype: 'Electricity', baseboard_type: 'Electric', mau_type: true, mau_heating_coil_type: 'Electric', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Electric', heating_coil_type_sys4: 'Electric', heating_coil_type_sys6: 'Electric', fan_type: 'var_speed_drive' },
|
271
|
+
{ file: 'CAN_BC_Vancouver.718920_CWEC.epw', location_name: " CAN-BC-Vancouver Int'l", energy_plus_location_name: "Vancouver Int'l_BC_CAN", country: 'CAN', state_province_region: 'BC', city: "Vancouver Int'l", hdd18: 3019, cdd18: 4, latitude: 49.18, longitude: -123.17, elevation: 2, deltadb: 13.9, a90_1_2004_climate_zone: '5C', boiler_fueltype: 'NaturalGas', baseboard_type: 'Hot Water', mau_type: true, mau_heating_coil_type: 'Hot Water', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Gas', heating_coil_type_sys4: 'Gas', heating_coil_type_sys6: 'Hot Water', fan_type: 'var_speed_drive' },
|
272
|
+
{ file: 'CAN_BC_Victoria.717990_CWEC.epw', location_name: " CAN-BC-Victoria Int'l", energy_plus_location_name: "Victoria Int'l_BC_CAN", country: 'CAN', state_province_region: 'BC', city: "Victoria Int'l", hdd18: 3075, cdd18: 8, latitude: 48.65, longitude: -123.43, elevation: 19, deltadb: 12.3, a90_1_2004_climate_zone: '5C', boiler_fueltype: 'NaturalGas', baseboard_type: 'Hot Water', mau_type: true, mau_heating_coil_type: 'Hot Water', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Gas', heating_coil_type_sys4: 'Gas', heating_coil_type_sys6: 'Hot Water', fan_type: 'var_speed_drive' },
|
273
|
+
{ file: 'CAN_YT_Whitehorse.719640_CWEC.epw', location_name: ' CAN-YT-Whitehorse', energy_plus_location_name: 'Whitehorse_YT_CAN', country: 'CAN', state_province_region: 'YT', city: 'Whitehorse', hdd18: 6946, cdd18: 2, latitude: 60.72, longitude: -135.07, elevation: 703, deltadb: 34.5, a90_1_2004_climate_zone: 7, boiler_fueltype: 'FuelOil#1', baseboard_type: 'Hot Water', mau_type: true, mau_heating_coil_type: 'Hot Water', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Electric', heating_coil_type_sys4: 'Electric', heating_coil_type_sys6: 'Electric', fan_type: 'var_speed_drive' },
|
274
|
+
{ file: 'CAN_ON_Windsor.715380_CWEC.epw', location_name: ' CAN-ON-Windsor', energy_plus_location_name: 'Windsor_ON_CAN', country: 'CAN', state_province_region: 'ON', city: 'Windsor', hdd18: 3570, cdd18: 367, latitude: 42.27, longitude: -82.97, elevation: 190, deltadb: 27.1, a90_1_2004_climate_zone: '5A', boiler_fueltype: 'NaturalGas', baseboard_type: 'Hot Water', mau_type: true, mau_heating_coil_type: 'Hot Water', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Gas', heating_coil_type_sys4: 'Gas', heating_coil_type_sys6: 'Hot Water', fan_type: 'var_speed_drive' },
|
275
|
+
{ file: 'CAN_MB_Winnipeg.718520_CWEC.epw', location_name: " CAN-MB-Winnipeg Int'l", energy_plus_location_name: "Winnipeg Int'l_MB_CAN", country: 'CAN', state_province_region: 'MB', city: "Winnipeg Int'l", hdd18: 5754, cdd18: 197, latitude: 49.9, longitude: -97.23, elevation: 239, deltadb: 37.8, a90_1_2004_climate_zone: 7, boiler_fueltype: 'Electricity', baseboard_type: 'Electric', mau_type: true, mau_heating_coil_type: 'Electric', mau_cooling_type: 'DX', chiller_type: 'Scroll', heating_coil_type_sys_3: 'Electric', heating_coil_type_sys4: 'Electric', heating_coil_type_sys6: 'Electric', fan_type: 'var_speed_drive' }
|
276
|
+
].freeze
|
277
|
+
|
278
|
+
# this method is used to populate user interfaces if needed from the hash above.
|
279
|
+
def self.get_canadian_weather_file_names
|
276
280
|
canadian_file_names = []
|
277
281
|
BTAP::Environment::WeatherData1.each { |hash| canadian_file_names << hash[:file] }
|
278
282
|
return canadian_file_names
|
279
283
|
end
|
280
|
-
|
281
|
-
#this method returns the default system fuel types by epw_file.
|
284
|
+
|
285
|
+
# this method returns the default system fuel types by epw_file.
|
282
286
|
def self.get_canadian_system_defaults_by_weatherfile_name(epw_file)
|
283
|
-
if data = BTAP::Environment::WeatherData1.find { |
|
284
|
-
return
|
287
|
+
if (data = BTAP::Environment::WeatherData1.find { |d| d[:file] == epw_file.strip })
|
288
|
+
return data[:boiler_fueltype], data[:baseboard_type], data[:mau_type], data[:mau_heating_coil_type], data[:mau_cooling_type], data[:chiller_type], data[:heating_coil_type_sys_3], data[:heating_coil_type_sys4], data[:heating_coil_type_sys6], data[:fan_type]
|
285
289
|
else
|
286
290
|
puts 'Not found!'
|
287
291
|
end
|
288
292
|
end
|
289
|
-
|
290
|
-
|
291
293
|
|
292
|
-
|
293
|
-
#
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
data = ""
|
294
|
+
# This method will create a climate index file.
|
295
|
+
# @author phylroy.lopez@nrcan.gc.ca
|
296
|
+
# @param folder [String]
|
297
|
+
# @param output_file [String]
|
298
|
+
def self.create_climate_index_file(folder = "#{File.dirname(__FILE__)}/../../../weather", output_file = 'C:/test/phylroy.csv')
|
299
|
+
data = ''
|
299
300
|
counter = 0
|
300
|
-
File.open(output_file, 'w')
|
301
|
-
|
302
|
-
|
301
|
+
File.open(output_file, 'w') do |file|
|
302
|
+
puts "outpus #{output_file}"
|
303
|
+
data << "file,location_name,energy_plus_location_name,country,state_province_region,city,hdd10,hdd18,cdd10,cdd18,latitude,longitude,elevation, deltaDB, climate_zone, cz_standard, summer_wet_months, winter_dry_months,autumn_months, spring_months, typical_summer_wet_week, typical_winter_dry_week, typical_autumn_week, typical_spring_week, heating_design_info[1],cooling_design_info[1],extremes_design_info[1]\n"
|
304
|
+
BTAP::FileIO.get_find_files_from_folder_by_extension(folder, 'epw').each do |wfile|
|
303
305
|
wf = BTAP::Environment::WeatherFile.new(wfile)
|
304
|
-
data << "#{File.basename(wfile)}, #{wf.location_name}\,#{wf.energy_plus_location_name},#{wf.country}, #{wf.state_province_region}, #{wf.city}, #{wf.hdd10}, #{wf.hdd18},#{wf.cdd10},#{wf.cdd18},#{wf.latitude}, #{wf.longitude}, #{wf.elevation}, #{wf.delta_dry_bulb} ,#{wf.climate_zone},#{wf.standard},#{wf.summer_wet_months}, #{wf.winter_dry_months},#{wf.autumn_months}, #{wf.spring_months}, #{wf.typical_summer_wet_week}, #{wf.typical_winter_dry_week}, #{wf.typical_autumn_week}, #{wf.typical_spring_week}\n"
|
306
|
+
data << "#{File.basename(wfile)}, #{wf.location_name}\,#{wf.energy_plus_location_name},#{wf.country}, #{wf.state_province_region}, #{wf.city}, #{wf.hdd10}, #{wf.hdd18},#{wf.cdd10},#{wf.cdd18},#{wf.latitude}, #{wf.longitude}, #{wf.elevation}, #{wf.delta_dry_bulb} ,#{wf.climate_zone},#{wf.standard},#{wf.summer_wet_months}, #{wf.winter_dry_months},#{wf.autumn_months}, #{wf.spring_months}, #{wf.typical_summer_wet_week}, #{wf.typical_winter_dry_week}, #{wf.typical_autumn_week}, #{wf.typical_spring_week},#{wf.heating_design_info[1]},#{wf.cooling_design_info[1]},#{wf.extremes_design_info[1]}\n"
|
305
307
|
counter += 1
|
306
308
|
end
|
307
309
|
file.write(data)
|
308
|
-
|
309
|
-
}
|
310
|
+
end
|
310
311
|
puts "parsed #{counter} weather files."
|
311
312
|
end
|
312
|
-
|
313
|
-
|
314
313
|
|
315
314
|
class WeatherFile
|
316
|
-
|
317
315
|
attr_accessor :location_name,
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
316
|
+
:energy_plus_location_name,
|
317
|
+
:latitude,
|
318
|
+
:longitude,
|
319
|
+
:elevation,
|
320
|
+
:city,
|
321
|
+
:state_province_region,
|
322
|
+
:country,
|
323
|
+
:hdd18,
|
324
|
+
:cdd18,
|
325
|
+
:hdd10,
|
326
|
+
:cdd10,
|
327
|
+
:heating_design_info,
|
328
|
+
:cooling_design_info,
|
329
|
+
:extremes_design_info,
|
330
|
+
:monthly_dry_bulb,
|
331
|
+
:delta_dry_bulb,
|
332
|
+
:climate_zone,
|
333
|
+
:standard,
|
334
|
+
:summer_wet_months,
|
335
|
+
:winter_dry_months,
|
336
|
+
:autumn_months,
|
337
|
+
:spring_months,
|
338
|
+
:typical_summer_wet_week,
|
339
|
+
:typical_winter_dry_week,
|
340
|
+
:typical_autumn_week,
|
341
|
+
:typical_spring_week
|
342
|
+
|
343
|
+
YEAR = 0
|
344
|
+
MONTH = 1
|
345
|
+
DAY = 2
|
346
|
+
HOUR = 3
|
347
|
+
MINUTE = 4
|
348
|
+
DATA_SOURCE = 5
|
349
|
+
DRY_BULB_TEMPERATURE = 6
|
350
|
+
DEW_POINT_TEMPERATURE = 7
|
351
|
+
RELATIVE_HUMIDITY = 8
|
352
|
+
ATMOSPHERIC_STATION_PRESSURE = 9
|
353
|
+
EXTRATERRESTRIAL_HORIZONTAL_RADIATION = 10 # not used
|
354
|
+
EXTRATERRESTRIAL_DIRECT_NORMAL_RADIATION = 11 # not used
|
355
|
+
HORIZONTAL_INFRARED_RADIATION_INTENSITY = 12
|
356
|
+
GLOBAL_HORIZONTAL_RADIATION = 13 # not used
|
357
|
+
DIRECT_NORMAL_RADIATION = 14
|
358
|
+
DIFFUSE_HORIZONTAL_RADIATION = 15
|
359
|
+
GLOBAL_HORIZONTAL_ILLUMINANCE = 16 # not used
|
360
|
+
DIRECT_NORMAL_ILLUMINANCE = 17 # not used
|
361
|
+
DIFFUSE_HORIZONTAL_ILLUMINANCE = 18 # not used
|
362
|
+
ZENITH_LUMINANCE = 19 # not used
|
363
|
+
WIND_DIRECTION = 20
|
364
|
+
WIND_SPEED = 21
|
365
|
+
TOTAL_SKY_COVER = 22 # not used
|
366
|
+
OPAQUE_SKY_COVER = 23 # not used
|
367
|
+
VISIBILITY = 24 # not used
|
368
|
+
CEILING_HEIGHT = 25 # not used
|
369
|
+
PRESENT_WEATHER_OBSERVATION = 26
|
370
|
+
PRESENT_WEATHER_CODES = 27
|
371
|
+
PRECIPITABLE_WATER = 28 # not used
|
372
|
+
AEROSOL_OPTICAL_DEPTH = 29 # not used
|
373
|
+
SNOW_DEPTH = 30
|
374
|
+
DAYS_SINCE_LAST_SNOWFALL = 31 # not used
|
375
|
+
ALBEDO = 32 # not used
|
376
|
+
LIQUID_PRECIPITATION_DEPTH = 33
|
377
|
+
LIQUID_PRECIPITATION_QUANTITY = 34
|
378
|
+
|
379
|
+
# This method initializes and returns self.
|
380
|
+
# @author phylroy.lopez@nrcan.gc.ca
|
381
|
+
# @param weather_file [String]
|
382
|
+
# @return [String] self
|
384
383
|
def initialize(weather_file)
|
385
384
|
# Define the openstudio-standards weather location
|
386
|
-
top_dir = File.expand_path(
|
385
|
+
top_dir = File.expand_path('../../..', File.dirname(__FILE__))
|
387
386
|
weather_dir = "#{top_dir}/data/weather"
|
388
|
-
|
387
|
+
|
389
388
|
# First check if the epw file exists at a full path. If not found there,
|
390
389
|
# check for the file in the openstudio-standards/data/weather directory.
|
391
390
|
weather_file = weather_file.to_s
|
392
391
|
@epw_filepath = nil
|
393
392
|
@ddy_filepath = nil
|
394
393
|
@stat_filepath = nil
|
395
|
-
if File.
|
396
|
-
@epw_filepath =
|
397
|
-
@ddy_filepath =
|
398
|
-
@stat_filepath =
|
399
|
-
elsif File.
|
394
|
+
if File.exist?(weather_file)
|
395
|
+
@epw_filepath = weather_file.to_s
|
396
|
+
@ddy_filepath = weather_file.sub('epw', 'ddy').to_s
|
397
|
+
@stat_filepath = weather_file.sub('epw', 'stat').to_s
|
398
|
+
elsif File.exist?("#{weather_dir}/#{weather_file}")
|
400
399
|
@epw_filepath = "#{weather_dir}/#{weather_file}"
|
401
|
-
@ddy_filepath = "#{weather_dir}/#{weather_file.sub('epw','ddy')}"
|
402
|
-
@stat_filepath = "#{weather_dir}/#{weather_file.sub('epw','stat')}"
|
400
|
+
@ddy_filepath = "#{weather_dir}/#{weather_file.sub('epw', 'ddy')}"
|
401
|
+
@stat_filepath = "#{weather_dir}/#{weather_file.sub('epw', 'stat')}"
|
403
402
|
else
|
404
403
|
raise("Could not find weather file #{weather_file}. Make sure file path is correct.")
|
405
404
|
end
|
406
|
-
|
405
|
+
|
407
406
|
# Ensure that epw, ddy, and stat file all exist
|
408
|
-
raise("Weather file #{@epw_filepath} not found.") unless File.
|
409
|
-
raise("Weather file ddy #{@ddy_filepath} not found.") unless File.
|
410
|
-
raise("Weather file stat #{@stat_filepath} not found.") unless File.
|
407
|
+
raise("Weather file #{@epw_filepath} not found.") unless File.exist?(@epw_filepath) && @epw_filepath.downcase.include?('.epw')
|
408
|
+
raise("Weather file ddy #{@ddy_filepath} not found.") unless File.exist?(@ddy_filepath) && @ddy_filepath.downcase.include?('.ddy')
|
409
|
+
raise("Weather file stat #{@stat_filepath} not found.") unless File.exist?(@stat_filepath) && @stat_filepath.downcase.include?('.stat')
|
411
410
|
|
412
|
-
#load file objects.
|
411
|
+
# load file objects.
|
413
412
|
@epw_file = OpenStudio::EpwFile.new(OpenStudio::Path.new(@epw_filepath))
|
414
413
|
if OpenStudio::EnergyPlus.loadAndTranslateIdf(@ddy_filepath).empty?
|
415
|
-
raise
|
414
|
+
raise "Unable to load ddy idf file#{@ddy_filepath}."
|
416
415
|
else
|
417
416
|
@ddy_file = OpenStudio::EnergyPlus.loadAndTranslateIdf(@ddy_filepath).get
|
418
417
|
end
|
419
|
-
@stat_file = EnergyPlus::StatFile.new(
|
418
|
+
@stat_file = EnergyPlus::StatFile.new(@stat_filepath)
|
419
|
+
|
420
|
+
# assign variables.
|
420
421
|
|
421
|
-
#assign variables.
|
422
|
-
|
423
422
|
@latitude = @epw_file.latitude
|
424
423
|
@longitude = @epw_file.longitude
|
425
424
|
@elevation = @epw_file.elevation
|
426
425
|
@city = @epw_file.city
|
427
|
-
@state_province_region =
|
426
|
+
@state_province_region = @epw_file.stateProvinceRegion
|
428
427
|
@country = @epw_file.country
|
429
428
|
@hdd18 = @stat_file.hdd18
|
430
429
|
@cdd18 = @stat_file.cdd18
|
431
430
|
@hdd10 = @stat_file.hdd10
|
432
431
|
@cdd10 = @stat_file.cdd10
|
432
|
+
@heating_design_info = @stat_file.heating_design_info
|
433
|
+
@cooling_design_info = @stat_file.cooling_design_info
|
434
|
+
@extremes_design_info = @stat_file.extremes_design_info
|
433
435
|
@monthly_dry_bulb = @stat_file.monthly_dry_bulb
|
434
436
|
@mean_dry_bulb = @stat_file.mean_dry_bulb
|
435
437
|
@delta_dry_bulb = @stat_file.delta_dry_bulb
|
@@ -448,14 +450,14 @@ module BTAP
|
|
448
450
|
return self
|
449
451
|
end
|
450
452
|
|
451
|
-
#This method will set the weather file and returns a log string.
|
452
|
-
|
453
|
-
|
454
|
-
|
453
|
+
# This method will set the weather file and returns a log string.
|
454
|
+
# @author phylroy.lopez@nrcan.gc.ca
|
455
|
+
# @param model [OpenStudio::model::Model] A model object
|
456
|
+
# @return [String] log
|
455
457
|
def set_weather_file(model, runner = nil)
|
456
|
-
BTAP
|
457
|
-
OpenStudio::Model::WeatherFile
|
458
|
-
BTAP
|
458
|
+
BTAP.runner_register('Info', 'BTAP::Environment::WeatherFile::set_weather', runner)
|
459
|
+
OpenStudio::Model::WeatherFile.setWeatherFile(model, @epw_file)
|
460
|
+
BTAP.runner_register('Info', "Set model \"#{model.building.get.name}\" to weather file #{model.weatherFile.get.path.get}.\n", runner)
|
459
461
|
|
460
462
|
# Add or update site data
|
461
463
|
site = model.getSite
|
@@ -465,22 +467,22 @@ module BTAP
|
|
465
467
|
site.setTimeZone(@epw_file.timeZone)
|
466
468
|
site.setElevation(@epw_file.elevation)
|
467
469
|
|
468
|
-
BTAP
|
470
|
+
BTAP.runner_register('Info', 'Setting water main temperatures via parsing of STAT file.', runner)
|
469
471
|
water_temp = model.getSiteWaterMainsTemperature
|
470
472
|
water_temp.setAnnualAverageOutdoorAirTemperature(@stat_file.mean_dry_bulb)
|
471
473
|
water_temp.setMaximumDifferenceInMonthlyAverageOutdoorAirTemperatures(@stat_file.delta_dry_bulb)
|
472
|
-
BTAP
|
473
|
-
BTAP
|
474
|
+
BTAP.runner_register('Info', "SiteWaterMainsTemperature.AnnualAverageOutdoorAirTemperature = #{@stat_file.mean_dry_bulb}.", runner)
|
475
|
+
BTAP.runner_register('Info', "SiteWaterMainsTemperature.MaximumDifferenceInMonthlyAverageOutdoorAirTemperatures = #{@stat_file.delta_dry_bulb}.", runner)
|
474
476
|
|
475
477
|
# Remove all the Design Day objects that are in the file
|
476
|
-
model.getObjectsByType(
|
478
|
+
model.getObjectsByType('OS:SizingPeriod:DesignDay'.to_IddObjectType).each(&:remove)
|
477
479
|
|
478
480
|
# Load in the ddy file based on convention that it is in the same directory and has the same basename as the weather
|
479
|
-
@ddy_file.getObjectsByType(
|
481
|
+
@ddy_file.getObjectsByType('OS:SizingPeriod:DesignDay'.to_IddObjectType).each do |d|
|
480
482
|
# grab only the ones that matter
|
481
483
|
ddy_list = /(Htg 99.6. Condns DB)|(Clg .4. Condns WB=>MDB)|(Clg .4% Condns DB=>MWB)/
|
482
484
|
if d.name.get =~ ddy_list
|
483
|
-
BTAP
|
485
|
+
BTAP.runner_register('Info', "Adding design day '#{d.name}'.", runner)
|
484
486
|
# add the object to the existing model
|
485
487
|
model.addObject(d.clone)
|
486
488
|
end
|
@@ -488,22 +490,22 @@ module BTAP
|
|
488
490
|
return true
|
489
491
|
end
|
490
492
|
|
491
|
-
#This method scans the epw file into memory.
|
492
|
-
|
493
|
-
def scan
|
494
|
-
@filearray =
|
495
|
-
file = File.new(@epw_filepath,
|
493
|
+
# This method scans the epw file into memory.
|
494
|
+
# @author phylroy.lopez@nrcan.gc.ca
|
495
|
+
def scan
|
496
|
+
@filearray = []
|
497
|
+
file = File.new(@epw_filepath, 'r')
|
496
498
|
while (line = file.gets)
|
497
|
-
@filearray.push(line.split(
|
499
|
+
@filearray.push(line.split(','))
|
498
500
|
end
|
499
501
|
file.close
|
500
502
|
end
|
501
503
|
|
502
|
-
#This method will sets column to a value.
|
503
|
-
|
504
|
-
|
505
|
-
|
506
|
-
def setcolumntovalue(column,value)
|
504
|
+
# This method will sets column to a value.
|
505
|
+
# @author phylroy.lopez@nrcan.gc.ca
|
506
|
+
# @param column [String]
|
507
|
+
# @param value [Fixnum]
|
508
|
+
def setcolumntovalue(column, value)
|
507
509
|
@filearray.each do |line|
|
508
510
|
unless line.first =~ /\D(.*)/
|
509
511
|
line[column] = value
|
@@ -511,140 +513,130 @@ module BTAP
|
|
511
513
|
end
|
512
514
|
end
|
513
515
|
|
514
|
-
#This method will eliminate all radiation from the weather and returns self.
|
515
|
-
|
516
|
-
|
517
|
-
def eliminate_all_radiation
|
518
|
-
|
519
|
-
setcolumntovalue(
|
520
|
-
setcolumntovalue(
|
521
|
-
setcolumntovalue(
|
522
|
-
setcolumntovalue(
|
523
|
-
setcolumntovalue(
|
524
|
-
setcolumntovalue(
|
525
|
-
setcolumntovalue(
|
526
|
-
setcolumntovalue(
|
527
|
-
setcolumntovalue(
|
528
|
-
setcolumntovalue(
|
529
|
-
#lux values
|
530
|
-
setcolumntovalue(
|
531
|
-
setcolumntovalue(
|
532
|
-
setcolumntovalue(
|
533
|
-
setcolumntovalue(
|
516
|
+
# This method will eliminate all radiation from the weather and returns self.
|
517
|
+
# @author phylroy.lopez@nrcan.gc.ca
|
518
|
+
# @return [String] self
|
519
|
+
def eliminate_all_radiation
|
520
|
+
scan if @filearray.nil?
|
521
|
+
setcolumntovalue(EXTRATERRESTRIAL_HORIZONTAL_RADIATION, '0') # not used
|
522
|
+
setcolumntovalue(EXTRATERRESTRIAL_DIRECT_NORMAL_RADIATION, '0') # not used
|
523
|
+
setcolumntovalue(HORIZONTAL_INFRARED_RADIATION_INTENSITY, '315')
|
524
|
+
setcolumntovalue(GLOBAL_HORIZONTAL_RADIATION, '0') # not used
|
525
|
+
setcolumntovalue(DIRECT_NORMAL_RADIATION, '0')
|
526
|
+
setcolumntovalue(DIFFUSE_HORIZONTAL_RADIATION, '0')
|
527
|
+
setcolumntovalue(TOTAL_SKY_COVER, '10') # not used
|
528
|
+
setcolumntovalue(OPAQUE_SKY_COVER, '10') # not used
|
529
|
+
setcolumntovalue(VISIBILITY, '0') # not used
|
530
|
+
setcolumntovalue(CEILING_HEIGHT, '0') # not used
|
531
|
+
# lux values
|
532
|
+
setcolumntovalue(GLOBAL_HORIZONTAL_ILLUMINANCE, '0') # not used
|
533
|
+
setcolumntovalue(DIRECT_NORMAL_ILLUMINANCE, '0') # not used
|
534
|
+
setcolumntovalue(DIFFUSE_HORIZONTAL_ILLUMINANCE, '0') # not used
|
535
|
+
setcolumntovalue(ZENITH_LUMINANCE, '0') # not used
|
534
536
|
return self
|
535
537
|
end
|
536
538
|
|
537
|
-
#This method will eliminate solar radiation and returns self.
|
538
|
-
|
539
|
-
|
540
|
-
def eliminate_only_solar_radiation
|
541
|
-
|
542
|
-
setcolumntovalue(
|
543
|
-
setcolumntovalue(
|
544
|
-
setcolumntovalue(
|
539
|
+
# This method will eliminate solar radiation and returns self.
|
540
|
+
# @author phylroy.lopez@nrcan.gc.ca
|
541
|
+
# @return [String] self
|
542
|
+
def eliminate_only_solar_radiation
|
543
|
+
scan if @filearray.nil?
|
544
|
+
setcolumntovalue(GLOBAL_HORIZONTAL_RADIATION, '0') # not used
|
545
|
+
setcolumntovalue(DIRECT_NORMAL_RADIATION, '0')
|
546
|
+
setcolumntovalue(DIFFUSE_HORIZONTAL_RADIATION, '0')
|
545
547
|
return self
|
546
548
|
end
|
547
549
|
|
548
|
-
#This method will eliminate all radiation except solar and returns self.
|
549
|
-
|
550
|
-
|
551
|
-
def eliminate_all_radiation_except_solar
|
552
|
-
|
553
|
-
setcolumntovalue(
|
554
|
-
setcolumntovalue(
|
555
|
-
setcolumntovalue(
|
556
|
-
setcolumntovalue(
|
557
|
-
setcolumntovalue(
|
558
|
-
setcolumntovalue(
|
559
|
-
setcolumntovalue(
|
560
|
-
#lux values
|
561
|
-
setcolumntovalue(
|
562
|
-
setcolumntovalue(
|
563
|
-
setcolumntovalue(
|
564
|
-
setcolumntovalue(
|
550
|
+
# This method will eliminate all radiation except solar and returns self.
|
551
|
+
# @author phylroy.lopez@nrcan.gc.ca
|
552
|
+
# @return [String] self
|
553
|
+
def eliminate_all_radiation_except_solar
|
554
|
+
scan if @filearray.nil?
|
555
|
+
setcolumntovalue(EXTRATERRESTRIAL_HORIZONTAL_RADIATION, '0') # not used
|
556
|
+
setcolumntovalue(EXTRATERRESTRIAL_DIRECT_NORMAL_RADIATION, '0') # not used
|
557
|
+
setcolumntovalue(HORIZONTAL_INFRARED_RADIATION_INTENSITY, '315')
|
558
|
+
setcolumntovalue(TOTAL_SKY_COVER, '10') # not used
|
559
|
+
setcolumntovalue(OPAQUE_SKY_COVER, '10') # not used
|
560
|
+
setcolumntovalue(VISIBILITY, '0') # not used
|
561
|
+
setcolumntovalue(CEILING_HEIGHT, '0') # not used
|
562
|
+
# lux values
|
563
|
+
setcolumntovalue(GLOBAL_HORIZONTAL_ILLUMINANCE, '0') # not used
|
564
|
+
setcolumntovalue(DIRECT_NORMAL_ILLUMINANCE, '0') # not used
|
565
|
+
setcolumntovalue(DIFFUSE_HORIZONTAL_ILLUMINANCE, '0') # not used
|
566
|
+
setcolumntovalue(ZENITH_LUMINANCE, '0') # not used
|
565
567
|
return self
|
566
568
|
end
|
567
569
|
|
568
|
-
#This method will eliminate percipitation and returns self.
|
569
|
-
|
570
|
-
|
570
|
+
# This method will eliminate percipitation and returns self.
|
571
|
+
# @author phylroy.lopez@nrcan.gc.ca
|
572
|
+
# @return [String] self
|
571
573
|
def eliminate_percipitation
|
572
|
-
|
573
|
-
setcolumntovalue(
|
574
|
-
setcolumntovalue(
|
575
|
-
setcolumntovalue(
|
576
|
-
setcolumntovalue(
|
577
|
-
setcolumntovalue(
|
574
|
+
scan if @filearray.nil?
|
575
|
+
setcolumntovalue(PRESENT_WEATHER_OBSERVATION, '0')
|
576
|
+
setcolumntovalue(PRESENT_WEATHER_CODES, '999999999') # no weather. Clear day.
|
577
|
+
setcolumntovalue(SNOW_DEPTH, '0')
|
578
|
+
setcolumntovalue(LIQUID_PRECIPITATION_DEPTH, '0')
|
579
|
+
setcolumntovalue(LIQUID_PRECIPITATION_QUANTITY, '0')
|
578
580
|
return self
|
579
581
|
end
|
580
582
|
|
581
|
-
#This method eliminates wind and returns self.
|
582
|
-
|
583
|
-
|
583
|
+
# This method eliminates wind and returns self.
|
584
|
+
# @author phylroy.lopez@nrcan.gc.ca
|
585
|
+
# @return [String] self
|
584
586
|
def eliminate_wind
|
585
|
-
|
586
|
-
setcolumntovalue(
|
587
|
-
setcolumntovalue(
|
587
|
+
scan if @filearray.nil?
|
588
|
+
setcolumntovalue(WIND_DIRECTION, '0')
|
589
|
+
setcolumntovalue(WIND_SPEED, '0')
|
588
590
|
return self
|
589
591
|
end
|
590
592
|
|
591
|
-
#This method sets Constant Dry and Dew Point Temperature Humidity And Pressure and returns self.
|
592
|
-
|
593
|
-
|
594
|
-
|
595
|
-
|
596
|
-
|
597
|
-
|
598
|
-
def
|
599
|
-
|
600
|
-
setcolumntovalue(
|
601
|
-
setcolumntovalue(
|
602
|
-
setcolumntovalue(
|
603
|
-
setcolumntovalue(
|
593
|
+
# This method sets Constant Dry and Dew Point Temperature Humidity And Pressure and returns self.
|
594
|
+
# @author phylroy.lopez@nrcan.gc.ca
|
595
|
+
# @param dbt [Float] dry bulb temperature
|
596
|
+
# @param dpt [Float] dew point temperature
|
597
|
+
# @param hum [Fixnum] humidity
|
598
|
+
# @param press [Fixnum] pressure
|
599
|
+
# @return [String] self
|
600
|
+
def set_constant_dry_and_dewpoint_temperature_humidity_pressure(dbt = '0.0', dpt = '-1.1', hum = '92', press = '98500')
|
601
|
+
scan if @filearray.nil?
|
602
|
+
setcolumntovalue(DRY_BULB_TEMPERATURE, dbt)
|
603
|
+
setcolumntovalue(DEW_POINT_TEMPERATURE, dpt)
|
604
|
+
setcolumntovalue(RELATIVE_HUMIDITY, hum)
|
605
|
+
setcolumntovalue(ATMOSPHERIC_STATION_PRESSURE, press)
|
604
606
|
return self
|
605
607
|
end
|
606
608
|
|
607
|
-
#This method writes to a file.
|
608
|
-
|
609
|
-
|
609
|
+
# This method writes to a file.
|
610
|
+
# @author phylroy.lopez@nrcan.gc.ca
|
611
|
+
# @param filename [String]
|
610
612
|
def writetofile(filename)
|
611
|
-
|
613
|
+
scan if @filearray.nil?
|
612
614
|
|
613
615
|
begin
|
614
616
|
FileUtils.mkdir_p(File.dirname(filename))
|
615
|
-
file = File.open(filename,
|
617
|
+
file = File.open(filename, 'w')
|
616
618
|
@filearray.each do |line|
|
617
619
|
firstvalue = true
|
618
|
-
newline =
|
620
|
+
newline = ''
|
619
621
|
line.each do |value|
|
620
622
|
if firstvalue == true
|
621
623
|
firstvalue = false
|
622
624
|
else
|
623
|
-
newline
|
625
|
+
newline += ','
|
624
626
|
end
|
625
|
-
newline
|
627
|
+
newline += value
|
626
628
|
end
|
627
629
|
file.puts(newline)
|
628
630
|
end
|
629
631
|
rescue IOError => e
|
630
|
-
#some error occur, dir not writable etc.
|
632
|
+
# some error occur, dir not writable etc.
|
631
633
|
ensure
|
632
|
-
file.close unless file
|
634
|
+
file.close unless file.nil?
|
633
635
|
end
|
634
|
-
#copies original file
|
635
|
-
FileUtils.cp(@ddy_filepath, "#{File.dirname(filename)}/#{File.basename(filename,'.epw')}.ddy")
|
636
|
-
FileUtils.cp(@stat_filepath, "#{File.dirname(filename)}/#{File.basename(filename,'.epw')}.stat")
|
636
|
+
# copies original file
|
637
|
+
FileUtils.cp(@ddy_filepath, "#{File.dirname(filename)}/#{File.basename(filename, '.epw')}.ddy")
|
638
|
+
FileUtils.cp(@stat_filepath, "#{File.dirname(filename)}/#{File.basename(filename, '.epw')}.stat")
|
637
639
|
end
|
638
|
-
|
639
|
-
end #Environment
|
640
|
-
|
641
|
-
|
642
|
-
|
643
|
-
|
640
|
+
end # Environment
|
644
641
|
end
|
645
642
|
end
|
646
|
-
|
647
|
-
|
648
|
-
|
649
|
-
|
650
|
-
|