diff --git a/design/FY2017/NFP-Initial Draft - Increase speeds in multispeed object.md b/design/FY2017/NFP-Initial Draft - Increase speeds in multispeed object.md new file mode 100644 index 00000000000..2e3acbdb904 --- /dev/null +++ b/design/FY2017/NFP-Initial Draft - Increase speeds in multispeed object.md @@ -0,0 +1,321 @@ + + +4.1.3. Increase Speeds in UnitarySystemPerformance:Multispeed object +================ + +**Richard Raustad, Florida Solar Energy Center** + + - NFP Initial draft submitted April 24, 2017 + - NFP Initial draft accepted April 27, 2017 + - NFP Final: submitted May 1, 2017 (same as draft) + - Design Doc: submitted May 1, 2017 + +## Draft NFP ## + +## Justification for New Feature ## + +Many commercial large capacity RTUs (30-200 tons) offer from 2 to 8 stages of compression. For the constant volume version of these products the indoor fan typically has 1 or 2 fan speeds. For the variable air volume version of these products, indoor fan speed is continuously variable when a VFD is used. The use of larger number of compression stages allows finer control of capacity to match load, providing better temperature and humidity control in the space. Use of larger number of compression stages also can achieve improved equipment COP at part-load conditions. + +The ability to model up to 8 stages of compression with independent modulation of indoor fan will allow performance of these higher IEER products to be evaluated in EnergyPlus. + + +## E-mail and Conference Call Conclusions ## + +E-mail notes: no comments received other than initial draft looks acceptable + + +## Overview ## + +The following IDD object (shortened for readability) is extensible yet includes only 4 fields for cooling and heating air flow rate ratios. This means that any user wanting to simulate more than for stages of heating and/or cooling must revised the IDD. Simlarly, the IDFEditor also required fields in the IDD to encompass the number of inputs specified in the object. For these reasons, the UnitarySystemPerformance:Multispeed object fields will be increased to include 10 speeds. + +Also, there is no input for no load air flow rate ratio. If a system is autosized, there is no input for the ratio of no load operating air flow rate to maximum operating air flow rate and the result of autosizing is that the no load flow rate always equals the maximum operating air flow rate (which is unrealistic). + +This makes it difficult for users and interface developers to use HVAC systems with more than 4 stages. + + UnitarySystemPerformance:Multispeed, + \extensible:2 - repeat last two fields, remembering to remove ; from "inner" fields. + A1, \field Name + \required-field + N1, \field Number of Speeds for Heating + \required-field + \minimum 0 + \maximum 10 + N2, \field Number of Speeds for Cooling + \required-field + \minimum 0 + \maximum 10 + A2, \field Single Mode Operation + N3, \field Heating Speed 1 Supply Air Flow Ratio + \required-field + N4, \field Cooling Speed 1 Supply Air Flow Ratio + \required-field + N5, \field Heating Speed 2 Supply Air Flow Ratio + N6, \field Cooling Speed 2 Supply Air Flow Ratio + N7, \field Heating Speed 3 Supply Air Flow Ratio + N8, \field Cooling Speed 3 Supply Air Flow Ratio + N9, \field Heating Speed 4 Supply Air Flow Ratio + N10; \field Cooling Speed 4 Supply Air Flow Ratio + + +## Approach ## + +The team will: + + - add a new field for No Load Supply Air Flow Rate Ratio + - modify the IDD to include up to 10 fields for heating/cooling supply air flow ratio + - revise function GetUnitarySystemInput to allow optional fields up to speed 10 + +## Known Issues ## + +- none + +## Testing/Validation/Data Sources ## + +Compare simulation results with existing equipment models. Document comparison of outlet temperature and humidity ratio and power consumption. + +## Input Description ## + +Limited changes to IDD and IO Reference documents as described herein. + +## Outputs Description ## + +No change to output reporting (although report variables of type `Speed N` will be reviewed) + +## IDD - Input Data Dictionary ## + + UnitarySystemPerformance:Multispeed, + \memo The UnitarySystemPerformance object is used to specify the air flow ratio at each + \memo operating speed. This object is primarily used for multispeed DX and water coils to allow + \memo operation at alternate flow rates different from those specified in the coil object. + \extensible:2 - repeat last two fields, remembering to remove ; from "inner" fields. + A1 , \field Name + \required-field + \reference UnitarySystemPerformaceNames + N1 , \field Number of Speeds for Heating + \required-field + \type integer + \minimum 0 + \maximum 10 + \note Used only for Multi speed coils + \note Enter the number of the following sets of data for air flow rates. + N2 , \field Number of Speeds for Cooling + \required-field + \type integer + \minimum 0 + \maximum 10 + \note Used only for Multi speed coils + \note Enter the number of the following sets of data for air flow rates. + A2 , \field Single Mode Operation + \type choice + \key Yes + \key No + \default No + \note Controls coil operation during each HVAC timestep. + \note This choice does not apply to speed 1 operation. + \note Yes = operate at the highest speed possible without exceeding the current load. + \note No = allow operation at the average of two adjacent speeds to match the current load. + +###New Field:### + + N3 , \field No Load Supply Air Flow Rate Ratio + \type real + \default 1.0 + \note Used to define no load operating air flow rate when system fan is specified to + \note operate continuously. + + + N4 , \field Heating Speed 1 Supply Air Flow Ratio + \required-field + \type real + \autosizable + \minimum> 0 + \begin-extensible + \note Used only for Multi speed coils + \note Enter the lowest operating supply air flow ratio during heating + \note operation or specify autosize. This value is the ratio of air flow + \note at this speed to the maximum air flow rate. + N5 , \field Cooling Speed 1 Supply Air Flow Ratio + \required-field + \type real + \autosizable + \minimum> 0 + \note Used only for Multi speed coils + \note Enter the lowest operating supply air flow ratio during cooling + \note operation or specify autosize. This value is the ratio of air flow + \note at this speed to the maximum air flow rate. + N6 , \field Heating Speed 2 Supply Air Flow Ratio + \type real + \autosizable + \minimum> 0 + \note Used only for Multi speed coils + \note Enter the next highest operating supply air flow ratio during heating + \note operation or specify autosize. This value is the ratio of air flow + \note at this speed to the maximum air flow rate. + N7 , \field Cooling Speed 2 Supply Air Flow Ratio + \type real + \autosizable + \minimum> 0 + \note Used only for Multi speed coils + \note Enter the next highest operating supply air flow ratio during cooling + \note operation or specify autosize. This value is the ratio of air flow + \note at this speed to the maximum air flow rate. + N8 , \field Heating Speed 3 Supply Air Flow Ratio + \type real + \autosizable + \minimum> 0 + \note Used only for Multi speed coils + \note Enter the next highest operating supply air flow ratio during heating + \note operation or specify autosize. This value is the ratio of air flow + \note at this speed to the maximum air flow rate. + N9 , \field Cooling Speed 3 Supply Air Flow Ratio + \type real + \autosizable + \minimum> 0 + \note Used only for Multi speed coils + \note Enter the next highest operating supply air flow ratio during cooling + \note operation or specify autosize. This value is the ratio of air flow + \note at this speed to the maximum air flow rate. + N10, \field Heating Speed 4 Supply Air Flow Ratio + \type real + \autosizable + \minimum> 0 + \note Used only for Multi speed coils + \note Enter the next highest operating supply air flow ratio during heating + \note operation or specify autosize. This value is the ratio of air flow + \note at this speed to the maximum air flow rate. + N11, \field Cooling Speed 4 Supply Air Flow Ratio + \type real + \autosizable + \minimum> 0 + \note Used only for Multi speed coils + \note Enter the next highest operating supply air flow ratio during cooling + \note operation or specify autosize. This value is the ratio of air flow + \note at this speed to the maximum air flow rate. + +###New Fields:### + + N12, \field Heating Speed 5 Supply Air Flow Ratio + \type real + \autosizable + \minimum> 0 + \note Used only for Multi speed coils + \note Enter the next highest operating supply air flow ratio during heating + \note operation or specify autosize. This value is the ratio of air flow + \note at this speed to the maximum air flow rate. + N13, \field Cooling Speed 5 Supply Air Flow Ratio + \type real + \autosizable + \minimum> 0 + \note Used only for Multi speed coils + \note Enter the next highest operating supply air flow ratio during cooling + \note operation or specify autosize. This value is the ratio of air flow + \note at this speed to the maximum air flow rate. + N14, \field Heating Speed 6 Supply Air Flow Ratio + \type real + \autosizable + \minimum> 0 + \note Used only for Multi speed coils + \note Enter the next highest operating supply air flow ratio during heating + \note operation or specify autosize. This value is the ratio of air flow + \note at this speed to the maximum air flow rate. + N15, \field Cooling Speed 6 Supply Air Flow Ratio + \type real + \autosizable + \minimum> 0 + \note Used only for Multi speed coils + \note Enter the next highest operating supply air flow ratio during cooling + \note operation or specify autosize. This value is the ratio of air flow + \note at this speed to the maximum air flow rate. + N16, \field Heating Speed 7 Supply Air Flow Ratio + \type real + \autosizable + \minimum> 0 + \note Used only for Multi speed coils + \note Enter the next highest operating supply air flow ratio during heating + \note operation or specify autosize. This value is the ratio of air flow + \note at this speed to the maximum air flow rate. + N17, \field Cooling Speed 7 Supply Air Flow Ratio + \type real + \autosizable + \minimum> 0 + \note Used only for Multi speed coils + \note Enter the next highest operating supply air flow ratio during cooling + \note operation or specify autosize. This value is the ratio of air flow + \note at this speed to the maximum air flow rate. + N18, \field Heating Speed 8 Supply Air Flow Ratio + \type real + \autosizable + \minimum> 0 + \note Used only for Multi speed coils + \note Enter the next highest operating supply air flow ratio during heating + \note operation or specify autosize. This value is the ratio of air flow + \note at this speed to the maximum air flow rate. + N19, \field Cooling Speed 8 Supply Air Flow Ratio + \type real + \autosizable + \minimum> 0 + \note Used only for Multi speed coils + \note Enter the next highest operating supply air flow ratio during cooling + \note operation or specify autosize. This value is the ratio of air flow + \note at this speed to the maximum air flow rate. + N20, \field Heating Speed 9 Supply Air Flow Ratio + \type real + \autosizable + \minimum> 0 + \note Used only for Multi speed coils + \note Enter the next highest operating supply air flow ratio during heating + \note operation or specify autosize. This value is the ratio of air flow + \note at this speed to the maximum air flow rate. + N21, \field Cooling Speed 9 Supply Air Flow Ratio + \type real + \autosizable + \minimum> 0 + \note Used only for Multi speed coils + \note Enter the next highest operating supply air flow ratio during cooling + \note operation or specify autosize. This value is the ratio of air flow + \note at this speed to the maximum air flow rate. + N22, \field Heating Speed 10 Supply Air Flow Ratio + \type real + \autosizable + \minimum> 0 + \note Used only for Multi speed coils + \note Enter the next highest operating supply air flow ratio during heating + \note operation or specify autosize. This value is the ratio of air flow + \note at this speed to the maximum air flow rate. + N23; \field Cooling Speed 10 Supply Air Flow Ratio + \type real + \autosizable + \minimum> 0 + \note Used only for Multi speed coils + \note Enter the next highest operating supply air flow ratio during cooling + \note operation or specify autosize. This value is the ratio of air flow + \note at this speed to the maximum air flow rate. + + +## Input Output Reference Documentation ## + +Add new field descriptions. + +## Engineering Reference ## + +Review and add model calculations as necessary. + +## Example File and Transition Changes ## + +Transition required. + +## References ## + +NA + +## Final NFP ## +Same as draft NFP + +## Design Doc ## + + 1) Minimal new code anticipated for this feature + 2) Extend number of speeds in IDD to 10. See suggested IDD in draft NFP. + 3) Test that number of speeds < 10 works with modified IDD + 4) Test input file without UnitarySystemPerformance:Multispeed object (should already work). + 5) Test use of UnitarySystemPerformance:Multispeed object with 10-spd DX coil object + diff --git a/doc/input-output-reference/src/overview/group-unitary-equipment.tex b/doc/input-output-reference/src/overview/group-unitary-equipment.tex index 7923f7f0803..f0319a4a6b1 100644 --- a/doc/input-output-reference/src/overview/group-unitary-equipment.tex +++ b/doc/input-output-reference/src/overview/group-unitary-equipment.tex @@ -49,8 +49,6 @@ \subsection{AirLoopHVAC:UnitarySystem}\label{airloophvacunitarysystem} For unitary systems, don't use the night cycle manager. Use a scheduled availability manager and let the system be always on. Then use the Supply Air Fan Operating Mode Schedule Name in the unitary system to switch between continuous fan (for ventilation) during occupied periods and switch to cycling fan for unoccupied. The system will cycle on as the thermostat requests, and this way it will run just enough to meet the load - no need for a minimum cycle time. -\subsubsection{Inputs}\label{inputs-049} - Multi-speed fan chilled and hot water coils Air Handling Unit (AHU) can be modeled using Airloop Unitary System HVAC object (AirloopHVAC:UnitarySystem). AHU with chilled and hot water coils is setup by specifying Fan:OnOff and DesignSpecificationPerformance:MultiSpeed objects in Unitary System. The design specification performance object allows running the chilled and hot water coils capacity control using a multi-speed supply air fan. The multi-speed fan capacity control for chilled and hot water coil AHU is performed by modulating the supply air flow rate while maintaining a constant water flow rate. The chilled or hot water flow rates is set at maximum fixed flow rate when there is cooling or heating load and the water flow rate is set to zero when there is no load. Such control strategy is called two-position cooling or heating coil control. The fan speed selection depends on the current load, at lower load the fan is operated at minimum speed (Speed = 1) and the fan speed level increases progressively as the load increases until it reaches the maximum speed level specified. The multi-speed fan operation is modulated between the speeds to meet the current load. When the supply air fan is cycling between consecutive speeds levels, the speed ratio is calculated that indicates what fraction of the time step that the system run at the higher of the two speeds. At lower load, the fan may cycle on-off or run continuously depending the fan operating schedule specified. When the fan is cycling a part-load ratio is calculated to reflect the proportion of the system timestep the fan and coils were operating. In continuous fan operating mode only the coil cycles on-off and the part-load ratio applies to the coil only. Multi-speed fan capacity control is allowed with load based control type only. \subsubsection{Inputs}\label{inputs-049} @@ -395,73 +393,74 @@ \subsubsection{Inputs}\label{inputs-049} \begin{lstlisting} AirLoopHVAC:UnitarySystem, - DXAC Heat Pump 1, !- Name - Load, !- Control Type - East Zone, !- Controlling Zone or Thermostat Location - , !- Dehumidification Control Type - FanAndCoilAvailSched, !- Availability Schedule Name - Mixed Air Node, !- Air Inlet Node Name - Air Loop Outlet Node, !- Air Outlet Node Name - Fan:OnOff, !- Supply Air Fan Object Type - Supply Fan 1, !- Supply Air Fan Name - BlowThrough, !- Fan Placement - FanModeSchedule, !- Supply Air Fan Operating Mode Schedule Name + DXAC Heat Pump 1, !- Name + Load, !- Control Type + East Zone, !- Controlling Zone or Thermostat Location + , !- Dehumidification Control Type + FanAndCoilAvailSched, !- Availability Schedule Name + Mixed Air Node, !- Air Inlet Node Name + Air Loop Outlet Node, !- Air Outlet Node Name + Fan:OnOff, !- Supply Fan Object Type + Supply Fan 1, !- Supply Fan Name + BlowThrough, !- Fan Placement + FanModeSchedule, !- Supply Air Fan Operating Mode Schedule Name Coil:Heating:DX:MultiSpeed, !- Heating Coil Object Type Heat Pump DX Heating Coil 1, !- Heating Coil Name , !- DX Heating Coil Sizing Ratio Coil:Cooling:DX:MultiSpeed, !- Cooling Coil Object Type - Heat Pump ACDXCoil 1, !- Cooling Coil Name - , !- Use DOAS DX Cooling Coil - , !- DOAS DX Cooling Coil Leaving Minimum Air Temperature - , !- Latent Load Control - Coil:Heating:Fuel, !- Supplemental Heating Coil Object Type - Supp Gas Heating Coil 1, !- Supplemental Heating Coil Name - SupplyAirFlowRate, !- Cooling Supply Air Flow Rate Method - 1.7, !- Cooling Supply Air Flow Rate {m3/s} - , !- Cooling Supply Air Flow Rate Per Floor Area - , !- Cooling Fraction of Autosized Cooling Supply Air Flow Rate - , !- Cooling Supply Air Flow Rate Per Unit of Cooling Capacity - SupplyAirFlowRate, !- Heating Supply Air Flow Rate Method - 1.7, !- Heating Supply Air Flow Rate {m3/s} - , !- Heating Supply Air Flow Rate Per Floor Area - , !- Heating Fraction of Autosized Heating Supply Air Flow Rate - , !- Heating Supply Air Flow Rate Per Unit of Heating Capacity - SupplyAirFlowRate, !- No Load Supply Air Flow Rate Method - 0.2, !- No Load Supply Air Flow Rate {m3/s} - , !- No Load Supply Air Flow Rate Per Floor Area - , !- No Load Fraction of Autosized Cooling Supply Air Flow Rate - , !- No Load Fraction of Autosized Heating Supply Air Flow Rate - , !- No Load Supply Air Flow Rate Per Unit of Cooling Capacity - , !- No Load Supply Air Flow Rate Per Unit of Heating Capacity - 50, !- Maximum Supply Air Temperature {C} - 21, !- Maximum Outdoor Dry-Bulb Temperature for Supplemental Heater Operation - , !- Outdoor Dry-Bulb Temperature Sensor Node Name - , !- Maximum Cycling Rate - , !- Heat Pump Time Constant - , !- Fraction of On-Cycle Power Use - , !- Heat Pump Fan Delay Time - , !- Ancillary On-Cycle Electric Power - , !- Ancillary Off-Cycle Electric Power - , !- Design Heat Recovery Water Flow Rate - , !- Maximum Temperature for Heat Recovery (Maximum Heat Recovery Outlet Temperature?) - , !- Heat Recovery Water Inlet Node Name - , !- Heat Recovery Water Outlet Node Name - UnitarySystemPerformance:Multispeed, !- Design Specification Multispeed Heat Pump Object Type - MyMultispeedHPSpec; !- Design Specification Multispeed Heat Pump Object Name + Heat Pump ACDXCoil 1, !- Cooling Coil Name + , !- Use DOAS DX Cooling Coil + , !- Minimum Supply Air Temperature {C} + , !- Latent Load Control + Coil:Heating:Fuel, !- Supplemental Heating Coil Object Type + Supp Gas Heating Coil 1, !- Supplemental Heating Coil Name + SupplyAirFlowRate, !- Cooling Supply Air Flow Rate Method + 1.7, !- Cooling Supply Air Flow Rate {m3/s} + , !- Cooling Supply Air Flow Rate Per Floor Area {m3/s-m2} + , !- Cooling Fraction of Autosized Cooling Supply Air Flow Rate + , !- Cooling Supply Air Flow Rate Per Unit of Capacity {m3/s-W} + SupplyAirFlowRate, !- Heating Supply Air Flow Rate Method + 1.7, !- Heating Supply Air Flow Rate {m3/s} + , !- Heating Supply Air Flow Rate Per Floor Area {m3/s-m2} + , !- Heating Fraction of Autosized Heating Supply Air Flow Rate + , !- Heating Supply Air Flow Rate Per Unit of Capacity {m3/s-W} + SupplyAirFlowRate, !- No Load Supply Air Flow Rate Method + 0.2, !- No Load Supply Air Flow Rate {m3/s} + , !- No Load Supply Air Flow Rate Per Floor Area {m3/s-m2} + , !- No Load Fraction of Autosized Cooling Supply Air Flow Rate + , !- No Load Fraction of Autosized Heating Supply Air Flow Rate + , !- No Load Supply Air Flow Rate Per Unit of Capacity during Cooling Operation {m3/s-W} + , !- No Load Supply Air Flow Rate Per Unit of Capacity during Heating Operation {m3/s-W} + 50, !- Maximum Supply Air Temperature {C} + 21, !- Maximum Outdoor Dry-Bulb Temperature for Supplemental Heater Operation {C} + , !- Outdoor Dry-Bulb Temperature Sensor Node Name + , !- Maximum Cycling Rate {cycles/hr} + , !- Heat Pump Time Constant {s} + , !- Fraction of On-Cycle Power Use + , !- Heat Pump Fan Delay Time {s} + , !- Ancillary On-Cycle Electric Power {W} + , !- Ancillary Off-Cycle Electric Power {W} + , !- Design Heat Recovery Water Flow Rate {m3/s} + , !- Maximum Temperature for Heat Recovery {C} + , !- Heat Recovery Water Inlet Node Name + , !- Heat Recovery Water Outlet Node Name + UnitarySystemPerformance:Multispeed, !- Design Specification Multispeed Object Type + MyMultispeedHPSpec; !- Design Specification Multispeed Object Name UnitarySystemPerformance:Multispeed, - MyMultispeedHPSpec, !- Name - 4, !- Number of Speeds for Heating - 4, !- Number of Speeds for Cooling - No, !- Single Mode Operation - 0.235294118, !- Heating Speed 1 Supply Air Flow Rate {m3/s} - 0.235294118, !- Cooling Speed 1 Supply Air Flow Rate {m3/s} - 0.470588235, !- Heating Speed 2 Supply Air Flow Rate {m3/s} - 0.470588235, !- Cooling Speed 2 Supply Air Flow Rate {m3/s} - 0.705882353, !- Heating Speed 3 Supply Air Flow Rate {m3/s} - 0.705882353, !- Cooling Speed 3 Supply Air Flow Rate {m3/s} - 1.0, !- Heating Speed 4 Supply Air Flow Rate {m3/s} - 1.0; !- Cooling Speed 4 Supply Air Flow Rate {m3/s} + MyMultispeedHPSpec, !- Name + 4, !- Number of Speeds for Heating + 4, !- Number of Speeds for Cooling + No, !- Single Mode Operation + , !- No Load Supply Air Flow Rate Ratio + 0.235294118, !- Heating Speed 1 Supply Air Flow Ratio + 0.235294118, !- Cooling Speed 1 Supply Air Flow Ratio + 0.470588235, !- Heating Speed 2 Supply Air Flow Ratio + 0.470588235, !- Cooling Speed 2 Supply Air Flow Ratio + 0.705882353, !- Heating Speed 3 Supply Air Flow Ratio + 0.705882353, !- Cooling Speed 3 Supply Air Flow Ratio + 1.0, !- Heating Speed 4 Supply Air Flow Ratio + 1.0; !- Cooling Speed 4 Supply Air Flow Ratio \end{lstlisting} \subsubsection{Outputs}\label{outputs-038} @@ -708,37 +707,22 @@ \subsubsection{Inputs}\label{inputs-1-046} Coil:Cooling:DX:MultiSpeed and Coil:Heating:DX:MultiSpeed or Coil:Cooling:DX:MultiSpeed and Coil:Heating:Fuel. -\paragraph{Field: Heating Speed 1 Supply Air Flow Ratio}\label{field-heating-speed-1-supply-air-flow-ratio} - -This numeric field defines the ratio of supply air flow rate leaving the unitary system to the maximum air flow rate specified in the coil object at maximum speed when the heating coil and/or supplemental heater are operating at Speed 1 (lowest speed). Values must be greater than 0. - -\paragraph{Field: Cooling Speed 1 Supply Air Flow Ratio}\label{field-cooling-speed-1-supply-air-flow-ratio} - -This numeric field defines the ratio of supply air flow rate leaving the unitary system to the maximum air flow rate specified in the coil object at maximum speed when the DX cooling coil is operating at Speed 1 (lowest speed). Values must be greater than 0. - -\paragraph{Field: Heating Speed 2 Supply Air Flow Ratio}\label{field-heating-speed-2-supply-air-flow-ratio} - -This numeric field defines the ratio of supply air flow rate leaving the unitary system to the maximum air flow rate specified in the coil object at maximum speed when the heating coil and/or supplemental heater are operating at Speed 2. Values must be greater than 0. The entered value must be greater or equal to the flow rate ratio specified for heating speed 1. - -\paragraph{Field: Cooling Speed 2 Supply Air Flow Ratio}\label{field-cooling-speed-2-supply-air-flow-ratio} - -This numeric field defines the ratio of supply air flow rate leaving the unitary system to the maximum air flow rate specified in the coil object at maximum speed when the DX cooling coil is operating at Speed 2. Values must be greater than 0. The entered value must be greater or equal to the flow rate ratio specified for cooling speed 1. - -\paragraph{Field: Heating Speed 3 Supply Air Flow Ratio}\label{field-heating-speed-3-supply-air-flow-ratio} +\paragraph{Field: No Load Supply Air Flow Rate Ratio}\label{field-no-load-supply-air-flow-rate-ratio} -This numeric field defines the ratio of supply air flow rate leaving the unitary system to the maximum air flow rate specified in the coil object at maximum speed when the heating coil and/or supplemental heater are operating at Speed 3. Values must be greater than 0. The entered value must be greater or equal to the flow rate ratio specified for heating speed 2.If the `Number of Speeds for Heating' is less than 3, then this field can be left blank. +This field defines the no load operating air flow rate when the system fan is specified to operate continuously. The allowed fractions are between 0 and 1 with a default value of 1. The no load air flow rate will be calculated as this fraction multiplied by the minimum of the cooling and heating supply air flow rate. If the cooling or heating coil is not present, this fraction is multiplied by the operating supply air flow rate. -\paragraph{Field: Cooling Speed 3 Supply Air Flow Ratio}\label{field-cooling-speed-3-supply-air-flow-ratio} +\paragraph{Field Group: Heating and Cooling Speeds 1 to 10}\label{field-group-heating-and-cooling-speeds-1-to-10} -This numeric field defines the ratio of supply air flow rate leaving the unitary system to the maximum air flow rate specified in the coil object at maximum speed when the DX cooling coil is operating at Speed 3. Values must be greater than 0. The entered value must be greater or equal to the flow rate ratio specified for cooling speed 2.If the `Number of Speeds for Cooling' is less than 3, then this field can be left blank. +The air flow through a multispeed coil system is specified as a group of two air flow ratio inputs, one each for heating and cooling. If the number of speeds for heating and cooling are different, inputs for both heating and cooling are still required for a given speed yet one input may be blank. The maximum of the inputs for Number of Speeds for Cooling and Number of Speeds for Heating specified above determines how many groups of heating and cooling supply air flow ratio inputs are required. Both inputs for Speed 1 are required and specify the air flow ratio for the lowest speed, followed by the inputs for Speed 2, Speed 3, etc. up to a maximum of 10 speeds. These inputs are applicable only to multispeed or variable speed coils. -\paragraph{Field: Heating Speed 4 Supply Air Flow Ratio}\label{field-heating-speed-4-supply-air-flow-ratio} +\paragraph{Field: Heating Speed \textless{}x\textgreater{} Supply Air Flow Ratio}\label{field-heating-speed-x-supply-air-flow-ratio} -This numeric field defines the ratio of supply air flow rate leaving the unitary system to the maximum air flow rate specified in the coil object at maximum speed when the DX heating coil and/or supplemental heater are operating at Speed 3. Values must be greater than 0. The entered value must be greater or equal to the flow rate ratio specified for heating Speed 3.If the `Number of Speeds for Heating' is less than 4, then this field can be left blank. +This numeric field defines the ratio of supply air flow rate leaving the unitary system to the maximum air flow rate specified in the coil object at maximum speed when the heating coil is operating at Speed \textless{}x\textgreater{}. Values must be greater than 0. The entered value must be greater or equal to the flow rate ratio specified for the previous heating speed. If the `Number of Speeds for Heating' is less than \textless{}x\textgreater{}, then this field can be left blank. -\paragraph{Field: Cooling Speed 4 Supply Air Flow Ratio}\label{field-cooling-speed-4-supply-air-flow-ratio} +\paragraph{Field: Cooling Speed \textless{}x\textgreater{} Supply Air Flow Ratio}\label{field-cooling-speed-x-supply- +air-flow-ratio} -This numeric field defines the ratio of supply air flow rate leaving the unitary system to the maximum air flow rate specified in the coil object at maximum speed when the DX cooling coil is operating at Speed 4. Values must be greater than 0. The entered value must be greater or equal to the flow rate ratio specified for cooling Speed 3.If the `Number of Speeds for Cooling' is less than 4, then this field can be left blank. +This numeric field defines the ratio of supply air flow rate leaving the unitary system to the maximum air flow rate specified in the coil object at maximum speed when the cooling coil is operating at Speed \textless{}x\textgreater{}. Values must be greater than 0. The entered value must be greater or equal to the flow rate ratio specified for the previous cooling speed. If the `Number of Speeds for Cooling' is less than \textless{}x\textgreater{}, then this field can be left blank. \subsection{AirLoopHVAC:Unitary:Furnace:HeatCool}\label{airloophvacunitaryfurnaceheatcool} diff --git a/idd/Energy+.idd.in b/idd/Energy+.idd.in index 5a452309014..df19e709704 100644 --- a/idd/Energy+.idd.in +++ b/idd/Energy+.idd.in @@ -54485,7 +54485,14 @@ UnitarySystemPerformance:Multispeed, \note This choice does not apply to speed 1 operation. \note Yes = operate at the highest speed possible without exceeding the current load. \note No = allow operation at the average of two adjacent speeds to match the current load. - N3 , \field Heating Speed 1 Supply Air Flow Ratio + N3 , \field No Load Supply Air Flow Rate Ratio + \type real + \minimum 0 + \maximum 1 + \default 1 + \note Used to define the no load operating air flow rate when the system fan + \note is specified to operate continuously. + N4 , \field Heating Speed 1 Supply Air Flow Ratio \required-field \type real \autosizable @@ -54495,7 +54502,7 @@ UnitarySystemPerformance:Multispeed, \note Enter the lowest operating supply air flow ratio during heating \note operation or specify autosize. This value is the ratio of air flow \note at this speed to the maximum air flow rate. - N4 , \field Cooling Speed 1 Supply Air Flow Ratio + N5 , \field Cooling Speed 1 Supply Air Flow Ratio \required-field \type real \autosizable @@ -54504,7 +54511,103 @@ UnitarySystemPerformance:Multispeed, \note Enter the lowest operating supply air flow ratio during cooling \note operation or specify autosize. This value is the ratio of air flow \note at this speed to the maximum air flow rate. - N5 , \field Heating Speed 2 Supply Air Flow Ratio + N6 , \field Heating Speed 2 Supply Air Flow Ratio + \type real + \autosizable + \minimum> 0 + \note Used only for Multi speed coils + \note Enter the next highest operating supply air flow ratio during heating + \note operation or specify autosize. This value is the ratio of air flow + \note at this speed to the maximum air flow rate. + N7 , \field Cooling Speed 2 Supply Air Flow Ratio + \type real + \autosizable + \minimum> 0 + \note Used only for Multi speed coils + \note Enter the next highest operating supply air flow ratio during cooling + \note operation or specify autosize. This value is the ratio of air flow + \note at this speed to the maximum air flow rate. + N8 , \field Heating Speed 3 Supply Air Flow Ratio + \type real + \autosizable + \minimum> 0 + \note Used only for Multi speed coils + \note Enter the next highest operating supply air flow ratio during heating + \note operation or specify autosize. This value is the ratio of air flow + \note at this speed to the maximum air flow rate. + N9 , \field Cooling Speed 3 Supply Air Flow Ratio + \type real + \autosizable + \minimum> 0 + \note Used only for Multi speed coils + \note Enter the next highest operating supply air flow ratio during cooling + \note operation or specify autosize. This value is the ratio of air flow + \note at this speed to the maximum air flow rate. + N10, \field Heating Speed 4 Supply Air Flow Ratio + \type real + \autosizable + \minimum> 0 + \note Used only for Multi speed coils + \note Enter the next highest operating supply air flow ratio during heating + \note operation or specify autosize. This value is the ratio of air flow + \note at this speed to the maximum air flow rate. + N11, \field Cooling Speed 4 Supply Air Flow Ratio + \type real + \autosizable + \minimum> 0 + \note Used only for Multi speed coils + \note Enter the next highest operating supply air flow ratio during cooling + \note operation or specify autosize. This value is the ratio of air flow + \note at this speed to the maximum air flow rate. + N12, \field Heating Speed 5 Supply Air Flow Ratio + \type real + \autosizable + \minimum> 0 + \note Used only for Multi speed coils + \note Enter the next highest operating supply air flow ratio during heating + \note operation or specify autosize. This value is the ratio of air flow + \note at this speed to the maximum air flow rate. + N13, \field Cooling Speed 5 Supply Air Flow Ratio + \type real + \autosizable + \minimum> 0 + \note Used only for Multi speed coils + \note Enter the next highest operating supply air flow ratio during cooling + \note operation or specify autosize. This value is the ratio of air flow + \note at this speed to the maximum air flow rate. + N14, \field Heating Speed 6 Supply Air Flow Ratio + \type real + \autosizable + \minimum> 0 + \note Used only for Multi speed coils + \note Enter the next highest operating supply air flow ratio during heating + \note operation or specify autosize. This value is the ratio of air flow + \note at this speed to the maximum air flow rate. + N15, \field Cooling Speed 6 Supply Air Flow Ratio + \type real + \autosizable + \minimum> 0 + \note Used only for Multi speed coils + \note Enter the next highest operating supply air flow ratio during cooling + \note operation or specify autosize. This value is the ratio of air flow + \note at this speed to the maximum air flow rate. + N16, \field Heating Speed 7 Supply Air Flow Ratio + \type real + \autosizable + \minimum> 0 + \note Used only for Multi speed coils + \note Enter the next highest operating supply air flow ratio during heating + \note operation or specify autosize. This value is the ratio of air flow + \note at this speed to the maximum air flow rate. + N17, \field Cooling Speed 7 Supply Air Flow Ratio + \type real + \autosizable + \minimum> 0 + \note Used only for Multi speed coils + \note Enter the next highest operating supply air flow ratio during cooling + \note operation or specify autosize. This value is the ratio of air flow + \note at this speed to the maximum air flow rate. + N18, \field Heating Speed 8 Supply Air Flow Ratio \type real \autosizable \minimum> 0 @@ -54512,7 +54615,7 @@ UnitarySystemPerformance:Multispeed, \note Enter the next highest operating supply air flow ratio during heating \note operation or specify autosize. This value is the ratio of air flow \note at this speed to the maximum air flow rate. - N6 , \field Cooling Speed 2 Supply Air Flow Ratio + N19, \field Cooling Speed 8 Supply Air Flow Ratio \type real \autosizable \minimum> 0 @@ -54520,7 +54623,7 @@ UnitarySystemPerformance:Multispeed, \note Enter the next highest operating supply air flow ratio during cooling \note operation or specify autosize. This value is the ratio of air flow \note at this speed to the maximum air flow rate. - N7 , \field Heating Speed 3 Supply Air Flow Ratio + N20, \field Heating Speed 9 Supply Air Flow Ratio \type real \autosizable \minimum> 0 @@ -54528,7 +54631,7 @@ UnitarySystemPerformance:Multispeed, \note Enter the next highest operating supply air flow ratio during heating \note operation or specify autosize. This value is the ratio of air flow \note at this speed to the maximum air flow rate. - N8 , \field Cooling Speed 3 Supply Air Flow Ratio + N21, \field Cooling Speed 9 Supply Air Flow Ratio \type real \autosizable \minimum> 0 @@ -54536,7 +54639,7 @@ UnitarySystemPerformance:Multispeed, \note Enter the next highest operating supply air flow ratio during cooling \note operation or specify autosize. This value is the ratio of air flow \note at this speed to the maximum air flow rate. - N9 , \field Heating Speed 4 Supply Air Flow Ratio + N22, \field Heating Speed 10 Supply Air Flow Ratio \type real \autosizable \minimum> 0 @@ -54544,7 +54647,7 @@ UnitarySystemPerformance:Multispeed, \note Enter the next highest operating supply air flow ratio during heating \note operation or specify autosize. This value is the ratio of air flow \note at this speed to the maximum air flow rate. - N10; \field Cooling Speed 4 Supply Air Flow Ratio + N23; \field Cooling Speed 10 Supply Air Flow Ratio \type real \autosizable \minimum> 0 diff --git a/src/EnergyPlus/DXCoils.hh b/src/EnergyPlus/DXCoils.hh index 26faf815127..4ded34a6195 100644 --- a/src/EnergyPlus/DXCoils.hh +++ b/src/EnergyPlus/DXCoils.hh @@ -450,6 +450,7 @@ namespace DXCoils { Real64 FuelUsed; // Energy used, in addition to electricity [W] Real64 FuelConsumed; // Energy consumed, in addition to electricity [J] bool MSHPHeatRecActive; // True when entered Heat Rec Vol Flow Rate > 0 + int MSHPDesignSpecIndex; // index to MSHPDesignSpecification object used for variable speed coils // End of multispeed DX coil input // VRF system variables used for sizing bool CoolingCoilPresent; // FALSE if coil not present @@ -698,6 +699,7 @@ namespace DXCoils { PLRImpact( false ), LatentImpact( false ), MSHPHeatRecActive( false ), + MSHPDesignSpecIndex( 0 ), CoolingCoilPresent( true ), HeatingCoilPresent( true ), ISHundredPercentDOASDXCoil( false ), diff --git a/src/EnergyPlus/HVACUnitarySystem.cc b/src/EnergyPlus/HVACUnitarySystem.cc index 259f1c3b657..4ea83fad858 100644 --- a/src/EnergyPlus/HVACUnitarySystem.cc +++ b/src/EnergyPlus/HVACUnitarySystem.cc @@ -1770,6 +1770,7 @@ namespace HVACUnitarySystem { using VariableSpeedCoils::SimVariableSpeedCoils; using VariableSpeedCoils::VarSpeedCoil; using VariableSpeedCoils::GetCoilCapacityVariableSpeed; + using VariableSpeedCoils::GetVSCoilCapFTCurveIndex; using WaterToAirHeatPump::SimWatertoAirHP; auto & GetWAHPCoilCapacity( WaterToAirHeatPump::GetCoilCapacity ); using WaterToAirHeatPumpSimple::SimWatertoAirHPSimple; @@ -1794,7 +1795,7 @@ namespace HVACUnitarySystem { // SUBROUTINE LOCAL VARIABLE DECLARATIONS: int Iter; // iteration count - Real64 MulSpeedFlowScale; // variable speed air flow scaling factor +// Real64 MulSpeedFlowScale; // variable speed air flow scaling factor int MSHPIndex; // Index to design Specification object int BranchNum; // Index to branch on air loop Real64 SystemFlow; // AirloopHVAC flow rate [m3/s] @@ -1964,6 +1965,10 @@ namespace HVACUnitarySystem { DataTotCapCurveIndex = GetDXCoilCapFTCurveIndex( UnitarySystem( UnitarySysNum ).CoolingCoilIndex, ErrFound ); DataIsDXCoil = true; } + if ( UnitarySystem( UnitarySysNum ).CoolingCoilType_Num == Coil_CoolingAirToAirVariableSpeed ) { + DataTotCapCurveIndex = GetVSCoilCapFTCurveIndex( UnitarySystem( UnitarySysNum ).CoolingCoilIndex, ErrFound ); + DataIsDXCoil = true; + } RequestSizing( CompType, CompName, SizingMethod, SizingString, TempSize, PrintFlag, RoutineName ); CoolCapAtPeak = TempSize; DXCoolCap = CoolCapAtPeak; @@ -2150,10 +2155,14 @@ namespace HVACUnitarySystem { SizingMethod = AutoCalculateSizing; if ( UnitarySystem( UnitarySysNum ).MaxNoCoolHeatAirVolFlow == AutoSize ) { DataConstantUsedForSizing = max( UnitarySystem( UnitarySysNum ).MaxCoolAirVolFlow, UnitarySystem( UnitarySysNum ).MaxHeatAirVolFlow ); - if( UnitarySystem( UnitarySysNum ).CoolingCoilType_Num == CoilDX_CoolingSingleSpeed || UnitarySystem( UnitarySysNum ).HeatingCoilType_Num == CoilDX_HeatingEmpirical ) { + if ( UnitarySystem( UnitarySysNum ).CoolingCoilType_Num == CoilDX_CoolingSingleSpeed || UnitarySystem( UnitarySysNum ).HeatingCoilType_Num == CoilDX_HeatingEmpirical ) { minNoLoadFlow = 0.6667; } else { - minNoLoadFlow = 0.5; + if ( UnitarySystem( UnitarySysNum ).NoLoadAirFlowRateRatio < 1.0 ) { + minNoLoadFlow = UnitarySystem( UnitarySysNum ).NoLoadAirFlowRateRatio; + } else { + minNoLoadFlow = 0.5; + } } if( UnitarySystem( UnitarySysNum ).MaxCoolAirVolFlow >= UnitarySystem( UnitarySysNum ).MaxHeatAirVolFlow ) { DataFractionUsedForSizing = min( minNoLoadFlow, ( UnitarySystem( UnitarySysNum ).MaxHeatAirVolFlow / UnitarySystem( UnitarySysNum ).MaxCoolAirVolFlow ) - 0.01 ) ; @@ -2188,6 +2197,8 @@ namespace HVACUnitarySystem { DataFractionUsedForSizing = 1.0; SizingMethod = AutoCalculateSizing; UnitarySystem( UnitarySysNum ).MaxNoCoolHeatAirVolFlow = AutoSize; + } else { + DataFractionUsedForSizing = UnitarySystem( UnitarySysNum ).NoLoadAirFlowRateRatio; } FieldNum = 11; // N11 , \field No Load Supply Air Flow Rate @@ -2216,13 +2227,22 @@ namespace HVACUnitarySystem { if ( ! allocated( UnitarySystem( UnitarySysNum ).MSCoolingSpeedRatio ) ) UnitarySystem( UnitarySysNum ).MSCoolingSpeedRatio.allocate( UnitarySystem( UnitarySysNum ).NumOfSpeedCooling ); } + MSHPIndex = UnitarySystem( UnitarySysNum ).DesignSpecMSHPIndex; + if ( MSHPIndex > 0 ) { + for ( Iter = DesignSpecMSHP( MSHPIndex ).NumOfSpeedCooling; Iter >= 1; --Iter ) { // use reverse order since we divide by HeatVolumeFlowRate(max) + if ( DesignSpecMSHP( MSHPIndex ).CoolingVolFlowRatio( Iter ) == AutoSize ) { + DesignSpecMSHP( MSHPIndex ).CoolingVolFlowRatio( Iter ) = double( Iter ) / double( DesignSpecMSHP( MSHPIndex ).NumOfSpeedCooling ); + } + } + } + SimVariableSpeedCoils( BlankString, UnitarySystem( UnitarySysNum ).CoolingCoilIndex, 0, UnitarySystem( UnitarySysNum ).MaxONOFFCyclesperHour, UnitarySystem( UnitarySysNum ).HPTimeConstant, UnitarySystem( UnitarySysNum ).FanDelayTime, 0, 0.0, 1, 0.0, 0.0, 0.0, 0.0 ); //conduct the sizing operation in the VS WSHP UnitarySystem( UnitarySysNum ).NumOfSpeedCooling = VarSpeedCoil( UnitarySystem( UnitarySysNum ).CoolingCoilIndex ).NumOfSpeeds; DXCoolCap = GetCoilCapacityVariableSpeed( cAllCoilTypes( UnitarySystem( UnitarySysNum ).CoolingCoilType_Num ), UnitarySystem( UnitarySysNum ).CoolingCoilName, ErrFound ); EqSizing.DesCoolingLoad = DXCoolCap; - MulSpeedFlowScale = VarSpeedCoil( UnitarySystem( UnitarySysNum ).CoolingCoilIndex ).RatedAirVolFlowRate / VarSpeedCoil( UnitarySystem( UnitarySysNum ).CoolingCoilIndex ).MSRatedAirVolFlowRate( VarSpeedCoil( UnitarySystem( UnitarySysNum ).CoolingCoilIndex ).NormSpedLevel ); + for ( Iter = 1; Iter <= UnitarySystem( UnitarySysNum ).NumOfSpeedCooling; ++Iter ) { - UnitarySystem( UnitarySysNum ).CoolVolumeFlowRate( Iter ) = VarSpeedCoil( UnitarySystem( UnitarySysNum ).CoolingCoilIndex ).MSRatedAirVolFlowRate( Iter ) * MulSpeedFlowScale; + UnitarySystem( UnitarySysNum ).CoolVolumeFlowRate( Iter ) = VarSpeedCoil( UnitarySystem( UnitarySysNum ).CoolingCoilIndex ).MSRatedAirVolFlowRate( Iter ); UnitarySystem( UnitarySysNum ).CoolMassFlowRate( Iter ) = UnitarySystem( UnitarySysNum ).CoolVolumeFlowRate( Iter ) * StdRhoAir; // it seems the ratio should reference the actual flow rates, not the fan flow ??? if ( UnitarySystem( UnitarySysNum ).DesignFanVolFlowRate > 0.0 && UnitarySystem( UnitarySysNum ).FanExists ) { @@ -2305,6 +2325,16 @@ namespace HVACUnitarySystem { UnitarySystem( UnitarySysNum ).IdleSpeedRatio = UnitarySystem( UnitarySysNum ).MSHeatingSpeedRatio( 1 ); } } else if ( UnitarySystem( UnitarySysNum ).HeatingCoilType_Num == Coil_HeatingWaterToAirHPVSEquationFit || UnitarySystem( UnitarySysNum ).HeatingCoilType_Num == Coil_HeatingAirToAirVariableSpeed ) { + + MSHPIndex = UnitarySystem( UnitarySysNum ).DesignSpecMSHPIndex; + if ( MSHPIndex > 0 ) { + for ( Iter = DesignSpecMSHP( MSHPIndex ).NumOfSpeedHeating; Iter >= 1; --Iter ) { // use reverse order since we divide by HeatVolumeFlowRate(max) + if ( DesignSpecMSHP( MSHPIndex ).HeatingVolFlowRatio( Iter ) == AutoSize ) { + DesignSpecMSHP( MSHPIndex ).HeatingVolFlowRatio( Iter ) = double( Iter ) / double( DesignSpecMSHP( MSHPIndex ).NumOfSpeedHeating ); + } + } + } + SimVariableSpeedCoils( BlankString, UnitarySystem( UnitarySysNum ).HeatingCoilIndex, 0, UnitarySystem( UnitarySysNum ).MaxONOFFCyclesperHour, UnitarySystem( UnitarySysNum ).HPTimeConstant, UnitarySystem( UnitarySysNum ).FanDelayTime, 0, 0.0, 1, 0.0, 0.0, 0.0, 0.0 ); //conduct the sizing operation in the VS WSHP UnitarySystem( UnitarySysNum ).NumOfSpeedHeating = VarSpeedCoil( UnitarySystem( UnitarySysNum ).HeatingCoilIndex ).NumOfSpeeds; @@ -2315,9 +2345,8 @@ namespace HVACUnitarySystem { if ( ! allocated( UnitarySystem( UnitarySysNum ).MSHeatingSpeedRatio ) ) UnitarySystem( UnitarySysNum ).MSHeatingSpeedRatio.allocate( UnitarySystem( UnitarySysNum ).NumOfSpeedHeating ); } - MulSpeedFlowScale = VarSpeedCoil( UnitarySystem( UnitarySysNum ).HeatingCoilIndex ).RatedAirVolFlowRate / VarSpeedCoil( UnitarySystem( UnitarySysNum ).HeatingCoilIndex ).MSRatedAirVolFlowRate( VarSpeedCoil( UnitarySystem( UnitarySysNum ).HeatingCoilIndex ).NormSpedLevel ); for ( Iter = 1; Iter <= UnitarySystem( UnitarySysNum ).NumOfSpeedHeating; ++Iter ) { - UnitarySystem( UnitarySysNum ).HeatVolumeFlowRate( Iter ) = VarSpeedCoil( UnitarySystem( UnitarySysNum ).HeatingCoilIndex ).MSRatedAirVolFlowRate( Iter ) * MulSpeedFlowScale; + UnitarySystem( UnitarySysNum ).HeatVolumeFlowRate( Iter ) = VarSpeedCoil( UnitarySystem( UnitarySysNum ).HeatingCoilIndex ).MSRatedAirVolFlowRate( Iter ); UnitarySystem( UnitarySysNum ).HeatMassFlowRate( Iter ) = UnitarySystem( UnitarySysNum ).HeatVolumeFlowRate( Iter ) * StdRhoAir; if ( UnitarySystem( UnitarySysNum ).DesignFanVolFlowRate > 0.0 && UnitarySystem( UnitarySysNum ).FanExists ) { UnitarySystem( UnitarySysNum ).MSHeatingSpeedRatio( Iter ) = UnitarySystem( UnitarySysNum ).HeatVolumeFlowRate( Iter ) / UnitarySystem( UnitarySysNum ).DesignFanVolFlowRate; @@ -3023,30 +3052,31 @@ namespace HVACUnitarySystem { ErrorsFound = true; } } + DesignSpecMSHP( DesignSpecNum ).NoLoadAirFlowRateRatio = Numbers( 3 ); // initialize number of speeds (MIN = 4 or greater of cooling and heating speeds x 2) MaxSpeedNum = 0; // set to 0 so we know if the inputs are valid - if ( mod( double( NumNumbers - 2 ), 2.0 ) > 0.0 ) { + if ( mod( double( NumNumbers - 3 ), 2.0 ) > 0.0 ) { // check that the number of numeric speed input fields match the number of speeds ShowSevereError( CurrentModuleObject + " = " + DesignSpecMSHP( DesignSpecNum ).Name ); ShowContinueError( "Illegal number of entries in Supply Air Flow Rate fields." ); ShowContinueError( "..number of required Supply Air Flow Rate fields = " + TrimSigDigits( 2 * max( NumOfSpeedCooling, NumOfSpeedHeating ) ) ); - ShowContinueError( "..number of actual Supply Air Flow Rate fields = " + TrimSigDigits( NumNumbers - 2 ) ); + ShowContinueError( "..number of actual Supply Air Flow Rate fields = " + TrimSigDigits( NumNumbers - 3 ) ); ErrorsFound = true; } else { - MaxSpeedNum = ( NumNumbers - 2 ) / 2; // Extensible fields included (>4) for cooling and heating + MaxSpeedNum = ( NumNumbers - 3 ) / 2; // Extensible fields included (>4) for cooling and heating } if ( MaxSpeedNum < max( NumOfSpeedHeating, NumOfSpeedCooling ) ) { ShowSevereError( CurrentModuleObject + " = " + DesignSpecMSHP( DesignSpecNum ).Name ); ShowContinueError( "Illegal number of entries in Supply Air Flow Rate fields." ); ShowContinueError( "..number of required Supply Air Flow Rate fields = " + TrimSigDigits( 2 * max( NumOfSpeedCooling, NumOfSpeedHeating ) ) ); - ShowContinueError( "..number of actual Supply Air Flow Rate fields = " + TrimSigDigits( NumNumbers - 2 ) ); + ShowContinueError( "..number of actual Supply Air Flow Rate fields = " + TrimSigDigits( NumNumbers - 3 ) ); ErrorsFound = true; } - StartingSpeedRatioInput = 3; // start the index counter at the first input for heating (e.g. 3+0*2) + StartingSpeedRatioInput = 4; // start the index counter at the first input for heating (e.g. 4+0*2) if ( NumOfSpeedHeating > 0 && MaxSpeedNum > 0 ) { DesignSpecMSHP( DesignSpecNum ).HeatingVolFlowRatio.allocate( MaxSpeedNum ); for ( SpeedNum = 1; SpeedNum <= NumOfSpeedHeating; ++SpeedNum ) { @@ -3054,7 +3084,7 @@ namespace HVACUnitarySystem { } } - StartingSpeedRatioInput = 4; // start the index counter at the first input for heating (e.g. 4+0*2) + StartingSpeedRatioInput = 5; // start the index counter at the first input for cooling (e.g. 5+0*2) if ( NumOfSpeedCooling > 0 && MaxSpeedNum > 0 ) { DesignSpecMSHP( DesignSpecNum ).CoolingVolFlowRatio.allocate( MaxSpeedNum ); for ( SpeedNum = 1; SpeedNum <= NumOfSpeedCooling; ++SpeedNum ) { @@ -6145,6 +6175,8 @@ namespace HVACUnitarySystem { if ( DesignSpecNum > 0 ) { + UnitarySystem( UnitarySysNum ).NoLoadAirFlowRateRatio = DesignSpecMSHP( DesignSpecNum ).NoLoadAirFlowRateRatio; + if ( UnitarySystem( UnitarySysNum ).HeatingCoilType_Num == CoilDX_MultiSpeedHeating || UnitarySystem( UnitarySysNum ).HeatingCoilType_Num == Coil_HeatingElectric_MultiStage || UnitarySystem( UnitarySysNum ).HeatingCoilType_Num == Coil_HeatingGas_MultiStage ) { UnitarySystem( UnitarySysNum ).NumOfSpeedHeating = DesignSpecMSHP( DesignSpecNum ).NumOfSpeedHeating; UnitarySystem( UnitarySysNum ).HeatMassFlowRate.allocate( DesignSpecMSHP( DesignSpecNum ).NumOfSpeedHeating ); @@ -6173,7 +6205,7 @@ namespace HVACUnitarySystem { ShowContinueError( "Field " + cAlphaFields( iDesignSpecMSHPTypeAlphaNum ) + " = " + Alphas( iDesignSpecMSHPTypeAlphaNum ) ); ShowContinueError( "Field " + cAlphaFields( iDesignSpecMSHPNameAlphaNum ) + " = " + Alphas( iDesignSpecMSHPNameAlphaNum ) ); ErrorsFound = true; - } else if ( UnitarySystem( UnitarySysNum ).NumOfSpeedHeating > 0 ) { + } else if ( UnitarySystem( UnitarySysNum ).NumOfSpeedHeating > 0 ) { // how do these last 2 get called? NumOfSpeedHeating = UnitarySystem( UnitarySysNum ).NumOfSpeedHeating; UnitarySystem( UnitarySysNum ).HeatMassFlowRate.allocate( NumOfSpeedHeating ); @@ -6233,6 +6265,14 @@ namespace HVACUnitarySystem { } + if ( UnitarySystem( UnitarySysNum ).CoolingCoilType_Num == Coil_CoolingAirToAirVariableSpeed ) { + SetVarSpeedCoilData( UnitarySystem( UnitarySysNum ).CoolingCoilIndex, ErrorsFound, _, _, UnitarySystem( UnitarySysNum ).DesignSpecMSHPIndex ); + } + + if ( UnitarySystem( UnitarySysNum ).HeatingCoilType_Num == Coil_HeatingAirToAirVariableSpeed ) { + SetVarSpeedCoilData( UnitarySystem( UnitarySysNum ).HeatingCoilIndex, ErrorsFound, _, _, UnitarySystem( UnitarySysNum ).DesignSpecMSHPIndex ); + } + // set global logicals that denote coil type if ( UnitarySystem( UnitarySysNum ).MultiSpeedHeatingCoil || UnitarySystem( UnitarySysNum ).VarSpeedHeatingCoil ) { MultiOrVarSpeedHeatCoil( UnitarySysNum ) = true; diff --git a/src/EnergyPlus/HVACUnitarySystem.hh b/src/EnergyPlus/HVACUnitarySystem.hh index a9dd3974b4c..432751b1c8c 100644 --- a/src/EnergyPlus/HVACUnitarySystem.hh +++ b/src/EnergyPlus/HVACUnitarySystem.hh @@ -165,12 +165,14 @@ namespace HVACUnitarySystem { Array1D< Real64 > CoolingVolFlowRatio; // The ratio of flow to max for this speed Array1D< Real64 > HeatingVolFlowRatio; // The ratio of flow to max for this speed bool SingleModeFlag; // If yes, single mode operation + Real64 NoLoadAirFlowRateRatio; // fraction of supply air flow rate multiplier // Default Constructor DesignSpecMSHPData() : NumOfSpeedCooling( 0 ), NumOfSpeedHeating( 0 ), - SingleModeFlag( false ) + SingleModeFlag( false ), + NoLoadAirFlowRateRatio( 1.0 ) {} }; @@ -297,6 +299,7 @@ namespace HVACUnitarySystem { Real64 MaxCoolAirMassFlow; // Maximum coil air mass flow for cooling [kg/s] Real64 MaxHeatAirMassFlow; // Maximum coil air mass flow for heating [kg/s] Real64 MaxNoCoolHeatAirMassFlow; // Maximum coil air mass flow for no cooling or heating [kg/s] + Real64 NoLoadAirFlowRateRatio; // fraction of supply air flow rate used during no load operation [~] int CoolingSAFMethod; // Supply air flow method for cooling int HeatingSAFMethod; // Supply air flow method for heating int NoCoolHeatSAFMethod; // Supply air flow method for no cooling or heating @@ -590,6 +593,7 @@ namespace HVACUnitarySystem { MaxCoolAirMassFlow( 0.0 ), MaxHeatAirMassFlow( 0.0 ), MaxNoCoolHeatAirMassFlow( 0.0 ), + NoLoadAirFlowRateRatio( 1.0 ), CoolingSAFMethod( 0 ), HeatingSAFMethod( 0 ), NoCoolHeatSAFMethod( 0 ), diff --git a/src/EnergyPlus/ReportSizingManager.cc b/src/EnergyPlus/ReportSizingManager.cc index 7723c2d1d20..a5aeb6998e8 100644 --- a/src/EnergyPlus/ReportSizingManager.cc +++ b/src/EnergyPlus/ReportSizingManager.cc @@ -586,6 +586,7 @@ namespace ReportSizingManager { AutosizeDes = max( FinalZoneSizing( CurZoneEqNum ).DesCoolVolFlow, FinalZoneSizing( CurZoneEqNum ).DesHeatVolFlow ); } } + if ( DataFractionUsedForSizing > 0.0 ) AutosizeDes = AutosizeDes * DataFractionUsedForSizing; } } } else if ( SizingType == CoolingAirflowSizing ) { @@ -1502,6 +1503,7 @@ namespace ReportSizingManager { } else { AutosizeDes = FinalSysSizing( CurSysNum ).DesMainVolFlow; } + if ( DataFractionUsedForSizing > 0.0 ) AutosizeDes = AutosizeDes * DataFractionUsedForSizing; } } else if ( SizingType == CoolingWaterflowSizing ) { if ( CurOASysNum > 0 ) { diff --git a/src/EnergyPlus/VariableSpeedCoils.cc b/src/EnergyPlus/VariableSpeedCoils.cc index 8cbf1e4b2ee..c9f7ba06b63 100644 --- a/src/EnergyPlus/VariableSpeedCoils.cc +++ b/src/EnergyPlus/VariableSpeedCoils.cc @@ -69,6 +69,7 @@ #include #include #include +#include #include #include #include @@ -302,6 +303,7 @@ namespace VariableSpeedCoils { CompanionCoolingCoilNum( 0 ), CompanionHeatingCoilNum( 0 ), FanDelayTime( 0.0 ), + MSHPDesignSpecIndex( 0 ), MSErrIndex( MaxSpedLevels, 0 ), MSRatedPercentTotCap( MaxSpedLevels, 0.0 ), MSRatedTotCap( MaxSpedLevels, 0.0 ), @@ -3068,6 +3070,7 @@ namespace VariableSpeedCoils { using FluidProperties::GetDensityGlycol; using FluidProperties::GetSpecificHeatGlycol; using CurveManager::CurveValue; + using HVACUnitarySystem::DesignSpecMSHP; // Locals Real64 QLoadTotal; // placeholder for calculating SHR @@ -3544,9 +3547,33 @@ namespace VariableSpeedCoils { } else { rhoA = PsyRhoAirFnPbTdbW( OutBaroPress, RatedInletAirTemp, RatedInletAirHumRat, RoutineName ); //HPWH, the mass flow rate will be updated by a revised entering air density + + if ( VarSpeedCoil( DXCoilNum ).MSHPDesignSpecIndex > 0 && allocated( HVACUnitarySystem::DesignSpecMSHP ) ) { + if ( VarSpeedCoil( DXCoilNum ).CoolHeatType == "COOLING" ) { + if ( HVACUnitarySystem::DesignSpecMSHP( VarSpeedCoil( DXCoilNum ).MSHPDesignSpecIndex ).NumOfSpeedCooling != VarSpeedCoil( DXCoilNum ).NumOfSpeeds ) { + ShowFatalError( "COIL:" + VarSpeedCoil( DXCoilNum ).CoolHeatType + CurrentObjSubfix + " = " + VarSpeedCoil( DXCoilNum ).Name + " number of speeds not equal to number of speed specified in UnitarySystemPerformance:Multispeed object." ); + } + } else { + if ( HVACUnitarySystem::DesignSpecMSHP( VarSpeedCoil( DXCoilNum ).MSHPDesignSpecIndex ).NumOfSpeedHeating != VarSpeedCoil( DXCoilNum ).NumOfSpeeds ) { + ShowFatalError( "COIL:" + VarSpeedCoil( DXCoilNum ).CoolHeatType + CurrentObjSubfix + " = " + VarSpeedCoil( DXCoilNum ).Name + " number of speeds not equal to number of speed specified in UnitarySystemPerformance:Multispeed object." ); + } + } + } + for ( Mode = VarSpeedCoil( DXCoilNum ).NumOfSpeeds; Mode >= 1; --Mode ) { - VarSpeedCoil( DXCoilNum ).MSRatedTotCap( Mode ) = VarSpeedCoil( DXCoilNum ).MSRatedTotCap( UpperSpeed ) * VarSpeedCoil( DXCoilNum ).MSRatedPercentTotCap( Mode ); - VarSpeedCoil( DXCoilNum ).MSRatedAirVolFlowRate( Mode ) = VarSpeedCoil( DXCoilNum ).MSRatedTotCap( Mode ) * VarSpeedCoil( DXCoilNum ).MSRatedAirVolFlowPerRatedTotCap( Mode ); + + if ( VarSpeedCoil( DXCoilNum ).MSHPDesignSpecIndex > 0 && VarSpeedCoil( DXCoilNum ).CoolHeatType != "WATERHEATING" ) { + if ( VarSpeedCoil( DXCoilNum ).CoolHeatType == "COOLING" ) { + VarSpeedCoil( DXCoilNum ).MSRatedAirVolFlowRate( Mode ) = VarSpeedCoil( DXCoilNum ).RatedAirVolFlowRate * HVACUnitarySystem::DesignSpecMSHP( VarSpeedCoil( DXCoilNum ).MSHPDesignSpecIndex ).CoolingVolFlowRatio( Mode ); + } else { + VarSpeedCoil( DXCoilNum ).MSRatedAirVolFlowRate( Mode ) = VarSpeedCoil( DXCoilNum ).RatedAirVolFlowRate * HVACUnitarySystem::DesignSpecMSHP( VarSpeedCoil( DXCoilNum ).MSHPDesignSpecIndex ).HeatingVolFlowRatio( Mode ); + } + VarSpeedCoil( DXCoilNum ).MSRatedTotCap( Mode ) = VarSpeedCoil( DXCoilNum ).MSRatedAirVolFlowRate( Mode ) / VarSpeedCoil( DXCoilNum ).MSRatedAirVolFlowPerRatedTotCap( Mode ); + } else { + VarSpeedCoil( DXCoilNum ).MSRatedTotCap( Mode ) = VarSpeedCoil( DXCoilNum ).MSRatedTotCap( UpperSpeed ) * VarSpeedCoil( DXCoilNum ).MSRatedPercentTotCap( Mode ); + VarSpeedCoil( DXCoilNum ).MSRatedAirVolFlowRate( Mode ) = VarSpeedCoil( DXCoilNum ).MSRatedTotCap( Mode ) * VarSpeedCoil( DXCoilNum ).MSRatedAirVolFlowPerRatedTotCap( Mode ); + } + VarSpeedCoil( DXCoilNum ).MSRatedAirMassFlowRate( Mode ) = VarSpeedCoil( DXCoilNum ).MSRatedAirVolFlowRate( Mode ) * rhoA; // EVAPORATIVE PRECOOLING CONDENSER AIR FLOW RATE VarSpeedCoil( DXCoilNum ).EvapCondAirFlow( Mode ) = VarSpeedCoil( DXCoilNum ).MSRatedTotCap( Mode ) * VarSpeedCoil( DXCoilNum ).MSRatedEvapCondVolFlowPerRatedTotCap( Mode ); @@ -5776,6 +5803,46 @@ namespace VariableSpeedCoils { } + int + GetVSCoilCapFTCurveIndex( + int const & CoilIndex, // must match coil names for the coil type + bool & ErrorsFound // set to true if problem + ) + { + + // FUNCTION INFORMATION: + // AUTHOR Richard Raustad + // DATE WRITTEN 7/2017 + + // PURPOSE OF THIS FUNCTION: + // This function looks up the given coil and returns CapFT curve index. If + // incorrect coil index is given, ErrorsFound is returned as true and value is returned + // as zero. + + // Using/Aliasing + using InputProcessor::FindItemInList; + + // Return value + int CapFTIndex; // returned CapFT curve index of matched coil + + // Obtains and Allocates WatertoAirHP related parameters from input file + if ( GetCoilsInputFlag ) { //First time subroutine has been entered + GetVarSpeedCoilInput(); + GetCoilsInputFlag = false; + } + + if ( CoilIndex == 0 ) { + ShowSevereError( "GetVSCoilCapFTCurveIndex: Could not find Coil" ); + ErrorsFound = true; + CapFTIndex = 0; + } else { + CapFTIndex = VarSpeedCoil( CoilIndex ).MSCCapFTemp( VarSpeedCoil( CoilIndex ).NumOfSpeeds ); + } + + return CapFTIndex; + + } + int GetCoilInletNodeVariableSpeed( std::string const & CoilType, // must match coil types in this module @@ -6014,7 +6081,8 @@ namespace VariableSpeedCoils { int const WSHPNum, // Number of OA Controller bool & ErrorsFound, // Set to true if certain errors found Optional_int CompanionCoolingCoilNum, // Index to cooling coil for heating coil = SimpleWSHPNum - Optional_int CompanionHeatingCoilNum // Index to heating coil for cooling coil = SimpleWSHPNum + Optional_int CompanionHeatingCoilNum, // Index to heating coil for cooling coil = SimpleWSHPNum + Optional_int MSHPDesignSpecIndex // index to UnitarySystemPerformance:Multispeed object ) { // SUBROUTINE INFORMATION: @@ -6058,6 +6126,10 @@ namespace VariableSpeedCoils { VarSpeedCoil( CompanionHeatingCoilNum ).CompanionCoolingCoilNum = WSHPNum; } + if ( present( MSHPDesignSpecIndex ) ) { + VarSpeedCoil( WSHPNum ).MSHPDesignSpecIndex = MSHPDesignSpecIndex; + } + } void diff --git a/src/EnergyPlus/VariableSpeedCoils.hh b/src/EnergyPlus/VariableSpeedCoils.hh index 2aa608eaa34..7d152d1cdba 100644 --- a/src/EnergyPlus/VariableSpeedCoils.hh +++ b/src/EnergyPlus/VariableSpeedCoils.hh @@ -228,6 +228,7 @@ namespace VariableSpeedCoils { int CompanionHeatingCoilNum; // Cooling coil companion heating coil index Real64 FanDelayTime; // Fan delay time, time delay for the HP's fan to // beginning for multispeed coil type + int MSHPDesignSpecIndex; // index to UnitarySystemPerformance:Multispeed object Array1D_int MSErrIndex; // index flag for num speeds/recurring messages Array1D< Real64 > MSRatedPercentTotCap; // Percentage to the total cooling capacity for MS heat pump at the highest speed [dimensionless] Array1D< Real64 > MSRatedTotCap; // Rated cooling capacity for MS heat pump [W] @@ -486,6 +487,12 @@ namespace VariableSpeedCoils { bool & ErrorsFound // set to true if problem ); + int + GetVSCoilCapFTCurveIndex( + int const & CoilIndex, // must match coil names for the coil type + bool & ErrorsFound // set to true if problem + ); + Real64 GetVSCoilMinOATCompressor( std::string const & CoilName, // must match coil names for the coil type @@ -503,7 +510,8 @@ namespace VariableSpeedCoils { int const WSHPNum, // Number of OA Controller bool & ErrorsFound, // Set to true if certain errors found Optional_int CompanionCoolingCoilNum = _, // Index to cooling coil for heating coil = SimpleWSHPNum - Optional_int CompanionHeatingCoilNum = _ // Index to heating coil for cooling coil = SimpleWSHPNum + Optional_int CompanionHeatingCoilNum = _, // Index to heating coil for cooling coil = SimpleWSHPNum + Optional_int MSHPDesignSpecIndex = _ // index to UnitarySystemPerformance:Multispeed object ); void diff --git a/src/ExpandObjects/epfilter.f90 b/src/ExpandObjects/epfilter.f90 index f3f797a8a49..6a765821bf4 100644 --- a/src/ExpandObjects/epfilter.f90 +++ b/src/ExpandObjects/epfilter.f90 @@ -16065,6 +16065,7 @@ SUBROUTINE CreateNewUnitary CALL AddToObjFld('Number of Speeds for Heating', base + ussHeatCoilNumSpeedOff,'') CALL AddToObjFld('Number of Speeds for Cooling', base + ussCoolCoilNumSpeedOff,'') CALL AddToObjStr('Single Mode Operation', 'No') + CALL AddToObjStr('No Load Supply Air Flow Rate Ratio', '') CALL AddToObjStr('Heating Speed 1 Supply Air Flow Ratio', 'autosize') CALL AddToObjStr('Cooling Speed 1 Supply Air Flow Ratio', 'autosize') CALL AddToObjStr('Heating Speed 2 Supply Air Flow Ratio', 'autosize') @@ -16072,7 +16073,19 @@ SUBROUTINE CreateNewUnitary CALL AddToObjStr('Heating Speed 3 Supply Air Flow Ratio', 'autosize') CALL AddToObjStr('Cooling Speed 3 Supply Air Flow Ratio', 'autosize') CALL AddToObjStr('Heating Speed 4 Supply Air Flow Ratio', 'autosize') - CALL AddToObjStr('Cooling Speed 4 Supply Air Flow Ratio', 'autosize',.TRUE.) + CALL AddToObjStr('Cooling Speed 4 Supply Air Flow Ratio', 'autosize') + CALL AddToObjStr('Heating Speed 5 Supply Air Flow Ratio', 'autosize') + CALL AddToObjStr('Cooling Speed 5 Supply Air Flow Ratio', 'autosize') + CALL AddToObjStr('Heating Speed 6 Supply Air Flow Ratio', 'autosize') + CALL AddToObjStr('Cooling Speed 6 Supply Air Flow Ratio', 'autosize') + CALL AddToObjStr('Heating Speed 7 Supply Air Flow Ratio', 'autosize') + CALL AddToObjStr('Cooling Speed 7 Supply Air Flow Ratio', 'autosize') + CALL AddToObjStr('Heating Speed 8 Supply Air Flow Ratio', 'autosize') + CALL AddToObjStr('Cooling Speed 8 Supply Air Flow Ratio', 'autosize') + CALL AddToObjStr('Heating Speed 9 Supply Air Flow Ratio', 'autosize') + CALL AddToObjStr('Cooling Speed 9 Supply Air Flow Ratio', 'autosize') + CALL AddToObjStr('Heating Speed 10 Supply Air Flow Ratio', 'autosize') + CALL AddToObjStr('Cooling Speed 10 Supply Air Flow Ratio', 'autosize',.TRUE.) END IF ! add new schedule if needed (from Supply Fan Operating Mode Schedule, above) diff --git a/testfiles/MultiSpeedHeatPump_MultiSolvers.idf b/testfiles/MultiSpeedHeatPump_MultiSolvers.idf index 03e3da1f713..62e59a745b7 100644 --- a/testfiles/MultiSpeedHeatPump_MultiSolvers.idf +++ b/testfiles/MultiSpeedHeatPump_MultiSolvers.idf @@ -1676,6 +1676,7 @@ Heating Coil Air Inlet Node, !- Air Outlet Node Name Outdoor Condenser Air Node, !- Condenser Air Inlet Node Name AirCooled, !- Condenser Type + , !- Minimum Outdoor Dry-Bulb Temperature for Compressor Operation , !- Supply Water Storage Tank Name , !- Condensate Collection Water Storage Tank Name No, !- Apply Part Load Fraction to Speeds Greater than 1 diff --git a/testfiles/UnitarySystem_MultiSpeedCoils_SingleMode.idf b/testfiles/UnitarySystem_MultiSpeedCoils_SingleMode.idf index 2dcac0167ed..881f0d076a0 100644 --- a/testfiles/UnitarySystem_MultiSpeedCoils_SingleMode.idf +++ b/testfiles/UnitarySystem_MultiSpeedCoils_SingleMode.idf @@ -1528,6 +1528,7 @@ 4, !- Number of Speeds for Heating 4, !- Number of Speeds for Cooling Yes, !- Single Mode Operation + , !- No Load Supply Air Flow Rate Ratio 0.24, !- Heating Speed 1 Supply Air Flow Ratio 0.24, !- Cooling Speed 1 Supply Air Flow Ratio 0.47, !- Heating Speed 2 Supply Air Flow Ratio diff --git a/testfiles/UnitarySystem_WaterCoils_wMultiSpeedFan.idf b/testfiles/UnitarySystem_WaterCoils_wMultiSpeedFan.idf index 7bfac699a39..addddc18ede 100644 --- a/testfiles/UnitarySystem_WaterCoils_wMultiSpeedFan.idf +++ b/testfiles/UnitarySystem_WaterCoils_wMultiSpeedFan.idf @@ -1567,6 +1567,7 @@ 4, !- Number of Speeds for Heating 4, !- Number of Speeds for Cooling No, !- Single Mode Operation + , !- No Load Supply Air Flow Rate Ratio 0.25, !- Heating Speed 1 Supply Air Flow Ratio 0.25, !- Cooling Speed 1 Supply Air Flow Ratio 0.50, !- Heating Speed 2 Supply Air Flow Ratio diff --git a/tst/EnergyPlus/unit/HVACUnitarySystem.unit.cc b/tst/EnergyPlus/unit/HVACUnitarySystem.unit.cc index 0f77508fad8..19113b1ab6a 100644 --- a/tst/EnergyPlus/unit/HVACUnitarySystem.unit.cc +++ b/tst/EnergyPlus/unit/HVACUnitarySystem.unit.cc @@ -180,15 +180,32 @@ class ZoneUnitarySystemTest: public EnergyPlusFixture { ZoneEquipConfig( 1 ).ExhaustNode( 1 ) = 1; ZoneEquipConfig( 1 ).EquipListIndex = 1; -// UnitarySystem.allocate( 1 ); + CurSysNum = 0; + CurZoneEqNum = 1; + FinalZoneSizing.allocate( 1 ); + FinalZoneSizing( CurZoneEqNum ).DesCoolVolFlow = 1.5; + FinalZoneSizing( CurZoneEqNum ).DesHeatVolFlow = 1.2; + FinalZoneSizing( CurZoneEqNum ).DesCoolCoilInTemp = 25.0; + FinalZoneSizing( CurZoneEqNum ).DesCoolCoilInHumRat = 0.009; + FinalZoneSizing( CurZoneEqNum ).CoolDesTemp = 15.0; + FinalZoneSizing( CurZoneEqNum ).CoolDesHumRat = 0.006; + + FinalZoneSizing( CurZoneEqNum ).DesHeatCoilInTemp = 20.0; + FinalZoneSizing( CurZoneEqNum ).HeatDesTemp = 30.0; + FinalZoneSizing( CurZoneEqNum ).HeatDesHumRat = 0.007; + FinalZoneSizing( CurZoneEqNum ).DesHeatMassFlow = FinalZoneSizing( CurZoneEqNum ).DesHeatVolFlow * StdRhoAir; + + FinalZoneSizing( CurZoneEqNum ).TimeStepNumAtCoolMax = 1; + FinalZoneSizing( CurZoneEqNum ).CoolDDNum = 1; + DesDayWeath.allocate( 1 ); + DesDayWeath( 1 ).Temp.allocate( 1 ); + DesDayWeath( 1 ).Temp( 1 ) = 35.0; ZoneEqSizing.allocate( 1 ); - CurZoneEqNum = 1; ZoneEqSizing( CurZoneEqNum ).SizingMethod.allocate( 25 ); ZoneSizingRunDone = true; - CurSysNum = 0; // set up plant loop TotNumLoops = 2; PlantLoop.allocate( TotNumLoops ); @@ -228,6 +245,538 @@ class ZoneUnitarySystemTest: public EnergyPlusFixture { } }; +TEST_F( ZoneUnitarySystemTest, UnitarySystem_MultispeedPerformance ) { + + std::string const idf_objects = delimited_string( { + + "AirLoopHVAC:UnitarySystem,", + " Unitary System Model, !- Name", + " Setpoint, !- Control Type", + " East Zone, !- Controlling Zone or Thermostat Location", + " None, !- Dehumidification Control Type", + " AlwaysOne, !- Availability Schedule Name", + " Zone Exhaust Node, !- Air Inlet Node Name", + " Zone 2 Inlet Node, !- Air Outlet Node Name", + " Fan:OnOff, !- Supply Fan Object Type", + " Supply Fan 1, !- Supply Fan Name", + " BlowThrough, !- Fan Placement", + " AlwaysOne, !- Supply Air Fan Operating Mode Schedule Name", + " Coil:Heating:DX:VariableSpeed, !- Heating Coil Object Type", + " DX Heating Coil, !- Heating Coil Name", + " , !- DX Heating Coil Sizing Ratio", + " Coil:Cooling:DX:VariableSpeed, !- Cooling Coil Object Type", + " DX Cooling Coil, !- Cooling Coil Name", + " , !- Use DOAS DX Cooling Coil", + " 15.0, !- DOAS DX Cooling Coil Leaving Minimum Air Temperature{ C }", + " , !- Latent Load Control", + " , !- Supplemental Heating Coil Object Type", + " , !- Supplemental Heating Coil Name", + " SupplyAirFlowRate, !- Supply Air Flow Rate Method During Cooling Operation", + " autosize, !- Supply Air Flow Rate During Cooling Operation{ m3/s }", + " , !- Supply Air Flow Rate Per Floor Area During Cooling Operation{ m3/s-m2 }", + " , !- Fraction of Autosized Design Cooling Supply Air Flow Rate", + " , !- Design Supply Air Flow Rate Per Unit of Capacity During Cooling Operation{ m3/s-W }", + " SupplyAirFlowRate, !- Supply air Flow Rate Method During Heating Operation", + " autosize, !- Supply Air Flow Rate During Heating Operation{ m3/s }", + " , !- Supply Air Flow Rate Per Floor Area during Heating Operation{ m3/s-m2 }", + " , !- Fraction of Autosized Design Heating Supply Air Flow Rate", + " , !- Design Supply Air Flow Rate Per Unit of Capacity During Heating Operation{ m3/s-W }", + " SupplyAirFlowRate, !- Supply Air Flow Rate Method When No Cooling or Heating is Required", + " autosize, !- Supply Air Flow Rate When No Cooling or Heating is Required{ m3/s }", + " , !- Supply Air Flow Rate Per Floor Area When No Cooling or Heating is Required{ m3/s-m2 }", + " , !- Fraction of Autosized Design Cooling Supply Air Flow Rate", + " , !- Fraction of Autosized Design Heating Supply Air Flow Rate", + " , !- Design Supply Air Flow Rate Per Unit of Capacity During Cooling Operation{ m3/s-W }", + " , !- Design Supply Air Flow Rate Per Unit of Capacity During Heating Operation{ m3/s-W }", + " 35.0, !- Maximum Supply Air Temperature{ C }", + " , !- Maximum Outdoor Dry-Bulb Temperature for Supplemental Heater Operation {C}", + " , !- Outdoor Dry-Bulb Temperature Sensor Node Name", + " , !- Maximum Cycling Rate", + " , !- Heat Pump Time Constant", + " , !- Fraction of On-Cycle Power Use", + " , !- Heat Pump Fan Delay Time", + " , !- Ancilliary On-Cycle Electric Power", + " , !- Ancilliary Off-Cycle Electric Power", + " , !- Design Heat Recovery Water Flow Rate", + " , !- Maximum Temperature for Heat Recovery", + " , !- Heat Recovery Water Inlet Node Name", + " , !- Heat Recovery Water Outlet Node Name", + " UnitarySystemPerformance:Multispeed, !- Design Specification Multispeed Object Type", + " DX Cool MultiSpd Unitary System MultiSpeed Performance; !- Design Specification Multispeed Object Name", + + "UnitarySystemPerformance:Multispeed,", + " DX Cool MultiSpd Unitary System MultiSpeed Performance, !- Name", + " 10, !- Number of Speeds for Heating", + " 10, !- Number of Speeds for Cooling", + " No, !- Single Mode Operation", + " 0.05, !- No Load Supply Air Flow Rate Ratio", + " 0.101, !- Heating Speed 1 Supply Air Flow Ratio", + " 0.1, !- Cooling Speed 1 Supply Air Flow Ratio", + " 0.201, !- Heating Speed 2 Supply Air Flow Ratio", + " 0.2, !- Cooling Speed 2 Supply Air Flow Ratio", + " 0.301, !- Heating Speed 3 Supply Air Flow Ratio", + " 0.3, !- Cooling Speed 3 Supply Air Flow Ratio", + " 0.401, !- Heating Speed 4 Supply Air Flow Ratio", + " 0.4, !- Cooling Speed 4 Supply Air Flow Ratio", + " 0.501, !- Heating Speed 5 Supply Air Flow Ratio", + " 0.5, !- Cooling Speed 5 Supply Air Flow Ratio", + " 0.601, !- Heating Speed 6 Supply Air Flow Ratio", + " 0.6, !- Cooling Speed 6 Supply Air Flow Ratio", + " 0.701, !- Heating Speed 7 Supply Air Flow Ratio", + " 0.7, !- Cooling Speed 7 Supply Air Flow Ratio", + " 0.801, !- Heating Speed 8 Supply Air Flow Ratio", + " 0.8, !- Cooling Speed 8 Supply Air Flow Ratio", + " 0.901, !- Heating Speed 9 Supply Air Flow Ratio", + " 0.9, !- Cooling Speed 9 Supply Air Flow Ratio", + " 1.0, !- Heating Speed 10 Supply Air Flow Ratio", + " 1.0; !- Cooling Speed 10 Supply Air Flow Ratio", + + "Fan:OnOff,", + " Supply Fan 1, !- Name", + " AlwaysOne, !- Availability Schedule Name", + " 0.7, !- Fan Total Efficiency", + " 600.0, !- Pressure Rise{ Pa }", + " autosize, !- Maximum Flow Rate{ m3 / s }", + " 0.9, !- Motor Efficiency", + " 1.0, !- Motor In Airstream Fraction", + " Zone Exhaust Node, !- Air Inlet Node Name", + " Cooling Coil Air Inlet Node; !- Air Outlet Node Name", + + "Coil:Cooling:DX:VariableSpeed,", + " DX Cooling Coil, !- Name", + " Cooling Coil Air Inlet Node, !- Air Inlet Node Name", + " Heating Coil Air Inlet Node, !- Air Outlet Node Name", + " 10.0, !- Number of Speeds{ dimensionless }", + " 10.0, !- Nominal Speed Level{ dimensionless }", + " autosize, !- Gross Rated Total Cooling Capacity At Selected Nominal Speed Level{ w }", + " autosize, !- Rated Air Flow Rate At Selected Nominal Speed Level{ m3 / s }", + " 0.0, !- Nominal Time for Condensate to Begin Leaving the Coil{ s }", + " 0.0, !- Initial Moisture Evaporation Rate Divided by Steady - State AC Latent Capacity{ dimensionless }", + " Quadratic, !- Energy Part Load Fraction Curve Name", + " , !- Condenser Air Inlet Node Name", + " AirCooled, !- Condenser Type", + " , !- Evaporative Condenser Pump Rated Power Consumption{ W }", + " 200.0, !- Crankcase Heater Capacity{ W }", + " 10.0, !- Maximum Outdoor Dry - Bulb Temperature for Crankcase Heater Operation{ C }", + " , !- Minimum Outdoor Dry-Bulb Temperature for Compressor Operation {C}", + " , !- Supply Water Storage Tank Name", + " , !- Condensate Collection Water Storage Tank Name", + " , !- Basin Heater Capacity{ W / K }", + " , !- Basin Heater Setpoint Temperature{ C }", + " , !- Basin Heater Operating Schedule Name", + " 1524.1, !- Speed 1 Reference Unit Gross Rated Total Cooling Capacity{ w }", + " 0.75, !- Speed 1 Reference Unit Gross Rated Sensible Heat Ratio{ dimensionless }", + " 4.0, !- Speed 1 Reference Unit Gross Rated Cooling COP{ dimensionless }", + " 0.1359072, !- Speed 1 Reference Unit Rated Air Flow Rate{ m3 / s }", + " 0.26, !- Speed 1 Reference Unit Rated Condenser Air Flow Rate{ m3 / s }", + " , !- Speed 1 Reference Unit Rated Pad Effectiveness of Evap Precooling{ dimensionless }", + " Biquadratic, !- Speed 1 Total Cooling Capacity Function of Temperature Curve Name", + " Quadratic, !- Speed 1 Total Cooling Capacity Function of Air Flow Fraction Curve Name", + " Biquadratic, !- Speed 1 Energy Input Ratio Function of Temperature Curve Name", + " Quadratic, !- Speed 1 Energy Input Ratio Function of Air Flow Fraction Curve Name", + " 1877.9, !- Speed 2 Reference Unit Gross Rated Total Cooling Capacity{ w }", + " 0.75, !- Speed 2 Reference Unit Gross Rated Sensible Heat Ratio{ dimensionless }", + " 4.0, !- Speed 2 Reference Unit Gross Rated Cooling COP{ dimensionless }", + " 0.151008, !- Speed 2 Reference Unit Rated Air Flow Rate{ m3 / s }", + " 0.30, !- Speed 2 Reference Unit Rated Condenser Air Flow Rate{ m3 / s }", + " , !- Speed 2 Reference Unit Rated Pad Effectiveness of Evap Precooling{ dimensionless }", + " Biquadratic, !- Speed 2 Total Cooling Capacity Function of Temperature Curve Name", + " Quadratic, !- Speed 2 Total Cooling Capacity Function of Air Flow Fraction Curve Name", + " Biquadratic, !- Speed 2 Energy Input Ratio Function of Temperature Curve Name", + " Quadratic, !- Speed 2 Energy Input Ratio Function of Air Flow Fraction Curve Name", + " 2226.6, !- Speed 3 Reference Unit Gross Rated Total Cooling Capacity{ w }", + " 0.75, !- Speed 3 Reference Unit Gross Rated Sensible Heat Ratio{ dimensionless }", + " 4.0, !- Speed 3 Reference Unit Gross Rated Cooling COP{ dimensionless }", + " 0.1661088, !- Speed 3 Reference Unit Rated Air Flow Rate{ m3 / s }", + " 0.33, !- Speed 3 Reference Unit Rated Condenser Air Flow Rate{ m3 / s }", + " , !- Speed 3 Reference Unit Rated Pad Effectiveness of Evap Precooling{ dimensionless }", + " Biquadratic, !- Speed 3 Total Cooling Capacity Function of Temperature Curve Name", + " Quadratic, !- Speed 3 Total Cooling Capacity Function of Air Flow Fraction Curve Name", + " Biquadratic, !- Speed 3 Energy Input Ratio Function of Temperature Curve Name", + " Quadratic, !- Speed 3 Energy Input Ratio Function of Air Flow Fraction Curve Name", + " 2911.3, !- Speed 4 Reference Unit Gross Rated Total Cooling Capacity{ w }", + " 0.75, !- Speed 4 Reference Unit Gross Rated Sensible Heat Ratio{ dimensionless }", + " 4.0, !- Speed 4 Reference Unit Gross Rated Cooling COP{ dimensionless }", + " 0.1963104, !- Speed 4 Reference Unit Rated Air Flow Rate{ m3 / s }", + " 0.38, !- Speed 4 Reference Unit Rated Condenser Air Flow Rate{ m3 / s }", + " , !- Speed 4 Reference Unit Rated Pad Effectiveness of Evap Precooling{ dimensionless }", + " Biquadratic, !- Speed 4 Total Cooling Capacity Function of Temperature Curve Name", + " Quadratic, !- Speed 4 Total Cooling Capacity Function of Air Flow Fraction Curve Name", + " Biquadratic, !- Speed 4 Energy Input Ratio Function of Temperature Curve Name", + " Quadratic, !- Speed 4 Energy Input Ratio Function of Air Flow Fraction Curve Name", + " 3581.7, !- Speed 5 Reference Unit Gross Rated Total Cooling Capacity{ w }", + " 0.75, !- Speed 5 Reference Unit Gross Rated Sensible Heat Ratio{ dimensionless }", + " 4.0, !- Speed 5 Reference Unit Gross Rated Cooling COP{ dimensionless }", + " 0.226512, !- Speed 5 Reference Unit Rated Air Flow Rate{ m3 / s }", + " 0.44, !- Speed 5 Reference Unit Rated Condenser Air Flow Rate{ m3 / s }", + " , !- Speed 5 Reference Unit Rated Pad Effectiveness of Evap Precooling{ dimensionless }", + " Biquadratic, !- Speed 5 Total Cooling Capacity Function of Temperature Curve Name", + " Quadratic, !- Speed 5 Total Cooling Capacity Function of Air Flow Fraction Curve Name", + " Biquadratic, !- Speed 5 Energy Input Ratio Function of Temperature Curve Name", + " Quadratic, !- Speed 5 Energy Input Ratio Function of Air Flow Fraction Curve Name", + " 4239.5, !- Speed 6 Reference Unit Gross Rated Total Cooling Capacity{ w }", + " 0.75, !- Speed 6 Reference Unit Gross Rated Sensible Heat Ratio{ dimensionless }", + " 4.0, !- Speed 6 Reference Unit Gross Rated Cooling COP{ dimensionless }", + " 0.2567136, !- Speed 6 Reference Unit Rated Air Flow Rate{ m3 / s }", + " 0.50, !- Speed 6 Reference Unit Condenser Air Flow Rate{ m3 / s }", + " , !- Speed 6 Reference Unit Rated Pad Effectiveness of Evap Precooling{ dimensionless }", + " Biquadratic, !- Speed 6 Total Cooling Capacity Function of Temperature Curve Name", + " Quadratic, !- Speed 6 Total Cooling Capacity Function of Air Flow Fraction Curve Name", + " Biquadratic, !- Speed 6 Energy Input Ratio Function of Temperature Curve Name", + " Quadratic, !- Speed 6 Energy Input Ratio Function of Air Flow Fraction Curve Name", + " 4885.7, !- Speed 7 Reference Unit Gross Rated Total Cooling Capacity{ w }", + " 0.75, !- Speed 7 Reference Unit Gross Rated Sensible Heat Ratio{ dimensionless }", + " 4.0, !- Speed 7 Reference Unit Gross Rated Cooling COP{ dimensionless }", + " 0.2869152, !- Speed 7 Reference Unit Rated Air Flow Rate{ m3 / s }", + " 0.57, !- Speed 7 Reference Unit Condenser Flow Rate{ m3 / s }", + " , !- Speed 7 Reference Unit Rated Pad Effectiveness of Evap Precooling{ dimensionless }", + " Biquadratic, !- Speed 7 Total Cooling Capacity Function of Temperature Curve Name", + " Quadratic, !- Speed 7 Total Cooling Capacity Function of Air Flow Fraction Curve Name", + " Biquadratic, !- Speed 7 Energy Input Ratio Function of Temperature Curve Name", + " Quadratic, !- Speed 7 Energy Input Ratio Function of Air Flow Fraction Curve Name", + " 5520.7, !- Speed 8 Reference Unit Gross Rated Total Cooling Capacity{ w }", + " 0.75, !- Speed 8 Reference Unit Gross Rated Sensible Heat Ratio{ dimensionless }", + " 4.0, !- Speed 8 Reference Unit Gross Rated Cooling COP{ dimensionless }", + " 0.3171168, !- Speed 8 Reference Unit Rated Air Flow Rate{ m3 / s }", + " 0.63, !- Speed 8 Reference Unit Condenser Air Flow Rate{ m3 / s }", + " , !- Speed 8 Reference Unit Rated Pad Effectiveness of Evap Precooling{ dimensionless }", + " Biquadratic, !- Speed 8 Total Cooling Capacity Function of Temperature Curve Name", + " Quadratic, !- Speed 8 Total Cooling Capacity Function of Air Flow Fraction Curve Name", + " Biquadratic, !- Speed 8 Energy Input Ratio Function of Temperature Curve Name", + " Quadratic, !- Speed 8 Energy Input Ratio Function of Air Flow Fraction Curve Name", + " 6144.8, !- Speed 9 Reference Unit Gross Rated Total Cooling Capacity{ w }", + " 0.75, !- Speed 9 Reference Unit Gross Rated Sensible Heat Ratio{ dimensionless }", + " 4.0, !- Speed 9 Reference Unit Gross Rated Cooling COP{ dimensionless }", + " 0.3473184, !- Speed 9 Reference Unit Rated Air Flow Rate{ m3 / s }", + " 0.69, !- Speed 9 Reference Unit Condenser Air Flow Rate{ m3 / s }", + " , !- Speed 9 Reference Unit Rated Pad Effectiveness of Evap Precooling{ dimensionless }", + " Biquadratic, !- Speed 9 Total Cooling Capacity Function of Temperature Curve Name", + " Quadratic, !- Speed 9 Total Cooling Capacity Function of Air Flow Fraction Curve Name", + " Biquadratic, !- Speed 9 Energy Input Ratio Function of Temperature Curve Name", + " Quadratic, !- Speed 9 Energy Input Ratio Function of Air Flow Fraction Curve Name", + " 6758.0, !- Speed 10 Reference Unit Gross Rated Total Cooling Capacity{ w }", + " 0.75, !- Speed 10 Reference Unit Gross Rated Sensible Heat Ratio{ dimensionless }", + " 4.0, !- Speed 10 Reference Unit Gross Rated Cooling COP{ dimensionless }", + " 0.37752, !- Speed 10 Reference Unit Rated Air Flow Rate{ m3 / s }", + " 0.74, !- Speed 10 Reference Unit Condenser Air Flow Rate{ m3 / s }", + " , !- Speed 10 Reference Unit Rated Pad Effectiveness of Evap Precooling{ dimensionless }", + " Biquadratic, !- Speed 10 Total Cooling Capacity Function of Temperature Curve Name", + " Quadratic, !- Speed 10 Total Cooling Capacity Function of Air Flow Fraction Curve Name", + " Biquadratic, !- Speed 10 Energy Input Ratio Function of Temperature Curve Name", + " Quadratic; !- Speed 10 Energy Input Ratio Function of Air Flow Fraction Curve Name", + + "Coil:Heating:DX:VariableSpeed, ", + " DX Heating Coil, !- Name", + " Heating Coil Air Inlet Node, !- Indoor Air Inlet Node Name", + " Zone 2 Inlet Node, !- Indoor Air Outlet Node Name", + " 10.0, !- Number of Speeds {dimensionless}", + " 10.0, !- Nominal Speed Level {dimensionless}", + " autosize, !- Rated Heating Capacity At Selected Nominal Speed Level {w}", + " 1.7, !- Rated Air Flow Rate At Selected Nominal Speed Level {m3/s}", + " Quadratic, !- Energy Part Load Fraction Curve Name", + " , !- Defrost Energy Input Ratio Function of Temperature Curve Name", + " -5.0, !- Minimum Outdoor Dry-Bulb Temperature for Compressor Operation {C}", + " , !- Outdoor Dry-Bulb Temperature to Turn On Compressor {C}", + " 5.0, !- Maximum Outdoor Dry-Bulb Temperature for Defrost Operation {C}", + " 200.0, !- Crankcase Heater Capacity {W}", + " 10.0, !- Maximum Outdoor Dry-Bulb Temperature for Crankcase Heater Operation {C}", + " Resistive, !- Defrost Strategy", + " TIMED, !- Defrost Control", + " 0.166667, !- Defrost Time Period Fraction", + " 20000, !- Resistive Defrost Heater Capacity {W}", + " 1838.7, !- Speed 1 Reference Unit Gross Rated Heating Capacity {w}", + " 5.0, !- Speed 1 Reference Unit Gross Rated Heating COP {dimensionless}", + " 0.1661088, !- Speed 1 Reference Unit Rated Air Flow Rate {m3/s}", + " Biquadratic, !- Speed 1 Total Cooling Capacity Function of Temperature Curve Name", + " Quadratic, !- Speed 1 Total Cooling Capacity Function of Air Flow Fraction Curve Name", + " Biquadratic, !- Speed 1 Energy Input Ratio Function of Temperature Curve Name", + " Quadratic, !- Speed 1 Energy Input Ratio Function of Air Flow Fraction Curve Name", + " 2295.5, !- Speed 2 Reference Unit Gross Rated Heating Capacity {w}", + " 5.0, !- Speed 2 Reference Unit Gross Rated Heating COP {dimensionless}", + " 0.179322, !- Speed 2 Reference Unit Rated Air Flow Rate {m3/s}", + " Biquadratic, !- Speed 2 Total Cooling Capacity Function of Temperature Curve Name", + " Quadratic, !- Speed 2 Total Cooling Capacity Function of Air Flow Fraction Curve Name", + " Biquadratic, !- Speed 2 Energy Input Ratio Function of Temperature Curve Name", + " Quadratic, !- Speed 2 Energy Input Ratio Function of Air Flow Fraction Curve Name", + " 2751.3, !- Speed 3 Reference Unit Gross Rated Heating Capacity {w}", + " 5.0, !- Speed 3 Reference Unit Gross Rated Heating COP {dimensionless}", + " 0.1925352, !- Speed 3 Reference Unit Rated Air Flow Rate {m3/s}", + " Biquadratic, !- Speed 3 Total Cooling Capacity Function of Temperature Curve Name", + " Quadratic, !- Speed 3 Total Cooling Capacity Function of Air Flow Fraction Curve Name", + " Biquadratic, !- Speed 3 Energy Input Ratio Function of Temperature Curve Name", + " Quadratic, !- Speed 3 Energy Input Ratio Function of Air Flow Fraction Curve Name", + " 3659.6, !- Speed 4 Reference Unit Gross Rated Heating Capacity {w}", + " 5.0, !- Speed 4 Reference Unit Gross Rated Heating COP {dimensionless}", + " 0.2189616, !- Speed 4 Reference Unit Rated Air Flow Rate {m3/s}", + " Biquadratic, !- Speed 4 Total Cooling Capacity Function of Temperature Curve Name", + " Quadratic, !- Speed 4 Total Cooling Capacity Function of Air Flow Fraction Curve Name", + " Biquadratic, !- Speed 4 Energy Input Ratio Function of Temperature Curve Name", + " Quadratic, !- Speed 4 Energy Input Ratio Function of Air Flow Fraction Curve Name", + " 4563.7, !- Speed 5 Reference Unit Gross Rated Heating Capacity {w}", + " 5.0, !- Speed 5 Reference Unit Gross Rated Heating COP {dimensionless}", + " 0.245388, !- Speed 5 Reference Unit Rated Air Flow Rate {m3/s}", + " Biquadratic, !- Speed 5 Total Cooling Capacity Function of Temperature Curve Name", + " Quadratic, !- Speed 5 Total Cooling Capacity Function of Air Flow Fraction Curve Name", + " Biquadratic, !- Speed 5 Energy Input Ratio Function of Temperature Curve Name", + " Quadratic, !- Speed 5 Energy Input Ratio Function of Air Flow Fraction Curve Name", + " 5463.3, !- Speed 6 Reference Unit Gross Rated Heating Capacity {w}", + " 5.0, !- Speed 6 Reference Unit Gross Rated Heating COP {dimensionless}", + " 0.2718144, !- Speed 6 Reference Unit Rated Air Flow Rate {m3/s}", + " Biquadratic, !- Speed 6 Total Cooling Capacity Function of Temperature Curve Name", + " Quadratic, !- Speed 6 Total Cooling Capacity Function of Air Flow Fraction Curve Name", + " Biquadratic, !- Speed 6 Energy Input Ratio Function of Temperature Curve Name", + " Quadratic, !- Speed 6 Energy Input Ratio Function of Air Flow Fraction Curve Name", + " 6358.4, !- Speed 7 Reference Unit Gross Rated Heating Capacity {w}", + " 5.0, !- Speed 7 Reference Unit Gross Rated Heating COP {dimensionless}", + " 0.2982408, !- Speed 7 Reference Unit Rated Air Flow Rate {m3/s}", + " Biquadratic, !- Speed 7 Total Cooling Capacity Function of Temperature Curve Name", + " Quadratic, !- Speed 7 Total Cooling Capacity Function of Air Flow Fraction Curve Name", + " Biquadratic, !- Speed 7 Energy Input Ratio Function of Temperature Curve Name", + " Quadratic, !- Speed 7 Energy Input Ratio Function of Air Flow Fraction Curve Name", + " 7248.5, !- Speed 8 Reference Unit Gross Rated Heating Capacity {w}", + " 5.0, !- Speed 8 Reference Unit Gross Rated Heating COP {dimensionless}", + " 0.3246672, !- Speed 8 Reference Unit Rated Air Flow Rate {m3/s}", + " Biquadratic, !- Speed 8 Total Cooling Capacity Function of Temperature Curve Name", + " Quadratic, !- Speed 8 Total Cooling Capacity Function of Air Flow Fraction Curve Name", + " Biquadratic, !- Speed 8 Energy Input Ratio Function of Temperature Curve Name", + " Quadratic, !- Speed 8 Energy Input Ratio Function of Air Flow Fraction Curve Name", + " 8133.6, !- Speed 9 Reference Unit Gross Rated Heating Capacity {w}", + " 5.0, !- Speed 9 Reference Unit Gross Rated Heating COP {dimensionless}", + " 0.3510936, !- Speed 9 Reference Unit Rated Air Flow Rate {m3/s}", + " Biquadratic, !- Speed 9 Total Cooling Capacity Function of Temperature Curve Name", + " Quadratic, !- Speed 9 Total Cooling Capacity Function of Air Flow Fraction Curve Name", + " Biquadratic, !- Speed 9 Energy Input Ratio Function of Temperature Curve Name", + " Quadratic, !- Speed 9 Energy Input Ratio Function of Air Flow Fraction Curve Name", + " 9013.2, !- Speed 10 Reference Unit Gross Rated Heating Capacity {w}", + " 5.0, !- Speed 10 Reference Unit Gross Rated Heating COP {dimensionless}", + " 0.37752, !- Speed 10 Reference Unit Rated Air Flow Rate {m3/s}", + " Biquadratic, !- Speed 10 Total Cooling Capacity Function of Temperature Curve Name", + " Quadratic, !- Speed 10 Total Cooling Capacity Function of Air Flow Fraction Curve Name", + " Biquadratic, !- Speed 10 Energy Input Ratio Function of Temperature Curve Name", + " Quadratic; !- Speed 10 Energy Input Ratio Function of Air Flow Fraction Curve Name", + + "ScheduleTypeLimits,", + " Any Number; !- Name", + + "Schedule:Compact,", + " AlwaysOne, !- Name", + " Any Number, !- Schedule Type Limits Name", + " Through: 12/31, !- Field 1", + " For: AllDays, !- Field 2", + " Until: 24:00, 1.0; !- Field 3", + + "Schedule:Compact,", + " Always 16C, !- Name", + " Any Number, !- Schedule Type Limits Name", + " Through: 12/31, !- Field 1", + " For: AllDays, !- Field 2", + " Until: 24:00, 16.0; !- Field 3", + + "Schedule:Compact,", + " Always 18C, !- Name", + " Any Number, !- Schedule Type Limits Name", + " Through: 12/31, !- Field 1", + " For: AllDays, !- Field 2", + " Until: 24:00, 18.0; !- Field 3", + + "Schedule:Compact,", + " Always 20C, !- Name", + " Any Number, !- Schedule Type Limits Name", + " Through: 12/31, !- Field 1", + " For: AllDays, !- Field 2", + " Until: 24:00, 20.0; !- Field 3", + + "SetpointManager:Scheduled,", + " Cooling Coil Setpoint Manager, !- Name", + " Temperature, !- Control Variable", + " Always 20C, !- Schedule Name", + " Heating Coil Air Inlet Node; !- Setpoint Node or NodeList Name", + + "SetpointManager:Scheduled,", + " Heating Coil Setpoint Manager, !- Name", + " Temperature, !- Control Variable", + " Always 18C, !- Schedule Name", + " Zone 2 Inlet Node; !- Setpoint Node or NodeList Name", + + "Curve:Quadratic,", + " Quadratic, !- Name", + " 0.8, !- Coefficient1 Constant", + " 0.2, !- Coefficient2 x", + " 0.0, !- Coefficient3 x**2", + " 0.5, !- Minimum Value of x", + " 1.5; !- Maximum Value of x", + + "Curve:Biquadratic,", + " Biquadratic, !- Name", + " 0.942587793, !- Coefficient1 Constant", + " 0.009543347, !- Coefficient2 x", + " 0.000683770, !- Coefficient3 x**2", + " -0.011042676, !- Coefficient4 y", + " 0.000005249, !- Coefficient5 y**2", + " -0.000009720, !- Coefficient6 x*y", + " 12.77778, !- Minimum Value of x", + " 23.88889, !- Maximum Value of x", + " 18.0, !- Minimum Value of y", + " 46.11111, !- Maximum Value of y", + " , !- Minimum Curve Output", + " , !- Maximum Curve Output", + " Temperature, !- Input Unit Type for X", + " Temperature, !- Input Unit Type for Y", + " Dimensionless; !- Output Unit Type", + + } ); + + ASSERT_FALSE( process_idf( idf_objects ) ); // read idf objects + + GetUnitarySystemInputData( ErrorsFound ); // get UnitarySystem input from object above + HVACUnitarySystem::GetInputFlag = false; // don't call GetInput more than once (SimUnitarySystem call below will call GetInput if this flag is not set to false) + EXPECT_FALSE( ErrorsFound ); // expect no errors + + SetPredefinedTables(); + + // UnitarySystem used as zone equipment will not be modeled when FirstHAVCIteration is true, first time FirstHVACIteration = false will disable the 'return' on FirstHVACIteration = true + // set FirstHVACIteration to false for unit testing to size water coils + bool FirstHVACIteration = false; + DataGlobals::BeginEnvrnFlag = false; + + // overwrite outdoor weather temp to variable speed coil rated water temp until this gets fixed + DesDayWeath( 1 ).Temp( 1 ) = 29.4; + + // sizing routine will overwrite water coil air and water inlet nodes with design conditions so no need set set up node conditions yet + SimUnitarySystem( UnitarySystem( 1 ).Name, FirstHVACIteration, UnitarySystem( 1 ).ControlZoneNum, ZoneEquipList( 1 ).EquipIndex( 1 ), _, _, _, _, true ); + + // set up node conditions to test UnitarySystem set point based control + // Unitary system air inlet node = 1 + Node( 1 ).MassFlowRate = UnitarySystem( 1 ).DesignMassFlowRate; + Node( 1 ).MassFlowRateMaxAvail = UnitarySystem( 1 ).DesignMassFlowRate; // max avail at fan inlet so fan won't limit flow + + // test COOLING condition + Node( 1 ).Temp = 24.0; // 24C db + Node( 1 ).HumRat = 0.00922; // 17C wb + Node( 1 ).Enthalpy = 47597.03; // www.sugartech.com/psychro/index.php + + // Cooling coil air inlet node = 3 + Node( 3 ).MassFlowRateMax = UnitarySystem( 1 ).DesignMassFlowRate; // max at fan outlet so fan won't limit flow + // Cooling coil air outlet node = 4 + Node( 4 ).TempSetPoint = 20.0; + // Heating coil air inlet node = 4 + // Heating coil air outlet node = 2 + Node( 2 ).TempSetPoint = 16.0; + + Schedule( 1 ).CurrentValue = 1.0; // Enable schedule without calling schedule manager + + DataGlobals::BeginEnvrnFlag = true; // act as if simulation is beginning + + // COOLING mode + SimUnitarySystem( UnitarySystem( 1 ).Name, FirstHVACIteration, UnitarySystem( 1 ).ControlZoneNum, ZoneEquipList( 1 ).EquipIndex( 1 ), _, _, _, _, true ); + + // check that cooling coil air outlet node is at set point + EXPECT_NEAR( Node( 4 ).Temp, Node( 4 ).TempSetPoint, 0.001 ); + // cooling coil air inlet node temp is greater than cooling coil air outlet node temp + EXPECT_GT( Node( 3 ).Temp, Node( 4 ).Temp ); + // heating coil air inlet and outlet nodes are at same temp since the heating coil is off + EXPECT_EQ( Node( 4 ).MassFlowRate, Node( 2 ).MassFlowRate ); + // expect heating coil outlet air temp to be greater than heating coil outlet air temp set point + EXPECT_GT( Node( 2 ).Temp, Node( 2 ).TempSetPoint ); + + // HEATING mode + // Unitary system air inlet node = 1 + Node( 1 ).Temp = 14.0; // 14C db + Node( 1 ).HumRat = 0.00693; // 11C wb + Node( 1 ).Enthalpy = 31598.76; + + SimUnitarySystem( UnitarySystem( 1 ).Name, FirstHVACIteration, UnitarySystem( 1 ).ControlZoneNum, ZoneEquipList( 1 ).EquipIndex( 1 ), _, _, _, _, true ); + + // cooling coil air inlet node temp is equal to cooling coil air outlet node temp since cooling coil is off + EXPECT_EQ( Node( 3 ).Temp, Node( 4 ).Temp ); + // check that heating coil outlet node is at set point + EXPECT_NEAR( Node( 2 ).Temp, Node( 2 ).TempSetPoint, 0.001 ); + EXPECT_NEAR( Node( 2 ).Temp, 16.0, 0.001 ); + + // expect design spec data to match inputs + EXPECT_NEAR( HVACUnitarySystem::DesignSpecMSHP( 1 ).CoolingVolFlowRatio( 1 ), 0.1000, 0.00001 ); + EXPECT_NEAR( HVACUnitarySystem::DesignSpecMSHP( 1 ).HeatingVolFlowRatio( 1 ), 0.1010, 0.00001 ); + EXPECT_NEAR( HVACUnitarySystem::DesignSpecMSHP( 1 ).CoolingVolFlowRatio( 2 ), 0.2000, 0.00001 ); + EXPECT_NEAR( HVACUnitarySystem::DesignSpecMSHP( 1 ).HeatingVolFlowRatio( 2 ), 0.2010, 0.00001 ); + EXPECT_NEAR( HVACUnitarySystem::DesignSpecMSHP( 1 ).CoolingVolFlowRatio( 3 ), 0.3000, 0.00001 ); + EXPECT_NEAR( HVACUnitarySystem::DesignSpecMSHP( 1 ).HeatingVolFlowRatio( 3 ), 0.3010, 0.00001 ); + EXPECT_NEAR( HVACUnitarySystem::DesignSpecMSHP( 1 ).CoolingVolFlowRatio( 4 ), 0.4000, 0.00001 ); + EXPECT_NEAR( HVACUnitarySystem::DesignSpecMSHP( 1 ).HeatingVolFlowRatio( 4 ), 0.4010, 0.00001 ); + EXPECT_NEAR( HVACUnitarySystem::DesignSpecMSHP( 1 ).CoolingVolFlowRatio( 5 ), 0.5000, 0.00001 ); + EXPECT_NEAR( HVACUnitarySystem::DesignSpecMSHP( 1 ).HeatingVolFlowRatio( 5 ), 0.5010, 0.00001 ); + EXPECT_NEAR( HVACUnitarySystem::DesignSpecMSHP( 1 ).CoolingVolFlowRatio( 6 ), 0.6000, 0.00001 ); + EXPECT_NEAR( HVACUnitarySystem::DesignSpecMSHP( 1 ).HeatingVolFlowRatio( 6 ), 0.6010, 0.00001 ); + EXPECT_NEAR( HVACUnitarySystem::DesignSpecMSHP( 1 ).CoolingVolFlowRatio( 7 ), 0.7000, 0.00001 ); + EXPECT_NEAR( HVACUnitarySystem::DesignSpecMSHP( 1 ).HeatingVolFlowRatio( 7 ), 0.7010, 0.00001 ); + EXPECT_NEAR( HVACUnitarySystem::DesignSpecMSHP( 1 ).CoolingVolFlowRatio( 8 ), 0.8000, 0.00001 ); + EXPECT_NEAR( HVACUnitarySystem::DesignSpecMSHP( 1 ).HeatingVolFlowRatio( 8 ), 0.8010, 0.00001 ); + EXPECT_NEAR( HVACUnitarySystem::DesignSpecMSHP( 1 ).CoolingVolFlowRatio( 9 ), 0.9000, 0.00001 ); + EXPECT_NEAR( HVACUnitarySystem::DesignSpecMSHP( 1 ).HeatingVolFlowRatio( 9 ), 0.9010, 0.00001 ); + EXPECT_NEAR( HVACUnitarySystem::DesignSpecMSHP( 1 ).CoolingVolFlowRatio( 10 ), 1.0000, 0.00001 ); + EXPECT_NEAR( HVACUnitarySystem::DesignSpecMSHP( 1 ).HeatingVolFlowRatio( 10 ), 1.0000, 0.00001 ); + + // autosized air flow and capacity, unitary sytsem capacity matches coils + EXPECT_EQ( UnitarySystem( 1 ).MaxCoolAirVolFlow, 1.5 ); + EXPECT_EQ( UnitarySystem( 1 ).MaxHeatAirVolFlow, 1.5 ); + EXPECT_NEAR( UnitarySystem( 1 ).DesignCoolingCapacity, 31732.204, 0.001 ); + EXPECT_EQ( UnitarySystem( 1 ).DesignCoolingCapacity, VarSpeedCoil( 1 ).RatedCapCoolTotal ); + EXPECT_NEAR( UnitarySystem( 1 ).DesignHeatingCapacity, 31732.204, 0.001 ); + EXPECT_EQ( UnitarySystem( 1 ).DesignHeatingCapacity, VarSpeedCoil( 2 ).RatedCapHeat ); + // variable speed coils size air flow differently than other models. The design air volume flow rate is back calculated from design capacity + EXPECT_EQ( VarSpeedCoil( 1 ).RatedAirVolFlowRate, VarSpeedCoil( 1 ).RatedCapCoolTotal * VarSpeedCoil( 1 ).MSRatedAirVolFlowPerRatedTotCap( 10 ) ); + EXPECT_NEAR( VarSpeedCoil( 1 ).RatedAirVolFlowRate, 1.77264, 0.00001 ); // different than unitary system air volume flow rate + EXPECT_NEAR( VarSpeedCoil( 2 ).RatedAirVolFlowRate, 1.70, 0.01 ); // VS DX heating coil was not autosized + + // checks on autosized cooling air flow rates + EXPECT_NEAR( UnitarySystem( 1 ).CoolVolumeFlowRate( 1 ), 0.177264, 0.000001 ); + EXPECT_EQ( VarSpeedCoil( 1 ).MSRatedAirVolFlowRate( 1 ), UnitarySystem( 1 ).CoolVolumeFlowRate( 1 ) ); + EXPECT_NEAR( UnitarySystem( 1 ).CoolVolumeFlowRate( 2 ), 0.354529, 0.000001 ); + EXPECT_EQ( VarSpeedCoil( 1 ).MSRatedAirVolFlowRate( 2 ), UnitarySystem( 1 ).CoolVolumeFlowRate( 2 ) ); + EXPECT_NEAR( UnitarySystem( 1 ).CoolVolumeFlowRate( 3 ), 0.531793, 0.000001 ); + EXPECT_EQ( VarSpeedCoil( 1 ).MSRatedAirVolFlowRate( 3 ), UnitarySystem( 1 ).CoolVolumeFlowRate( 3 ) ); + EXPECT_NEAR( UnitarySystem( 1 ).CoolVolumeFlowRate( 4 ), 0.709058, 0.000001 ); + EXPECT_EQ( VarSpeedCoil( 1 ).MSRatedAirVolFlowRate( 4 ), UnitarySystem( 1 ).CoolVolumeFlowRate( 4 ) ); + EXPECT_NEAR( UnitarySystem( 1 ).CoolVolumeFlowRate( 5 ), 0.886323, 0.000001 ); + EXPECT_EQ( VarSpeedCoil( 1 ).MSRatedAirVolFlowRate( 5 ), UnitarySystem( 1 ).CoolVolumeFlowRate( 5 ) ); + EXPECT_NEAR( UnitarySystem( 1 ).CoolVolumeFlowRate( 6 ), 1.063587, 0.000001 ); + EXPECT_EQ( VarSpeedCoil( 1 ).MSRatedAirVolFlowRate( 6 ), UnitarySystem( 1 ).CoolVolumeFlowRate( 6 ) ); + EXPECT_NEAR( UnitarySystem( 1 ).CoolVolumeFlowRate( 7 ), 1.240852, 0.000001 ); + EXPECT_EQ( VarSpeedCoil( 1 ).MSRatedAirVolFlowRate( 7 ), UnitarySystem( 1 ).CoolVolumeFlowRate( 7 ) ); + EXPECT_NEAR( UnitarySystem( 1 ).CoolVolumeFlowRate( 8 ), 1.418116, 0.000001 ); + EXPECT_EQ( VarSpeedCoil( 1 ).MSRatedAirVolFlowRate( 8 ), UnitarySystem( 1 ).CoolVolumeFlowRate( 8 ) ); + EXPECT_NEAR( UnitarySystem( 1 ).CoolVolumeFlowRate( 9 ), 1.595381, 0.000001 ); + EXPECT_EQ( VarSpeedCoil( 1 ).MSRatedAirVolFlowRate( 9 ), UnitarySystem( 1 ).CoolVolumeFlowRate( 9 ) ); + EXPECT_NEAR( UnitarySystem( 1 ).CoolVolumeFlowRate( 10 ), 1.772646, 0.000001 ); + EXPECT_EQ( VarSpeedCoil( 1 ).MSRatedAirVolFlowRate( 10 ), UnitarySystem( 1 ).CoolVolumeFlowRate( 10 ) ); + + // checks on autosized heating air flow rates + EXPECT_NEAR( UnitarySystem( 1 ).HeatVolumeFlowRate( 1 ), 0.171700, 0.000001 ); + EXPECT_EQ( VarSpeedCoil( 2 ).MSRatedAirVolFlowRate( 1 ), UnitarySystem( 1 ).HeatVolumeFlowRate( 1 ) ); + EXPECT_NEAR( UnitarySystem( 1 ).HeatVolumeFlowRate( 2 ), 0.341700, 0.000001 ); + EXPECT_EQ( VarSpeedCoil( 2 ).MSRatedAirVolFlowRate( 2 ), UnitarySystem( 1 ).HeatVolumeFlowRate( 2 ) ); + EXPECT_NEAR( UnitarySystem( 1 ).HeatVolumeFlowRate( 3 ), 0.511699, 0.000001 ); + EXPECT_EQ( VarSpeedCoil( 2 ).MSRatedAirVolFlowRate( 3 ), UnitarySystem( 1 ).HeatVolumeFlowRate( 3 ) ); + EXPECT_NEAR( UnitarySystem( 1 ).HeatVolumeFlowRate( 4 ), 0.681699, 0.000001 ); + EXPECT_EQ( VarSpeedCoil( 2 ).MSRatedAirVolFlowRate( 4 ), UnitarySystem( 1 ).HeatVolumeFlowRate( 4 ) ); + EXPECT_NEAR( UnitarySystem( 1 ).HeatVolumeFlowRate( 5 ), 0.851700, 0.000001 ); + EXPECT_EQ( VarSpeedCoil( 2 ).MSRatedAirVolFlowRate( 5 ), UnitarySystem( 1 ).HeatVolumeFlowRate( 5 ) ); + EXPECT_NEAR( UnitarySystem( 1 ).HeatVolumeFlowRate( 6 ), 1.021699, 0.000001 ); + EXPECT_EQ( VarSpeedCoil( 2 ).MSRatedAirVolFlowRate( 6 ), UnitarySystem( 1 ).HeatVolumeFlowRate( 6 ) ); + EXPECT_NEAR( UnitarySystem( 1 ).HeatVolumeFlowRate( 7 ), 1.191700, 0.000001 ); + EXPECT_EQ( VarSpeedCoil( 2 ).MSRatedAirVolFlowRate( 7 ), UnitarySystem( 1 ).HeatVolumeFlowRate( 7 ) ); + EXPECT_NEAR( UnitarySystem( 1 ).HeatVolumeFlowRate( 8 ), 1.361700, 0.000001 ); + EXPECT_EQ( VarSpeedCoil( 2 ).MSRatedAirVolFlowRate( 8 ), UnitarySystem( 1 ).HeatVolumeFlowRate( 8 ) ); + EXPECT_NEAR( UnitarySystem( 1 ).HeatVolumeFlowRate( 9 ), 1.531700, 0.000001 ); + EXPECT_EQ( VarSpeedCoil( 2 ).MSRatedAirVolFlowRate( 9 ), UnitarySystem( 1 ).HeatVolumeFlowRate( 9 ) ); + EXPECT_NEAR( UnitarySystem( 1 ).HeatVolumeFlowRate( 10 ), 1.700000, 0.000001 ); + EXPECT_EQ( VarSpeedCoil( 2 ).MSRatedAirVolFlowRate( 10 ), UnitarySystem( 1 ).HeatVolumeFlowRate( 10 ) ); + + // spot check MSHP volume flow rate data + EXPECT_EQ( UnitarySystem( 1 ).CoolVolumeFlowRate( 7 ), UnitarySystem( 1 ).CoolVolumeFlowRate( 10 ) * HVACUnitarySystem::DesignSpecMSHP( 1 ).CoolingVolFlowRatio( 7 ) ); + EXPECT_EQ( UnitarySystem( 1 ).HeatVolumeFlowRate( 7 ), UnitarySystem( 1 ).HeatVolumeFlowRate( 10 ) * HVACUnitarySystem::DesignSpecMSHP( 1 ).HeatingVolFlowRatio( 7 ) ); + +} + TEST_F( ZoneUnitarySystemTest, UnitarySystem_WaterCoilSPControl ) { std::string const idf_objects = delimited_string( { @@ -2782,12 +3331,13 @@ TEST_F( EnergyPlusFixture, HVACUnitarySystem_ReportingTest ) { " 1, !- Number of Speeds for Heating", " 3, !- Number of Speeds for Cooling", " No, !- Single Mode Operation", + " , !- No Load Supply Air Flow Rate Ratio", " 1.0, !- Heating Speed 1 Supply Air Flow Ratio", " 0.333, !- Cooling Speed 1 Supply Air Flow Ratio", " 1.0, !- Heating Speed 2 Supply Air Flow Ratio", " 0.666, !- Cooling Speed 2 Supply Air Flow Ratio", " 1.0, !- Heating Speed 3 Supply Air Flow Ratio", - " 1.0;, !- Cooling Speed 3 Supply Air Flow Ratio", + " 1.0; !- Cooling Speed 3 Supply Air Flow Ratio", "Coil:Cooling:DX:MultiSpeed,", " Sys 2 Furnace DX Cool MultiSpd Cooling Coil, !- Name", @@ -3160,17 +3710,30 @@ TEST_F( EnergyPlusFixture, UnitarySystem_MultispeedDXCoilSizing ) { "UnitarySystemPerformance:Multispeed,", " MultiSpeed Performance, !- Name", - " 1, !- Number of Speeds for Heating", + " 10, !- Number of Speeds for Heating", " 3, !- Number of Speeds for Cooling", " No, !- Single Mode Operation", - " autosize, !- Heating Speed 1 Supply Air Flow Ratio", + " , !- No Load Supply Air Flow Rate Ratio", + " autosize, !- Heating Speed 1 Supply Air Flow Ratio", " autosize, !- Cooling Speed 1 Supply Air Flow Ratio", " autosize, !- Heating Speed 2 Supply Air Flow Ratio", " autosize, !- Cooling Speed 2 Supply Air Flow Ratio", " autosize, !- Heating Speed 3 Supply Air Flow Ratio", " autosize, !- Cooling Speed 3 Supply Air Flow Ratio", " autosize, !- Heating Speed 4 Supply Air Flow Ratio", - " autosize; !- Cooling Speed 4 Supply Air Flow Ratio", + " autosize, !- Cooling Speed 4 Supply Air Flow Ratio", + " autosize, !- Heating Speed 5 Supply Air Flow Ratio", + " autosize, !- Cooling Speed 5 Supply Air Flow Ratio", + " autosize, !- Heating Speed 6 Supply Air Flow Ratio", + " autosize, !- Cooling Speed 6 Supply Air Flow Ratio", + " autosize, !- Heating Speed 7 Supply Air Flow Ratio", + " autosize, !- Cooling Speed 7 Supply Air Flow Ratio", + " autosize, !- Heating Speed 8 Supply Air Flow Ratio", + " autosize, !- Cooling Speed 8 Supply Air Flow Ratio", + " autosize, !- Heating Speed 9 Supply Air Flow Ratio", + " autosize, !- Cooling Speed 9 Supply Air Flow Ratio", + " autosize, !- Heating Speed 10 Supply Air Flow Ratio", + " autosize; !- Cooling Speed 10 Supply Air Flow Ratio", "Fan:OnOff,", " Supply Fan 1, !- Name", @@ -3267,7 +3830,7 @@ TEST_F( EnergyPlusFixture, UnitarySystem_MultispeedDXCoilSizing ) { " 10.0, !- Number of Speeds {dimensionless}", " 10.0, !- Nominal Speed Level {dimensionless}", " autosize, !- Rated Heating Capacity At Selected Nominal Speed Level {w}", - " 1.7, !- Rated Air Flow Rate At Selected Nominal Speed Level {m3/s}", + " autosize, !- Rated Air Flow Rate At Selected Nominal Speed Level {m3/s}", " HPACCOOLPLFFPLR, !- Energy Part Load Fraction Curve Name", " , !- Defrost Energy Input Ratio Function of Temperature Curve Name", " -5.0, !- Minimum Outdoor Dry-Bulb Temperature for Compressor Operation {C}", @@ -3721,11 +4284,51 @@ TEST_F( EnergyPlusFixture, UnitarySystem_MultispeedDXCoilSizing ) { SizeUnitarySystem( NumUnitarySystem, true, 0 ); - ASSERT_EQ( 1, NumUnitarySystem ); // only 1 unitary system above so expect 1 as number of unitary system objects - - ASSERT_EQ( UnitarySystem( 1 ).DesignHeatingCapacity * 0.00005, UnitarySystem( 1 ).MaxHeatAirVolFlow ); - ASSERT_EQ( UnitarySystem( 1 ).DesignCoolingCapacity * 0.00005, UnitarySystem( 1 ).MaxCoolAirVolFlow ); - ASSERT_EQ( UnitarySystem( 1 ).DesignCoolingCapacity, DXCoil( UnitarySystem( 1 ).CoolingCoilIndex ).MSRatedTotCap( UnitarySystem( 1 ).NumOfSpeedCooling ) ); + EXPECT_EQ( 1, NumUnitarySystem ); // only 1 unitary system above so expect 1 as number of unitary system objects + + EXPECT_EQ( UnitarySystem( 1 ).DesignHeatingCapacity * 0.00005, UnitarySystem( 1 ).MaxHeatAirVolFlow ); + EXPECT_EQ( UnitarySystem( 1 ).DesignCoolingCapacity * 0.00005, UnitarySystem( 1 ).MaxCoolAirVolFlow ); + EXPECT_EQ( UnitarySystem( 1 ).DesignCoolingCapacity, DXCoil( UnitarySystem( 1 ).CoolingCoilIndex ).MSRatedTotCap( UnitarySystem( 1 ).NumOfSpeedCooling ) ); + // 64-bit MSVS shows these next variables as identical yet other compilers show diff's, changing ASSERT_EQ to EXPECT_NEAR + EXPECT_NEAR( UnitarySystem( 1 ).DesignHeatingCapacity, VarSpeedCoil( UnitarySystem( 1 ).HeatingCoilIndex ).MSRatedTotCap( UnitarySystem( 1 ).NumOfSpeedHeating ), 0.001 ); + + // 3 cooling speeds with autosized MSHP design spec yielding equally distributed air flow at 1/3 per speed + EXPECT_NEAR( UnitarySystem( 1 ).CoolVolumeFlowRate( 1 ), 0.031373, 0.000001 ); + EXPECT_NEAR( DXCoil( 1 ).MSRatedAirVolFlowRate( 1 ), UnitarySystem( 1 ).CoolVolumeFlowRate( 1 ), 0.000001 ); + EXPECT_NEAR( UnitarySystem( 1 ).CoolVolumeFlowRate( 2 ), 0.062747, 0.000001 ); + EXPECT_NEAR( DXCoil( 1 ).MSRatedAirVolFlowRate( 2 ), UnitarySystem( 1 ).CoolVolumeFlowRate( 2 ), 0.000001 ); + EXPECT_NEAR( UnitarySystem( 1 ).CoolVolumeFlowRate( 3 ), 0.094120, 0.000001 ); + EXPECT_NEAR( DXCoil( 1 ).MSRatedAirVolFlowRate( 3 ), UnitarySystem( 1 ).CoolVolumeFlowRate( 3 ), 0.000001 ); + + EXPECT_NEAR( HVACUnitarySystem::DesignSpecMSHP( 1 ).CoolingVolFlowRatio( 1 ), 0.333333, 0.000001 ); + EXPECT_NEAR( HVACUnitarySystem::DesignSpecMSHP( 1 ).CoolingVolFlowRatio( 2 ), 0.666666, 0.000001 ); + EXPECT_NEAR( HVACUnitarySystem::DesignSpecMSHP( 1 ).CoolingVolFlowRatio( 3 ), 1.000000, 0.000001 ); + + EXPECT_NEAR( DXCoil( 1 ).MSRatedAirVolFlowRate( 1 ), UnitarySystem( 1 ).MaxCoolAirVolFlow * HVACUnitarySystem::DesignSpecMSHP( 1 ).CoolingVolFlowRatio( 1 ), 0.000001 ); + EXPECT_NEAR( DXCoil( 1 ).MSRatedAirVolFlowRate( 2 ), UnitarySystem( 1 ).MaxCoolAirVolFlow * HVACUnitarySystem::DesignSpecMSHP( 1 ).CoolingVolFlowRatio( 2 ), 0.000001 ); + EXPECT_NEAR( DXCoil( 1 ).MSRatedAirVolFlowRate( 3 ), UnitarySystem( 1 ).MaxCoolAirVolFlow * HVACUnitarySystem::DesignSpecMSHP( 1 ).CoolingVolFlowRatio( 3 ), 0.000001 ); + + // 10 heating speeds with autosized MSHP design spec yielding equally distributed air flow at 1/10 per speed + EXPECT_NEAR( UnitarySystem( 1 ).HeatVolumeFlowRate( 1 ), 0.007884, 0.000001 ); + EXPECT_EQ( VarSpeedCoil( 1 ).MSRatedAirVolFlowRate( 1 ), UnitarySystem( 1 ).HeatVolumeFlowRate( 1 ) ); + EXPECT_NEAR( UnitarySystem( 1 ).HeatVolumeFlowRate( 2 ), 0.015769, 0.000001 ); + EXPECT_EQ( VarSpeedCoil( 1 ).MSRatedAirVolFlowRate( 2 ), UnitarySystem( 1 ).HeatVolumeFlowRate( 2 ) ); + EXPECT_NEAR( UnitarySystem( 1 ).HeatVolumeFlowRate( 3 ), 0.023653, 0.000001 ); + EXPECT_EQ( VarSpeedCoil( 1 ).MSRatedAirVolFlowRate( 3 ), UnitarySystem( 1 ).HeatVolumeFlowRate( 3 ) ); + EXPECT_NEAR( UnitarySystem( 1 ).HeatVolumeFlowRate( 4 ), 0.031538, 0.000001 ); + EXPECT_EQ( VarSpeedCoil( 1 ).MSRatedAirVolFlowRate( 4 ), UnitarySystem( 1 ).HeatVolumeFlowRate( 4 ) ); + EXPECT_NEAR( UnitarySystem( 1 ).HeatVolumeFlowRate( 5 ), 0.039422, 0.000001 ); + EXPECT_EQ( VarSpeedCoil( 1 ).MSRatedAirVolFlowRate( 5 ), UnitarySystem( 1 ).HeatVolumeFlowRate( 5 ) ); + EXPECT_NEAR( UnitarySystem( 1 ).HeatVolumeFlowRate( 6 ), 0.047307, 0.000001 ); + EXPECT_EQ( VarSpeedCoil( 1 ).MSRatedAirVolFlowRate( 6 ), UnitarySystem( 1 ).HeatVolumeFlowRate( 6 ) ); + EXPECT_NEAR( UnitarySystem( 1 ).HeatVolumeFlowRate( 7 ), 0.055191, 0.000001 ); + EXPECT_EQ( VarSpeedCoil( 1 ).MSRatedAirVolFlowRate( 7 ), UnitarySystem( 1 ).HeatVolumeFlowRate( 7 ) ); + EXPECT_NEAR( UnitarySystem( 1 ).HeatVolumeFlowRate( 8 ), 0.063076, 0.000001 ); + EXPECT_EQ( VarSpeedCoil( 1 ).MSRatedAirVolFlowRate( 8 ), UnitarySystem( 1 ).HeatVolumeFlowRate( 8 ) ); + EXPECT_NEAR( UnitarySystem( 1 ).HeatVolumeFlowRate( 9 ), 0.070960, 0.000001 ); + EXPECT_EQ( VarSpeedCoil( 1 ).MSRatedAirVolFlowRate( 9 ), UnitarySystem( 1 ).HeatVolumeFlowRate( 9 ) ); + EXPECT_NEAR( UnitarySystem( 1 ).HeatVolumeFlowRate( 10 ), 0.078845, 0.000001 ); + EXPECT_EQ( VarSpeedCoil( 1 ).MSRatedAirVolFlowRate( 10 ), UnitarySystem( 1 ).HeatVolumeFlowRate( 10 ) ); } @@ -3857,6 +4460,7 @@ TEST_F( EnergyPlusFixture, UnitarySystem_MultiSpeedCoils_SingleMode ) { " 4, !- Number of Speeds for Heating", " 4, !- Number of Speeds for Cooling", " Yes, !- Single Mode Operation", + " , !- No Load Supply Air Flow Rate Ratio", " 0.24, !- Heating Speed 1 Supply Air Flow Ratio", " 0.24, !- Cooling Speed 1 Supply Air Flow Ratio", " 0.47, !- Heating Speed 2 Supply Air Flow Ratio", @@ -4758,6 +5362,7 @@ TEST_F( EnergyPlusFixture, UnitarySystem_MultispeedDXCoilHeatRecoveryHandling ) " 4, !- Number of Speeds for Heating", " 3, !- Number of Speeds for Cooling", " No, !- Single Mode Operation", + " , !- No Load Supply Air Flow Rate Ratio", " autosize, !- Heating Speed 1 Supply Air Flow Ratio", " autosize, !- Cooling Speed 1 Supply Air Flow Ratio", " autosize, !- Heating Speed 2 Supply Air Flow Ratio", @@ -6519,6 +7124,7 @@ TEST_F( EnergyPlusFixture, UnitarySystem_MultispeedDXHeatingCoilOnly ) { " 4, !- Number of Speeds for Heating", " 0, !- Number of Speeds for Cooling", " No, !- Single Mode Operation", + " , !- No Load Supply Air Flow Rate Ratio", " autosize, !- Heating Speed 1 Supply Air Flow Ratio", " autosize, !- Cooling Speed 1 Supply Air Flow Ratio", " autosize, !- Heating Speed 2 Supply Air Flow Ratio",