lib/openstudio-standards/weather/Weather.Model.rb in openstudio-standards-0.2.12.rc6 vs lib/openstudio-standards/weather/Weather.Model.rb in openstudio-standards-0.2.12.rc7

- old
+ new

@@ -108,11 +108,11 @@ ddy_string = load_resource_relative("../../../data/weather/#{weather_file_name.gsub('.epw', '.ddy')}") stat_string = load_resource_relative("../../../data/weather/#{weather_file_name.gsub('.epw', '.stat')}") # extract to local weather dir weather_dir = File.expand_path(File.join(Dir.pwd, 'extracted_files/weather/')) - puts "Extracting weather files to #{weather_dir}" + OpenStudio.logFree(OpenStudio::Info, 'openstudio.weather.Model', "Extracting weather files from OpenStudio CLI to #{weather_dir}") FileUtils.mkdir_p(weather_dir) File.open("#{weather_dir}/#{weather_file_name}", 'wb') { |f| f << epw_string; f.flush } File.open("#{weather_dir}/#{weather_file_name.gsub('.epw', '.ddy')}", 'wb') { |f| f << ddy_string; f.flush } File.open("#{weather_dir}/#{weather_file_name.gsub('.epw', '.stat')}", 'wb') { |f| f << stat_string; f.flush } else @@ -175,24 +175,55 @@ if model.getDesignDays.size.zero? OpenStudio.logFree(OpenStudio::Error, 'openstudio.weather.Model', "No design days were loaded, check syntax of .ddy file: #{ddy_file}.") end else OpenStudio.logFree(OpenStudio::Error, 'openstudio.weather.Model', "Could not find .ddy file for: #{ddy_file}.") - puts "Could not find .ddy file for: #{ddy_file}." success = false end return success end def model_add_ground_temperatures(model, building_type, climate_zone) - # Get ground temperatures from stat file. Stat file is mapped via climate zone. - stat_file_path = File.join(File.dirname(__FILE__), "../../../data/weather/#{model_get_climate_zone_weather_file_map[climate_zone].gsub('.epw', '.stat')}") + # Define the weather file for each climate zone + climate_zone_weather_file_map = model_get_climate_zone_weather_file_map - ground_temperatures = [] + # Get the weather file name from the hash + weather_file_name = climate_zone_weather_file_map[climate_zone] + if weather_file_name.nil? + OpenStudio.logFree(OpenStudio::Warn, 'openstudio.weather.Model', "Could not determine the weather file for climate zone: #{climate_zone}, cannot get ground temperatures from stat file.") + end - if stat_file_path.include? '.stat' + # Define where the weather files lives + weather_dir = nil + if __dir__[0] == ':' # Running from OpenStudio CLI + # load stat file from embedded files + stat_string = load_resource_relative("../../../data/weather/#{weather_file_name.gsub('.epw', '.stat')}") + + # extract to local weather dir + weather_dir = File.expand_path(File.join(Dir.pwd, 'extracted_files/weather/')) + OpenStudio.logFree(OpenStudio::Info, 'openstudio.weather.Model', "Extracting stat file from OpenStudio CLI to #{weather_dir}") + FileUtils.mkdir_p(weather_dir) + File.open("#{weather_dir}/#{weather_file_name.gsub('.epw', '.stat')}", 'wb') { |f| f << stat_string; f.flush } + else + # loaded gem from system path + top_dir = File.expand_path('../../..', File.dirname(__FILE__)) + weather_dir = File.expand_path("#{top_dir}/data/weather") + end + + # Expand the weather directory path + unless (Pathname.new weather_dir).absolute? + weather_dir = File.expand_path(File.join(File.dirname(__FILE__), weather_dir)) + end + + # Get the path to the stat file + weather_file = File.join(weather_dir, weather_file_name) + + # Add ground temperatures via parsing of STAT file. + ground_temperatures = [] + stat_file_path = "#{File.join(File.dirname(weather_file), File.basename(weather_file, '.*'))}.stat" + if File.exist? stat_file_path ground_temperatures = model_get_monthly_ground_temps_from_stat_file(stat_file_path) unless ground_temperatures.empty? # set the site ground temperature building surface ground_temp = model.getSiteGroundTemperatureFCfactorMethod ground_temp.setAllMonthlyTemperatures(ground_temperatures) \ No newline at end of file