Module: OpenStudio::Workflow::Util::Model

Overview

Manages routine tasks involving OpenStudio::Model or OpenStudio::Workflow objects, such as loading, saving, and translating them.

Instance Method Summary collapse

Instance Method Details

#load_idf(idf_path, logger) ⇒ Object

Method to create / load an IDF file

Parameters:

  • idf_path (String)

    Full path to the IDF

  • logger (Object)

    An optional logger to use for finding the idf model

Returns:

  • (Object)

    The return from this method is a loaded IDF or a failure.



48
49
50
51
52
53
54
55
56
57
58
# File 'lib/openstudio/workflow/util/model.rb', line 48

def load_idf(idf_path, logger)
  logger.info 'Loading IDF model'

  # Load the IDF into a workspace object and return it
  logger.info "Reading in IDF model #{idf_path}"

  idf = OpenStudio::Workspace.load(idf_path)
  raise "Failed to load IDF file #{idf_path}" if idf.empty?

  idf.get
end

#load_osm(osm_path, logger) ⇒ Object

Method to create / load an OSM file

Parameters:

  • osm_path (String)

    The full path to an OSM file to load

  • logger (Object)

    An optional logger to use for finding the OSM model

Returns:

  • (Object)

    The return from this method is a loaded OSM or a failure.



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/openstudio/workflow/util/model.rb', line 21

def load_osm(osm_path, logger)
  logger.info 'Loading OSM model'

  # Load the model and return it
  logger.info "Reading in OSM model #{osm_path}"

  loaded_model = nil
  begin
    translator = OpenStudio::OSVersion::VersionTranslator.new
    loaded_model = translator.loadModel(osm_path)
  rescue StandardError
    # TODO: get translator working in embedded.
    # Need to embed idd files
    logger.warn 'OpenStudio VersionTranslator could not be loaded'
    loaded_model = OpenStudio::Model::Model.load(osm_path)
  end
  raise "Failed to load OSM file #{osm_path}" if loaded_model.empty?

  loaded_model.get
end

#save_epjson(model_epjson, save_directory, name = 'in.epJSON') ⇒ String

Saves an OpenStudio EpJSON model object to file

Parameters:

  • model (Object)

    The OpenStudio::Workspace instance to save to file

  • save_directory (String)

    Folder to save the model in

  • name (String) (defaults to: 'in.epJSON')

    (‘in.epJSON’) Option to define a non-standard name

Returns:

  • (String)

    epJSON file name



166
167
168
169
170
171
172
173
174
175
176
177
178
# File 'lib/openstudio/workflow/util/model.rb', line 166

def save_epjson(model_epjson, save_directory, name = 'in.epJSON')
  epjson_filename = File.join(save_directory.to_s, name.to_s)
  File.open(epjson_filename, 'w') do |f|
    f << model_epjson.to_s
    # make sure data is written to the disk one way or the other
    begin
      f.fsync
    rescue StandardError
      f.flush
    end
  end
  epjson_filename
end

#save_idf(model_idf, save_directory, name = 'in.idf') ⇒ String

Saves an OpenStudio IDF model object to file

Parameters:

  • model (Object)

    The OpenStudio::Workspace instance to save to file

  • save_directory (String)

    Folder to save the model in

  • name (String) (defaults to: 'in.idf')

    (‘in.osm’) Option to define a non-standard name

Returns:



145
146
147
148
149
150
151
152
153
154
155
156
157
# File 'lib/openstudio/workflow/util/model.rb', line 145

def save_idf(model_idf, save_directory, name = 'in.idf')
  idf_filename = File.join(save_directory.to_s, name.to_s)
  File.open(idf_filename, 'w') do |f|
    f << model_idf.to_s
    # make sure data is written to the disk one way or the other
    begin
      f.fsync
    rescue StandardError
      f.flush
    end
  end
  idf_filename
end

#save_osm(model, save_directory, name = 'in.osm') ⇒ String

Saves an OpenStudio model object to file

Parameters:

  • model (Object)

    The OpenStudio::Model instance to save to file

  • save_directory (String)

    Folder to save the model in

  • name (String) (defaults to: 'in.osm')

    (‘in.osm’) Option to define a non-standard name

Returns:



124
125
126
127
128
129
130
131
132
133
134
135
136
# File 'lib/openstudio/workflow/util/model.rb', line 124

def save_osm(model, save_directory, name = 'in.osm')
  osm_filename = File.join(save_directory.to_s, name.to_s)
  File.open(osm_filename, 'w') do |f|
    f << model.to_s
    # make sure data is written to the disk one way or the other
    begin
      f.fsync
    rescue StandardError
      f.flush
    end
  end
  osm_filename
end

#translate_idf_to_epjson(model_idf, logger = nil) ⇒ Object

Translates an IDF model into an EnergyPlus epJSON object

Parameters:

  • OpenStudio::IdfFile (Object)

    instance to translate into an OpenStudio epJSON object – see the OpenStudio SDK for details on the process

Returns:

  • (Object)

    Returns and OpenStudio::epJSONobject



106
107
108
109
110
111
112
113
114
115
# File 'lib/openstudio/workflow/util/model.rb', line 106

def translate_idf_to_epjson(model_idf, logger = nil)
  logger ||= ::Logger.new($stdout)
  logger.info 'Translate IDF to epJSON in preparation for EnergyPlus'
  a = ::Time.now
  model_epjson = OpenStudio::EPJSON.toJSONString(model_idf)
  b = ::Time.now
  logger.info "Translate IDF to EnergyPlus epJSON took #{b.to_f - a.to_f}"

  model_epjson
end

#translate_to_energyplus(model, logger = nil) ⇒ Object

TODO:

(rhorsey) rescue errors here

Translates a OpenStudio model object into an OpenStudio IDF object

Parameters:

  • model (Object)

    the OpenStudio::Model instance to translate into an OpenStudio::Workspace object – see the OpenStudio SDK for details on the process

Returns:

  • (Object)

    Returns and OpenStudio::Workspace object



67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'lib/openstudio/workflow/util/model.rb', line 67

def translate_to_energyplus(model, logger = nil)
  logger ||= ::Logger.new($stdout)
  logger.info 'Translate object to EnergyPlus IDF in preparation for EnergyPlus'
  a = ::Time.now
  # ensure objects exist for reporting purposes
  model.getFacility
  model.getBuilding
  ft = OpenStudio::EnergyPlus::ForwardTranslator.new

  ft_options = @options[:ft_options]
  if !ft_options.empty?

    msg = "Custom ForwardTranslator options passed:\n"

    ft_options.each do |opt_flag_name, h|
      ft_method = h[:method_name]
      opt_flag = h[:value]

      # Call the FT setter with the value passed in
      ft.method(ft_method).call(opt_flag)

      msg += "* :#{opt_flag_name}=#{opt_flag} => ft.#{ft_method}(#{opt_flag})\n"
    end

    logger.info msg
  end

  model_idf = ft.translateModel(model)
  b = ::Time.now
  logger.info "Translate object to EnergyPlus IDF took #{b.to_f - a.to_f}"
  model_idf
end