LCOV - code coverage report
Current view: top level - EnergyPlus - EvaporativeCoolers.hh (source / functions) Hit Total Coverage
Test: lcov.output.filtered Lines: 11 14 78.6 %
Date: 2023-01-17 19:17:23 Functions: 8 12 66.7 %

          Line data    Source code
       1             : // EnergyPlus, Copyright (c) 1996-2023, 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 EvaporativeCoolers_hh_INCLUDED
      49             : #define EvaporativeCoolers_hh_INCLUDED
      50             : 
      51             : // ObjexxFCL Headers
      52             : #include <ObjexxFCL/Array1D.hh>
      53             : 
      54             : // EnergyPlus Headers
      55             : #include <EnergyPlus/Data/BaseData.hh>
      56             : #include <EnergyPlus/DataGlobals.hh>
      57             : #include <EnergyPlus/DataZoneEquipment.hh>
      58             : #include <EnergyPlus/EnergyPlus.hh>
      59             : 
      60             : namespace EnergyPlus {
      61             : 
      62             : // Forward declarations
      63             : struct EnergyPlusData;
      64             : 
      65             : namespace EvaporativeCoolers {
      66             : 
      67             :     // MODULE PARAMETER DEFINITIONS
      68             :     enum class WaterSupply
      69             :     {
      70             :         Invalid = -1,
      71             :         FromMains,
      72             :         FromTank,
      73             :         Num
      74             :     };
      75             : 
      76             :     enum class FanPlacement
      77             :     {
      78             :         Invalid = -1,
      79             :         BlowThruFan,
      80             :         DrawThruFan,
      81             :         Num
      82             :     };
      83             : 
      84             :     enum class ControlType
      85             :     {
      86             :         Invalid = -1,
      87             :         ZoneTemperatureDeadBandOnOffCycling,
      88             :         ZoneCoolingLoadOnOffCycling,
      89             :         ZoneCoolingLoadVariableSpeedFan,
      90             :         Num
      91             :     };
      92             : 
      93             :     enum class OperatingMode
      94             :     {
      95             :         Invalid = -1,
      96             :         None,            // the indirect evaporative cooler Research Special is scheduled off or turned off
      97             :         DryModulated,    // the evaporative cooler Research Special is modulated in Dry Mode
      98             :         DryFull,         // the evaporative cooler Research Special is run in full capacity in Dry Mode
      99             :         DryWetModulated, // the evaporative cooler Research Special is modulated in Dry Mode or wet Mode
     100             :         WetModulated,    // the evaporative cooler Research Special is modulated in wet Mode
     101             :         WetFull,         // the evaporative cooler Research Special is run in full capacity in Wet Mode
     102             :         Num
     103             :     };
     104             : 
     105             :     enum class EvapCoolerType
     106             :     {
     107             :         Invalid = -1,
     108             :         DirectCELDEKPAD,
     109             :         IndirectCELDEKPAD,
     110             :         IndirectWETCOIL,
     111             :         IndirectRDDSpecial,
     112             :         DirectResearchSpecial,
     113             :         Num
     114             :     };
     115             : 
     116         196 :     struct EvapConditions
     117             :     {
     118             :         std::string Name; // Name of the EvapCooler
     119             :         int EquipIndex;
     120             :         EvapCoolerType evapCoolerType; // Type of the EvapCooler
     121             :         std::string EvapControlType;   // Type of Control for the EvapCooler
     122             :         std::string Schedule;          // HeatingCoil Operation Schedule
     123             :         int SchedPtr;                  // Pointer to the correct schedule
     124             :         Real64 VolFlowRate;            // Volume Flow Rate in Evap Cooler needed for calculating SatEff
     125             :         Real64 DesVolFlowRate;         // Design volume flow rate (autosize or user input) - this is only used to compute design pump power
     126             :         Real64 OutletTemp;
     127             :         Real64 OuletWetBulbTemp;
     128             :         Real64 OutletHumRat;
     129             :         Real64 OutletEnthalpy;
     130             :         Real64 OutletPressure;
     131             :         Real64 OutletMassFlowRate;         // MassFlow through the EvapCooler being Simulated [kg/Sec]
     132             :         Real64 OutletMassFlowRateMaxAvail; // [kg/Sec]
     133             :         Real64 OutletMassFlowRateMinAvail; // [kg/Sec]
     134             :         bool InitFlag;
     135             :         int InletNode;
     136             :         int OutletNode;
     137             :         int SecondaryInletNode;   // This is usually OA node feeding into the purge/secondary side
     138             :         int SecondaryOutletNode;  // This outlet node of the secondary side and ilet to the secondary fan
     139             :         int TertiaryInletNode;    // This node is used to run building exhaust into purge side.
     140             :         Real64 InletMassFlowRate; // Inlet is primary process air node at inlet to cooler
     141             :         Real64 InletMassFlowRateMaxAvail;
     142             :         Real64 InletMassFlowRateMinAvail;
     143             :         Real64 InletTemp;
     144             :         Real64 InletWetBulbTemp;
     145             :         Real64 InletHumRat;
     146             :         Real64 InletEnthalpy;
     147             :         Real64 InletPressure;
     148             :         Real64 SecInletMassFlowRate; // Secondary inlet is for indirect coolers
     149             :         Real64 SecInletMassFlowRateMaxAvail;
     150             :         Real64 SecInletMassFlowRateMinAvail;
     151             :         Real64 SecInletTemp;
     152             :         Real64 SecInletWetBulbTemp;
     153             :         Real64 SecInletHumRat;
     154             :         Real64 SecInletEnthalpy;
     155             :         Real64 SecInletPressure;
     156             :         Real64 SecOutletTemp;         // secondary air outlet node drybulb temperature
     157             :         Real64 SecOuletWetBulbTemp;   // secondarr air outlet node wetbulb temperature
     158             :         Real64 SecOutletHumRat;       // secondarr air outlet node humidity ratio
     159             :         Real64 SecOutletEnthalpy;     // secondarr air outlet node enthalpy
     160             :         Real64 SecOutletMassFlowRate; // Mass Flow through the secondary air side [kg/Sec]
     161             :         Real64 PadDepth;
     162             :         Real64 PadArea;
     163             :         Real64 RecircPumpPower;
     164             :         Real64 IndirectRecircPumpPower;
     165             :         Real64 IndirectPadDepth;
     166             :         Real64 IndirectPadArea;
     167             :         Real64 IndirectVolFlowRate;
     168             :         Real64 IndirectFanEff;
     169             :         Real64 IndirectFanDeltaPress;
     170             :         Real64 IndirectHXEffectiveness;
     171             :         Real64 DirectEffectiveness; // input saturation effectiveness for constant effectiveness model
     172             :         Real64 WetCoilMaxEfficiency;
     173             :         Real64 WetCoilFlowRatio;
     174             :         Real64 EvapCoolerEnergy;
     175             :         Real64 EvapCoolerPower;
     176             :         WaterSupply EvapWaterSupplyMode; // where does water come from
     177             :         std::string EvapWaterSupplyName; // name of water source e.g. water storage tank
     178             :         int EvapWaterSupTankID;
     179             :         int EvapWaterTankDemandARRID;
     180             :         Real64 DriftFraction;                // excess water from drift as fraction of Evap Water Consumption rate
     181             :         Real64 BlowDownRatio;                // excess water use for blowdown as solids ratio to be maintained
     182             :         Real64 EvapWaterConsumpRate;         // Evap Water Consumption rate in m3/sec
     183             :         Real64 EvapWaterConsump;             // Evap Water Consumption in m3
     184             :         Real64 EvapWaterStarvMakupRate;      // Evap water consumed but not really available from tank m3/s
     185             :         Real64 EvapWaterStarvMakup;          // Evap water consumed but not really available from tank m3
     186             :         Real64 SatEff;                       // Reporting for Direct Stage and Ind Dry Saturation Efficiency
     187             :         Real64 StageEff;                     // Reporting for Indirect Total Stage Efficiency
     188             :         Real64 DPBoundFactor;                // in RDDSpecial efficency w.r.t. dewpoint
     189             :         int EvapControlNodeNum;              // need to control to avoid over cooling
     190             :         Real64 DesiredOutletTemp;            // setpoint manager should set this
     191             :         Real64 PartLoadFract;                // reduces cooling performance and associated fan power
     192             :         int DewPointBoundFlag;               // report when indirect research special cooler is bound by dewpoint
     193             :         Real64 MinOATDBEvapCooler;           // Minimum outdoor air operating dry-bulb temperature for evaporative cooler
     194             :         Real64 MaxOATDBEvapCooler;           // Maximum outdoor air operating dry-bulb temperature for evaporative cooler
     195             :         bool EvapCoolerOperationControlFlag; // turns the evap cooler on/off depending on the outdoor air temperature min and max limits
     196             :         Real64 MaxOATWBEvapCooler;           // Evaporative Operation Maximum Limit Outdoor Wetbulb Temperature
     197             :         Real64 DryCoilMaxEfficiency;         // Cooler Drybulb Design Effectiveness
     198             :         Real64 IndirectFanPower;             // Secondary Fan Design Power
     199             :         Real64 FanSizingSpecificPower;       // secondary fan sizing specific power in W/(m3/s)
     200             :         Real64 RecircPumpSizingFactor;       // water pump power sizing factor W/(m3/s) air
     201             :         Real64 IndirectVolFlowScalingFactor; // secondary air flow sizing Factor
     202             :         int WetbulbEffecCurveIndex;          // wetbulb effectiveness modifier curve name as a function of flow fraction
     203             :         int DrybulbEffecCurveIndex;          // drybulb effectiveness modifier curve name as a function of flow fraction
     204             :         int FanPowerModifierCurveIndex;      // secondary fan power modifier curve name as a function of flow fraction
     205             :         int PumpPowerModifierCurveIndex;     // recirculating pump power modifier curve name as a function of flow fraction
     206             :         int IECOperatingStatus;              // operating mode status of indirect evaporative cooler research special (0: Off, 1: Dry, 2: Wet)
     207             :         int IterationLimit;                  // used for Used for RegulaFalsi recurring error message error -1
     208             :         int IterationFailed;                 // Used for RegulaFalsi recurring error message error -2
     209             :         // rather than wetbulb-depression approach
     210             :         OperatingMode EvapCoolerRDDOperatingMode; // the indirect evaporative cooler Research Special operating mode variable
     211             :         // Operational fault parameters
     212             :         bool FaultyEvapCoolerFoulingFlag;     // True if the evaporative cooler has fouling fault
     213             :         int FaultyEvapCoolerFoulingIndex;     // Index of the fault object corresponding to the evaporative cooler
     214             :         Real64 FaultyEvapCoolerFoulingFactor; // Evaporative cooler fouling factor
     215             :         bool MySizeFlag;
     216             : 
     217             :         // Default Constructor
     218          16 :         EvapConditions()
     219          16 :             : EquipIndex(0), evapCoolerType(EvapCoolerType::Invalid), SchedPtr(0), VolFlowRate(0.0), DesVolFlowRate(0.0), OutletTemp(0.0),
     220             :               OuletWetBulbTemp(0.0), OutletHumRat(0.0), OutletEnthalpy(0.0), OutletPressure(0.0), OutletMassFlowRate(0.0),
     221             :               OutletMassFlowRateMaxAvail(0.0), OutletMassFlowRateMinAvail(0.0), InitFlag(false), InletNode(0), OutletNode(0), SecondaryInletNode(0),
     222             :               SecondaryOutletNode(0), TertiaryInletNode(0), InletMassFlowRate(0.0), InletMassFlowRateMaxAvail(0.0), InletMassFlowRateMinAvail(0.0),
     223             :               InletTemp(0.0), InletWetBulbTemp(0.0), InletHumRat(0.0), InletEnthalpy(0.0), InletPressure(0.0), SecInletMassFlowRate(0.0),
     224             :               SecInletMassFlowRateMaxAvail(0.0), SecInletMassFlowRateMinAvail(0.0), SecInletTemp(0.0), SecInletWetBulbTemp(0.0), SecInletHumRat(0.0),
     225             :               SecInletEnthalpy(0.0), SecInletPressure(0.0), SecOutletTemp(0.0), SecOuletWetBulbTemp(0.0), SecOutletHumRat(0.0),
     226             :               SecOutletEnthalpy(0.0), SecOutletMassFlowRate(0.0), PadDepth(0.0), PadArea(0.0), RecircPumpPower(0.0), IndirectRecircPumpPower(0.0),
     227             :               IndirectPadDepth(0.0), IndirectPadArea(0.0), IndirectVolFlowRate(0.0), IndirectFanEff(0.0), IndirectFanDeltaPress(0.0),
     228             :               IndirectHXEffectiveness(0.0), DirectEffectiveness(0.0), WetCoilMaxEfficiency(0.0), WetCoilFlowRatio(0.0), EvapCoolerEnergy(0.0),
     229             :               EvapCoolerPower(0.0), EvapWaterSupplyMode(WaterSupply::Invalid), EvapWaterSupTankID(0), EvapWaterTankDemandARRID(0), DriftFraction(0.0),
     230             :               BlowDownRatio(0.0), EvapWaterConsumpRate(0.0), EvapWaterConsump(0.0), EvapWaterStarvMakupRate(0.0), EvapWaterStarvMakup(0.0),
     231             :               SatEff(0.0), StageEff(0.0), DPBoundFactor(0.0), EvapControlNodeNum(0), DesiredOutletTemp(0.0), PartLoadFract(0.0), DewPointBoundFlag(0),
     232             :               MinOATDBEvapCooler(0.0), MaxOATDBEvapCooler(0.0), EvapCoolerOperationControlFlag(false), MaxOATWBEvapCooler(0.0),
     233             :               DryCoilMaxEfficiency(0.0), IndirectFanPower(0.0), FanSizingSpecificPower(0.0), RecircPumpSizingFactor(0.0),
     234             :               IndirectVolFlowScalingFactor(0.0), WetbulbEffecCurveIndex(0), DrybulbEffecCurveIndex(0), FanPowerModifierCurveIndex(0),
     235             :               PumpPowerModifierCurveIndex(0), IECOperatingStatus(0), IterationLimit(0), IterationFailed(0),
     236             :               EvapCoolerRDDOperatingMode(OperatingMode::Invalid), FaultyEvapCoolerFoulingFlag(false), FaultyEvapCoolerFoulingIndex(0),
     237          16 :               FaultyEvapCoolerFoulingFactor(1.0), MySizeFlag(true)
     238             :         {
     239          16 :         }
     240             :     };
     241             : 
     242          63 :     struct ZoneEvapCoolerUnitStruct
     243             :     {
     244             :         std::string Name; // user identifier
     245             :         int ZoneNodeNum;
     246             :         int AvailSchedIndex;              // pointer to local availability schedule
     247             :         std::string AvailManagerListName; // Name of an availability manager list object
     248             :         bool UnitIsAvailable;
     249             :         int FanAvailStatus;
     250             :         int OAInletNodeNum;    // outdoor air inlet node index
     251             :         int UnitOutletNodeNum; // Unit air outlet (to zone) node index
     252             :         int UnitReliefNodeNum; // Unit relief air (from zone) node index (optional)
     253             :         std::string FanObjectClassName;
     254             :         int FanType_Num;
     255             :         std::string FanName;
     256             :         int FanIndex;
     257             :         Real64 ActualFanVolFlowRate;
     258             :         int FanAvailSchedPtr;
     259             :         int FanInletNodeNum;
     260             :         int FanOutletNodeNum;
     261             :         int OpMode; // mode of operation; 1=cycling fan, 2=continuous fan
     262             :         Real64 DesignAirVolumeFlowRate;
     263             :         Real64 DesignAirMassFlowRate;
     264             :         Real64 DesignFanSpeedRatio;
     265             :         Real64 FanSpeedRatio;
     266             :         FanPlacement FanLocation;
     267             :         ControlType ControlSchemeType;
     268             :         Real64 TimeElapsed;
     269             :         Real64 ThrottlingRange; // temperature range for hystersis type tstat contorl [Delta C]
     270             :         bool IsOnThisTimestep;
     271             :         bool WasOnLastTimestep;
     272             :         Real64 ThresholdCoolingLoad;
     273             :         std::string EvapCooler_1_ObjectClassName;
     274             :         std::string EvapCooler_1_Name;
     275             :         EvapCoolerType EvapCooler_1_Type_Num;
     276             :         int EvapCooler_1_Index;
     277             :         bool EvapCooler_1_AvailStatus;
     278             :         std::string EvapCooler_2_ObjectClassName;
     279             :         std::string EvapCooler_2_Name;
     280             :         EvapCoolerType EvapCooler_2_Type_Num;
     281             :         int EvapCooler_2_Index;
     282             :         bool EvapCooler_2_AvailStatus;
     283             :         Real64 OAInletRho;                    // fills internal variable, current inlet air density [kg/m3]
     284             :         Real64 OAInletCp;                     // fills internal variable, current inlet air specific heat [J/kg-c]
     285             :         Real64 OAInletTemp;                   // fills internal variable, current inlet air temperature [C]
     286             :         Real64 OAInletHumRat;                 // fills internal variable, current inlet air humidity ratio [kg/kg]
     287             :         Real64 OAInletMassFlowRate;           // fills internal variable, current inlet air mass flow rate [kg/s]
     288             :         Real64 UnitOutletTemp;                // filled by actuator, component outlet temperature [C]
     289             :         Real64 UnitOutletHumRat;              // filled by actuator, component outlet humidity ratio [kg/kg]
     290             :         Real64 UnitOutletMassFlowRate;        // filled by actuator, component outlet mass flow rate [kg/s]
     291             :         Real64 UnitReliefTemp;                // filled by actuator, component outlet temperature [C]
     292             :         Real64 UnitReliefHumRat;              // filled by actuator, component outlet humidity ratio [kg/kg]
     293             :         Real64 UnitReliefMassFlowRate;        // filled by actuator, component outlet mass flow rate [kg/s]
     294             :         Real64 UnitTotalCoolingRate;          // unit output to zone, total cooling rate [W]
     295             :         Real64 UnitTotalCoolingEnergy;        // unit output to zone, total cooling energy [J]
     296             :         Real64 UnitSensibleCoolingRate;       // unit output to zone, sensible cooling rate [W]
     297             :         Real64 UnitSensibleCoolingEnergy;     // unit output to zone, sensible cooling energy [J]
     298             :         Real64 UnitLatentHeatingRate;         // unit output to zone, latent heating rate [W]
     299             :         Real64 UnitLatentHeatingEnergy;       // unit output to zone, latent heating energy [J]
     300             :         Real64 UnitLatentCoolingRate;         // unit output to zone, latent cooling rate [W]
     301             :         Real64 UnitLatentCoolingEnergy;       // unit output to zone, latent cooling energy [J]
     302             :         Real64 UnitFanSpeedRatio;             // unit fan speed ratio, dimensionless [ ]
     303             :         Real64 UnitPartLoadRatio;             // unit part load ratio, dimensionless [ ]
     304             :         int UnitVSControlMaxIterErrorIndex;   // regula falsi errors, fan speed iteration limits
     305             :         int UnitVSControlLimitsErrorIndex;    // regula falsi errors, limits exceeded.
     306             :         int UnitLoadControlMaxIterErrorIndex; // root solver errors, part load ratio iteration limits exceeded
     307             :         int UnitLoadControlLimitsErrorIndex;  // root solver errors, art load ratio limits exceeded.
     308             :         int ZonePtr;                          // pointer to a zone served by an evaportive cooler unit
     309             :         int HVACSizingIndex;                  // index of a HVACSizing object for an evaportive cooler unit
     310             :         bool MySize;                          // sizing logic flag
     311             :         bool MyEnvrn;                         // sim environmental logic flag
     312             :         bool MyFan;                           // fan sizing logic flag
     313             :         bool MyZoneEq;                        // logic flag used to set up zone equipment availability managers
     314             : 
     315             :         // Default Constructor
     316           3 :         ZoneEvapCoolerUnitStruct()
     317           3 :             : ZoneNodeNum(0), AvailSchedIndex(0), UnitIsAvailable(false), FanAvailStatus(0), OAInletNodeNum(0), UnitOutletNodeNum(0),
     318             :               UnitReliefNodeNum(0), FanType_Num(0), FanIndex(0), ActualFanVolFlowRate(0.0), FanAvailSchedPtr(0), FanInletNodeNum(0),
     319             :               FanOutletNodeNum(0), OpMode(0), DesignAirVolumeFlowRate(0.0), DesignAirMassFlowRate(0.0), DesignFanSpeedRatio(0.0), FanSpeedRatio(0.0),
     320             :               FanLocation(FanPlacement::Invalid), ControlSchemeType(ControlType::Invalid), TimeElapsed(0.0), ThrottlingRange(0.0),
     321             :               IsOnThisTimestep(false), WasOnLastTimestep(false), ThresholdCoolingLoad(0.0), EvapCooler_1_Type_Num(EvapCoolerType::Invalid),
     322             :               EvapCooler_1_Index(0), EvapCooler_1_AvailStatus(false), EvapCooler_2_Type_Num(EvapCoolerType::Invalid), EvapCooler_2_Index(0),
     323             :               EvapCooler_2_AvailStatus(false), OAInletRho(0.0), OAInletCp(0.0), OAInletTemp(0.0), OAInletHumRat(0.0), OAInletMassFlowRate(0.0),
     324             :               UnitOutletTemp(0.0), UnitOutletHumRat(0.0), UnitOutletMassFlowRate(0.0), UnitReliefTemp(0.0), UnitReliefHumRat(0.0),
     325             :               UnitReliefMassFlowRate(0.0), UnitTotalCoolingRate(0.0), UnitTotalCoolingEnergy(0.0), UnitSensibleCoolingRate(0.0),
     326             :               UnitSensibleCoolingEnergy(0.0), UnitLatentHeatingRate(0.0), UnitLatentHeatingEnergy(0.0), UnitLatentCoolingRate(0.0),
     327             :               UnitLatentCoolingEnergy(0.0), UnitFanSpeedRatio(0.0), UnitPartLoadRatio(0.0), UnitVSControlMaxIterErrorIndex(0),
     328             :               UnitVSControlLimitsErrorIndex(0), UnitLoadControlMaxIterErrorIndex(0), UnitLoadControlLimitsErrorIndex(0), ZonePtr(0),
     329           3 :               HVACSizingIndex(0), MySize(true), MyEnvrn(true), MyFan(true), MyZoneEq(true)
     330             :         {
     331           3 :         }
     332             :     };
     333             : 
     334             :     void SimEvapCooler(EnergyPlusData &state, std::string_view CompName, int &CompIndex, Real64 PartLoadRatio = 1.0);
     335             : 
     336             :     void GetEvapInput(EnergyPlusData &state);
     337             : 
     338             :     void InitEvapCooler(EnergyPlusData &state, int EvapCoolNum);
     339             : 
     340             :     void SizeEvapCooler(EnergyPlusData &state, int EvapCoolNum);
     341             : 
     342             :     void CalcDirectEvapCooler(EnergyPlusData &state, int EvapCoolNum, Real64 PartLoadRatio);
     343             : 
     344             :     void CalcDryIndirectEvapCooler(EnergyPlusData &state, int EvapCoolNum, Real64 PartLoadRatio);
     345             : 
     346             :     void CalcWetIndirectEvapCooler(EnergyPlusData &state, int EvapCoolNum, Real64 PartLoadRatio);
     347             : 
     348             :     void CalcResearchSpecialPartLoad(EnergyPlusData &state, int EvapCoolNum);
     349             : 
     350             :     void CalcIndirectResearchSpecialEvapCoolerAdvanced(EnergyPlusData &state,
     351             :                                                        int EvapCoolNum,
     352             :                                                        Real64 InletDryBulbTempSec,
     353             :                                                        Real64 InletWetBulbTempSec,
     354             :                                                        Real64 InletDewPointTempSec,
     355             :                                                        Real64 InletHumRatioSec);
     356             : 
     357             :     OperatingMode IndirectResearchSpecialEvapCoolerOperatingMode(EnergyPlusData &state,
     358             :                                                                  int EvapCoolNum,
     359             :                                                                  Real64 InletDryBulbTempSec,
     360             :                                                                  Real64 InletWetBulbTempSec,
     361             :                                                                  Real64 TdbOutSysWetMin,
     362             :                                                                  Real64 TdbOutSysDryMin);
     363             : 
     364             :     void CalcSecondaryAirOutletCondition(EnergyPlusData &state,
     365             :                                          int EvapCoolNum,
     366             :                                          OperatingMode OperatingMode,
     367             :                                          Real64 AirMassFlowSec,
     368             :                                          Real64 EDBTSec,
     369             :                                          Real64 EWBTSec,
     370             :                                          Real64 EHumRatSec,
     371             :                                          Real64 QHXTotal,
     372             :                                          Real64 &QHXLatent);
     373             : 
     374             :     void CalcIndirectRDDEvapCoolerOutletTemp(EnergyPlusData &state,
     375             :                                              int EvapCoolNum,
     376             :                                              OperatingMode DryOrWetOperatingMode,
     377             :                                              Real64 AirMassFlowSec,
     378             :                                              Real64 EDBTSec,
     379             :                                              Real64 EWBTSec,
     380             :                                              Real64 EHumRatSec);
     381             : 
     382             :     Real64 IndEvapCoolerPower(EnergyPlusData &state,
     383             :                               int EvapCoolIndex,        // Unit index
     384             :                               OperatingMode DryWetMode, // dry or wet operating mode of evaporator cooler
     385             :                               Real64 FlowRatio          // secondary air flow fraction
     386             :     );
     387             : 
     388             :     void CalcIndirectResearchSpecialEvapCooler(EnergyPlusData &state, int EvapCoolNum, Real64 FanPLR = 1.0);
     389             : 
     390             :     void CalcDirectResearchSpecialEvapCooler(EnergyPlusData &state, int EvapCoolNum, Real64 FanPLR = 1.0);
     391             : 
     392             :     void UpdateEvapCooler(EnergyPlusData &state, int EvapCoolNum);
     393             : 
     394             :     void ReportEvapCooler(EnergyPlusData &state, int EvapCoolNum);
     395             : 
     396             :     void SimZoneEvaporativeCoolerUnit(EnergyPlusData &state,
     397             :                                       std::string_view CompName,      // name of the packaged terminal heat pump
     398             :                                       int ZoneNum,                    // number of zone being served
     399             :                                       Real64 &SensibleOutputProvided, // sensible capacity delivered to zone
     400             :                                       Real64 &LatentOutputProvided,   // Latent add/removal  (kg/s), dehumid = negative
     401             :                                       int &CompIndex                  // index to zone hvac unit
     402             :     );
     403             : 
     404             :     void GetInputZoneEvaporativeCoolerUnit(EnergyPlusData &state);
     405             : 
     406             :     void InitZoneEvaporativeCoolerUnit(EnergyPlusData &state,
     407             :                                        int UnitNum, // unit number
     408             :                                        int ZoneNum  // number of zone being served
     409             :     );
     410             : 
     411             :     void SizeZoneEvaporativeCoolerUnit(EnergyPlusData &state, int UnitNum); // unit number
     412             : 
     413             :     void CalcZoneEvaporativeCoolerUnit(EnergyPlusData &state,
     414             :                                        int UnitNum,                    // unit number
     415             :                                        int ZoneNum,                    // number of zone being served
     416             :                                        Real64 &SensibleOutputProvided, // sensible capacity delivered to zone
     417             :                                        Real64 &LatentOutputProvided    // Latent add/removal  (kg/s), dehumid = negative
     418             :     );
     419             : 
     420             :     void CalcZoneEvapUnitOutput(EnergyPlusData &state,
     421             :                                 int UnitNum,                    // unit number
     422             :                                 Real64 PartLoadRatio,           // zone evap unit part load ratiod
     423             :                                 Real64 &SensibleOutputProvided, // sensible capacity delivered to zone
     424             :                                 Real64 &LatentOutputProvided    // Latent add/removal  (kg/s), dehumid = negative
     425             :     );
     426             : 
     427             :     void ControlZoneEvapUnitOutput(EnergyPlusData &state,
     428             :                                    int UnitNum,           // unit number
     429             :                                    Real64 ZoneCoolingLoad // target cooling load
     430             :     );
     431             : 
     432             :     void ControlVSEvapUnitToMeetLoad(EnergyPlusData &state,
     433             :                                      int UnitNum,           // unit number
     434             :                                      Real64 ZoneCoolingLoad // target cooling load
     435             :     );
     436             : 
     437             :     void ReportZoneEvaporativeCoolerUnit(EnergyPlusData &state, int UnitNum); // unit number
     438             : 
     439             :     int GetInletNodeNum(EnergyPlusData &state, std::string const &EvapCondName, bool &ErrorsFound);
     440             : 
     441             :     int GetOutletNodeNum(EnergyPlusData &state, std::string const &EvapCondName, bool &ErrorsFound);
     442             : 
     443             : } // namespace EvaporativeCoolers
     444             : 
     445        1542 : struct EvaporativeCoolersData : BaseGlobalStruct
     446             : {
     447             : 
     448             :     bool GetInputEvapComponentsFlag = true; // Flag set to make sure you get input once
     449             :     int NumEvapCool = 0;                    // The Number of Evap Coolers found in the Input
     450             :     Array1D_bool CheckEquipName;
     451             :     int NumZoneEvapUnits = 0;
     452             :     Array1D_bool CheckZoneEvapUnitName;
     453             :     bool GetInputZoneEvapUnit = true;
     454             :     Array1D<EvaporativeCoolers::EvapConditions> EvapCond;
     455             :     Array1D<EvaporativeCoolers::ZoneEvapCoolerUnitStruct> ZoneEvapUnit;
     456             :     std::unordered_map<std::string, std::string> UniqueEvapCondNames;
     457             :     bool MySetPointCheckFlag = true;
     458             :     bool ZoneEquipmentListChecked = false;
     459             : 
     460           0 :     void clear_state() override
     461             :     {
     462           0 :         *this = EvaporativeCoolersData();
     463           0 :     }
     464             : };
     465             : 
     466             : } // namespace EnergyPlus
     467             : 
     468             : #endif

Generated by: LCOV version 1.13