LCOV - code coverage report
Current view: top level - EnergyPlus - FanCoilUnits.hh (source / functions) Hit Total Coverage
Test: lcov.output.filtered Lines: 2 5 40.0 %
Date: 2024-08-23 23:50:59 Functions: 1 2 50.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 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 Sched;                              // availability schedule
     114             :         int SchedPtr = 0;                               // index to schedule
     115             :         std::string SchedOutAir;                        // outside air schedule, multipliy maximum outdoor air flow rate
     116             :         int SchedOutAirPtr = 0;                         // index to outside air schedule
     117             :         HVAC::FanType fanType = HVAC::FanType::Invalid; // index to 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             :         int FanOpModeSchedPtr = 0;                              // pointer to 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             :         int fanAvailSchIndex = 0;        // 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         796 :     void init_state([[maybe_unused]] EnergyPlusData &state) override
     423             :     {
     424         796 :     }
     425             : 
     426           0 :     void clear_state() override
     427             :     {
     428           0 :         new (this) FanCoilUnitsData();
     429           0 :     }
     430             : };
     431             : 
     432             : } // namespace EnergyPlus
     433             : 
     434             : #endif

Generated by: LCOV version 1.14