LCOV - code coverage report
Current view: top level - EnergyPlus - FanCoilUnits.hh (source / functions) Coverage Total Hit
Test: lcov.output.filtered Lines: 100.0 % 7 7
Test Date: 2025-05-22 16:09:37 Functions: 100.0 % 3 3

            Line data    Source code
       1              : // EnergyPlus, Copyright (c) 1996-2025, 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 FanCoilUnits_hh_INCLUDED
      49              : #define FanCoilUnits_hh_INCLUDED
      50              : 
      51              : // C++ Headers
      52              : #include <memory>
      53              : #include <string>
      54              : 
      55              : // ObjexxFCL Headers
      56              : #include <ObjexxFCL/Array1D.hh>
      57              : #include <ObjexxFCL/Optional.hh>
      58              : 
      59              : // EnergyPlus Headers
      60              : #include <EnergyPlus/Data/BaseData.hh>
      61              : #include <EnergyPlus/DataGlobals.hh>
      62              : #include <EnergyPlus/EnergyPlus.hh>
      63              : #include <EnergyPlus/Plant/Enums.hh>
      64              : #include <EnergyPlus/Plant/PlantLocation.hh>
      65              : #include <EnergyPlus/SystemAvailabilityManager.hh>
      66              : 
      67              : namespace EnergyPlus {
      68              : 
      69              : // Forward declarations
      70              : struct EnergyPlusData;
      71              : 
      72              : namespace FanCoilUnits {
      73              : 
      74              :     Real64 constexpr Small5WLoad = 5.0; // load threshold 5.0 W
      75              : 
      76              :     // coil type units supported in this module
      77              :     constexpr int FanCoilUnit_4Pipe(1);
      78              : 
      79              :     enum class CCoil
      80              :     {
      81              :         Invalid = -1,
      82              :         Water,
      83              :         Detailed,
      84              :         HXAssist,
      85              :         Num
      86              :     };
      87              : 
      88              :     enum class HCoil
      89              :     {
      90              :         Invalid = -1,
      91              :         Water,
      92              :         Electric,
      93              :         Num
      94              :     };
      95              : 
      96              :     enum class CCM // capacity control method supported in this module
      97              :     {
      98              :         Invalid = -1,
      99              :         ConsFanVarFlow,
     100              :         CycFan,
     101              :         VarFanVarFlow,
     102              :         VarFanConsFlow,
     103              :         MultiSpeedFan,
     104              :         ASHRAE,
     105              :         Num
     106              :     };
     107              : 
     108              :     struct FanCoilData
     109              :     {
     110              :         // Members
     111              :         // Input data
     112              :         int UnitType_Num = 0;
     113              :         std::string availSchedName;                     // availability schedule
     114              :         Sched::Schedule *availSched = nullptr;          // availability schedule
     115              :         std::string SchedOutAir;                        // outside air schedule, multipliy maximum outdoor air flow rate
     116              :         Sched::Schedule *oaSched = nullptr;             // outside air schedule
     117              :         HVAC::FanType fanType = HVAC::FanType::Invalid; // fan type
     118              :         int SpeedFanSel = 0;                            // Speed fan selected
     119              :         CCM CapCtrlMeth_Num = CCM::Invalid;
     120              :         Real64 PLR = 0.0;             // Part Load Ratio, fraction of time step fancoil is on
     121              :         int MaxIterIndexH = 0;        // Maximum iterations exceeded for heating
     122              :         int BadMassFlowLimIndexH = 0; // Bad mass flow limit error index for heating
     123              :         int MaxIterIndexC = 0;        // Maximum iterations exceeded for cooling
     124              :         int BadMassFlowLimIndexC = 0; // Bad mass flow limit error index for cooling
     125              :         Real64 FanAirVolFlow = 0.0;   // m3/s
     126              :         Real64 MaxAirVolFlow = 0.0;   // m3/s
     127              :         Real64 MaxAirMassFlow = 0.0;  // kg/s
     128              :         Real64 LowSpeedRatio = 0.0;   // Low speed fan supply air flow ratio
     129              :         Real64 MedSpeedRatio = 0.0;   // Medium speed fan supply air flow ratio
     130              :         Real64 SpeedFanRatSel = 0.0;  // Speed fan ratio determined by fan speed selection at each timestep
     131              :         Real64 OutAirVolFlow = 0.0;   // m3/s
     132              :         Real64 OutAirMassFlow = 0.0;  // kg/s
     133              :         int AirInNode = 0;            // inlet air node number
     134              :         int AirOutNode = 0;           // outlet air node number
     135              :         int OutsideAirNode = 0;       // outside air node number
     136              :         int AirReliefNode = 0;        // relief air node number
     137              :         int MixedAirNode = 0;         // Mixed Air Node number
     138              :         std::string OAMixName;        // name of outside air mixer
     139              :         std::string OAMixType;        // type of outside air mixer
     140              :         int OAMixIndex = 0;
     141              :         std::string FanName;     // name of fan
     142              :         int FanIndex = 0;        // index for fan
     143              :         std::string CCoilName;   // name of cooling coil
     144              :         int CCoilName_Index = 0; // Index for this Cooling Coil in SimWaterComp
     145              :         std::string CCoilType;   // type of cooling coil:
     146              :         // 'Coil:Cooling:Water' or
     147              :         // 'Coil:Cooling:Water:DetailedGeometry' or
     148              :         // 'CoilSystem:Cooling:Water:HeatExchangerAssisted'
     149              :         CCoil CCoilType_Num = CCoil::Invalid; // Numeric equivalent for type of cooling coil
     150              :         std::string CCoilPlantName;           // name of cooling coil (child<=CoilSystem:Cooling:Water:HeatExchangerAssisted)
     151              :         DataPlant::PlantEquipmentType CCoilPlantType = DataPlant::PlantEquipmentType::Invalid;
     152              :         int ControlCompTypeNum = 0;
     153              :         int CompErrIndex = 0;
     154              :         Real64 MaxColdWaterVolFlow = 0.0; // m3/s
     155              :         Real64 MinColdWaterVolFlow = 0.0; // m3/s
     156              :         Real64 MinColdWaterFlow = 0.0;    // kg/s
     157              :         Real64 ColdControlOffset = 0.0;   // control tolerance
     158              :         std::string HCoilName;            // name of heating coil
     159              :         int HCoilName_Index = 0;
     160              :         std::string HCoilType; // type of heating coil:
     161              :         // 'Coil:Heating:Water' or
     162              :         HCoil HCoilType_Num = HCoil::Invalid; // Numeric equivalent for type of cooling coil
     163              :         DataPlant::PlantEquipmentType HCoilPlantTypeOf = DataPlant::PlantEquipmentType::Invalid;
     164              :         Real64 MaxHotWaterVolFlow = 0.0;    // m3/s
     165              :         Real64 MinHotWaterVolFlow = 0.0;    // m3/s
     166              :         Real64 MinHotWaterFlow = 0.0;       // kg/s
     167              :         Real64 HotControlOffset = 0.0;      // control tolerance
     168              :         Real64 DesignHeatingCapacity = 0.0; // size of electric heating coil [W]
     169              :         Avail::Status availStatus = Avail::Status::NoAction;
     170              :         std::string AvailManagerListName; // Name of an availability manager list object
     171              :         // addition for OA to Zone Units
     172              :         std::string ATMixerName;                                // name of air terminal mixer
     173              :         int ATMixerIndex = 0;                                   // index to the air terminal mixer
     174              :         HVAC::MixerType ATMixerType = HVAC::MixerType::Invalid; // 1 = inlet side mixer, 2 = supply side mixer
     175              :         int ATMixerPriNode = 0;                                 // primary inlet air node number for the air terminal mixer
     176              :         int ATMixerSecNode = 0;                                 // secondary air inlet node number for the air terminal mixer
     177              :         int HVACSizingIndex = 0;                                // index of a HVACSizing object for a fancoil unit
     178              :         Real64 SpeedRatio = 0.0;                                // speed ratio when the fan is cycling between stages
     179              :         Sched::Schedule *fanOpModeSched = nullptr;              // supply air fan operating mode schedule
     180              :         HVAC::FanOp fanOp = HVAC::FanOp::Cycling;               // 1=cycling fan cycling coil; 2=constant fan cycling coil
     181              :         bool ASHRAETempControl = false;                         // ASHRAE90.1 control to temperature set point when true
     182              :         Real64 QUnitOutNoHC = 0.0;                              // unit output with coils off [W]
     183              :         Real64 QUnitOutMaxH = 0.0;                              // unit output at maximum heating [W]
     184              :         Real64 QUnitOutMaxC = 0.0;                              // unit output at maximum cooling [W]
     185              :         int LimitErrCountH = 0;                                 // count of SolveRoot limit errors
     186              :         int LimitErrCountC = 0;                                 // count of SolveRoot limit errors
     187              :         int ConvgErrCountH = 0;                                 // count of SolveRoot iteration limit errors
     188              :         int ConvgErrCountC = 0;                                 // count of SolveRoot iteration limit errors
     189              :         // Report data
     190              :         Real64 HeatPower = 0.0;                   // unit heating output in watts
     191              :         Real64 HeatEnergy = 0.0;                  // unit heating output in J
     192              :         Real64 TotCoolPower = 0.0;                // unit total cooling power output in watts
     193              :         Real64 TotCoolEnergy = 0.0;               // unit total cooling energy output in joules
     194              :         Real64 SensCoolPower = 0.0;               // unit sensible cooling power output in watts
     195              :         Real64 SensCoolEnergy = 0.0;              // unit sensible cooling energy output in joules
     196              :         Real64 ElecPower = 0.0;                   // unit electric power consumption in watts
     197              :         Real64 ElecEnergy = 0.0;                  // unit electiric energy consumption in joules
     198              :         Real64 DesCoolingLoad = 0.0;              // used for reporting in watts
     199              :         Real64 DesHeatingLoad = 0.0;              // used for reporting in watts
     200              :         Real64 DesZoneCoolingLoad = 0.0;          // used for reporting in watts
     201              :         Real64 DesZoneHeatingLoad = 0.0;          // used for reporting in watts
     202              :         int DSOAPtr = 0;                          // design specification outdoor air object index
     203              :         bool FirstPass = true;                    // detects first time through for resetting sizing data
     204              :         Sched::Schedule *fanAvailSched = nullptr; // fan availability schedule index
     205              : 
     206              :         // SZVAV Model inputs
     207              :         std::string Name;                      // name of unit
     208              :         std::string UnitType;                  // type of unit
     209              :         Real64 MaxCoolCoilFluidFlow = 0.0;     // kg/s
     210              :         Real64 MaxHeatCoilFluidFlow = 0.0;     // kg/s
     211              :         Real64 DesignMinOutletTemp = 0.0;      // ASHRAE90.1 maximum supply air temperature in Cooling mode
     212              :         Real64 DesignMaxOutletTemp = 0.0;      // ASHRAE90.1 maximum supply air temperature in Heating mode
     213              :         Real64 MaxNoCoolHeatAirMassFlow = 0.0; // minimum air flow rate using constant fan and ASHRAE90.1 control method
     214              :         Real64 MaxCoolAirMassFlow = 0.0;       // used in ASHRAE90.1 model, same as MaxAirMassFlow
     215              :         Real64 MaxHeatAirMassFlow = 0.0;       // used in ASHRAE90.1 model, same as MaxAirMassFlow
     216              :         Real64 LowSpeedCoolFanRatio = 0.0;     // ratio of min air flow to max air flow
     217              :         Real64 LowSpeedHeatFanRatio = 0.0;     // ratio of min air flow to max air flow
     218              :         int CoolCoilFluidInletNode = 0;        // chilled water control node
     219              :         int CoolCoilFluidOutletNodeNum = 0;    // chilled water coil outlet plant node
     220              :         int HeatCoilFluidInletNode = 0;        // hot water control node
     221              :         int HeatCoilFluidOutletNodeNum = 0;    // hot water coil outlet plant node
     222              :         PlantLocation CoolCoilPlantLoc{};      // index for plant location for chilled water coil
     223              :         PlantLocation HeatCoilPlantLoc{};      // index for plant location for hot water coil
     224              :         int CoolCoilInletNodeNum = 0;          // index of cooling coil inlet node number
     225              :         int CoolCoilOutletNodeNum = 0;         // index of cooling coil outlet node number
     226              :         int HeatCoilInletNodeNum = 0;          // index of heating coil inlet node number
     227              :         int HeatCoilOutletNodeNum = 0;         // index of heating coil outlet node number
     228              :         int ControlZoneNum = 0;                // pointer to a zone served by a fancoil unit
     229              :         int NodeNumOfControlledZone = 0;       // node number of controlled zone
     230              :         bool ATMixerExists = false;            // True if there is an ATMixer
     231              :         int ATMixerOutNode = 0;                // outlet air node number for the air terminal mixer
     232              :         Real64 FanPartLoadRatio = 0.0;         // ratio of air flow to max air flow to simulation modulating fan
     233              :         Real64 HeatCoilWaterFlowRatio = 0.0;   // ratio of water flow rate to max water flow rate
     234              :         Real64 ControlZoneMassFlowFrac = 1.0;  // flow fraction of control zone (always 1 for zone equipment)
     235              :         int MaxIterIndex = 0;                  // recurring message index
     236              :         int RegulaFalsiFailedIndex = 0;        // iteration loop warning
     237              :     };
     238              : 
     239              :     struct FanCoilNumericFieldData
     240              :     {
     241              :         // Members
     242              :         Array1D_string FieldNames;
     243              :     };
     244              : 
     245              :     void SimFanCoilUnit(EnergyPlusData &state,
     246              :                         std::string_view CompName, // name of the fan coil unit
     247              :                         int ControlledZoneNum,     // number of zone being served
     248              :                         bool FirstHVACIteration,   // TRUE if 1st HVAC simulation of system timestep
     249              :                         Real64 &PowerMet,          // Sensible power supplied (W)
     250              :                         Real64 &LatOutputProvided, // Latent add/removal supplied by window AC (kg/s), dehumid = negative
     251              :                         int &CompIndex);
     252              : 
     253              :     void GetFanCoilUnits(EnergyPlusData &state);
     254              : 
     255              :     void InitFanCoilUnits(EnergyPlusData &state,
     256              :                           int FanCoilNum,         // number of the current fan coil unit being simulated
     257              :                           int ControlledZoneNum); // number of zone being served
     258              : 
     259              :     void SizeFanCoilUnit(EnergyPlusData &state, int FanCoilNum,
     260              :                          int ControlledZoneNum); // index into ZoneEquipConfig array
     261              : 
     262              :     void Sim4PipeFanCoil(EnergyPlusData &state,
     263              :                          int &FanCoilNum,          // number of the current fan coil unit being simulated
     264              :                          int ControlledZoneNum,    // index into ZoneEqupConfig
     265              :                          bool FirstHVACIteration,  // TRUE if 1st HVAC simulation of system timestep
     266              :                          Real64 &PowerMet,         // Sensible power supplied (W)
     267              :                          Real64 &LatOutputProvided // Latent power supplied (kg/s), negative = dehumidification
     268              :     );
     269              : 
     270              :     void TightenWaterFlowLimits(EnergyPlusData &state,
     271              :                                 int FanCoilNum,          // Unit index in fan coil array
     272              :                                 bool CoolingLoad,        // true if zone requires cooling
     273              :                                 bool HeatingLoad,        // true if zone requires heating
     274              :                                 int WaterControlNode,    // water control node, either cold or hot water
     275              :                                 int ControlledZoneNum,   // controlling zone index
     276              :                                 bool FirstHVACIteration, //  TRUE if 1st HVAC simulation of system timestep
     277              :                                 Real64 QZnReq,           // zone load [W]
     278              :                                 Real64 &MinWaterFlow,    // minimum water flow rate
     279              :                                 Real64 &MaxWaterFlow     // maximum water flow rate
     280              :     );
     281              : 
     282              :     void TightenAirAndWaterFlowLimits(EnergyPlusData &state,
     283              :                                       int FanCoilNum,          // Unit index in fan coil array
     284              :                                       bool CoolingLoad,        // true if zone requires cooling
     285              :                                       bool HeatingLoad,        // true if zone requires heating
     286              :                                       int WaterControlNode,    // water control node, either cold or hot water
     287              :                                       int ControlledZoneNum,   // controlling zone index
     288              :                                       bool FirstHVACIteration, //  TRUE if 1st HVAC simulation of system timestep
     289              :                                       Real64 QZnReq,           // zone load [W]
     290              :                                       Real64 &PLRMin,          // minimum part-load ratio
     291              :                                       Real64 &PLRMax           // maximum part-load ratio
     292              :     );
     293              : 
     294              :     void Calc4PipeFanCoil(EnergyPlusData &state,
     295              :                           int FanCoilNum,                      // Unit index in fan coil array
     296              :                           int ControlledZoneNum,               // ZoneEquipConfig index
     297              :                           bool FirstHVACIteration,             // flag for 1st HVAV iteration in the time step
     298              :                           Real64 &LoadMet,                     // load met by unit (watts)
     299              :                           ObjexxFCL::Optional<Real64> PLR = _, // Part Load Ratio, fraction of time step fancoil is on
     300              :                           Real64 ElecHeatCoilPLR = 1.0         // electric heating coil PLR used with MultiSpeedFan capacity control
     301              :     );
     302              : 
     303              :     void SimMultiStage4PipeFanCoil(EnergyPlusData &state,
     304              :                                    int &FanCoilNum,         // number of the current fan coil unit being simulated
     305              :                                    int ControlledZoneNum,   // index into ZoneEqupConfig
     306              :                                    bool FirstHVACIteration, // TRUE if 1st HVAC simulation of system timestep
     307              :                                    Real64 &PowerMet         // Sensible power supplied (W)
     308              :     );
     309              : 
     310              :     void CalcMultiStage4PipeFanCoil(EnergyPlusData &state,
     311              :                                     int &FanCoilNum,         // number of the current fan coil unit being simulated
     312              :                                     int ZoneNum,             // number of zone being served
     313              :                                     bool FirstHVACIteration, // TRUE if 1st HVAC simulation of system timestep
     314              :                                     Real64 QZnReq,           // current zone cooling or heating load
     315              :                                     Real64 &SpeedRatio,      // fan coil speed ratio
     316              :                                     Real64 &PartLoadRatio,   // fan coil part load ratio
     317              :                                     Real64 &PowerMet         // Sensible power supplied (W)
     318              :     );
     319              : 
     320              :     void ReportFanCoilUnit(EnergyPlusData &state, int FanCoilNum); // number of the current fan coil unit being simulated
     321              : 
     322              :     int GetFanCoilZoneInletAirNode(EnergyPlusData &state, int const FanCoilNum);
     323              : 
     324              :     int GetFanCoilOutAirNode(EnergyPlusData &state, int FanCoilNum);
     325              : 
     326              :     int GetFanCoilReturnAirNode(EnergyPlusData &state, int FanCoilNum);
     327              : 
     328              :     int GetFanCoilMixedAirNode(EnergyPlusData &state, int FanCoilNum);
     329              : 
     330              :     Real64 CalcFanCoilLoadResidual(EnergyPlusData &state,
     331              :                                    int FanCoilNum,          // Index to this fan coil unit
     332              :                                    bool FirstHVACIteration, // FirstHVACIteration flag
     333              :                                    int ControlledZoneNum,   // zone index
     334              :                                    Real64 QZnReq,           // Sensible load to be met [W]
     335              :                                    Real64 PartLoadRatio     // coil part load ratio
     336              :     );
     337              : 
     338              :     Real64 CalcFanCoilPLRResidual(EnergyPlusData &state,
     339              :                                   Real64 PLR,              // part-load ratio of air and water mass flow rate
     340              :                                   int FanCoilNum,          // Index to this fan coil unit
     341              :                                   bool FirstHVACIteration, // FirstHVACIteration flag
     342              :                                   int ControlledZoneNum,   // zone index
     343              :                                   int WaterControlNode,    // water node to control
     344              :                                   Real64 QZnReq            // Sensible load to be met [W] // Function parameters
     345              :     );
     346              : 
     347              :     Real64 CalcFanCoilHeatCoilPLRResidual(EnergyPlusData &state,
     348              :                                           Real64 CyclingR, // electric heating coil cycling ratio
     349              :                                           int FanCoilNum,
     350              :                                           bool FirstHVACIteration,
     351              :                                           int ZoneNum,
     352              :                                           Real64 QZnReq // Function parameters
     353              :     );
     354              : 
     355              :     Real64 CalcFanCoilCWLoadResidual(EnergyPlusData &state,
     356              :                                      Real64 CWFlow, // water mass flow rate [kg/s]
     357              :                                      int FanCoilNum,
     358              :                                      bool FirstHVACIteration,
     359              :                                      int ControlledZoneNum,
     360              :                                      Real64 QZnReq);
     361              : 
     362              :     Real64 CalcFanCoilWaterFlowResidual(EnergyPlusData &state,
     363              :                                         Real64 PLR,
     364              :                                         int FanCoilNum,
     365              :                                         bool FirstHVACIteration,
     366              :                                         int ControlledZoneNum,
     367              :                                         Real64 QZnReq,
     368              :                                         int AirInNode,
     369              :                                         int WaterControlNode,
     370              :                                         Real64 maxCoilFluidFlow,
     371              :                                         Real64 AirMassFlowRate);
     372              : 
     373              :     Real64 CalcFanCoilAirAndWaterFlowResidual(EnergyPlusData &state,
     374              :                                               Real64 WaterFlow, // water mass flow rate [kg/s]
     375              :                                               int FanCoilNum,
     376              :                                               bool FirstHVACIteration,
     377              :                                               int ControlledZoneNum,
     378              :                                               Real64 QZnReq,
     379              :                                               int AirInNode,
     380              :                                               int WaterControlNode,
     381              :                                               Real64 MinWaterFlow);
     382              : 
     383              :     int getEqIndex(EnergyPlusData &state, std::string_view CompName);
     384              : } // namespace FanCoilUnits
     385              : 
     386              : struct FanCoilUnitsData : BaseGlobalStruct
     387              : {
     388              : 
     389              :     std::string const cMO_FanCoil = "ZoneHVAC:FourPipeFanCoil";
     390              :     int NumFanCoils = 0;
     391              :     int Num4PipeFanCoils = 0;
     392              :     Array1D_bool MySizeFlag;
     393              :     Array1D_bool CheckEquipName;
     394              :     bool GetFanCoilInputFlag = true; // First time, input is "gotten"
     395              :     Real64 FanFlowRatio = 0.0;
     396              :     bool HeatingLoad = false; // True when zone needs heating
     397              :     bool CoolingLoad = false; // True when zone needs cooling
     398              :     Array1D<FanCoilUnits::FanCoilData> FanCoil;
     399              :     Array1D<FanCoilUnits::FanCoilNumericFieldData> FanCoilNumericFields;
     400              :     bool InitFanCoilUnitsOneTimeFlag = true;
     401              :     bool InitFanCoilUnitsCheckInZoneEquipmentListFlag = false; // True after the Zone Equipment List has been checked for items
     402              : 
     403              :     // static variables extracted from functions
     404              :     bool ErrorsFound = false;                               // Set to true if errors in input, fatal at end of routine
     405              :     bool errFlag = false;                                   // Local error flag for GetOAMixerNodeNums
     406              :     int TotalArgs = 0;                                      // Total number of alpha and numeric arguments (max) for a
     407              :     bool ZoneExNodeNotFound = false;                        // used in error checking
     408              :     bool ZoneInNodeNotFound = false;                        // used in error checking
     409              :     int ATMixerNum = 0;                                     // index of air terminal mixer in the air terminal mixer data array
     410              :     HVAC::MixerType ATMixerType = HVAC::MixerType::Invalid; // type of air terminal mixer (1=inlet side; 2=supply side)
     411              :     int ATMixerPriNode = 0;                                 // node number of the air terminal mixer primary air inlet
     412              :     int ATMixerSecNode = 0;                                 // node number of the air terminal mixer secondary air inlet
     413              :     int ATMixerOutNode = 0;                                 // node number of the air terminal mixer secondary air inlet
     414              :     Array1D_bool MyEnvrnFlag;
     415              :     Array1D_bool MyPlantScanFlag;
     416              :     Array1D_bool MyZoneEqFlag; // used to set up zone equipment availability managers
     417              :     int CoilWaterInletNode = 0;
     418              :     int CoilWaterOutletNode = 0;
     419              :     int ATMixOutNode = 0; // outlet node of ATM Mixer
     420              :     int ZoneNode = 0;     // zone node
     421              : 
     422         2126 :     void init_constant_state([[maybe_unused]] EnergyPlusData &state) override
     423              :     {
     424         2126 :     }
     425              : 
     426         1152 :     void init_state([[maybe_unused]] EnergyPlusData &state) override
     427              :     {
     428         1152 :     }
     429              : 
     430         2100 :     void clear_state() override
     431              :     {
     432         2100 :         new (this) FanCoilUnitsData();
     433         2100 :     }
     434              : };
     435              : 
     436              : } // namespace EnergyPlus
     437              : 
     438              : #endif
        

Generated by: LCOV version 2.0-1