lib/from_honeybee/schedule/fixed_interval.rb in honeybee-openstudio-1.8.1 vs lib/from_honeybee/schedule/fixed_interval.rb in honeybee-openstudio-1.8.2

- old
+ new

@@ -1,115 +1,115 @@ -# ******************************************************************************* -# Honeybee OpenStudio Gem, Copyright (c) 2020, Alliance for Sustainable -# Energy, LLC, Ladybug Tools LLC and other contributors. All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# (1) Redistributions of source code must retain the above copyright notice, -# this list of conditions and the following disclaimer. -# -# (2) Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# (3) Neither the name of the copyright holder nor the names of any contributors -# may be used to endorse or promote products derived from this software without -# specific prior written permission from the respective party. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) AND ANY CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, -# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER(S), ANY CONTRIBUTORS, THE -# UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY, NOR ANY OF -# THEIR EMPLOYEES, BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT -# OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# ******************************************************************************* - -require 'from_honeybee/extension' -require 'from_honeybee/model_object' - -module FromHoneybee - class ScheduleFixedIntervalAbridged < ModelObject - attr_reader :errors, :warnings - - def initialize(hash = {}) - super(hash) - - raise "Incorrect model type '#{@type}'" unless @type == 'ScheduleFixedIntervalAbridged' - end - - def defaults - @@schema[:components][:schemas][:ScheduleFixedIntervalAbridged][:properties] - end - - def find_existing_openstudio_object(openstudio_model) - model_schedule = openstudio_model.getScheduleFixedIntervalByName(@hash[:identifier]) - return model_schedule.get unless model_schedule.empty? - nil - end - - def to_openstudio(openstudio_model) - # create the new schedule - os_fi_schedule = OpenStudio::Model::ScheduleFixedInterval.new(openstudio_model) - os_fi_schedule.setName(@hash[:identifier]) - - # assign start date - if @hash[:start_date] - os_fi_schedule.setStartMonth(@hash[:start_date][0]) - os_fi_schedule.setStartDay(@hash[:start_date][1]) - else - os_fi_schedule.setStartMonth(defaults[:start_date][:default][0]) - os_fi_schedule.setStartDay(defaults[:start_date][:default][1]) - end - - # assign the interpolate value - unless @hash[:interpolate].nil? - os_fi_schedule.setInterpolatetoTimestep(@hash[:interpolate]) - else - os_fi_schedule.setInterpolatetoTimestep(defaults[:interpolate][:default]) - end - - # assign the schedule type limit - if @hash[:schedule_type_limit] - schedule_type_limit = openstudio_model.getScheduleTypeLimitsByName(@hash[:schedule_type_limit]) - unless schedule_type_limit.empty? - schedule_type_limit_object = schedule_type_limit.get - os_fi_schedule.setScheduleTypeLimits(schedule_type_limit_object) - end - end - - # assign the timestep - if @hash[:timestep] - timestep = @hash[:timestep] - interval_length = 60 / timestep - os_fi_schedule.setIntervalLength(interval_length) - else - timestep = defaults[:timestep][:default] - interval_length = 60 / timestep - os_fi_schedule.setIntervalLength(interval_length) - end - openstudio_interval_length = OpenStudio::Time.new(0, 0, interval_length) - - # assign the values as a timeseries - year_description = openstudio_model.getYearDescription - - # set is leap year = true in case start date has 3 integers - if @hash[:start_date][2] - year_description.setIsLeapYear(true) - end - - start_date = year_description.makeDate(@hash[:start_date][0], @hash[:start_date][1]) - - values = @hash[:values] - timeseries = OpenStudio::TimeSeries.new(start_date, openstudio_interval_length, OpenStudio.createVector(values), '') - os_fi_schedule.setTimeSeries(timeseries) - - os_fi_schedule - end - - end #ScheduleFixedIntervalAbridged -end #FromHoneybee +# ******************************************************************************* +# Honeybee OpenStudio Gem, Copyright (c) 2020, Alliance for Sustainable +# Energy, LLC, Ladybug Tools LLC and other contributors. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# (1) Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# (2) Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# (3) Neither the name of the copyright holder nor the names of any contributors +# may be used to endorse or promote products derived from this software without +# specific prior written permission from the respective party. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) AND ANY CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER(S), ANY CONTRIBUTORS, THE +# UNITED STATES GOVERNMENT, OR THE UNITED STATES DEPARTMENT OF ENERGY, NOR ANY OF +# THEIR EMPLOYEES, BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT +# OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ******************************************************************************* + +require 'from_honeybee/extension' +require 'from_honeybee/model_object' + +module FromHoneybee + class ScheduleFixedIntervalAbridged < ModelObject + attr_reader :errors, :warnings + + def initialize(hash = {}) + super(hash) + + raise "Incorrect model type '#{@type}'" unless @type == 'ScheduleFixedIntervalAbridged' + end + + def defaults + @@schema[:components][:schemas][:ScheduleFixedIntervalAbridged][:properties] + end + + def find_existing_openstudio_object(openstudio_model) + model_schedule = openstudio_model.getScheduleFixedIntervalByName(@hash[:identifier]) + return model_schedule.get unless model_schedule.empty? + nil + end + + def to_openstudio(openstudio_model) + # create the new schedule + os_fi_schedule = OpenStudio::Model::ScheduleFixedInterval.new(openstudio_model) + os_fi_schedule.setName(@hash[:identifier]) + + # assign start date + if @hash[:start_date] + os_fi_schedule.setStartMonth(@hash[:start_date][0]) + os_fi_schedule.setStartDay(@hash[:start_date][1]) + else + os_fi_schedule.setStartMonth(defaults[:start_date][:default][0]) + os_fi_schedule.setStartDay(defaults[:start_date][:default][1]) + end + + # assign the interpolate value + unless @hash[:interpolate].nil? + os_fi_schedule.setInterpolatetoTimestep(@hash[:interpolate]) + else + os_fi_schedule.setInterpolatetoTimestep(defaults[:interpolate][:default]) + end + + # assign the schedule type limit + if @hash[:schedule_type_limit] + schedule_type_limit = openstudio_model.getScheduleTypeLimitsByName(@hash[:schedule_type_limit]) + unless schedule_type_limit.empty? + schedule_type_limit_object = schedule_type_limit.get + os_fi_schedule.setScheduleTypeLimits(schedule_type_limit_object) + end + end + + # assign the timestep + if @hash[:timestep] + timestep = @hash[:timestep] + interval_length = 60 / timestep + os_fi_schedule.setIntervalLength(interval_length) + else + timestep = defaults[:timestep][:default] + interval_length = 60 / timestep + os_fi_schedule.setIntervalLength(interval_length) + end + openstudio_interval_length = OpenStudio::Time.new(0, 0, interval_length) + + # assign the values as a timeseries + year_description = openstudio_model.getYearDescription + + # set is leap year = true in case start date has 3 integers + if @hash[:start_date][2] + year_description.setIsLeapYear(true) + end + + start_date = year_description.makeDate(@hash[:start_date][0], @hash[:start_date][1]) + + values = @hash[:values] + timeseries = OpenStudio::TimeSeries.new(start_date, openstudio_interval_length, OpenStudio.createVector(values), '') + os_fi_schedule.setTimeSeries(timeseries) + + os_fi_schedule + end + + end #ScheduleFixedIntervalAbridged +end #FromHoneybee