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

Included in:
RunEnergyPlusMeasures, RunInitialization, RunOpenStudioMeasures, RunPreprocess, RunReportingMeasures, RunTranslation
Defined in:
lib/openstudio/workflow/util/model.rb

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.



78
79
80
81
82
83
84
85
86
87
88
# File 'lib/openstudio/workflow/util/model.rb', line 78

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.



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/openstudio/workflow/util/model.rb', line 51

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_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:



139
140
141
142
143
144
145
146
147
148
149
150
151
# File 'lib/openstudio/workflow/util/model.rb', line 139

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:



118
119
120
121
122
123
124
125
126
127
128
129
130
# File 'lib/openstudio/workflow/util/model.rb', line 118

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_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



97
98
99
100
101
102
103
104
105
106
107
108
109
# File 'lib/openstudio/workflow/util/model.rb', line 97

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
  forward_translator = OpenStudio::EnergyPlus::ForwardTranslator.new
  model_idf = forward_translator.translateModel(model)
  b = ::Time.now
  logger.info "Translate object to EnergyPlus IDF took #{b.to_f - a.to_f}"
  model_idf
end