Question-and-Answer Resource for the Building Energy Modeling Community
Get started with the Help page
Ask Your Question
2

boost::optional argument for WSHP in ruby

asked 2016-10-14 11:32:50 -0500

gokul's avatar

updated 2016-10-14 11:55:18 -0500

Hi, I am trying to set the value of outdoor air flow rate in my ZoneHVAC:WatertoAirHeatPump to zero, through a measure. For this object, the setOutdoorAirFlowRateDuringCoolingOperation() accepts a boost::optional argument, as per the OS Class Runner reference. I am looking for ways to initialise a boost::optional argument in ruby, and I think I maybe getting confused between an OptionalDouble and a boost::optional

https://unmethours.com/question/8806/... addresses this question, and one of the answers says I need to use the following syntax:

                             value = OpenStudio.OptionalDouble.new(10000.0)
                             coil.setRatedHighSpeedTotalCoolingCapacity(value)

This doesn't seem to be working though, and Ruby says this method is not recognised. Is there something I should add before/after these lines to have 'value' be initialised as a boost::optional type? I tried initialising the object as an Optional double with a default value, but this still gives a run time error. My code block is as such: In the arguments section: def arguments(model) args = OpenStudio::Ruleset::OSArgumentVector.new zero = OpenStudio::Ruleset::OSArgument::makeDoubleArgument('zero',false) zero.setDefaultValue(0.00) args << zero

In the runner: zone.equipment.each do |zone_equip| wshp = zone_equip.to_ZoneHVACWaterToAirHeatPump if wshp.is_initialized wshp = wshp.get if zero.is_initialized wshp.setOutdoorAirFlowRateDuringCoolingOperation(zero.get) wshp.setOutdoorAirFlowRateDuringHeatingOperation(zero.get) wshp.setOutdoorAirFlowRateWhenNoCoolingorHeatingisNeeded(zero.get) #wshp.setSupplyAirFlowRateWhenNoCoolingorHeatingisNeeded(0) end end end

Am I missing something here?

edit retag flag offensive close merge delete

1 Answer

Sort by ยป oldest newest most voted
1

answered 2016-10-14 12:40:37 -0500

updated 2016-10-14 12:43:44 -0500

Try this. Notice the double colon vs. period.

value = OpenStudio::OptionalDouble.new(10000.0)
edit flag offensive delete link more

Comments

Thank you for the answer. I did try this, and it throws the same runtime error:

"C:/Users/gparanjothi/AppData/Local/Temp/OpenStudio.nH5236/ApplyMeasureNow/UserScript/user_script.rb:130:in `setOutdoorAirFlowRateDuringCoolingOperation': Expected argument 1 of type boost::optional< double >, but got Float 0.0 (TypeError)

in SWIG method 'setOutdoorAirFlowRateDuringCoolingOperation'

As a related question, Is SWIG a source to source compiler which just doesn't recognise Ruby's boost::optional initialization?

gokul's avatar gokul  ( 2016-10-14 14:05:51 -0500 )edit

I can't answer details of how boost works, but very odd that you get an error that says you are passing in a float.

If you add this code

puts "class is #{value}"

You should get something like this

class is OpenStudio::OptionalDouble

If instead you had a value.get then it would return a 'Float' for class instead of 'OpenStudio::OptionalDouble'

David Goldwasser's avatar David Goldwasser  ( 2016-10-14 14:35:18 -0500 )edit

@goldwasser, sorry, I was able to get this to work with the above line you had mentioned, through this method of initialisation:

"wshp.setOutdoorAirFlowRateDuringCoolingOperation(OpenStudio::OptionalDouble.new(0.0))"

Somehow, trying to initialize the optional double outside the function and passing that value to the function was not working! This one seems to work fine now though!

gokul's avatar gokul  ( 2016-10-14 15:17:53 -0500 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Training Workshops

Careers

Question Tools

1 follower

Stats

Asked: 2016-10-14 11:32:50 -0500

Seen: 282 times

Last updated: Oct 14 '16