LCOV - code coverage report
Current view: top level - EnergyPlus - DXCoils.hh (source / functions) Hit Total Coverage
Test: lcov.output.filtered Lines: 57 60 95.0 %
Date: 2024-08-24 18:31:18 Functions: 4 5 80.0 %

          Line data    Source code
       1             : // EnergyPlus, Copyright (c) 1996-2024, The Board of Trustees of the University of Illinois,
       2             : // The Regents of the University of California, through Lawrence Berkeley National Laboratory
       3             : // (subject to receipt of any required approvals from the U.S. Dept. of Energy), Oak Ridge
       4             : // National Laboratory, managed by UT-Battelle, Alliance for Sustainable Energy, LLC, and other
       5             : // contributors. All rights reserved.
       6             : //
       7             : // NOTICE: This Software was developed under funding from the U.S. Department of Energy and the
       8             : // U.S. Government consequently retains certain rights. As such, the U.S. Government has been
       9             : // granted for itself and others acting on its behalf a paid-up, nonexclusive, irrevocable,
      10             : // worldwide license in the Software to reproduce, distribute copies to the public, prepare
      11             : // derivative works, and perform publicly and display publicly, and to permit others to do so.
      12             : //
      13             : // Redistribution and use in source and binary forms, with or without modification, are permitted
      14             : // provided that the following conditions are met:
      15             : //
      16             : // (1) Redistributions of source code must retain the above copyright notice, this list of
      17             : //     conditions and the following disclaimer.
      18             : //
      19             : // (2) Redistributions in binary form must reproduce the above copyright notice, this list of
      20             : //     conditions and the following disclaimer in the documentation and/or other materials
      21             : //     provided with the distribution.
      22             : //
      23             : // (3) Neither the name of the University of California, Lawrence Berkeley National Laboratory,
      24             : //     the University of Illinois, U.S. Dept. of Energy nor the names of its contributors may be
      25             : //     used to endorse or promote products derived from this software without specific prior
      26             : //     written permission.
      27             : //
      28             : // (4) Use of EnergyPlus(TM) Name. If Licensee (i) distributes the software in stand-alone form
      29             : //     without changes from the version obtained under this License, or (ii) Licensee makes a
      30             : //     reference solely to the software portion of its product, Licensee must refer to the
      31             : //     software as "EnergyPlus version X" software, where "X" is the version number Licensee
      32             : //     obtained under this License and may not use a different name for the software. Except as
      33             : //     specifically required in this Section (4), Licensee shall not use in a company name, a
      34             : //     product name, in advertising, publicity, or other promotional activities any name, trade
      35             : //     name, trademark, logo, or other designation of "EnergyPlus", "E+", "e+" or confusingly
      36             : //     similar designation, without the U.S. Department of Energy's prior written consent.
      37             : //
      38             : // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
      39             : // IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
      40             : // AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
      41             : // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
      42             : // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
      43             : // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
      44             : // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
      45             : // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
      46             : // POSSIBILITY OF SUCH DAMAGE.
      47             : 
      48             : #ifndef DXCoils_hh_INCLUDED
      49             : #define DXCoils_hh_INCLUDED
      50             : 
      51             : // ObjexxFCL Headers
      52             : #include <ObjexxFCL/Array1D.hh>
      53             : #include <ObjexxFCL/Optional.hh>
      54             : 
      55             : // EnergyPlus Headers
      56             : #include <EnergyPlus/Data/BaseData.hh>
      57             : #include <EnergyPlus/DataEnvironment.hh>
      58             : #include <EnergyPlus/DataGlobalConstants.hh>
      59             : #include <EnergyPlus/DataGlobals.hh>
      60             : #include <EnergyPlus/DataHVACGlobals.hh>
      61             : #include <EnergyPlus/DataHeatBalance.hh>
      62             : #include <EnergyPlus/EnergyPlus.hh>
      63             : #include <EnergyPlus/StandardRatings.hh>
      64             : #include <EnergyPlus/UtilityRoutines.hh>
      65             : 
      66             : namespace EnergyPlus {
      67             : 
      68             : // Forward declarations
      69             : struct EnergyPlusData;
      70             : 
      71             : namespace DXCoils {
      72             : 
      73             :     // Using/Aliasing
      74             :     constexpr Real64 RatedInletAirTemp(26.6667);          // 26.6667C or 80F
      75             :     constexpr Real64 RatedInletWetBulbTemp(19.4444);      // 19.44 or 67F
      76             :     constexpr Real64 RatedInletAirHumRat(0.0111847);      // Humidity ratio corresponding to 80F dry bulb/67F wet bulb
      77             :     constexpr Real64 RatedOutdoorAirTemp(35.0);           // 35 C or 95F
      78             :     constexpr Real64 RatedInletAirTempHeat(21.1111);      // 21.11C or 70F
      79             :     constexpr Real64 RatedOutdoorAirTempHeat(8.3333);     // 8.33 C or 47F
      80             :     constexpr Real64 RatedOutdoorWetBulbTempHeat(6.1111); // 6.11 C or 43F
      81             :     constexpr Real64 RatedInletWetBulbTempHeat(15.5556);  // 15.55 or 60F
      82             :     constexpr Real64 DryCoilOutletHumRatioMin(0.00001);   // dry coil outlet minimum hum ratio kgWater/kgDryAir
      83             : 
      84             :     // Multimode DX Coil
      85             :     constexpr int MaxCapacityStages(2);                               // Maximum number of capacity stages supported
      86             :     constexpr int MaxDehumidModes(1);                                 // Maximum number of enhanced dehumidification modes supported
      87             :     constexpr int MaxModes(MaxCapacityStages *(MaxDehumidModes + 1)); // Maximum number of performance modes
      88             : 
      89             :     // Water Systems
      90             :     enum class CondensateCollectAction
      91             :     {
      92             :         Invalid = -1,
      93             :         Discard, // default mode where water is "lost"
      94             :         ToTank,  // collect coil condensate from air and store in water storage tank
      95             :         Num
      96             :     };
      97             : 
      98             :     enum class EvapWaterSupply
      99             :     {
     100             :         Invalid = -1,
     101             :         FromMains,
     102             :         FromTank,
     103             :         Num
     104             :     };
     105             : 
     106             :     // Types
     107             : 
     108             :     struct DXCoilData
     109             :     {
     110             :         // Members
     111             :         //          Some variables in this type are arrays (dimension=MaxModes) to support coil type
     112             :         //          COIL:DX:MultiMode:CoolingEmpirical.  Other coil types only use the first element.
     113             :         std::string Name;       // Name of the DX Coil
     114             :         std::string DXCoilType; // type of coil
     115             :         int DXCoilType_Num;     // Integer equivalent to DXCoilType
     116             :         std::string Schedule;   // WaterCoil Operation Schedule
     117             :         int SchedPtr;           // Pointer to the correct schedule
     118             :         //          RatedCoolCap, RatedSHR and RatedCOP do not include the thermal or electrical
     119             :         //          effects due to the supply air fan
     120             :         Array1D<Real64> RatedTotCap;                 // Gross total cooling capacity at rated conditions [watts]
     121             :         Real64 HeatSizeRatio;                        // heat pump heating to cooling sizing ratio when autosized
     122             :         Array1D_bool RatedTotCapEMSOverrideOn;       // if true, then EMS is calling to override rated total capacity
     123             :         Array1D<Real64> RatedTotCapEMSOverrideValue; // value to use for EMS override
     124             :         Array1D<Real64> RatedSHR;                    // Sensible heat ratio (sens cap/total cap) at rated conditions
     125             :         Array1D_bool RatedSHREMSOverrideOn;          // if true, then EMS is calling to override Sensible heat ratio
     126             :         Array1D<Real64> RatedSHREMSOverrideValue;    // value to use for EMS override forSensible heat ratio
     127             :         Array1D<Real64> RatedCOP;                    // Coefficient of performance at rated conditions
     128             :         Array1D<Real64> RatedAirVolFlowRate;         // Air volume flow rate through coil at rated conditions [m3/s]
     129             :         // This is adjusted for bypassed air if any (see BypassedFlowFrac)
     130             :         Array1D_bool RatedAirVolFlowRateEMSOverrideON;       // if true, then EMS is calling to override Air volume flow rate
     131             :         Array1D<Real64> RatedAirVolFlowRateEMSOverrideValue; // value to use for EMS override Air volume flow rate
     132             :         Array1D<Real64> FanPowerPerEvapAirFlowRate;          // Fan Power Per Air volume flow rate through the
     133             :         // Evaporator coil at rated conditions [W/(m3/s)]
     134             :         Array1D<Real64> FanPowerPerEvapAirFlowRate_2023;
     135             :         Array1D<Real64> RatedAirMassFlowRate; // Air mass flow rate through coil at rated conditions [kg/s]
     136             :         // This is adjusted for bypassed air if any (see BypassedFlowFrac)
     137             :         Array1D<Real64> BypassedFlowFrac; // Fraction of air flow bypassed around coil
     138             :         Array1D<Real64> RatedCBF;         // rated coil bypass factor, determined using RatedTotCap and RatedSHR
     139             :         int AirInNode;                    // Air inlet node number
     140             :         int AirOutNode;                   // Air outlet node number
     141             :         Array1D_int CCapFTemp;            // index of total cooling capacity modifier curve
     142             :         // (function of entering wetbulb, outside drybulb)
     143             :         int CCapFTempErrorIndex; // Used for warning messages when output of CCapFTemp is negative
     144             :         Array1D_int CCapFFlow;   // index of total cooling capacity modifier curve
     145             :         // (function of actual supply air flow vs rated air flow)
     146             :         int CCapFFlowErrorIndex; // Used for warning messages when output of CCapFFlow is negative
     147             :         Array1D_int EIRFTemp;    // index of energy input ratio modifier curve
     148             :         // (function of entering wetbulb, outside drybulb)
     149             :         int EIRFTempErrorIndex; // Used for warning messages when output of EIRFTemp is negative
     150             :         Array1D_int EIRFFlow;   // index of energy input ratio modifier curve
     151             :         // (function of actual supply air flow vs rated air flow)
     152             :         int EIRFFlowErrorIndex;                // Used for warning messages when output of EIRFFlow is negative
     153             :         Array1D_int PLFFPLR;                   // index of part-load factor vs part-load ratio curve
     154             :         bool ReportCoolingCoilCrankcasePower;  // logical determines if the cooling coil crankcase heater power is reported
     155             :         Real64 CrankcaseHeaterCapacity;        // total crankcase heater capacity [W]
     156             :         Real64 CrankcaseHeaterPower;           // report variable for average crankcase heater power [W]
     157             :         Real64 MaxOATCrankcaseHeater;          // maximum OAT for crankcase heater operation [C]
     158             :         int CrankcaseHeaterCapacityCurveIndex; // Crankcase heater power-temperature curve or table index
     159             :         Real64 CrankcaseHeaterConsumption;     // report variable for total crankcase heater energy consumption [J]
     160             :         Real64 BasinHeaterPowerFTempDiff;      // Basin heater capacity per degree C below setpoint (W/C)
     161             :         Real64 BasinHeaterSetPointTemp;        // setpoint temperature for basin heater operation (C)
     162             :         int CompanionUpstreamDXCoil;           // index number of the DX coil that is "upstream" of this DX coil. Currently used for
     163             :         // UnitarySystem:HeatPump:AirToAir for proper calculation of crankcase heater energy
     164             :         // consumption
     165             :         bool FindCompanionUpStreamCoil;    // Flag to get the companion coil in Init.
     166             :         Array1D_int CondenserInletNodeNum; // Node number of outdoor condenser(s) (actually an evaporator for heating coils)
     167             :         int LowOutletTempIndex;            // used for low outlet temperature warnings
     168             :         Real64 FullLoadOutAirTempLast;     // used for low outlet temperature warnings
     169             :         Real64 FullLoadInletAirTempLast;   // used for low outlet temperature warnings
     170             :         bool PrintLowOutTempMessage;       // used to print warning message for low outlet air dry-bulb conditions
     171             :         std::string LowOutTempBuffer1;     // holds warning message until next iteration (only prints 1 message/iteration)
     172             :         std::string LowOutTempBuffer2;     // holds warning message until next iteration (only prints 1 message/iteration)
     173             :         int HeatingCoilPLFCurvePTR;        // PLF curve index to gas or electric heating coil (used in latent degradation model)
     174             :         int BasinHeaterSchedulePtr;        // Pointer to basin heater schedule
     175             :         // start of multi-speed compressor variables
     176             :         Real64 RatedTotCap2; // Gross total cooling capacity at rated conditions, low speed [watts]
     177             :         // Note: For HPWHs, RatedTotCap2   = Water Heating Capacity for Coil:DX:HPWH and
     178             :         //                  RatedTotCap(1) = Air Cooling Coil Capacity for Coil:DX:HPWH
     179             :         Real64 RatedSHR2;            // Sensible heat ratio (sens cap/total cap) at rated conditions, low speed
     180             :         Real64 RatedCOP2;            // Coefficient of performance at rated conditions, low speed
     181             :         Real64 RatedAirVolFlowRate2; // Air volume flow rate through unit at rated conditions, low speed [m3/s]
     182             : 
     183             :         Array1D<Real64> FanPowerPerEvapAirFlowRate_LowSpeed; // Fan Power Per Air volume flow rate through the
     184             :         // Evaporator coil at rated conditions [W/(m3/s)], low speed
     185             :         Array1D<Real64> FanPowerPerEvapAirFlowRate_2023_LowSpeed;
     186             : 
     187             :         Real64 RatedAirMassFlowRate2; // Air mass flow rate through unit at rated conditions, low speed [kg/s]
     188             :         Real64 RatedCBF2;             // rated coil bypass factor (low speed), determined using RatedTotCap2 and RatedSHR2
     189             :         int CCapFTemp2;               // index of total cooling capacity modifier curve (low speed)
     190             :         int EIRFTemp2;                // index of energy input ratio modifier curve (low speed)
     191             :         // (function of entering wetbulb, outside drybulb)
     192             :         Real64 RatedEIR2;                  // rated energy input ratio (low speed, inverse of COP2)
     193             :         Real64 InternalStaticPressureDrop; // for rating VAV system
     194             :         bool RateWithInternalStaticAndFanObject;
     195             :         int SupplyFanIndex;          // index of this fan in fan array or vector
     196             :         HVAC::FanType supplyFanType; // type of fan, in DataHVACGlobals
     197             :         std::string SupplyFanName;   // name of fan associated with this dx coil
     198             :         std::string CoilSystemName;
     199             :         // end of multi-speed compressor variables
     200             :         Array1D<Real64> RatedEIR; // rated energy input ratio (inverse of COP)
     201             :         Real64 InletAirMassFlowRate;
     202             :         Real64 InletAirMassFlowRateMax;
     203             :         Real64 InletAirTemp;
     204             :         Real64 InletAirHumRat;
     205             :         Real64 InletAirEnthalpy;
     206             :         //  Eventually inlet air conditions will be used in DX Coil, these lines are commented out and marked with this comment line
     207             :         //  REAL(r64) :: InletAirPressure       =0.0d0
     208             :         Real64 OutletAirTemp;
     209             :         Real64 OutletAirHumRat;
     210             :         Real64 OutletAirEnthalpy;
     211             :         Real64 PartLoadRatio; // Ratio of actual sensible cooling load to steady-state sensible cooling capacity
     212             :         Real64 TotalCoolingEnergy;
     213             :         Real64 SensCoolingEnergy;
     214             :         Real64 LatCoolingEnergy;
     215             :         Real64 TotalCoolingEnergyRate;
     216             :         Real64 SensCoolingEnergyRate;
     217             :         Real64 LatCoolingEnergyRate;
     218             :         Real64 ElecCoolingConsumption;
     219             :         Real64 ElecCoolingPower;
     220             :         Real64 CoolingCoilRuntimeFraction; // Run time fraction of the DX cooling unit
     221             :         // start of variables used in heat pump heating coils only
     222             :         Real64 TotalHeatingEnergy;
     223             :         Real64 TotalHeatingEnergyRate;
     224             :         Real64 ElecHeatingConsumption;
     225             :         Real64 ElecHeatingPower;
     226             :         Real64 HeatingCoilRuntimeFraction;                // Run time fraction of the DX heating unit
     227             :         StandardRatings::DefrostStrat DefrostStrategy;    // defrost strategy; 1=reverse-cycle, 2=resistive
     228             :         StandardRatings::HPdefrostControl DefrostControl; // defrost control; 1=timed, 2=on-demand
     229             :         int EIRFPLR;                                      // index of energy input ratio vs part-load ratio curve
     230             :         int DefrostEIRFT;                                 // index of defrost mode total cooling capacity for reverse cycle heat pump
     231             :         int RegionNum;                                    // Region number for calculating HSPF of single speed DX heating coil
     232             :         Real64 MinOATCompressor;                          // Minimum OAT for heat pump compressor operation
     233             :         Real64 OATempCompressorOn;                        // The outdoor tempearture when the compressor is automatically turned back on,
     234             :         // if applicable, following automatic shut off. This field is used only for
     235             :         // HSPF calculation.
     236             :         Real64 MaxOATCompressor;                 // Maximum OAT for VRF heat pump compressor operation
     237             :         Real64 MaxOATDefrost;                    // Maximum OAT for defrost operation
     238             :         Real64 DefrostTime;                      // Defrost time period in hours
     239             :         Real64 DefrostCapacity;                  // Resistive defrost to nominal capacity (at 21.11C/8.33C) ratio
     240             :         Real64 HPCompressorRuntime;              // keep track of compressor runtime
     241             :         Real64 HPCompressorRuntimeLast;          // keep track of last time step compressor runtime (if simulation downshifts)
     242             :         Real64 TimeLeftToDefrost;                // keep track of time left to defrost heat pump
     243             :         Real64 DefrostPower;                     // power used during defrost
     244             :         Real64 DefrostConsumption;               // energy used during defrost
     245             :         HVAC::OATType HeatingPerformanceOATType; // Heating performance curve OAT type (1-wetbulb, 2-drybulb)
     246             :         bool HPCoilIsInCoilSystemHeatingDX;
     247             :         bool OATempCompressorOnOffBlank;
     248             :         // end of variables used in heat pump heating coils only
     249             :         // start of variables for DX cooling coil latent degradation model
     250             :         Array1D<Real64> Twet_Rated; // Nominal time for condensate to begin leaving the coil's
     251             :         // condensate drain line (sec)
     252             :         Array1D<Real64> Gamma_Rated; // Initial moisture evaporation rate divided by steady-state
     253             :         // AC latent capacity (dimensionless)
     254             :         Array1D<Real64> MaxONOFFCyclesperHour;      // Maximum ON/OFF cycles per hour for the compressor (cycles/hour)
     255             :         Array1D<Real64> LatentCapacityTimeConstant; // Time constant for latent capacity to reach steady state
     256             :         // after startup (sec)
     257             :         // end of variables for DX cooling coil latent degradation model
     258             :         Array1D<DataHeatBalance::RefrigCondenserType> CondenserType; // Type of condenser for DX cooling coil: AIR COOLED or EVAP COOLED
     259             :         // start of variables for DX cooling coil evaporative condenser option
     260             :         bool ReportEvapCondVars;        // true if any performance mode includes an evap condenser
     261             :         Array1D<Real64> EvapCondEffect; // effectiveness of the evaporatively cooled condenser
     262             :         // [high speed for multi-speed unit] (-)
     263             :         Real64 CondInletTemp;            // Evap condenser inlet temperature [C], report variable
     264             :         Array1D<Real64> EvapCondAirFlow; // Air flow rate through the evap condenser at high speed,
     265             :         // for water use calcs [m3/s]
     266             :         Array1D<Real64> EvapCondPumpElecNomPower; // Nominal power input to the evap condenser water circulation pump
     267             :         // at high speed [W]
     268             :         Real64 EvapCondPumpElecPower; // Average power consumed by the evap condenser water circulation pump over
     269             :         // the time step [W]
     270             :         Real64 EvapCondPumpElecConsumption; // Electric energy consumed by the evap condenser water circulation pump [J]
     271             :         Real64 EvapWaterConsumpRate;        // Evap condenser water consumption rate [m3/s]
     272             :         Real64 EvapWaterConsump;            // Evap condenser water consumption [m3]
     273             :         Real64 EvapCondAirFlow2;            // Air flow rate through the evap condenser at low speed, for water use calcs [m3/s]
     274             :         Real64 EvapCondEffect2;             // effectiveness of the evaporatively cooled condenser at low speed (-)
     275             :         Real64 EvapCondPumpElecNomPower2;   // Nominal power input to the evap condenser water circulation pump at low speed [W]
     276             :         Real64 BasinHeaterPower;            // Basin heater power (W)
     277             :         Real64 BasinHeaterConsumption;      // Basin heater energy consumption (J)
     278             :         // end of variables for DX cooling coil evaporative condenser option
     279             :         // start of variables for Multimode DX cooling coil
     280             :         int NumCapacityStages; // number of capacity stages, up to MaxCapacityStages for Multimode DX coil,
     281             :         // always 1 for other coils
     282             :         int NumDehumidModes; // number of enhanced dehumidification modes, up to MaxDehumidModes for Multimode DX coil,
     283             :         // always 0 for other coils)
     284             :         Array1D_string CoilPerformanceType;                            // Coil Performance object type
     285             :         Array1D_int CoilPerformanceType_Num;                           // Coil Performance object type number
     286             :         Array1D_string CoilPerformanceName;                            // Coil Performance object names
     287             :         Real64 CoolingCoilStg2RuntimeFrac;                             // Run time fraction of stage 2
     288             :         HVAC::CoilMode DehumidificationMode = HVAC::CoilMode::Invalid; // Dehumidification mode for multimode coil,
     289             :         // 0=normal, 1+=enhanced dehumidification mode
     290             :         // end of variables for Multimode DX cooling coil
     291             :         // start of variables for heat pump water heater DX coil
     292             :         int WaterInNode;                                                // Condenser water inlet node number for HPWH DX coil
     293             :         int WaterOutNode;                                               // Condenser water outlet node number for HPWH DX coil
     294             :         int HCOPFTemp;                                                  // COP as a function of temperature curve index
     295             :         int HCOPFTempErrorIndex;                                        // Used for warning messages when output of HCOPFTemp is negative
     296             :         int HCOPFAirFlow;                                               // COP as a function of air flow rate ratio curve index
     297             :         int HCOPFAirFlowErrorIndex;                                     // Used for warning messages when output of HCOPFAirFlow is negative
     298             :         int HCOPFWaterFlow;                                             // COP as a function of water flow rate ratio curve index
     299             :         int HCOPFWaterFlowErrorIndex;                                   // Used for warning messages when output of HCOPFWaterFlow is negative
     300             :         int HCapFTemp;                                                  // Heating capacity as a function of temperature curve index
     301             :         int HCapFTempErrorIndex;                                        // Used for warning messages when output of HCapFTemp is negative
     302             :         int HCapFAirFlow;                                               // Heating capacity as a function of air flow rate ratio curve index
     303             :         int HCapFAirFlowErrorIndex;                                     // Used for warning messages when output of HCapFAirFlow is negative
     304             :         int HCapFWaterFlow;                                             // Heating capacity as a function of water flow rate ratio curve index
     305             :         int HCapFWaterFlowErrorIndex;                                   // Used for warning messages when output of HCapFWaterFlow is negative
     306             :         HVAC::OATType InletAirTemperatureType = HVAC::OATType::Invalid; // Specifies to use either air wet-bulb or dry-bulb temp for curve objects
     307             :         Real64 RatedInletDBTemp;                                        // Rated inlet air dry-bulb temperature [C]
     308             :         Real64 RatedInletWBTemp;                                        // Rated inlet air wet-bulb temperature [C]
     309             :         Real64 RatedInletWaterTemp;                                     // Rated condenser water inlet temperature [C]
     310             :         //  REAL(r64) :: CondenserInletWaterTemp     = 0.0d0     ! Actual inlet water temperature to condenser of the HPWH DX coil [C]
     311             :         Real64 HPWHCondPumpElecNomPower;    // Nominal power input to the condenser water circulation pump [W]
     312             :         Real64 HPWHCondPumpFracToWater;     // Nominal power fraction to water for the condenser water circulation pump
     313             :         Real64 RatedHPWHCondWaterFlow;      // Rated water flow rate through the condenser of the HPWH DX coil [m3/s]
     314             :         Real64 ElecWaterHeatingPower;       // Total electric power consumed by compressor and condenser pump [W]
     315             :         Real64 ElecWaterHeatingConsumption; // Total electric consumption by compressor and condenser pump [J]
     316             :         bool FanPowerIncludedInCOP;         // Indicates that fan heat is included in heating capacity and COP
     317             :         bool CondPumpHeatInCapacity;        // Indicates that condenser pump heat is included in heating capacity
     318             :         bool CondPumpPowerInCOP;            // Indicates that condenser pump power is included in heating COP
     319             :         // end of variables for heat pump water heater DX coil
     320             :         // Error tracking
     321             :         Real64 LowTempLast;  // low ambient temp entering condenser when warning message occurred
     322             :         Real64 HighTempLast; // high ambient temp entering condenser when warning message occurred
     323             :         int ErrIndex1;       // index/pointer to recurring error structure for Air volume flow rate per watt of
     324             :         // rated total cooling capacity error
     325             :         int ErrIndex2;              // index/pointer to recurring error structure for PLF curve values must be >= 0.7. error
     326             :         int ErrIndex3;              // index/pointer to recurring error structure for DX cooling coil runtime fraction > 1.0 warning
     327             :         int ErrIndex4;              // index/pointer to recurring error structure for DX heating coil runtime fraction > 1.0 warning
     328             :         int LowAmbErrIndex;         // index/pointer to recurring error structure for low ambient temp entering condenser
     329             :         int HighAmbErrIndex;        // index/pointer to recurring error structure for high ambient temp entering condenser
     330             :         int PLFErrIndex;            // index/pointer to recurring error structure for PLF <> 1 at speed 1 for a multiple speed coil
     331             :         int PLRErrIndex;            // index/pointer to recurring error structure for PLR < .7
     332             :         bool PrintLowAmbMessage;    // used to print warning message for low ambient conditions
     333             :         std::string LowAmbBuffer1;  // holds warning message until next iteration (only prints 1 message/iteration)
     334             :         std::string LowAmbBuffer2;  // holds warning message until next iteration (only prints 1 message/iteration)
     335             :         bool PrintHighAmbMessage;   // used to print warning message for high ambient conditions
     336             :         std::string HighAmbBuffer1; // holds warning message until next iteration (only prints 1 message/iteration)
     337             :         std::string HighAmbBuffer2; // holds warning message until next iteration (only prints 1 message/iteration)
     338             :         // begin variables for Water System interactions
     339             :         EvapWaterSupply EvapWaterSupplyMode; // where does water come from
     340             :         std::string EvapWaterSupplyName;     // name of water source e.g. water storage tank
     341             :         int EvapWaterSupTankID;
     342             :         int EvapWaterTankDemandARRID;
     343             :         CondensateCollectAction CondensateCollectMode; // where does water come from
     344             :         std::string CondensateCollectName;             // name of water source e.g. water storage tank
     345             :         int CondensateTankID;
     346             :         int CondensateTankSupplyARRID;
     347             :         Real64 CondensateVdot; // rate of water condensation from air stream [m3/s]
     348             :         Real64 CondensateVol;  // amount of water condensed from air stream [m3]
     349             :         // end variables for water system interactions
     350             :         // used to print low ambient warning message for DOE2 coil only after time step has incremented
     351             :         Real64 CurrentEndTimeLast; // end time of time step for last simulation time step
     352             :         Real64 TimeStepSysLast;    // last system time step (used to check for downshifting)
     353             :         // for multispeed DX coil type
     354             :         Constant::eFuel FuelType;                   // Fuel type number
     355             :         int NumOfSpeeds;                            // Number of speeds
     356             :         bool PLRImpact;                             // Part load fraction applied to Speed Number > 1
     357             :         bool LatentImpact;                          // Latent degradation applied to Speed Number > 1
     358             :         Array1D_int MSErrIndex;                     // index flag for num speeds/recurring messages
     359             :         Array1D<Real64> MSRatedTotCap;              // Rated cooling capacity for MS heat pump [W]
     360             :         Array1D<Real64> MSRatedTotCapDes;           // Autosized Gross total cooling capacity at rated conditions [watts]
     361             :         Array1D<Real64> MSRatedSHR;                 // Rated SHR for MS heat pump [dimensionless]
     362             :         Array1D<Real64> MSRatedCOP;                 // Rated COP for MS heat pump [dimensionless]
     363             :         Array1D<Real64> MSRatedAirVolFlowRate;      // Air volume flow rate through unit at rated conditions [m3/s]
     364             :         Array1D<Real64> MSRatedAirMassFlowRate;     // Air mass flow rate through unit at rated conditions [m3/s]
     365             :         Array1D<Real64> MSRatedCBF;                 // rated coil bypass factor
     366             :         Array1D_int MSCCapFTemp;                    // index of total cooling capacity modifier curve
     367             :         Array1D_int MSCCapFFlow;                    // index of total cooling capacity modifier curve
     368             :         Array1D_int MSEIRFTemp;                     // index of energy input ratio modifier curve as a function of temperature
     369             :         Array1D_int MSEIRFFlow;                     // index of energy input ratio modifier curve as a function of flow fraction
     370             :         Array1D_int MSPLFFPLR;                      // index of part load factor as a function of part load ratio
     371             :         Array1D_int MSWasteHeat;                    // index of waste heat as a function of temperature
     372             :         Array1D<Real64> MSWasteHeatFrac;            // Waste heat fraction
     373             :         Array1D<Real64> MSEvapCondEffect;           // effectiveness of the evaporatively cooled condenser
     374             :         Array1D<Real64> MSEvapCondAirFlow;          // Air flow rate through the evap condenser for water use calcs [m3/s]
     375             :         Array1D<Real64> MSEvapCondPumpElecNomPower; // Nominal power input to the evap condenser
     376             :         // water circulation pump
     377             :         Array1D<Real64> MSTwet_Rated; // Nominal time for condensate to begin leaving the coil's
     378             :         // condensate drain line (sec)
     379             :         Array1D<Real64> MSGamma_Rated; // Initial moisture evaporation rate divided by steady-state
     380             :         // AC latent capacity (dimensionless)
     381             :         Array1D<Real64> MSMaxONOFFCyclesperHour;      // Maximum ON/OFF cycles per hour for the compressor (cycles/hour)
     382             :         Array1D<Real64> MSLatentCapacityTimeConstant; // Time constant for latent capacity to reach steady state
     383             :         Array1D<Real64> MSFanPowerPerEvapAirFlowRate;
     384             :         Array1D<Real64> MSFanPowerPerEvapAirFlowRate_2023;
     385             :         Real64 FuelUsed = 0.0;     // Energy used, in addition to electricity [W]
     386             :         Real64 FuelConsumed = 0.0; // Energy consumed, in addition to electricity [J]
     387             :         Real64 MSFuelWasteHeat;    // Total waste heat [J]
     388             :         bool MSHPHeatRecActive;    // True when entered Heat Rec Vol Flow Rate > 0
     389             :         int MSHPDesignSpecIndex;   // index to MSHPDesignSpecification object used for variable speed coils
     390             :         // End of multispeed DX coil input
     391             :         // VRF system variables used for sizing
     392             :         bool CoolingCoilPresent;         // FALSE if coil not present
     393             :         bool HeatingCoilPresent;         // FALSE if coil not present
     394             :         bool ISHundredPercentDOASDXCoil; // FALSE if coil is regular dx coil
     395             :         Array1D_int SHRFTemp;            // index of sensible heat ratio modifier curve
     396             :         // (function of entering wetbulb and drybulb)
     397             :         int SHRFTempErrorIndex; // Used for warning messages when output of SHRFTemp is negative
     398             :         Array1D_int SHRFFlow;   // index of sensible heat ratio modifier curve
     399             :         // (function of actual supply air flow vs rated air flow)
     400             :         int SHRFFlowErrorIndex; // Used for warning messages when output of SHRFFlow is negative
     401             :         int SHRFTemp2;          // index of sensible heat ratio modifier curve
     402             :         // (function of entering wetbulb and drybulb)
     403             :         int SHRFFlow2; // index of sensible heat ratio modifier curve
     404             :         // (function of actual supply air flow vs rated air flow)
     405             :         bool UserSHRCurveExists; // TRUE if user specified SHR modifier curve exists
     406             :         bool ASHRAE127StdRprt;   // TRUE if user wishes to report ASHRAE 127 standard ratings
     407             : 
     408             :         int SecZonePtr;                                // index to the zone where the secondary coil is placed
     409             :         int SecCoilSHRFT;                              // index to the secondary coil sensible heat ratio temperature modifier curve
     410             :         int SecCoilSHRFF;                              // index to the secondary coil sensible heat ratio flor fraction modifier curve
     411             :         Real64 SecCoilAirFlow;                         // secondary coil air flow rate
     412             :         Real64 SecCoilAirFlowScalingFactor;            // secondary coil air flow rate autosize scaling factor
     413             :         Real64 SecCoilRatedSHR;                        // secondary coil nominal or rated sensible heat ratio
     414             :         Real64 SecCoilSHR;                             // secondary coil current sensible heat ratio
     415             :         Real64 EvapInletWetBulb;                       // secondary DX coil inlet wet bulb temperature (zone air node wet bulb temp.)
     416             :         Real64 SecCoilSensibleHeatGainRate;            // secondary zone sensible heat gain rate [W]
     417             :         Real64 SecCoilTotalHeatRemovalRate;            // secondary zone total heat removal rate [W]
     418             :         Real64 SecCoilSensibleHeatRemovalRate;         // secondary zone sensible heat removal rate [W]
     419             :         Real64 SecCoilLatentHeatRemovalRate;           // secondary zone latent heat removal rate [W]
     420             :         bool IsSecondaryDXCoilInZone;                  // true means secondary dx coil is zone instead of outside
     421             :         bool IsDXCoilInZone;                           // true means dx coil is in zone instead of outside
     422             :         Real64 CompressorPartLoadRatio;                // compressor part load ratio of the primary DX coil
     423             :         Array1D_int MSSecCoilSHRFT;                    // index to the multi speed secondary coil sensible heat ratio temperature modifier curve
     424             :         Array1D_int MSSecCoilSHRFF;                    //  index to the multi speed secondary coil sensible heat ratio flow fraction modifier curve
     425             :         Array1D<Real64> MSSecCoilAirFlow;              // multispeed secondary coil air flow rate
     426             :         Array1D<Real64> MSSecCoilAirFlowScalingFactor; // multispeed secondary coil air flow rate autosize scaling factor
     427             :         Array1D<Real64> MSSecCoilRatedSHR;             // multispeed secondary coil nominal or rated sensible heat ratio
     428             :         int MSSpeedNumLS;                              // current low speed number of multspeed HP
     429             :         int MSSpeedNumHS;                              // current high speed number of multspeed HP
     430             :         Real64 MSSpeedRatio;                           // current speed ratio of multspeed HP
     431             :         Real64 MSCycRatio;                             // current cycling ratio of multspeed HP
     432             : 
     433             :         // The following members are for VRF Coils (FluidTCtrl Model)
     434             :         int VRFIUPtr;              // index to the VRF Indoor Unit where the coil is placed
     435             :         int VRFOUPtr;              // index to the VRF Outdoor Unit that the coil serves
     436             :         Real64 EvaporatingTemp;    // indoor unit evaporating temperature [C]
     437             :         Real64 CondensingTemp;     // indoor unit condensing temperature [C]
     438             :         Real64 C1Te;               // VRF Indoor Unit Coefficient 1 to calculate Te,req [--]
     439             :         Real64 C2Te;               // VRF Indoor Unit Coefficient 2 to calculate Te,req [--]
     440             :         Real64 C3Te;               // VRF Indoor Unit Coefficient 3 to calculate Te,req [--]
     441             :         Real64 C1Tc;               // VRF Indoor Unit Coefficient 1 to calculate Tc,req [--]
     442             :         Real64 C2Tc;               // VRF Indoor Unit Coefficient 2 to calculate Tc,req [--]
     443             :         Real64 C3Tc;               // VRF Indoor Unit Coefficient 3 to calculate Tc,req [--]
     444             :         Real64 SH;                 // Superheating degrees [C]
     445             :         Real64 SC;                 // Subcooling  degrees [C]
     446             :         Real64 ActualSH;           // Actual superheating degrees [C]
     447             :         Real64 ActualSC;           // Actual subcooling degrees [C]
     448             :         Real64 RateBFVRFIUEvap;    // VRF Iutdoor Unit Evaporator Rated Bypass Factor
     449             :         Real64 RateBFVRFIUCond;    // VRF Iutdoor Unit Condenser Rated Bypass Factor
     450             :         int CAPFTErrIndex;         // index/pointer to recurring error structure for CAPFT curve value <= 0.0
     451             :         int EIRFTErrIndex;         // index/pointer to recurring error structure for EIRFT curve value <= 0.0
     452             :         bool reportCoilFinalSizes; // one time report of sizes to coil selection report
     453             :         Real64 capModFacTotal;     // current coil capacity modification factor
     454             :         int AirLoopNum;            // Airloop number
     455             : 
     456             :         // Default Constructor
     457         247 :         DXCoilData()
     458         247 :             : DXCoilType_Num(0), SchedPtr(0), RatedTotCap(MaxModes, 0.0), HeatSizeRatio(1.0), RatedTotCapEMSOverrideOn(MaxModes, false),
     459         247 :               RatedTotCapEMSOverrideValue(MaxModes, 0.0), RatedSHR(MaxModes, 0.0), RatedSHREMSOverrideOn(MaxModes, false),
     460         247 :               RatedSHREMSOverrideValue(MaxModes, 0.0), RatedCOP(MaxModes, 0.0), RatedAirVolFlowRate(MaxModes, 0.0),
     461         247 :               RatedAirVolFlowRateEMSOverrideON(MaxModes, false), RatedAirVolFlowRateEMSOverrideValue(MaxModes, 0.0),
     462         247 :               FanPowerPerEvapAirFlowRate(MaxModes, 0.0), FanPowerPerEvapAirFlowRate_2023(MaxModes, 0.0), RatedAirMassFlowRate(MaxModes, 0.0),
     463         247 :               BypassedFlowFrac(MaxModes, 0.0), RatedCBF(MaxModes, 0.0), AirInNode(0), AirOutNode(0), CCapFTemp(MaxModes, 0), CCapFTempErrorIndex(0),
     464         247 :               CCapFFlow(MaxModes, 0), CCapFFlowErrorIndex(0), EIRFTemp(MaxModes, 0), EIRFTempErrorIndex(0), EIRFFlow(MaxModes, 0),
     465         247 :               EIRFFlowErrorIndex(0), PLFFPLR(MaxModes, 0), ReportCoolingCoilCrankcasePower(true), CrankcaseHeaterCapacity(0.0),
     466         247 :               CrankcaseHeaterPower(0.0), MaxOATCrankcaseHeater(0.0), CrankcaseHeaterCapacityCurveIndex(0), CrankcaseHeaterConsumption(0.0),
     467         247 :               BasinHeaterPowerFTempDiff(0.0), BasinHeaterSetPointTemp(0.0), CompanionUpstreamDXCoil(0), FindCompanionUpStreamCoil(true),
     468         247 :               CondenserInletNodeNum(MaxModes, 0), LowOutletTempIndex(0), FullLoadOutAirTempLast(0.0), FullLoadInletAirTempLast(0.0),
     469         494 :               PrintLowOutTempMessage(false), HeatingCoilPLFCurvePTR(0), BasinHeaterSchedulePtr(0), RatedTotCap2(0.0), RatedSHR2(0.0), RatedCOP2(0.0),
     470         247 :               RatedAirVolFlowRate2(0.0), FanPowerPerEvapAirFlowRate_LowSpeed(MaxModes, 0.0), FanPowerPerEvapAirFlowRate_2023_LowSpeed(MaxModes, 0.0),
     471         247 :               RatedAirMassFlowRate2(0.0), RatedCBF2(0.0), CCapFTemp2(0), EIRFTemp2(0), RatedEIR2(0.0), InternalStaticPressureDrop(0.0),
     472         247 :               RateWithInternalStaticAndFanObject(false), SupplyFanIndex(0), supplyFanType(HVAC::FanType::Invalid), RatedEIR(MaxModes, 0.0),
     473         247 :               InletAirMassFlowRate(0.0), InletAirMassFlowRateMax(0.0), InletAirTemp(0.0), InletAirHumRat(0.0), InletAirEnthalpy(0.0),
     474         247 :               OutletAirTemp(0.0), OutletAirHumRat(0.0), OutletAirEnthalpy(0.0), PartLoadRatio(0.0), TotalCoolingEnergy(0.0), SensCoolingEnergy(0.0),
     475         247 :               LatCoolingEnergy(0.0), TotalCoolingEnergyRate(0.0), SensCoolingEnergyRate(0.0), LatCoolingEnergyRate(0.0), ElecCoolingConsumption(0.0),
     476         247 :               ElecCoolingPower(0.0), CoolingCoilRuntimeFraction(0.0), TotalHeatingEnergy(0.0), TotalHeatingEnergyRate(0.0),
     477         247 :               ElecHeatingConsumption(0.0), ElecHeatingPower(0.0), HeatingCoilRuntimeFraction(0.0),
     478         247 :               DefrostStrategy(StandardRatings::DefrostStrat::Invalid), DefrostControl(StandardRatings::HPdefrostControl::Invalid), EIRFPLR(0),
     479         247 :               DefrostEIRFT(0), RegionNum(0), MinOATCompressor(0.0), OATempCompressorOn(0.0), MaxOATCompressor(0.0), MaxOATDefrost(0.0),
     480         247 :               DefrostTime(0.0), DefrostCapacity(0.0), HPCompressorRuntime(0.0), HPCompressorRuntimeLast(0.0), TimeLeftToDefrost(0.0),
     481         247 :               DefrostPower(0.0), DefrostConsumption(0.0), HeatingPerformanceOATType(HVAC::OATType::DryBulb), HPCoilIsInCoilSystemHeatingDX(false),
     482         247 :               OATempCompressorOnOffBlank(false), Twet_Rated(MaxModes, 0.0), Gamma_Rated(MaxModes, 0.0), MaxONOFFCyclesperHour(MaxModes, 0.0),
     483         247 :               LatentCapacityTimeConstant(MaxModes, 0.0), CondenserType(MaxModes, DataHeatBalance::RefrigCondenserType::Air),
     484         247 :               ReportEvapCondVars(false), EvapCondEffect(MaxModes, 0.0), CondInletTemp(0.0), EvapCondAirFlow(MaxModes, 0.0),
     485         247 :               EvapCondPumpElecNomPower(MaxModes, 0.0), EvapCondPumpElecPower(0.0), EvapCondPumpElecConsumption(0.0), EvapWaterConsumpRate(0.0),
     486         247 :               EvapWaterConsump(0.0), EvapCondAirFlow2(0.0), EvapCondEffect2(0.0), EvapCondPumpElecNomPower2(0.0), BasinHeaterPower(0.0),
     487         247 :               BasinHeaterConsumption(0.0), NumCapacityStages(1), NumDehumidModes(0), CoilPerformanceType(MaxModes),
     488         247 :               CoilPerformanceType_Num(MaxModes, 0), CoilPerformanceName(MaxModes), CoolingCoilStg2RuntimeFrac(0.0), WaterInNode(0), WaterOutNode(0),
     489         247 :               HCOPFTemp(0), HCOPFTempErrorIndex(0), HCOPFAirFlow(0), HCOPFAirFlowErrorIndex(0), HCOPFWaterFlow(0), HCOPFWaterFlowErrorIndex(0),
     490         247 :               HCapFTemp(0), HCapFTempErrorIndex(0), HCapFAirFlow(0), HCapFAirFlowErrorIndex(0), HCapFWaterFlow(0), HCapFWaterFlowErrorIndex(0),
     491         247 :               RatedInletDBTemp(0.0), RatedInletWBTemp(0.0), RatedInletWaterTemp(0.0), HPWHCondPumpElecNomPower(0.0), HPWHCondPumpFracToWater(0.0),
     492         247 :               RatedHPWHCondWaterFlow(0.0), ElecWaterHeatingPower(0.0), ElecWaterHeatingConsumption(0.0), FanPowerIncludedInCOP(true),
     493         247 :               CondPumpHeatInCapacity(false), CondPumpPowerInCOP(false), LowTempLast(0.0), HighTempLast(0.0), ErrIndex1(0), ErrIndex2(0), ErrIndex3(0),
     494         247 :               ErrIndex4(0), LowAmbErrIndex(0), HighAmbErrIndex(0), PLFErrIndex(0), PLRErrIndex(0), PrintLowAmbMessage(false),
     495         741 :               PrintHighAmbMessage(false), EvapWaterSupplyMode(EvapWaterSupply::FromMains), EvapWaterSupTankID(0), EvapWaterTankDemandARRID(0),
     496         494 :               CondensateCollectMode(CondensateCollectAction::Discard), CondensateTankID(0), CondensateTankSupplyARRID(0), CondensateVdot(0.0),
     497         247 :               CondensateVol(0.0), CurrentEndTimeLast(0.0), TimeStepSysLast(0.0), FuelType(Constant::eFuel::Invalid), NumOfSpeeds(0), PLRImpact(false),
     498         494 :               LatentImpact(false), MSFuelWasteHeat(0.0), MSHPHeatRecActive(false), MSHPDesignSpecIndex(0), CoolingCoilPresent(true),
     499         247 :               HeatingCoilPresent(true), ISHundredPercentDOASDXCoil(false), SHRFTemp(MaxModes, 0), SHRFTempErrorIndex(0), SHRFFlow(MaxModes, 0),
     500         247 :               SHRFFlowErrorIndex(0), SHRFTemp2(0), SHRFFlow2(0), UserSHRCurveExists(false), ASHRAE127StdRprt(false), SecZonePtr(0), SecCoilSHRFT(0),
     501         247 :               SecCoilSHRFF(0), SecCoilAirFlow(0.0), SecCoilAirFlowScalingFactor(1.0), SecCoilRatedSHR(1.0), SecCoilSHR(1.0), EvapInletWetBulb(0.0),
     502         247 :               SecCoilSensibleHeatGainRate(0.0), SecCoilTotalHeatRemovalRate(0.0), SecCoilSensibleHeatRemovalRate(0.0),
     503         494 :               SecCoilLatentHeatRemovalRate(0.0), IsSecondaryDXCoilInZone(false), IsDXCoilInZone(false), CompressorPartLoadRatio(0.0), MSSpeedNumLS(1),
     504         247 :               MSSpeedNumHS(2), MSSpeedRatio(0.0), MSCycRatio(0.0), VRFIUPtr(0), VRFOUPtr(0), EvaporatingTemp(4.0), CondensingTemp(40.0), C1Te(0.0),
     505         247 :               C2Te(0.0), C3Te(0.0), C1Tc(0.0), C2Tc(0.0), C3Tc(0.0), SH(0.0), SC(0.0), ActualSH(0.0), ActualSC(0.0), RateBFVRFIUEvap(0.0592),
     506        1235 :               RateBFVRFIUCond(0.1360), CAPFTErrIndex(0), EIRFTErrIndex(0), reportCoilFinalSizes(true), capModFacTotal(0.0), AirLoopNum(0)
     507             :         {
     508         247 :         }
     509             :     };
     510             : 
     511             :     struct PerfModeData
     512             :     {
     513             :         // Members
     514             :         Array1D<std::string> FieldNames;
     515             : 
     516             :         // Default Constructor
     517        1223 :         PerfModeData() : FieldNames()
     518             :         {
     519        1223 :         }
     520             :     };
     521             : 
     522             :     struct DXCoilNumericFieldData
     523             :     {
     524             :         // Members
     525             :         Array1D<PerfModeData> PerfMode; // Coil Performance object type
     526             : 
     527             :         // Default Constructor
     528         247 :         DXCoilNumericFieldData() : PerfMode(0)
     529             :         {
     530         247 :         }
     531             :     };
     532             : 
     533             :     // Functions
     534             : 
     535             :     void SimDXCoil(EnergyPlusData &state,
     536             :                    std::string_view CompName,             // name of the fan coil unit
     537             :                    HVAC::CompressorOp const compressorOp, // compressor operation; 1=on, 0=off
     538             :                    bool const FirstHVACIteration,         // True when first HVAC iteration
     539             :                    int &CompIndex,
     540             :                    HVAC::FanOp const fanOp,                                          // allows parent object to control fan mode
     541             :                    ObjexxFCL::Optional<Real64 const> PartLoadRatio = _,              // part load ratio (for single speed cycling unit)
     542             :                    ObjexxFCL::Optional<Real64 const> OnOffAFR = _,                   // ratio of compressor on airflow to compressor off airflow
     543             :                    ObjexxFCL::Optional<Real64 const> CoilCoolingHeatingPLRRatio = _, // used for cycling fan RH control
     544             :                    ObjexxFCL::Optional<Real64 const> MaxCap = _,                     // maximum cooling capacity of VRF terminal units
     545             :                    ObjexxFCL::Optional<Real64 const> CompCyclingRatio = _            // cycling ratio of VRF condenser connected to this TU
     546             :     );
     547             : 
     548             :     void SimDXCoilMultiSpeed(EnergyPlusData &state,
     549             :                              std::string_view CompName, // name of the fan coil unit
     550             :                              Real64 const SpeedRatio,   // = (CompressorSpeed - CompressorSpeedMin) /
     551             :                              Real64 const CycRatio,     // cycling part load ratio for variable speed
     552             :                              int &CompIndex,
     553             :                              ObjexxFCL::Optional_int_const SpeedNum = _,                // Speed number for multispeed cooling coil onlyn
     554             :                              ObjexxFCL::Optional<HVAC::FanOp const> fanOp = _,          // Fan operation mode
     555             :                              HVAC::CompressorOp CompressorOp = HVAC::CompressorOp::Off, // Compressor on/off; 1=on, 0=off
     556             :                              ObjexxFCL::Optional_int_const SingleMode = _               // Single mode operation Yes/No; 1=Yes, 0=No
     557             :     );
     558             : 
     559             :     void SimDXCoilMultiMode(EnergyPlusData &state,
     560             :                             std::string_view CompName,        // name of the fan coil unit
     561             :                             HVAC::CompressorOp compressorOp,  // compressor operation; 1=on, 0=off !unused1208
     562             :                             bool const FirstHVACIteration,    // true if first hvac iteration
     563             :                             Real64 const PartLoadRatio,       // part load ratio
     564             :                             HVAC::CoilMode const DehumidMode, // dehumidification mode (0=normal, 1=enhanced)
     565             :                             int &CompIndex,
     566             :                             HVAC::FanOp const fanOp // allows parent object to control fan mode
     567             :     );
     568             : 
     569             :     // TODO: Add New Property for AHRI 2023 Standard & Modify Numeric Fields (increment)
     570             :     void GetDXCoils(EnergyPlusData &state);
     571             : 
     572             :     void InitDXCoil(EnergyPlusData &state, int const DXCoilNum); // number of the current DX coil unit being simulated
     573             : 
     574             :     void SizeDXCoil(EnergyPlusData &state, int const DXCoilNum);
     575             : 
     576             :     void CalcHPWHDXCoil(EnergyPlusData &state,
     577             :                         int const DXCoilNum,       // the number of the DX coil to be simulated
     578             :                         Real64 const PartLoadRatio // sensible water heating load / full load sensible water heating capacity
     579             :     );
     580             : 
     581             :     void CalcDoe2DXCoil(EnergyPlusData &state,
     582             :                         int const DXCoilNum,                        // the number of the DX coil to be simulated
     583             :                         HVAC::CompressorOp compressorOp,            // compressor operation; 1=on, 0=off
     584             :                         bool const FirstHVACIteration,              // true if this is the first iteration of HVAC
     585             :                         Real64 const PartLoadRatio,                 // sensible cooling load / full load sensible cooling capacity
     586             :                         HVAC::FanOp const fanOp,                    // Allows parent object to control fan operation
     587             :                         ObjexxFCL::Optional_int_const PerfMode = _, // Performance mode for MultiMode DX coil; Always 1 for other coil types
     588             :                         ObjexxFCL::Optional<Real64 const> OnOffAirFlowRatio = _, // ratio of compressor on airflow to compressor off airflow
     589             :                         ObjexxFCL::Optional<Real64 const> CoolingHeatingPLR = _  // used for cycling fan RH control
     590             :     );
     591             : 
     592             :     void CalcVRFCoolingCoil(EnergyPlusData &state,
     593             :                             int const DXCoilNum,                        // the number of the DX coil to be simulated
     594             :                             HVAC::CompressorOp compressorOp,            // compressor operation; 1=on, 0=off
     595             :                             bool const FirstHVACIteration,              // true if this is the first iteration of HVAC
     596             :                             Real64 const PartLoadRatio,                 // sensible cooling load / full load sensible cooling capacity
     597             :                             HVAC::FanOp const fanOp,                    // Allows parent object to control fan operation
     598             :                             Real64 const CompCycRatio,                  // cycling ratio of VRF condenser
     599             :                             ObjexxFCL::Optional_int_const PerfMode = _, // Performance mode for MultiMode DX coil; Always 1 for other coil types
     600             :                             ObjexxFCL::Optional<Real64 const> OnOffAirFlowRatio = _, // ratio of compressor on airflow to compressor off airflow
     601             :                             ObjexxFCL::Optional<Real64 const> MaxCoolCap = _         // maximum capacity of DX coil
     602             :     );
     603             : 
     604             :     void CalcDXHeatingCoil(EnergyPlusData &state,
     605             :                            int const DXCoilNum,                                     // the number of the DX heating coil to be simulated
     606             :                            Real64 const PartLoadRatio,                              // sensible cooling load / full load sensible cooling capacity
     607             :                            HVAC::FanOp const fanOp,                                 // Allows parent object to control fan mode
     608             :                            ObjexxFCL::Optional<Real64 const> OnOffAirFlowRatio = _, // ratio of compressor on airflow to compressor off airflow
     609             :                            ObjexxFCL::Optional<Real64 const> MaxHeatCap = _         // maximum allowed heating capacity
     610             :     );
     611             : 
     612             :     void CalcMultiSpeedDXCoil(EnergyPlusData &state,
     613             :                               int const DXCoilNum,     // the number of the DX heating coil to be simulated
     614             :                               Real64 const SpeedRatio, // = (CompressorSpeed - CompressorSpeedMin) / (CompressorSpeedMax - CompressorSpeedMin)
     615             :                               Real64 const CycRatio,   // cycling part load ratio
     616             :                               ObjexxFCL::Optional_bool_const ForceOn = _);
     617             : 
     618             :     void CalcBasinHeaterPowerForMultiModeDXCoil(EnergyPlusData &state,
     619             :                                                 int const DXCoilNum,             // Index of coil being simulated
     620             :                                                 HVAC::CoilMode const DehumidMode // Dehumidification mode (0=normal, 1=enhanced)
     621             :     );
     622             : 
     623             :     Real64 AdjustCBF(Real64 const CBFNom,             // nominal coil bypass factor
     624             :                      Real64 const AirMassFlowRateNom, // nominal air mass flow rate [kg/s]
     625             :                      Real64 const AirMassFlowRate     // actual air mass flow rate [kg/s]
     626             :     );
     627             : 
     628             :     Real64 CalcCBF(EnergyPlusData &state,
     629             :                    std::string const &UnitType,
     630             :                    std::string const &UnitName,
     631             :                    Real64 const InletAirTemp,   // inlet air temperature [C]
     632             :                    Real64 const InletAirHumRat, // inlet air humidity ratio [kg water / kg dry air]
     633             :                    Real64 const TotCap,         // total cooling  capacity [Watts]
     634             :                    Real64 const AirVolFlowRate, // the air volume flow rate at the given capacity [m3/s]
     635             :                    Real64 const SHR,            // sensible heat ratio at the given capacity and flow rate
     636             :                    bool const PrintFlag = true  // flag used to print warnings if desired
     637             :     );
     638             : 
     639             :     Real64 ValidateADP(EnergyPlusData &state,
     640             :                        std::string const &UnitType,      // component name
     641             :                        std::string const &UnitName,      // component type
     642             :                        Real64 const RatedInletAirTemp,   // coil inlet air temperature [C]
     643             :                        Real64 const RatedInletAirHumRat, // coil inlet air humidity ratio [kg/kg]
     644             :                        Real64 const TotCap,              // coil total capacity [W]
     645             :                        Real64 const AirMassFlow,         // coil air mass flow rate [kg/s]
     646             :                        Real64 const InitialSHR,          // coil sensible heat ratio []
     647             :                        std::string const &CallingRoutine // function name calling this routine
     648             :     );
     649             : 
     650             :     Real64 CalcEffectiveSHR(EnergyPlusData &state,
     651             :                             int const DXCoilNum,                             // Index number for cooling coil
     652             :                             Real64 const SHRss,                              // Steady-state sensible heat ratio
     653             :                             Real64 const RTF,                                // Compressor run-time fraction
     654             :                             Real64 const QLatRated,                          // Rated latent capacity
     655             :                             Real64 const QLatActual,                         // Actual latent capacity
     656             :                             Real64 const EnteringDB,                         // Entering air dry-bulb temperature
     657             :                             Real64 const EnteringWB,                         // Entering air wet-bulb temperature
     658             :                             ObjexxFCL::Optional_int_const Mode = _,          // Performance mode for MultiMode DX coil; Always 1 for other coil types
     659             :                             ObjexxFCL::Optional<Real64 const> HeatingRTF = _ // Used to recalculate Toff for cycling fan systems
     660             :     );
     661             : 
     662             :     void CalcTotCapSHR(EnergyPlusData &state,
     663             :                        Real64 const InletDryBulb,     // inlet air dry bulb temperature [C]
     664             :                        Real64 const InletHumRat,      // inlet air humidity ratio [kg water / kg dry air]
     665             :                        Real64 const InletEnthalpy,    // inlet air specific enthalpy [J/kg]
     666             :                        Real64 const InletWetBulb,     // inlet air wet bulb temperature [C]
     667             :                        Real64 const AirMassFlowRatio, // Ratio of actual air mass flow to nominal air mass flow
     668             :                        Real64 const AirMassFlow,      // actual mass flow for capacity and SHR calculation
     669             :                        Real64 const TotCapNom,        // nominal total capacity [W]
     670             :                        Real64 const CBF,              // coil bypass factor
     671             :                        int const CCapFTemp,           // capacity modifier curve index, function of entering wetbulb
     672             :                        int const CCapFFlow,           // capacity modifier curve, function of actual flow vs rated flow
     673             :                        Real64 &TotCap,                // total capacity at the given conditions [W]
     674             :                        Real64 &SHR,                   // sensible heat ratio at the given conditions
     675             :                        Real64 const CondInletTemp,    // Condenser inlet temperature [C]
     676             :                        Real64 const Pressure,         // air pressure [Pa]
     677             :                        Real64 &TotCapModFac           // capacity modification factor, func of temp and func of flow
     678             :     );
     679             : 
     680             :     void CalcMultiSpeedDXCoilCooling(EnergyPlusData &state,
     681             :                                      int const DXCoilNum,     // the number of the DX heating coil to be simulated
     682             :                                      Real64 const SpeedRatio, // = (CompressorSpeed - CompressorSpeedMin) / (CompressorSpeedMax - CompressorSpeedMin)
     683             :                                      Real64 const CycRatio,   // cycling part load ratio
     684             :                                      int const SpeedNum,      // Speed number
     685             :                                      HVAC::FanOp const fanOp, // Sets fan control to FanOp::Cycling or FanOp::Continuous
     686             :                                      HVAC::CompressorOp compressorOp, // Compressor on/off; 1=on, 0=off
     687             :                                      int const SingleMode             // Single mode operation Yes/No; 1=Yes, 0=No
     688             :     );
     689             : 
     690             :     void CalcMultiSpeedDXCoilHeating(EnergyPlusData &state,
     691             :                                      int const DXCoilNum,     // the number of the DX heating coil to be simulated
     692             :                                      Real64 const SpeedRatio, // = (CompressorSpeed - CompressorSpeedMin) / (CompressorSpeedMax - CompressorSpeedMin)
     693             :                                      Real64 const CycRatio,   // cycling part load ratio
     694             :                                      int const SpeedNum,      // Speed number
     695             :                                      HVAC::FanOp const fanOp, // Fan operation mode
     696             :                                      int const SingleMode     // Single mode operation Yes/No; 1=Yes, 0=No
     697             :     );
     698             : 
     699             :     void UpdateDXCoil(EnergyPlusData &state, int const DXCoilNum); // number of the current fan coil unit being simulated
     700             : 
     701             :     void ReportDXCoil(EnergyPlusData &state, int const DXCoilNum); // number of the current fan coil unit being simulated
     702             : 
     703             :     void CalcTwoSpeedDXCoilStandardRating(EnergyPlusData &state, int const DXCoilNum);
     704             : 
     705             :     void GetFanIndexForTwoSpeedCoil(
     706             :         EnergyPlusData &state, int const CoolingCoilIndex, int &SupplyFanIndex, std::string &SupplyFanName, HVAC::FanType &supplyFanType);
     707             : 
     708             :     void GetDXCoilIndex(EnergyPlusData &state,
     709             :                         std::string const &DXCoilName,
     710             :                         int &DXCoilIndex,
     711             :                         bool &ErrorsFound,
     712             :                         std::string_view const ThisObjectType = {},
     713             :                         bool const SuppressWarning = false);
     714             : 
     715             :     std::string GetDXCoilName(
     716             :         EnergyPlusData &state, int &DXCoilIndex, bool &ErrorsFound, std::string_view const ThisObjectType = {}, bool const SuppressWarning = false);
     717             : 
     718             :     Real64 GetCoilCapacity(EnergyPlusData &state,
     719             :                            std::string const &CoilType, // must match coil types in this module
     720             :                            std::string const &CoilName, // must match coil names for the coil type
     721             :                            bool &ErrorsFound            // set to true if problem
     722             :     );
     723             : 
     724             :     Real64 GetCoilCapacityByIndexType(EnergyPlusData &state,
     725             :                                       int const CoilIndex,    // must match coil index for the coil type
     726             :                                       int const CoilType_Num, // must match coil types in this module
     727             :                                       bool &ErrorsFound       // set to true if problem
     728             :     );
     729             : 
     730             :     int GetCoilTypeNum(EnergyPlusData &state,
     731             :                        std::string const &CoilType,                    // must match coil types in this module
     732             :                        std::string const &CoilName,                    // must match coil names for the coil type
     733             :                        bool &ErrorsFound,                              // set to true if problem
     734             :                        ObjexxFCL::Optional_bool_const PrintWarning = _ // prints warning when true
     735             :     );
     736             : 
     737             :     Real64 GetMinOATCompressor(EnergyPlusData &state,
     738             :                                int const CoilIndex, // index to coil
     739             :                                bool &ErrorsFound    // set to true if problem
     740             :     );
     741             : 
     742             :     int GetCoilInletNode(EnergyPlusData &state,
     743             :                          std::string const &CoilType, // must match coil types in this module
     744             :                          std::string const &CoilName, // must match coil names for the coil type
     745             :                          bool &ErrorsFound            // set to true if problem
     746             :     );
     747             : 
     748             :     int GetCoilOutletNode(EnergyPlusData &state,
     749             :                           std::string const &CoilType, // must match coil types in this module
     750             :                           std::string const &CoilName, // must match coil names for the coil type
     751             :                           bool &ErrorsFound            // set to true if problem
     752             :     );
     753             : 
     754             :     int getCoilInNodeIndex(EnergyPlusData &state,
     755             :                            int CoilIndex,    // coil index
     756             :                            bool &ErrorsFound // set to true if problem
     757             :     );
     758             : 
     759             :     int getCoilOutNodeIndex(EnergyPlusData &state,
     760             :                             int CoilIndex,    // coil index
     761             :                             bool &ErrorsFound // set to true if problem
     762             :     );
     763             : 
     764             :     int GetCoilCondenserInletNode(EnergyPlusData &state,
     765             :                                   std::string const &CoilType, // must match coil types in this module
     766             :                                   std::string const &CoilName, // must match coil names for the coil type
     767             :                                   bool &ErrorsFound            // set to true if problem
     768             :     );
     769             : 
     770             :     Real64 GetDXCoilBypassedFlowFrac(EnergyPlusData &state,
     771             :                                      std::string const &CoilType, // must match coil types in this module
     772             :                                      std::string const &CoilName, // must match coil names for the coil type
     773             :                                      bool &ErrorsFound            // set to true if problem
     774             :     );
     775             : 
     776             :     int GetHPCoolingCoilIndex(EnergyPlusData &state,
     777             :                               std::string const &HeatingCoilType, // Type of DX heating coil used in HP
     778             :                               std::string const &HeatingCoilName, // Name of DX heating coil used in HP
     779             :                               int const HeatingCoilIndex          // Index of DX heating coil used in HP
     780             :     );
     781             : 
     782             :     int GetDXCoilNumberOfSpeeds(EnergyPlusData &state,
     783             :                                 std::string const &CoilType, // must match coil types in this module
     784             :                                 std::string const &CoilName, // must match coil names for the coil type
     785             :                                 bool &ErrorsFound            // set to true if problem
     786             :     );
     787             : 
     788             :     int GetDXCoilAvailSchPtr(EnergyPlusData &state,
     789             :                              std::string const &CoilType,                // must match coil types in this module
     790             :                              std::string const &CoilName,                // must match coil names for the coil type
     791             :                              bool &ErrorsFound,                          // set to true if problem
     792             :                              ObjexxFCL::Optional_int_const CoilIndex = _ // Coil index number
     793             :     );
     794             : 
     795             :     Real64 GetDXCoilAirFlow(EnergyPlusData &state,
     796             :                             std::string const &CoilType, // must match coil types in this module
     797             :                             std::string const &CoilName, // must match coil names for the coil type
     798             :                             bool &ErrorsFound            // set to true if problem
     799             :     );
     800             : 
     801             :     int GetDXCoilCapFTCurveIndex(EnergyPlusData &state,
     802             :                                  int const CoilIndex, // coil index pointer
     803             :                                  bool &ErrorsFound    // set to true if problem
     804             :     );
     805             : 
     806             :     void SetDXCoolingCoilData(
     807             :         EnergyPlusData &state,
     808             :         int const DXCoilNum,                                                         // Number of DX Cooling Coil
     809             :         bool &ErrorsFound,                                                           // Set to true if certain errors found
     810             :         ObjexxFCL::Optional_int HeatingCoilPLFCurvePTR = _,                          // Parameter equivalent of heating coil PLR curve index
     811             :         ObjexxFCL::Optional<DataHeatBalance::RefrigCondenserType> CondenserType = _, // Parameter equivalent of condenser type parameter
     812             :         ObjexxFCL::Optional_int CondenserInletNodeNum = _,                           // Parameter equivalent of condenser inlet node number
     813             :         ObjexxFCL::Optional<Real64> MaxOATCrankcaseHeater = _, // Parameter equivalent of condenser Max OAT for Crank Case Heater temp
     814             :         ObjexxFCL::Optional<Real64> MinOATCooling = _,         // Parameter equivalent of condenser Min OAT for compressor cooling operation
     815             :         ObjexxFCL::Optional<Real64> MaxOATCooling = _,         // Parameter equivalent of condenser Max OAT for compressor cooling operation
     816             :         ObjexxFCL::Optional<Real64> MinOATHeating = _,         // Parameter equivalent of condenser Min OAT for compressor heating operation
     817             :         ObjexxFCL::Optional<Real64> MaxOATHeating = _,         // Parameter equivalent of condenser Max OAT for compressor heating operation
     818             :         ObjexxFCL::Optional<HVAC::OATType> HeatingPerformanceOATType = _, // Parameter equivalent to condenser entering air temp type (1-db, 2=wb)
     819             :         ObjexxFCL::Optional<StandardRatings::DefrostStrat> DefrostStrategy = _,
     820             :         ObjexxFCL::Optional<StandardRatings::HPdefrostControl> DefrostControl = _,
     821             :         ObjexxFCL::Optional_int DefrostEIRPtr = _,
     822             :         ObjexxFCL::Optional<Real64> DefrostFraction = _,
     823             :         ObjexxFCL::Optional<Real64> DefrostCapacity = _,
     824             :         ObjexxFCL::Optional<Real64> MaxOATDefrost = _,
     825             :         ObjexxFCL::Optional_bool CoolingCoilPresent = _,
     826             :         ObjexxFCL::Optional_bool HeatingCoilPresent = _,
     827             :         ObjexxFCL::Optional<Real64> HeatSizeRatio = _,
     828             :         ObjexxFCL::Optional<Real64> TotCap = _,
     829             :         ObjexxFCL::Optional_int SupplyFanIndex = _,
     830             :         ObjexxFCL::Optional_string SupplyFanName = _,
     831             :         ObjexxFCL::Optional<HVAC::FanType> supplyFanType = _);
     832             : 
     833             :     void SetCoilSystemHeatingDXFlag(EnergyPlusData &state,
     834             :                                     std::string const &CoilType, // must match coil types in this module
     835             :                                     std::string const &CoilName  // must match coil names for the coil type
     836             :     );
     837             : 
     838             :     void SetCoilSystemCoolingData(EnergyPlusData &state,
     839             :                                   std::string const &CoilName, // must match coil names for the coil type
     840             :                                   std::string const &CoilSystemName);
     841             : 
     842             :     Real64 CalcSHRUserDefinedCurves(EnergyPlusData &state,
     843             :                                     Real64 const InletDryBulb,     // inlet air dry bulb temperature [C]
     844             :                                     Real64 const InletWetBulb,     // inlet air wet bulb temperature [C]
     845             :                                     Real64 const AirMassFlowRatio, // ratio of actual air mass flow to rated air mass flow
     846             :                                     int const SHRFTempCurveIndex,  // SHR modifier curve index
     847             :                                     int const SHRFFlowCurveIndex,  // SHR modifier curve index
     848             :                                     Real64 const SHRRated          // rated sensible heat ratio, user input
     849             :     );
     850             : 
     851             :     void SetDXCoilTypeData(EnergyPlusData &state, std::string const &CoilName); // must match coil names for the coil type
     852             : 
     853             :     void CalcSecondaryDXCoils(EnergyPlusData &state, int const DXCoilNum);
     854             : 
     855             :     Real64 CalcSecondaryDXCoilsSHR(EnergyPlusData &state,
     856             :                                    int const DXCoilNum,
     857             :                                    Real64 const EvapAirMassFlow,
     858             :                                    Real64 const TotalHeatRemovalRate,
     859             :                                    Real64 const PartLoadRatio,
     860             :                                    Real64 const SecCoilRatedSHR,
     861             :                                    Real64 const EvapInletDryBulb,
     862             :                                    Real64 const EvapInletHumRat,
     863             :                                    Real64 const EvapInletWetBulb,
     864             :                                    Real64 const EvapInletEnthalpy,
     865             :                                    Real64 const CondInletDryBulb,
     866             :                                    Real64 const SecCoilFlowFraction,
     867             :                                    int const SecCoilSHRFT,
     868             :                                    int const SecCoilSHRFF);
     869             : 
     870             :     // Begin of Methods for New VRF Model: Fluid Temperature Control
     871             :     //******************************************************************************
     872             :     void
     873             :     CalcVRFCoolingCoil_FluidTCtrl(EnergyPlusData &state,
     874             :                                   int const DXCoilNum,                    // the number of the DX coil to be simulated
     875             :                                   HVAC::CompressorOp compressorOp,        // compressor operation; 1=on, 0=off
     876             :                                   bool const FirstHVACIteration,          // true if this is the first iteration of HVAC
     877             :                                   Real64 const PartLoadRatio,             // sensible cooling load / full load sensible cooling capacity
     878             :                                   HVAC::FanOp const fanOp,                // Allows parent object to control fan operation
     879             :                                   Real64 const CompCycRatio,              // cycling ratio of VRF condenser
     880             :                                   ObjexxFCL::Optional_int_const PerfMode, // Performance mode for MultiMode DX coil; Always 1 for other coil types
     881             :                                   ObjexxFCL::Optional<Real64 const> OnOffAirFlowRatio // ratio of compressor on airflow to compressor off airflow
     882             :     );
     883             : 
     884             :     void
     885             :     CalcVRFHeatingCoil_FluidTCtrl(EnergyPlusData &state,
     886             :                                   HVAC::CompressorOp compressorOp,                     // compressor operation; 1=on, 0=off
     887             :                                   int const DXCoilNum,                                 // the number of the DX heating coil to be simulated
     888             :                                   Real64 const PartLoadRatio,                          // sensible cooling load / full load sensible cooling capacity
     889             :                                   HVAC::FanOp const fanOp,                             // Allows parent object to control fan mode
     890             :                                   ObjexxFCL::Optional<Real64 const> OnOffAirFlowRatio, // ratio of compressor on airflow to compressor off airflow
     891             :                                   ObjexxFCL::Optional<Real64 const> MaxHeatCap         // maximum allowed heating capacity
     892             :     );
     893             : 
     894             :     void ControlVRFIUCoil(EnergyPlusData &state,
     895             :                           int const CoilIndex,     // index to VRFTU coil
     896             :                           Real64 const QCoil,      // coil load
     897             :                           Real64 const Tin,        // inlet air temperature
     898             :                           Real64 const Win,        // inlet air humidity ratio
     899             :                           Real64 const TeTc,       // evaporating or condensing temperature
     900             :                           Real64 const OAMassFlow, // mass flow rate of outdoor air
     901             :                           Real64 &FanSpdRatio,     // fan speed ratio: actual flow rate / rated flow rate
     902             :                           Real64 &Wout,            // outlet air humidity ratio
     903             :                           Real64 &Tout,            // outlet air temperature
     904             :                           Real64 &Hout,            // outlet air enthalpy
     905             :                           Real64 &SHact,           // actual SH
     906             :                           Real64 &SCact            // actual SC
     907             :     );
     908             : 
     909             :     void CalcVRFCoilSenCap(EnergyPlusData &state,
     910             :                            int const OperationMode, // mode 0 for cooling, 1 for heating
     911             :                            int const CoilNum,       // index to VRFTU cooling or heating coil
     912             :                            Real64 const Tinlet,     // dry bulb temperature of air entering the coil
     913             :                            Real64 const TeTc,       // evaporating or condensing temperature
     914             :                            Real64 const SHSC,       // SH at cooling /SC at heating
     915             :                            Real64 const BF,         // Bypass factor
     916             :                            Real64 &Q_sen,           // VRF coil sensible capacity per air mass flow rate
     917             :                            Real64 &T_coil_surf      // Air temperature at coil surface
     918             :     );
     919             : 
     920             :     void CalcVRFCoilCapModFac(EnergyPlusData &state,
     921             :                               int const OperationMode,                   // mode 0 for cooling, 1 for heating
     922             :                               ObjexxFCL::Optional<int const> CoilIndex,  // index to VRFTU cooling or heating coil
     923             :                               ObjexxFCL::Optional<std::string> CoilName, // name of VRFTU cooling or heating coil
     924             :                               Real64 const Tinlet,                       // dry bulb temperature of air entering the coil
     925             :                               ObjexxFCL::Optional<Real64 const> TeTc,    // evaporating or condensing temperature
     926             :                               ObjexxFCL::Optional<Real64 const> SHSC,    // SH at cooling /SC at heating
     927             :                               ObjexxFCL::Optional<Real64 const> BF,      // Bypass factor
     928             :                               Real64 &CapModFac                          // Coil capacity modification factor
     929             :     );
     930             : 
     931             :     Real64 FanSpdResidualCool(Real64 FanSpdRto, Real64 QCoilSenCoolingLoad, Real64 Ts_1, Real64 Tin, Real64 Garate, Real64 BF);
     932             : 
     933             :     Real64 FanSpdResidualHeat(Real64 FanSpdRto, Real64 QCoilSenHeatingLoad, Real64 Ts_1, Real64 Tin, Real64 Garate, Real64 BF);
     934             : 
     935             :     void SetMSHPDXCoilHeatRecoveryFlag(EnergyPlusData &state, int const DXCoilNum); // must match coil names for the coil type
     936             : 
     937             :     void SetDXCoilAirLoopNumber(EnergyPlusData &state, std::string const &CoilName, int const AirLoopNum); // must match coil names for the coil type
     938             : 
     939             :     void DisableLatentDegradation(EnergyPlusData &state, int const DXCoilNum);
     940             : 
     941             : } // namespace DXCoils
     942             : 
     943             : struct DXCoilsData : BaseGlobalStruct
     944             : {
     945             : 
     946             :     bool GetCoilsInputFlag = true; // First time, input is "gotten"
     947             :     bool MyOneTimeFlag = true;     // One time flag used to allocate MyEnvrnFlag and MySizeFlag
     948             :     bool CalcTwoSpeedDXCoilStandardRatingOneTimeEIOHeaderWrite = true;
     949             :     bool CrankcaseHeaterReportVarFlag = true;
     950             :     int NumVRFHeatingCoils = 0;                   // number of VRF heat pump heating coils
     951             :     int NumVRFCoolingCoils = 0;                   // number of VRF heat pump cooling coils
     952             :     int NumDXCoils = 0;                           // Total number of DX coils
     953             :     int NumVRFHeatingFluidTCtrlCoils = 0;         // number of VRF heat pump heating coils for FluidTCtrl Model
     954             :     int NumVRFCoolingFluidTCtrlCoils = 0;         // number of VRF heat pump cooling coils for FluidTCtrl Model
     955             :     int NumDXHeatingCoils = 0;                    // number of DX heat pump heating coils
     956             :     int NumDoe2DXCoils = 0;                       // number of doe2 DX  coils
     957             :     int NumDXHeatPumpWaterHeaterPumpedCoils = 0;  // number of DX  water heater coils, pumped
     958             :     int NumDXHeatPumpWaterHeaterWrappedCoils = 0; // number of DX  water heater coils, pumped
     959             :     int NumDXMulSpeedCoils = 0;                   // number of DX coils with multi-speed compressor
     960             :     int NumDXMulModeCoils = 0;                    // number of DX coils with multi-mode performance
     961             :     int NumDXMulSpeedCoolCoils = 0;               // number of multispeed DX cooling coils
     962             :     int NumDXMulSpeedHeatCoils = 0;               // number of multispeed DX heating coils
     963             :     Real64 HPWHHeatingCapacity = 0.0;             // Used by Heat Pump:Water Heater object as total water heating capacity [W]
     964             :     Real64 HPWHHeatingCOP = 0.0;                  // Used by Heat Pump:Water Heater object as water heating COP [W/W]
     965             :     Array1D_bool CheckEquipName;
     966             :     Array1D<Real64> DXCoilOutletTemp;           // DX coil outlet dry bulb temperature [C]
     967             :     Array1D<Real64> DXCoilOutletHumRat;         // DX coil outlet humidity ratio [kgWater/kgDryAir]
     968             :     Array1D<Real64> DXCoilPartLoadRatio;        // DX coil part-load ratio
     969             :     Array1D<HVAC::FanOp> DXCoilFanOp;           // supply air fan operating mode
     970             :     Array1D<Real64> DXCoilFullLoadOutAirTemp;   // DX coil full load outlet dry bulb temperature [C]
     971             :     Array1D<Real64> DXCoilFullLoadOutAirHumRat; // DX coil full load outlet humidity ratio [kgWater/kgDryAir]
     972             :     Array1D<Real64> DXCoilTotalCooling;         // DX cooling coil total cooling output [W]
     973             :     Array1D<Real64> DXCoilTotalHeating;         // DX heating coil total heating output [W]
     974             :     Array1D<Real64> DXCoilCoolInletAirWBTemp;   // DX cooling coil inlet air wet-bulb temp [C]
     975             :     Array1D<Real64> DXCoilHeatInletAirDBTemp;   // DX heating coil inlet air dry-bulb temp [C]
     976             :     Array1D<Real64> DXCoilHeatInletAirWBTemp;   // DX heating coil inlet air wet-bulb temp [C]
     977             :     Array1D<DXCoils::DXCoilData> DXCoil;
     978             :     Array1D<DXCoils::DXCoilNumericFieldData> DXCoilNumericFields;
     979             : 
     980             :     Array1D_bool MyEnvrnFlag; // One time environment flag
     981             :     Array1D_bool MySizeFlag;  // One time sizing flag
     982             :     Real64 CurrentEndTime = 0.0;
     983             :     Real64 CalcVRFCoolingCoil_FluidTCtrlCurrentEndTime = 0.0;
     984             :     Real64 CalcVRFCoolingCoilCurrentEndTime = 0.0;
     985             :     Real64 NetCoolingCapRated = 0.0; // Net Cooling Coil capacity at Rated conditions, accounting for supply fan heat [W]
     986             :     Real64 EER = 0.0;                // Energy Efficiency Ratio in SI [W/W]
     987             :     Real64 IEER = 0.0;               // Integerated Energy Efficiency Ratio in SI [W/W]
     988             :     Real64 TotCapTempModFac = 0.0;   // Total capacity modifier (function of entering wetbulb, outside drybulb) [-]
     989             :     Real64 TotCapFlowModFac = 0.0;   // Total capacity modifier (function of actual supply air flow vs rated flow) [-]
     990             :     Real64 EIRTempModFac = 0.0;      // EIR modifier (function of entering wetbulb, outside drybulb) [-]
     991             :     Real64 EIRFlowModFac = 0.0;      // EIR modifier (function of actual supply air flow vs rated flow) [-]
     992             :     Real64 TempDryBulb_Leaving_Apoint = 0.0;
     993             : 
     994         796 :     void init_state([[maybe_unused]] EnergyPlusData &state) override
     995             :     {
     996         796 :     }
     997             : 
     998           0 :     void clear_state() override
     999             :     {
    1000           0 :         new (this) DXCoilsData();
    1001           0 :     }
    1002             : };
    1003             : 
    1004             : } // namespace EnergyPlus
    1005             : 
    1006             : #endif

Generated by: LCOV version 1.14