Class: OpenStudio::Model::HeatExchangerAirToAirSensibleAndLatent

Inherits:
Object
  • Object
show all
Defined in:
lib/openstudio-standards/hvac_sizing/HVACSizing.HeatExchangerAirToAirSensibleAndLatent.rb,
lib/openstudio-standards/prototypes/Prototype.HeatExchangerAirToAirSensibleAndLatent.rb

Overview

Reopen the OpenStudio class to add methods to apply standards to this object

Instance Method Summary collapse

Instance Method Details

#applySizingValuesObject

Takes the values calculated by the EnergyPlus sizing routines and puts them into this object model in place of the autosized fields. Must have previously completed a run with sql output for this to work.



13
14
15
16
17
18
19
20
# File 'lib/openstudio-standards/hvac_sizing/HVACSizing.HeatExchangerAirToAirSensibleAndLatent.rb', line 13

def applySizingValues

  nominal_supply_air_flow_rate = self.autosizedNominalSupplyAirFlowRate
  if nominal_supply_air_flow_rate.is_initialized
    self.setNominalSupplyAirFlowRate(nominal_supply_air_flow_rate.get) 
  end
  
end

#autosizeObject

Sets all auto-sizeable fields to autosize



6
7
8
# File 'lib/openstudio-standards/hvac_sizing/HVACSizing.HeatExchangerAirToAirSensibleAndLatent.rb', line 6

def autosize
  OpenStudio::logFree(OpenStudio::Warn, "openstudio.sizing.HeatExchangerAirToAirSensibleAndLatent", ".autosize not yet implemented for #{self.iddObject.type.valueDescription}.")
end

#autosizedNominalSupplyAirFlowRateObject

returns the autosized nominal supply air flow rate as an optional double



23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/openstudio-standards/hvac_sizing/HVACSizing.HeatExchangerAirToAirSensibleAndLatent.rb', line 23

def autosizedNominalSupplyAirFlowRate

  # In E+ 8.4, (OS 1.9.3 onward) the variable name changed

  supply_air_flow_rate_name = nil
  if self.model.version < OpenStudio::VersionString.new('1.9.3')
    supply_air_flow_rate_name = 'Nominal Supply Air Flow Rate'
  else
    supply_air_flow_rate_name = 'Design Size Nominal Supply Air Flow Rate'
  end  

  return self.model.getAutosizedValue(self, supply_air_flow_rate_name, 'm3/s')
  
end

#setPrototypeNominalElectricPowerObject



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/openstudio-standards/prototypes/Prototype.HeatExchangerAirToAirSensibleAndLatent.rb', line 5

def setPrototypeNominalElectricPower

  # Get the nominal supply air flow rate

  supply_air_flow_m3_per_s = nil
  if self.nominalSupplyAirFlowRate.is_initialized
    supply_air_flow_m3_per_s = self.nominalSupplyAirFlowRate.get
  elsif self.autosizedNominalSupplyAirFlowRate.is_initialized
    supply_air_flow_m3_per_s = self.autosizedNominalSupplyAirFlowRate.get
  else
    # Get the min OA flow rate from the OA

    # system if the ERV was not on the system during sizing.

    # This prevents us from having to perform a second sizing run.

    controller_oa = nil
    oa_system = nil
    # Get the air loop

    air_loop = self.airLoopHVAC
    if air_loop.empty?
      OpenStudio::logFree(OpenStudio::Info, "openstudio.prototype.HeatExchangerAirToAirSensibleAndLatent", "For #{self.name}, cannot get the air loop and therefore cannot get the min OA flow.")
      return false
    end
    air_loop = air_loop.get
    # Get the OA system

    if air_loop.airLoopHVACOutdoorAirSystem.is_initialized
      oa_system = air_loop.airLoopHVACOutdoorAirSystem.get
      controller_oa = oa_system.getControllerOutdoorAir
    else
      OpenStudio::logFree(OpenStudio::Info, "openstudio.prototype.HeatExchangerAirToAirSensibleAndLatent", "For #{self.name}, cannot find the min OA flow because it has no OA intake.")
      return false
    end
    # Get the min OA flow rate from the OA      

    if controller_oa.minimumOutdoorAirFlowRate.is_initialized
      supply_air_flow_m3_per_s = controller_oa.minimumOutdoorAirFlowRate.get
    elsif controller_oa.autosizedMinimumOutdoorAirFlowRate.is_initialized
      supply_air_flow_m3_per_s = controller_oa.autosizedMinimumOutdoorAirFlowRate.get
    else
      OpenStudio::logFree(OpenStudio::Warn, "openstudio.prototype.HeatExchangerAirToAirSensibleAndLatent", "For #{self.name}, ERV minimum OA flow rate is not available, cannot apply prototype nominal power assumption.")
      return false
    end
  end

  # Convert the flow rate to cfm

  supply_air_flow_cfm = OpenStudio.convert(supply_air_flow_m3_per_s, "m^3/s", "cfm").get
  
  # Calculate the motor power for the rotatry wheel per:

  # Power (W) = (Nominal Supply Air Flow Rate (CFM) * 0.3386) + 49.5

  # power = (supply_air_flow_cfm * 0.3386) + 49.5

  
  # Calculate the motor power for the rotatry wheel per:

  # Power (W) = (Minimum Outdoor Air Flow Rate (m^3/s) * 212.5 / 0.5) + (Minimum Outdoor Air Flow Rate (m^3/s) * 162.5 / 0.5) + 50

  power = (supply_air_flow_m3_per_s * 212.5 / 0.5) + (supply_air_flow_m3_per_s * 0.9 * 162.5 / 0.5) + 50
  OpenStudio::logFree(OpenStudio::Info, "openstudio.prototype.HeatExchangerAirToAirSensibleAndLatent", "For #{self.name}, ERV power is calculated to be #{power.round} W, based on a min OA flow of #{supply_air_flow_cfm.round} cfm.")

  # Set the power for the HX

  self.setNominalElectricPower(power)

  return true

end