LCOV - code coverage report
Current view: top level - EnergyPlus - SteamBaseboardRadiator.cc (source / functions) Hit Total Coverage
Test: lcov.output.filtered Lines: 514 812 63.3 %
Date: 2023-01-17 19:17:23 Functions: 11 12 91.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             : // C++ Headers
      49             : #include <cmath>
      50             : 
      51             : // ObjexxFCL Headers
      52             : #include <ObjexxFCL/Array.functions.hh>
      53             : 
      54             : // EnergyPlus Headers
      55             : #include <EnergyPlus/Autosizing/HeatingCapacitySizing.hh>
      56             : #include <EnergyPlus/BranchNodeConnections.hh>
      57             : #include <EnergyPlus/Data/EnergyPlusData.hh>
      58             : #include <EnergyPlus/DataHVACGlobals.hh>
      59             : #include <EnergyPlus/DataHeatBalFanSys.hh>
      60             : #include <EnergyPlus/DataHeatBalSurface.hh>
      61             : #include <EnergyPlus/DataHeatBalance.hh>
      62             : #include <EnergyPlus/DataIPShortCuts.hh>
      63             : #include <EnergyPlus/DataLoopNode.hh>
      64             : #include <EnergyPlus/DataSizing.hh>
      65             : #include <EnergyPlus/DataSurfaces.hh>
      66             : #include <EnergyPlus/DataZoneEnergyDemands.hh>
      67             : #include <EnergyPlus/DataZoneEquipment.hh>
      68             : #include <EnergyPlus/FluidProperties.hh>
      69             : #include <EnergyPlus/General.hh>
      70             : #include <EnergyPlus/GeneralRoutines.hh>
      71             : #include <EnergyPlus/GlobalNames.hh>
      72             : #include <EnergyPlus/HeatBalanceIntRadExchange.hh>
      73             : #include <EnergyPlus/HeatBalanceSurfaceManager.hh>
      74             : #include <EnergyPlus/InputProcessing/InputProcessor.hh>
      75             : #include <EnergyPlus/NodeInputManager.hh>
      76             : #include <EnergyPlus/OutputProcessor.hh>
      77             : #include <EnergyPlus/Plant/DataPlant.hh>
      78             : #include <EnergyPlus/PlantUtilities.hh>
      79             : #include <EnergyPlus/ScheduleManager.hh>
      80             : #include <EnergyPlus/SteamBaseboardRadiator.hh>
      81             : #include <EnergyPlus/UtilityRoutines.hh>
      82             : 
      83             : namespace EnergyPlus {
      84             : 
      85             : namespace SteamBaseboardRadiator {
      86             : 
      87             :     // Module -- (ref: Object: ZoneHVAC:Baseboard:RadiantConvective:Steam)
      88             : 
      89             :     // Module containing the routines dealing with the steam baseboard heaters
      90             : 
      91             :     // MODULE INFORMATION:
      92             :     //       AUTHOR         Daeho Kang
      93             :     //       DATE WRITTEN   September 2009
      94             :     //       MODIFIED       na
      95             :     //       RE-ENGINEERED  na
      96             : 
      97             :     // PURPOSE OF THIS MODULE:
      98             :     // The purpose of this module is to simulate steam baseboard heaters.
      99             : 
     100             :     // METHODOLOGY EMPLOYED:
     101             : 
     102             :     // REFERENCES:
     103             :     // 1. HWBaseboardRadiator module (ZoneHVAC:Baseboard:RadiantConvective:Water)
     104             :     // 2. SteamCoils module (Coil:Heating:Steam)
     105             : 
     106             :     using DataHVACGlobals::SmallLoad;
     107             :     using DataLoopNode::ObjectIsNotParent;
     108             : 
     109             :     using DataZoneEquipment::CheckZoneEquipmentList;
     110             : 
     111             :     static constexpr std::string_view fluidNameSteam("STEAM");
     112             : 
     113        7420 :     void SimSteamBaseboard(EnergyPlusData &state,
     114             :                            std::string const &EquipName,
     115             :                            int const ControlledZoneNum,
     116             :                            bool const FirstHVACIteration,
     117             :                            Real64 &PowerMet,
     118             :                            int &CompIndex)
     119             :     {
     120             : 
     121             :         // SUBROUTINE INFORMATION:
     122             :         //       AUTHOR         Russ Taylor
     123             :         //       DATE WRITTEN   Nov 1997
     124             :         //       MODIFIED
     125             :         //       RE-ENGINEERED  na
     126             : 
     127             :         // PURPOSE OF THIS SUBROUTINE:
     128             :         // This subroutine simulates the steam baseboards or radiators.
     129             : 
     130             :         using PlantUtilities::SetComponentFlowRate;
     131             :         using ScheduleManager::GetCurrentScheduleValue;
     132             : 
     133             :         // SUBROUTINE LOCAL VARIABLE DECLARATIONS:
     134             :         int BaseboardNum; // index of unit in baseboard array
     135             :         Real64 QZnReq;    // zone load not yet satisfied
     136             :         Real64 MaxSteamFlow;
     137             :         Real64 MinSteamFlow;
     138             : 
     139        7420 :         if (state.dataSteamBaseboardRadiator->GetInputFlag) {
     140           1 :             GetSteamBaseboardInput(state);
     141           1 :             state.dataSteamBaseboardRadiator->GetInputFlag = false;
     142             :         }
     143             : 
     144             :         // Find the correct Baseboard Equipment
     145        7420 :         if (CompIndex == 0) {
     146           2 :             BaseboardNum =
     147           2 :                 UtilityRoutines::FindItemInList(EquipName, state.dataSteamBaseboardRadiator->SteamBaseboard, &SteamBaseboardParams::EquipID);
     148           2 :             if (BaseboardNum == 0) {
     149           0 :                 ShowFatalError(state, "SimSteamBaseboard: Unit not found=" + EquipName);
     150             :             }
     151           2 :             CompIndex = BaseboardNum;
     152             :         } else {
     153        7418 :             BaseboardNum = CompIndex;
     154        7418 :             if (BaseboardNum > state.dataSteamBaseboardRadiator->NumSteamBaseboards || BaseboardNum < 1) {
     155           0 :                 ShowFatalError(state,
     156           0 :                                format("SimSteamBaseboard:  Invalid CompIndex passed={}, Number of Units={}, Entered Unit name={}",
     157             :                                       BaseboardNum,
     158           0 :                                       state.dataSteamBaseboardRadiator->NumSteamBaseboards,
     159           0 :                                       EquipName));
     160             :             }
     161        7418 :             if (state.dataSteamBaseboardRadiator->CheckEquipName(BaseboardNum)) {
     162           2 :                 if (EquipName != state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).EquipID) {
     163           0 :                     ShowFatalError(state,
     164           0 :                                    format("SimSteamBaseboard: Invalid CompIndex passed={}, Unit name={}, stored Unit Name for that index={}",
     165             :                                           BaseboardNum,
     166             :                                           EquipName,
     167           0 :                                           state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).EquipID));
     168             :                 }
     169           2 :                 state.dataSteamBaseboardRadiator->CheckEquipName(BaseboardNum) = false;
     170             :             }
     171             :         }
     172             : 
     173        7420 :         if (CompIndex > 0) {
     174             : 
     175        7420 :             InitSteamBaseboard(state, BaseboardNum, ControlledZoneNum, FirstHVACIteration);
     176             : 
     177        7420 :             QZnReq = state.dataZoneEnergyDemand->ZoneSysEnergyDemand(ControlledZoneNum).RemainingOutputReqToHeatSP;
     178             : 
     179        7420 :             SteamBaseboardDesignData SteamBaseboardDesignDataObject{state.dataSteamBaseboardRadiator->SteamBaseboardDesign(
     180        7420 :                 state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum)
     181       22260 :                     .DesignObjectPtr)}; // Array that contains the design data for steam baseboard objects
     182             : 
     183       10175 :             if (QZnReq > SmallLoad && !state.dataZoneEnergyDemand->CurDeadBandOrSetback(ControlledZoneNum) &&
     184        2755 :                 (GetCurrentScheduleValue(state, state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SchedPtr) > 0.0)) {
     185             : 
     186             :                 // On the first HVAC iteration the system values are given to the controller, but after that
     187             :                 // the demand limits are in place and there needs to be feedback to the Zone Equipment
     188        2755 :                 if (FirstHVACIteration) {
     189        1378 :                     MaxSteamFlow = state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamMassFlowRateMax;
     190        1378 :                     MinSteamFlow = 0.0;
     191             :                 } else {
     192        1377 :                     MaxSteamFlow =
     193        1377 :                         state.dataLoopNodes->Node(state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamInletNode).MassFlowRateMaxAvail;
     194        1377 :                     MinSteamFlow =
     195        1377 :                         state.dataLoopNodes->Node(state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamInletNode).MassFlowRateMinAvail;
     196             :                 }
     197             : 
     198        2755 :                 switch (state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).EquipType) {
     199        2755 :                 case DataPlant::PlantEquipmentType::Baseboard_Rad_Conv_Steam: { // 'ZoneHVAC:Baseboard:RadiantConvective:Steam'
     200       19285 :                     ControlCompOutput(state,
     201        2755 :                                       state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).EquipID,
     202        2755 :                                       state.dataSteamBaseboardRadiator->cCMO_BBRadiator_Steam,
     203             :                                       BaseboardNum,
     204             :                                       FirstHVACIteration,
     205             :                                       QZnReq,
     206        2755 :                                       state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamInletNode,
     207             :                                       MaxSteamFlow,
     208             :                                       MinSteamFlow,
     209             :                                       SteamBaseboardDesignDataObject.Offset,
     210        2755 :                                       state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).ControlCompTypeNum,
     211        2755 :                                       state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).CompErrIndex,
     212             :                                       _,
     213             :                                       _,
     214             :                                       _,
     215             :                                       _,
     216             :                                       _,
     217        2755 :                                       state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).plantLoc);
     218        2755 :                 } break;
     219           0 :                 default: {
     220           0 :                     ShowSevereError(
     221           0 :                         state, "SimSteamBaseboard: Errors in Baseboard=" + state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).EquipID);
     222           0 :                     ShowContinueError(state,
     223           0 :                                       format("Invalid or unimplemented equipment type={}",
     224           0 :                                              state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).EquipType));
     225           0 :                     ShowFatalError(state, "Preceding condition causes termination.");
     226           0 :                 } break;
     227             :                 }
     228             : 
     229        2755 :                 PowerMet = state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).TotPower;
     230             :             } else {
     231             :                 // baseboard is off, don't bother going into ControlCompOutput
     232        4665 :                 Real64 mdot = 0.0;
     233       13995 :                 SetComponentFlowRate(state,
     234             :                                      mdot,
     235        4665 :                                      state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamInletNode,
     236        4665 :                                      state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamOutletNode,
     237        4665 :                                      state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).plantLoc);
     238        4665 :                 CalcSteamBaseboard(state, BaseboardNum, PowerMet);
     239             :             }
     240             : 
     241        7420 :             UpdateSteamBaseboard(state, BaseboardNum);
     242             : 
     243        7420 :             ReportSteamBaseboard(state, BaseboardNum);
     244             : 
     245             :         } else {
     246           0 :             ShowFatalError(state, "SimSteamBaseboard: Unit not found=" + EquipName);
     247             :         }
     248        7420 :     }
     249             : 
     250           1 :     void GetSteamBaseboardInput(EnergyPlusData &state)
     251             :     {
     252             : 
     253             :         // SUBROUTINE INFORMATION:
     254             :         //       AUTHOR         Daeho Kang
     255             :         //       DATE WRITTEN   September 2009
     256             :         //       MODIFIED       na
     257             :         //       RE-ENGINEERED  na
     258             : 
     259             :         // PURPOSE OF THIS SUBROUTINE:
     260             :         // This subroutine gets the input for the baseboard units.
     261             : 
     262             :         // METHODOLOGY EMPLOYED:
     263             :         // Standard input processor calls.
     264             : 
     265             :         // REFERENCES:
     266             :         // HWBaseboardRadiator module
     267             : 
     268             :         // Using/Aliasing
     269             :         using BranchNodeConnections::TestCompSet;
     270             :         using FluidProperties::FindRefrigerant;
     271             : 
     272             :         using GlobalNames::VerifyUniqueBaseboardName;
     273             :         using NodeInputManager::GetOnlySingleNode;
     274             :         using ScheduleManager::GetCurrentScheduleValue;
     275             :         using ScheduleManager::GetScheduleIndex;
     276             :         using namespace DataSizing;
     277             : 
     278             :         // SUBROUTINE PARAMETER DEFINITIONS:
     279             :         static constexpr std::string_view RoutineName("GetSteamBaseboardInput:");
     280           1 :         Real64 constexpr MaxFraction(1.0);       // Maximum limit of fractional values
     281           1 :         Real64 constexpr MinFraction(0.0);       // Minimum limit of fractional values
     282           1 :         Real64 constexpr MaxSteamFlowRate(10.0); // Maximum limit of steam volume flow rate in m3/s
     283           1 :         Real64 constexpr MinSteamFlowRate(0.0);  // Minimum limit of steam volume flow rate in m3/s
     284             :         //    INTEGER,PARAMETER :: MaxDistribSurfaces   = 20          ! Maximum number of surfaces that a baseboard heater can radiate to
     285           1 :         int constexpr MinDistribSurfaces(1);            // Minimum number of surfaces that a baseboard heater can radiate to
     286           1 :         int constexpr iHeatCAPMAlphaNum(2);             // get input index to steam baseboard Radiator system heating capacity sizing method
     287           1 :         int constexpr iHeatDesignCapacityNumericNum(1); // get input index to steam baseboard Radiator system electric heating capacity
     288           1 :         int constexpr iHeatCapacityPerFloorAreaNumericNum(
     289             :             1); // get input index to steam baseboard Radiator system electric heating capacity per floor area sizing
     290           1 :         int constexpr iHeatFracOfAutosizedCapacityNumericNum(
     291             :             2); //  get input index to steam baseboard Radiator system electric heating capacity sizing as fraction of autozized heating capacity
     292             : 
     293             :         // SUBROUTINE LOCAL VARIABLE DECLARATIONS:
     294             :         Real64 AllFracsSummed;     // Sum of the fractions radiant
     295             :         int BaseboardNum;          // Baseboard number
     296           1 :         int BaseboardDesignNum(0); // Baseboard number
     297             :         int NumAlphas;             // Number of Alphas for each GetobjectItem call
     298             :         int NumNumbers;            // Number of Numbers for each GetobjectItem call
     299             :         int SurfNum;               // Surface number Do loop counter
     300             :         int IOStat;
     301           1 :         bool ErrorsFound(false); // If errors detected in input
     302             :         bool SteamMessageNeeded;
     303             : 
     304           1 :         SteamMessageNeeded = true;
     305           1 :         state.dataSteamBaseboardRadiator->NumSteamBaseboards =
     306           1 :             state.dataInputProcessing->inputProcessor->getNumObjectsFound(state, state.dataSteamBaseboardRadiator->cCMO_BBRadiator_Steam);
     307           1 :         state.dataSteamBaseboardRadiator->NumSteamBaseboardsDesign =
     308           1 :             state.dataInputProcessing->inputProcessor->getNumObjectsFound(state, state.dataSteamBaseboardRadiator->cCMO_BBRadiator_Steam_Design);
     309             : 
     310             :         // Count total number of baseboard units
     311             : 
     312           1 :         state.dataSteamBaseboardRadiator->SteamBaseboard.allocate(state.dataSteamBaseboardRadiator->NumSteamBaseboards);
     313           1 :         state.dataSteamBaseboardRadiator->CheckEquipName.dimension(state.dataSteamBaseboardRadiator->NumSteamBaseboards, true);
     314           1 :         state.dataSteamBaseboardRadiator->SteamBaseboardNumericFields.allocate(state.dataSteamBaseboardRadiator->NumSteamBaseboards);
     315             : 
     316             :         // Count total number of baseboard design objects
     317             : 
     318           1 :         state.dataSteamBaseboardRadiator->SteamBaseboardDesign.allocate(state.dataSteamBaseboardRadiator->NumSteamBaseboardsDesign);
     319           1 :         state.dataSteamBaseboardRadiator->CheckDesignObjectName.dimension(state.dataSteamBaseboardRadiator->NumSteamBaseboardsDesign, true);
     320           1 :         state.dataSteamBaseboardRadiator->SteamBaseboardDesignNumericFields.allocate(state.dataSteamBaseboardRadiator->NumSteamBaseboardsDesign);
     321           1 :         state.dataSteamBaseboardRadiator->SteamBaseboardDesignNames.allocate(state.dataSteamBaseboardRadiator->NumSteamBaseboardsDesign);
     322             : 
     323             :         // Get the data from the user input related to baseboard heater designobjects
     324           2 :         for (BaseboardDesignNum = 1; BaseboardDesignNum <= state.dataSteamBaseboardRadiator->NumSteamBaseboardsDesign; ++BaseboardDesignNum) {
     325             : 
     326           8 :             state.dataInputProcessing->inputProcessor->getObjectItem(state,
     327           1 :                                                                      state.dataSteamBaseboardRadiator->cCMO_BBRadiator_Steam_Design,
     328             :                                                                      BaseboardDesignNum,
     329           1 :                                                                      state.dataIPShortCut->cAlphaArgs,
     330             :                                                                      NumAlphas,
     331           1 :                                                                      state.dataIPShortCut->rNumericArgs,
     332             :                                                                      NumNumbers,
     333             :                                                                      IOStat,
     334           1 :                                                                      state.dataIPShortCut->lNumericFieldBlanks,
     335           1 :                                                                      state.dataIPShortCut->lAlphaFieldBlanks,
     336           1 :                                                                      state.dataIPShortCut->cAlphaFieldNames,
     337           1 :                                                                      state.dataIPShortCut->cNumericFieldNames);
     338           2 :             UtilityRoutines::IsNameEmpty(
     339           2 :                 state, state.dataIPShortCut->cAlphaArgs(1), state.dataSteamBaseboardRadiator->cCMO_BBRadiator_Steam_Design, ErrorsFound);
     340           1 :             state.dataSteamBaseboardRadiator->SteamBaseboardDesignNumericFields(BaseboardDesignNum).FieldNames.allocate(NumNumbers);
     341           1 :             state.dataSteamBaseboardRadiator->SteamBaseboardDesignNumericFields(BaseboardDesignNum).FieldNames = "";
     342           2 :             state.dataSteamBaseboardRadiator->SteamBaseboardDesignNumericFields(BaseboardDesignNum).FieldNames =
     343           2 :                 state.dataIPShortCut->cNumericFieldNames;
     344             : 
     345             :             // ErrorsFound will be set to True if problem was found, left untouched otherwise
     346           1 :             VerifyUniqueBaseboardName(state,
     347           1 :                                       state.dataSteamBaseboardRadiator->cCMO_BBRadiator_Steam_Design,
     348           1 :                                       state.dataIPShortCut->cAlphaArgs(1),
     349             :                                       ErrorsFound,
     350           3 :                                       state.dataSteamBaseboardRadiator->cCMO_BBRadiator_Steam_Design + " Name");
     351             : 
     352           2 :             state.dataSteamBaseboardRadiator->SteamBaseboardDesign(BaseboardDesignNum).designName =
     353           2 :                 state.dataIPShortCut->cAlphaArgs(1); // Name of the design object of baseboard
     354           1 :             state.dataSteamBaseboardRadiator->SteamBaseboardDesignNames(BaseboardDesignNum) =
     355           1 :                 state.dataIPShortCut->cAlphaArgs(1); // Add to  array of design object names
     356             : 
     357             :             // Determine steam baseboard radiator system heating design capacity sizing method
     358           1 :             if (UtilityRoutines::SameString(state.dataIPShortCut->cAlphaArgs(iHeatCAPMAlphaNum), "HeatingDesignCapacity")) {
     359           1 :                 state.dataSteamBaseboardRadiator->SteamBaseboardDesign(BaseboardDesignNum).HeatingCapMethod = HeatingDesignCapacity;
     360           0 :             } else if (UtilityRoutines::SameString(state.dataIPShortCut->cAlphaArgs(iHeatCAPMAlphaNum), "CapacityPerFloorArea")) {
     361           0 :                 state.dataSteamBaseboardRadiator->SteamBaseboardDesign(BaseboardDesignNum).HeatingCapMethod = CapacityPerFloorArea;
     362           0 :                 if (!state.dataIPShortCut->lNumericFieldBlanks(iHeatCapacityPerFloorAreaNumericNum)) {
     363           0 :                     state.dataSteamBaseboardRadiator->SteamBaseboardDesign(BaseboardDesignNum).DesignScaledHeatingCapacity =
     364           0 :                         state.dataIPShortCut->rNumericArgs(iHeatCapacityPerFloorAreaNumericNum);
     365           0 :                     if (state.dataSteamBaseboardRadiator->SteamBaseboardDesign(BaseboardDesignNum).DesignScaledHeatingCapacity <= 0.0) {
     366           0 :                         ShowSevereError(state,
     367           0 :                                         state.dataSteamBaseboardRadiator->cCMO_BBRadiator_Steam_Design + " = " +
     368           0 :                                             state.dataSteamBaseboardRadiator->SteamBaseboardDesign(BaseboardDesignNum).designName);
     369           0 :                         ShowContinueError(state,
     370           0 :                                           "Input for " + state.dataIPShortCut->cAlphaFieldNames(iHeatCAPMAlphaNum) + " = " +
     371           0 :                                               state.dataIPShortCut->cAlphaArgs(iHeatCAPMAlphaNum));
     372           0 :                         ShowContinueError(state,
     373           0 :                                           format("Illegal {} = {:.7T}",
     374           0 :                                                  state.dataIPShortCut->cNumericFieldNames(iHeatCapacityPerFloorAreaNumericNum),
     375           0 :                                                  state.dataIPShortCut->rNumericArgs(iHeatCapacityPerFloorAreaNumericNum)));
     376           0 :                         ErrorsFound = true;
     377           0 :                     } else if (state.dataSteamBaseboardRadiator->SteamBaseboardDesign(BaseboardDesignNum).DesignScaledHeatingCapacity == AutoSize) {
     378           0 :                         ShowSevereError(state,
     379           0 :                                         state.dataSteamBaseboardRadiator->cCMO_BBRadiator_Steam_Design + " = " +
     380           0 :                                             state.dataSteamBaseboardRadiator->SteamBaseboardDesign(BaseboardDesignNum).designName);
     381           0 :                         ShowContinueError(state,
     382           0 :                                           "Input for " + state.dataIPShortCut->cAlphaFieldNames(iHeatCAPMAlphaNum) + " = " +
     383           0 :                                               state.dataIPShortCut->cAlphaArgs(iHeatCAPMAlphaNum));
     384           0 :                         ShowContinueError(state,
     385           0 :                                           "Illegal " + state.dataIPShortCut->cNumericFieldNames(iHeatCapacityPerFloorAreaNumericNum) + " = Autosize");
     386           0 :                         ErrorsFound = true;
     387             :                     }
     388             :                 } else {
     389           0 :                     ShowSevereError(state,
     390           0 :                                     state.dataSteamBaseboardRadiator->cCMO_BBRadiator_Steam_Design + " = " +
     391           0 :                                         state.dataSteamBaseboardRadiator->SteamBaseboardDesign(BaseboardDesignNum).designName);
     392           0 :                     ShowContinueError(state,
     393           0 :                                       "Input for " + state.dataIPShortCut->cAlphaFieldNames(iHeatCAPMAlphaNum) + " = " +
     394           0 :                                           state.dataIPShortCut->cAlphaArgs(iHeatCAPMAlphaNum));
     395           0 :                     ShowContinueError(state,
     396           0 :                                       "Blank field not allowed for " + state.dataIPShortCut->cNumericFieldNames(iHeatCapacityPerFloorAreaNumericNum));
     397           0 :                     ErrorsFound = true;
     398             :                 }
     399           0 :             } else if (UtilityRoutines::SameString(state.dataIPShortCut->cAlphaArgs(iHeatCAPMAlphaNum), "FractionOfAutosizedHeatingCapacity")) {
     400           0 :                 state.dataSteamBaseboardRadiator->SteamBaseboardDesign(BaseboardDesignNum).HeatingCapMethod = FractionOfAutosizedHeatingCapacity;
     401           0 :                 if (!state.dataIPShortCut->lNumericFieldBlanks(iHeatFracOfAutosizedCapacityNumericNum)) {
     402           0 :                     state.dataSteamBaseboardRadiator->SteamBaseboardDesign(BaseboardDesignNum).DesignScaledHeatingCapacity =
     403           0 :                         state.dataIPShortCut->rNumericArgs(iHeatFracOfAutosizedCapacityNumericNum);
     404           0 :                     if (state.dataSteamBaseboardRadiator->SteamBaseboardDesign(BaseboardDesignNum).DesignScaledHeatingCapacity < 0.0) {
     405           0 :                         ShowSevereError(state,
     406           0 :                                         state.dataSteamBaseboardRadiator->cCMO_BBRadiator_Steam_Design + " = " +
     407           0 :                                             state.dataSteamBaseboardRadiator->SteamBaseboardDesign(BaseboardDesignNum).designName);
     408           0 :                         ShowContinueError(state,
     409           0 :                                           format("Illegal {} = {:.7T}",
     410           0 :                                                  state.dataIPShortCut->cNumericFieldNames(iHeatFracOfAutosizedCapacityNumericNum),
     411           0 :                                                  state.dataIPShortCut->rNumericArgs(iHeatFracOfAutosizedCapacityNumericNum)));
     412           0 :                         ErrorsFound = true;
     413             :                     }
     414             :                 } else {
     415           0 :                     ShowSevereError(state,
     416           0 :                                     state.dataSteamBaseboardRadiator->cCMO_BBRadiator_Steam_Design + " = " +
     417           0 :                                         state.dataSteamBaseboardRadiator->SteamBaseboardDesign(BaseboardDesignNum).designName);
     418           0 :                     ShowContinueError(state,
     419           0 :                                       "Input for " + state.dataIPShortCut->cAlphaFieldNames(iHeatCAPMAlphaNum) + " = " +
     420           0 :                                           state.dataIPShortCut->cAlphaArgs(iHeatCAPMAlphaNum));
     421           0 :                     ShowContinueError(
     422           0 :                         state, "Blank field not allowed for " + state.dataIPShortCut->cNumericFieldNames(iHeatFracOfAutosizedCapacityNumericNum));
     423           0 :                     ErrorsFound = true;
     424             :                 }
     425             :             } else {
     426           0 :                 ShowSevereError(state,
     427           0 :                                 state.dataSteamBaseboardRadiator->cCMO_BBRadiator_Steam_Design + " = " +
     428           0 :                                     state.dataSteamBaseboardRadiator->SteamBaseboardDesign(BaseboardDesignNum).designName);
     429           0 :                 ShowContinueError(state,
     430           0 :                                   "Illegal " + state.dataIPShortCut->cAlphaFieldNames(iHeatCAPMAlphaNum) + " = " +
     431           0 :                                       state.dataIPShortCut->cAlphaArgs(iHeatCAPMAlphaNum));
     432           0 :                 ErrorsFound = true;
     433             :             }
     434             : 
     435           1 :             state.dataSteamBaseboardRadiator->SteamBaseboardDesign(BaseboardDesignNum).Offset = state.dataIPShortCut->rNumericArgs(3);
     436             :             // Set default convergence tolerance
     437           1 :             if (state.dataSteamBaseboardRadiator->SteamBaseboardDesign(BaseboardDesignNum).Offset <= 0.0) {
     438           0 :                 state.dataSteamBaseboardRadiator->SteamBaseboardDesign(BaseboardDesignNum).Offset = 0.001;
     439           0 :                 ShowWarningError(state,
     440           0 :                                  std::string{RoutineName} + state.dataSteamBaseboardRadiator->cCMO_BBRadiator_Steam_Design + "=\"" +
     441           0 :                                      state.dataIPShortCut->cAlphaArgs(1) + "\", " + state.dataIPShortCut->cNumericFieldNames(3) +
     442             :                                      " was less than the allowable minimum.");
     443           0 :                 ShowContinueError(state, "...reset to default value=[0.001].");
     444             :             }
     445             : 
     446             :             // Fraction of radiant heat out of the total heating rate of the unit
     447           1 :             state.dataSteamBaseboardRadiator->SteamBaseboardDesign(BaseboardDesignNum).FracRadiant = state.dataIPShortCut->rNumericArgs(4);
     448           1 :             if (state.dataSteamBaseboardRadiator->SteamBaseboardDesign(BaseboardDesignNum).FracRadiant < MinFraction) {
     449           0 :                 ShowWarningError(state,
     450           0 :                                  std::string{RoutineName} + state.dataSteamBaseboardRadiator->cCMO_BBRadiator_Steam_Design + "=\"" +
     451           0 :                                      state.dataIPShortCut->cAlphaArgs(1) + "\", " + state.dataIPShortCut->cNumericFieldNames(4) +
     452             :                                      " was lower than the allowable minimum.");
     453           0 :                 ShowContinueError(state, format("...reset to minimum value=[{:.3R}].", MinFraction));
     454           0 :                 state.dataSteamBaseboardRadiator->SteamBaseboardDesign(BaseboardDesignNum).FracRadiant = MinFraction;
     455           1 :             } else if (state.dataSteamBaseboardRadiator->SteamBaseboardDesign(BaseboardDesignNum).FracRadiant > MaxFraction) {
     456           0 :                 ShowWarningError(state,
     457           0 :                                  std::string{RoutineName} + state.dataSteamBaseboardRadiator->cCMO_BBRadiator_Steam_Design + "=\"" +
     458           0 :                                      state.dataIPShortCut->cAlphaArgs(1) + "\", " + state.dataIPShortCut->cNumericFieldNames(4) +
     459             :                                      " was higher than the allowable maximum.");
     460           0 :                 ShowContinueError(state, format("...reset to maximum value=[{:.3R}].", MaxFraction));
     461           0 :                 state.dataSteamBaseboardRadiator->SteamBaseboardDesign(BaseboardDesignNum).FracRadiant = MaxFraction;
     462             :             }
     463             : 
     464             :             // Fraction of radiant heat addition to the people within the radiant heating capacity specified by the user
     465           1 :             state.dataSteamBaseboardRadiator->SteamBaseboardDesign(BaseboardDesignNum).FracDistribPerson = state.dataIPShortCut->rNumericArgs(5);
     466           1 :             if (state.dataSteamBaseboardRadiator->SteamBaseboardDesign(BaseboardDesignNum).FracDistribPerson < MinFraction) {
     467           0 :                 ShowWarningError(state,
     468           0 :                                  std::string{RoutineName} + state.dataSteamBaseboardRadiator->cCMO_BBRadiator_Steam_Design + "=\"" +
     469           0 :                                      state.dataIPShortCut->cAlphaArgs(1) + "\", " + state.dataIPShortCut->cNumericFieldNames(5) +
     470             :                                      " was lower than the allowable minimum.");
     471           0 :                 ShowContinueError(state, format("...reset to minimum value=[{:.3R}].", MinFraction));
     472           0 :                 state.dataSteamBaseboardRadiator->SteamBaseboardDesign(BaseboardDesignNum).FracDistribPerson = MinFraction;
     473             :             }
     474           1 :             if (state.dataSteamBaseboardRadiator->SteamBaseboardDesign(BaseboardDesignNum).FracDistribPerson > MaxFraction) {
     475           0 :                 ShowWarningError(state,
     476           0 :                                  std::string{RoutineName} + state.dataSteamBaseboardRadiator->cCMO_BBRadiator_Steam_Design + "=\"" +
     477           0 :                                      state.dataIPShortCut->cAlphaArgs(1) + "\", " + state.dataIPShortCut->cNumericFieldNames(5) +
     478             :                                      " was higher than the allowable maximum.");
     479           0 :                 ShowContinueError(state, format("...reset to maximum value=[{:.3R}].", MaxFraction));
     480           0 :                 state.dataSteamBaseboardRadiator->SteamBaseboardDesign(BaseboardDesignNum).FracDistribPerson = MaxFraction;
     481             :             }
     482             :         }
     483             : 
     484             :         // Get the data from the user input related to baseboard heaters
     485           3 :         for (BaseboardNum = 1; BaseboardNum <= state.dataSteamBaseboardRadiator->NumSteamBaseboards; ++BaseboardNum) {
     486             : 
     487          16 :             state.dataInputProcessing->inputProcessor->getObjectItem(state,
     488           2 :                                                                      state.dataSteamBaseboardRadiator->cCMO_BBRadiator_Steam,
     489             :                                                                      BaseboardNum,
     490           2 :                                                                      state.dataIPShortCut->cAlphaArgs,
     491             :                                                                      NumAlphas,
     492           2 :                                                                      state.dataIPShortCut->rNumericArgs,
     493             :                                                                      NumNumbers,
     494             :                                                                      IOStat,
     495           2 :                                                                      state.dataIPShortCut->lNumericFieldBlanks,
     496           2 :                                                                      state.dataIPShortCut->lAlphaFieldBlanks,
     497           2 :                                                                      state.dataIPShortCut->cAlphaFieldNames,
     498           2 :                                                                      state.dataIPShortCut->cNumericFieldNames);
     499           4 :             UtilityRoutines::IsNameEmpty(
     500           4 :                 state, state.dataIPShortCut->cAlphaArgs(1), state.dataSteamBaseboardRadiator->cCMO_BBRadiator_Steam, ErrorsFound);
     501           2 :             state.dataSteamBaseboardRadiator->SteamBaseboardNumericFields(BaseboardNum).FieldNames.allocate(NumNumbers);
     502           2 :             state.dataSteamBaseboardRadiator->SteamBaseboardNumericFields(BaseboardNum).FieldNames = "";
     503           2 :             state.dataSteamBaseboardRadiator->SteamBaseboardNumericFields(BaseboardNum).FieldNames = state.dataIPShortCut->cNumericFieldNames;
     504             : 
     505             :             // ErrorsFound will be set to True if problem was found, left untouched otherwise
     506           2 :             VerifyUniqueBaseboardName(state,
     507           2 :                                       state.dataSteamBaseboardRadiator->cCMO_BBRadiator_Steam,
     508           2 :                                       state.dataIPShortCut->cAlphaArgs(1),
     509             :                                       ErrorsFound,
     510           6 :                                       state.dataSteamBaseboardRadiator->cCMO_BBRadiator_Steam + " Name");
     511             : 
     512           2 :             state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).EquipID = state.dataIPShortCut->cAlphaArgs(1); // Name of the baseboard
     513           2 :             state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).EquipType =
     514             :                 DataPlant::PlantEquipmentType::Baseboard_Rad_Conv_Steam; //'ZoneHVAC:Baseboard:RadiantConvective:Steam'
     515             : 
     516           4 :             state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).designObjectName =
     517           4 :                 state.dataIPShortCut->cAlphaArgs(2); // Name of the design object for this baseboard
     518           2 :             state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).DesignObjectPtr =
     519           2 :                 UtilityRoutines::FindItemInList(state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).designObjectName,
     520           2 :                                                 state.dataSteamBaseboardRadiator->SteamBaseboardDesignNames);
     521             :             SteamBaseboardDesignData SteamBaseboardDesignDataObject{
     522           4 :                 state.dataSteamBaseboardRadiator->SteamBaseboardDesign(state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum)
     523           6 :                                                                            .DesignObjectPtr)}; // Contains the design data for steam baseboard object
     524             : 
     525             :             // Get schedule
     526           2 :             state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).Schedule = state.dataIPShortCut->cAlphaArgs(3);
     527           2 :             if (state.dataIPShortCut->lAlphaFieldBlanks(3)) {
     528           0 :                 state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SchedPtr = DataGlobalConstants::ScheduleAlwaysOn;
     529             :             } else {
     530           2 :                 state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SchedPtr =
     531           2 :                     GetScheduleIndex(state, state.dataIPShortCut->cAlphaArgs(3));
     532           2 :                 if (state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SchedPtr == 0) {
     533           0 :                     ShowSevereError(state,
     534           0 :                                     std::string{RoutineName} + state.dataSteamBaseboardRadiator->cCMO_BBRadiator_Steam + "=\"" +
     535           0 :                                         state.dataIPShortCut->cAlphaArgs(1) + "\", " + state.dataIPShortCut->cAlphaFieldNames(3) + "=\"" +
     536           0 :                                         state.dataIPShortCut->cAlphaArgs(3) + "\" not found.");
     537           0 :                     ErrorsFound = true;
     538             :                 }
     539             :             }
     540             : 
     541             :             // Get inlet node number
     542           2 :             state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamInletNode =
     543           4 :                 GetOnlySingleNode(state,
     544           2 :                                   state.dataIPShortCut->cAlphaArgs(4),
     545             :                                   ErrorsFound,
     546             :                                   DataLoopNode::ConnectionObjectType::ZoneHVACBaseboardRadiantConvectiveSteam,
     547           2 :                                   state.dataIPShortCut->cAlphaArgs(1),
     548             :                                   DataLoopNode::NodeFluidType::Steam,
     549             :                                   DataLoopNode::ConnectionType::Inlet,
     550             :                                   NodeInputManager::CompFluidStream::Primary,
     551           2 :                                   ObjectIsNotParent);
     552             : 
     553             :             // Get outlet node number
     554           2 :             state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamOutletNode =
     555           4 :                 GetOnlySingleNode(state,
     556           2 :                                   state.dataIPShortCut->cAlphaArgs(5),
     557             :                                   ErrorsFound,
     558             :                                   DataLoopNode::ConnectionObjectType::ZoneHVACBaseboardRadiantConvectiveSteam,
     559           2 :                                   state.dataIPShortCut->cAlphaArgs(1),
     560             :                                   DataLoopNode::NodeFluidType::Steam,
     561             :                                   DataLoopNode::ConnectionType::Outlet,
     562             :                                   NodeInputManager::CompFluidStream::Primary,
     563           2 :                                   ObjectIsNotParent);
     564           6 :             TestCompSet(state,
     565           2 :                         state.dataSteamBaseboardRadiator->cCMO_BBRadiator_Steam,
     566           2 :                         state.dataIPShortCut->cAlphaArgs(1),
     567           2 :                         state.dataIPShortCut->cAlphaArgs(4),
     568           2 :                         state.dataIPShortCut->cAlphaArgs(5),
     569             :                         "Hot Steam Nodes");
     570             : 
     571             :             // Determine steam baseboard radiator system heating design capacity sizing method
     572           2 :             if (SteamBaseboardDesignDataObject.HeatingCapMethod == HeatingDesignCapacity) {
     573           2 :                 if (!state.dataIPShortCut->lNumericFieldBlanks(iHeatDesignCapacityNumericNum)) {
     574           2 :                     state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).ScaledHeatingCapacity =
     575           2 :                         state.dataIPShortCut->rNumericArgs(iHeatDesignCapacityNumericNum);
     576           4 :                     if (state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).ScaledHeatingCapacity < 0.0 &&
     577           2 :                         state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).ScaledHeatingCapacity != AutoSize) {
     578           0 :                         ShowSevereError(state,
     579           0 :                                         state.dataSteamBaseboardRadiator->cCMO_BBRadiator_Steam + " = " +
     580           0 :                                             state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).EquipID);
     581           0 :                         ShowContinueError(state,
     582           0 :                                           format("Illegal {} = {:.7T}",
     583           0 :                                                  state.dataIPShortCut->cNumericFieldNames(iHeatDesignCapacityNumericNum),
     584           0 :                                                  state.dataIPShortCut->rNumericArgs(iHeatDesignCapacityNumericNum)));
     585           0 :                         ErrorsFound = true;
     586             :                     }
     587             :                 } else {
     588           0 :                     ShowSevereError(state,
     589           0 :                                     state.dataSteamBaseboardRadiator->cCMO_BBRadiator_Steam + " = " +
     590           0 :                                         state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).EquipID);
     591           0 :                     ShowContinueError(state,
     592           0 :                                       "Input for " + state.dataIPShortCut->cAlphaFieldNames(iHeatCAPMAlphaNum) + " = " +
     593           0 :                                           state.dataIPShortCut->cAlphaArgs(iHeatCAPMAlphaNum));
     594           0 :                     ShowContinueError(state,
     595           0 :                                       "Blank field not allowed for " + state.dataIPShortCut->cNumericFieldNames(iHeatDesignCapacityNumericNum));
     596           0 :                     ErrorsFound = true;
     597             :                 }
     598           0 :             } else if (SteamBaseboardDesignDataObject.HeatingCapMethod == CapacityPerFloorArea) {
     599           0 :                 state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).ScaledHeatingCapacity =
     600           0 :                     SteamBaseboardDesignDataObject.DesignScaledHeatingCapacity;
     601           0 :             } else if (SteamBaseboardDesignDataObject.HeatingCapMethod == FractionOfAutosizedHeatingCapacity) {
     602           0 :                 state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).ScaledHeatingCapacity =
     603           0 :                     SteamBaseboardDesignDataObject.DesignScaledHeatingCapacity;
     604             :             }
     605             : 
     606             :             // Desired degree of cooling
     607           2 :             state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).DegOfSubcooling = state.dataIPShortCut->rNumericArgs(2);
     608             :             // Maximum steam flow rate
     609           2 :             state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamVolFlowRateMax = state.dataIPShortCut->rNumericArgs(3);
     610           2 :             if (state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamVolFlowRateMax >= MaxSteamFlowRate) {
     611           0 :                 ShowWarningError(state,
     612           0 :                                  std::string{RoutineName} + state.dataSteamBaseboardRadiator->cCMO_BBRadiator_Steam + "=\"" +
     613           0 :                                      state.dataIPShortCut->cAlphaArgs(1) + "\", " + state.dataIPShortCut->cNumericFieldNames(3) +
     614             :                                      " was higher than the allowable maximum.");
     615           0 :                 ShowContinueError(state, format("...reset to maximum value=[{:.2R}].", MaxSteamFlowRate));
     616           0 :                 state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamVolFlowRateMax = MaxSteamFlowRate;
     617           4 :             } else if (state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamVolFlowRateMax <= MinSteamFlowRate &&
     618           2 :                        state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamVolFlowRateMax != AutoSize) {
     619           0 :                 ShowWarningError(state,
     620           0 :                                  std::string{RoutineName} + state.dataSteamBaseboardRadiator->cCMO_BBRadiator_Steam + "=\"" +
     621           0 :                                      state.dataIPShortCut->cAlphaArgs(1) + "\", " + state.dataIPShortCut->cNumericFieldNames(3) +
     622             :                                      " was less than the allowable minimum.");
     623           0 :                 ShowContinueError(state, format("...reset to minimum value=[{:.2R}].", MinSteamFlowRate));
     624           0 :                 state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamVolFlowRateMax = MinSteamFlowRate;
     625             :             }
     626             :             // Remaining fraction is added to the zone as convective heat transfer
     627           2 :             AllFracsSummed = SteamBaseboardDesignDataObject.FracRadiant;
     628           2 :             if (AllFracsSummed > MaxFraction) {
     629           0 :                 ShowWarningError(state,
     630           0 :                                  std::string{RoutineName} + state.dataSteamBaseboardRadiator->cCMO_BBRadiator_Steam + "=\"" +
     631           0 :                                      state.dataIPShortCut->cAlphaArgs(1) + "\", Fraction Radiant was higher than the allowable maximum.");
     632           0 :                 SteamBaseboardDesignDataObject.FracRadiant = MaxFraction;
     633           0 :                 state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).FracConvect = 0.0;
     634             :             } else {
     635           2 :                 state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).FracConvect = 1.0 - AllFracsSummed;
     636             :             }
     637             : 
     638           2 :             state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).TotSurfToDistrib = NumNumbers - 3;
     639             :             //      IF (SteamBaseboard(BaseboardNum)%TotSurfToDistrib > MaxDistribSurfaces) THEN
     640             :             //        CALL ShowWarningError(state, RoutineName//cCMO_BBRadiator_Steam//'="'//TRIM(state.dataIPShortCut->cAlphaArgs(1))// &
     641             :             //          '", the number of surface/radiant fraction groups entered was higher than the allowable maximum.')
     642             :             //        CALL ShowContinueError(state, '...only the maximum value=['//TRIM(RoundSigDigits(MaxDistribSurfaces))//  &
     643             :             //           '] will be processed.')
     644             :             //        SteamBaseboard(BaseboardNum)%TotSurfToDistrib = MaxDistribSurfaces
     645             :             //      END IF
     646           2 :             if ((state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).TotSurfToDistrib < MinDistribSurfaces) &&
     647           0 :                 (SteamBaseboardDesignDataObject.FracRadiant > MinFraction)) {
     648           0 :                 ShowSevereError(state,
     649           0 :                                 std::string{RoutineName} + state.dataSteamBaseboardRadiator->cCMO_BBRadiator_Steam + "=\"" +
     650           0 :                                     state.dataIPShortCut->cAlphaArgs(1) +
     651             :                                     "\", the number of surface/radiant fraction groups entered was less than the allowable minimum.");
     652           0 :                 ShowContinueError(state, format("...the minimum that must be entered=[{}].", MinDistribSurfaces));
     653           0 :                 ErrorsFound = true;
     654           0 :                 state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).TotSurfToDistrib = 0;
     655             :             }
     656             :             // Allocate the surfaces and fractions
     657           2 :             state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum)
     658           2 :                 .SurfaceName.allocate(state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).TotSurfToDistrib);
     659           2 :             state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SurfaceName = "";
     660           2 :             state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum)
     661           2 :                 .SurfacePtr.allocate(state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).TotSurfToDistrib);
     662           2 :             state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SurfacePtr = 0;
     663           2 :             state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum)
     664           2 :                 .FracDistribToSurf.allocate(state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).TotSurfToDistrib);
     665           2 :             state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).FracDistribToSurf = 0.0;
     666             : 
     667             :             // search zone equipment list structure for zone index
     668          14 :             for (int ctrlZone = 1; ctrlZone <= state.dataGlobal->NumOfZones; ++ctrlZone) {
     669          26 :                 for (int zoneEquipTypeNum = 1; zoneEquipTypeNum <= state.dataZoneEquip->ZoneEquipList(ctrlZone).NumOfEquipTypes; ++zoneEquipTypeNum) {
     670          18 :                     if (state.dataZoneEquip->ZoneEquipList(ctrlZone).EquipTypeEnum(zoneEquipTypeNum) == DataZoneEquipment::ZoneEquip::BBSteam &&
     671           4 :                         state.dataZoneEquip->ZoneEquipList(ctrlZone).EquipName(zoneEquipTypeNum) ==
     672           4 :                             state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).EquipID) {
     673           2 :                         state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).ZonePtr = ctrlZone;
     674             :                     }
     675             :                 }
     676             :             }
     677           2 :             if (state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).ZonePtr <= 0) {
     678           0 :                 ShowSevereError(state,
     679           0 :                                 std::string{RoutineName} + state.dataSteamBaseboardRadiator->cCMO_BBRadiator_Steam + "=\"" +
     680           0 :                                     state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).EquipID +
     681             :                                     "\" is not on any ZoneHVAC:EquipmentList.");
     682           0 :                 ErrorsFound = true;
     683           0 :                 continue;
     684             :             }
     685             : 
     686           2 :             AllFracsSummed = SteamBaseboardDesignDataObject.FracDistribPerson;
     687           8 :             for (SurfNum = 1; SurfNum <= state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).TotSurfToDistrib; ++SurfNum) {
     688           6 :                 state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SurfaceName(SurfNum) = state.dataIPShortCut->cAlphaArgs(SurfNum + 5);
     689           6 :                 state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SurfacePtr(SurfNum) =
     690          18 :                     HeatBalanceIntRadExchange::GetRadiantSystemSurface(
     691             :                         state,
     692           6 :                         state.dataSteamBaseboardRadiator->cCMO_BBRadiator_Steam,
     693           6 :                         state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).EquipID,
     694           6 :                         state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).ZonePtr,
     695           6 :                         state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SurfaceName(SurfNum),
     696             :                         ErrorsFound);
     697           6 :                 state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).FracDistribToSurf(SurfNum) =
     698           6 :                     state.dataIPShortCut->rNumericArgs(SurfNum + 3);
     699           6 :                 if (state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).FracDistribToSurf(SurfNum) > MaxFraction) {
     700           0 :                     ShowWarningError(state,
     701           0 :                                      std::string{RoutineName} + state.dataSteamBaseboardRadiator->cCMO_BBRadiator_Steam + "=\"" +
     702           0 :                                          state.dataIPShortCut->cAlphaArgs(1) + "\", " + state.dataIPShortCut->cNumericFieldNames(SurfNum + 3) +
     703             :                                          "was greater than the allowable maximum.");
     704           0 :                     ShowContinueError(state, format("...reset to maximum value=[{:.1R}].", MaxFraction));
     705           0 :                     state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).TotSurfToDistrib = MaxFraction;
     706             :                 }
     707           6 :                 if (state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).FracDistribToSurf(SurfNum) < MinFraction) {
     708           0 :                     ShowWarningError(state,
     709           0 :                                      std::string{RoutineName} + state.dataSteamBaseboardRadiator->cCMO_BBRadiator_Steam + "=\"" +
     710           0 :                                          state.dataIPShortCut->cAlphaArgs(1) + "\", " + state.dataIPShortCut->cNumericFieldNames(SurfNum + 3) +
     711             :                                          "was less than the allowable minimum.");
     712           0 :                     ShowContinueError(state, format("...reset to maximum value=[{:.1R}].", MinFraction));
     713           0 :                     state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).TotSurfToDistrib = MinFraction;
     714             :                 }
     715           6 :                 if (state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SurfacePtr(SurfNum) != 0) {
     716           6 :                     state.dataSurface->SurfIntConvSurfGetsRadiantHeat(
     717           6 :                         state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SurfacePtr(SurfNum)) = true;
     718             :                 }
     719             : 
     720           6 :                 AllFracsSummed += state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).FracDistribToSurf(SurfNum);
     721             :             } // surfaces
     722             : 
     723           2 :             if (AllFracsSummed > (MaxFraction + 0.01)) {
     724           0 :                 ShowSevereError(state,
     725           0 :                                 "Fraction of radiation distributed to surfaces sums up to greater than 1 for " + state.dataIPShortCut->cAlphaArgs(1));
     726           0 :                 ShowContinueError(state, "Occurs in Baseboard Heater=" + state.dataIPShortCut->cAlphaArgs(1));
     727           0 :                 ErrorsFound = true;
     728             :             }
     729           2 :             if ((AllFracsSummed < (MaxFraction - 0.01)) &&
     730           0 :                 (SteamBaseboardDesignDataObject.FracRadiant >
     731             :                  MinFraction)) { // User didn't distribute all of the | radiation warn that some will be lost
     732           0 :                 ShowWarningError(state,
     733           0 :                                  std::string{RoutineName} + state.dataSteamBaseboardRadiator->cCMO_BBRadiator_Steam + "=\"" +
     734           0 :                                      state.dataIPShortCut->cAlphaArgs(1) + "\", Summed radiant fractions for people + surface groups < 1.0");
     735           0 :                 ShowContinueError(state, "The rest of the radiant energy delivered by the baseboard heater will be lost");
     736             :             }
     737             : 
     738           2 :             if (state.dataSteamBaseboardRadiator->SteamIndex == 0 && BaseboardNum == 1) {
     739           1 :                 state.dataSteamBaseboardRadiator->SteamIndex = FindRefrigerant(state, "Steam");
     740           1 :                 if (state.dataSteamBaseboardRadiator->SteamIndex == 0) {
     741           0 :                     ShowSevereError(state, std::string{RoutineName} + "Steam Properties for " + state.dataIPShortCut->cAlphaArgs(1) + " not found.");
     742           0 :                     if (SteamMessageNeeded) ShowContinueError(state, "Steam Fluid Properties should have been included in the input file.");
     743           0 :                     ErrorsFound = true;
     744           0 :                     SteamMessageNeeded = false;
     745             :                 }
     746             :             }
     747           2 :             state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).FluidIndex = state.dataSteamBaseboardRadiator->SteamIndex;
     748             :         }
     749             : 
     750           1 :         if (ErrorsFound) {
     751           0 :             ShowFatalError(state,
     752           0 :                            std::string{RoutineName} + state.dataSteamBaseboardRadiator->cCMO_BBRadiator_Steam +
     753             :                                "Errors found getting input. Program terminates.");
     754             :         }
     755             : 
     756             :         // Setup Report variables for the Coils
     757           3 :         for (BaseboardNum = 1; BaseboardNum <= state.dataSteamBaseboardRadiator->NumSteamBaseboards; ++BaseboardNum) {
     758             :             // CurrentModuleObject='ZoneHVAC:Baseboard:RadiantConvective:Steam'
     759           8 :             SetupOutputVariable(state,
     760             :                                 "Baseboard Total Heating Rate",
     761             :                                 OutputProcessor::Unit::W,
     762           2 :                                 state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).TotPower,
     763             :                                 OutputProcessor::SOVTimeStepType::System,
     764             :                                 OutputProcessor::SOVStoreType::Average,
     765           4 :                                 state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).EquipID);
     766             : 
     767           8 :             SetupOutputVariable(state,
     768             :                                 "Baseboard Convective Heating Rate",
     769             :                                 OutputProcessor::Unit::W,
     770           2 :                                 state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).ConvPower,
     771             :                                 OutputProcessor::SOVTimeStepType::System,
     772             :                                 OutputProcessor::SOVStoreType::Average,
     773           4 :                                 state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).EquipID);
     774           8 :             SetupOutputVariable(state,
     775             :                                 "Baseboard Radiant Heating Rate",
     776             :                                 OutputProcessor::Unit::W,
     777           2 :                                 state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).RadPower,
     778             :                                 OutputProcessor::SOVTimeStepType::System,
     779             :                                 OutputProcessor::SOVStoreType::Average,
     780           4 :                                 state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).EquipID);
     781           8 :             SetupOutputVariable(state,
     782             :                                 "Baseboard Total Heating Energy",
     783             :                                 OutputProcessor::Unit::J,
     784           2 :                                 state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).TotEnergy,
     785             :                                 OutputProcessor::SOVTimeStepType::System,
     786             :                                 OutputProcessor::SOVStoreType::Summed,
     787           2 :                                 state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).EquipID,
     788             :                                 _,
     789             :                                 "ENERGYTRANSFER",
     790             :                                 "BASEBOARD",
     791             :                                 _,
     792           2 :                                 "System");
     793           8 :             SetupOutputVariable(state,
     794             :                                 "Baseboard Convective Heating Energy",
     795             :                                 OutputProcessor::Unit::J,
     796           2 :                                 state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).ConvEnergy,
     797             :                                 OutputProcessor::SOVTimeStepType::System,
     798             :                                 OutputProcessor::SOVStoreType::Summed,
     799           4 :                                 state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).EquipID);
     800           8 :             SetupOutputVariable(state,
     801             :                                 "Baseboard Radiant Heating Energy",
     802             :                                 OutputProcessor::Unit::J,
     803           2 :                                 state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).RadEnergy,
     804             :                                 OutputProcessor::SOVTimeStepType::System,
     805             :                                 OutputProcessor::SOVStoreType::Summed,
     806           4 :                                 state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).EquipID);
     807           8 :             SetupOutputVariable(state,
     808             :                                 "Baseboard Steam Energy",
     809             :                                 OutputProcessor::Unit::J,
     810           2 :                                 state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).Energy,
     811             :                                 OutputProcessor::SOVTimeStepType::System,
     812             :                                 OutputProcessor::SOVStoreType::Summed,
     813           2 :                                 state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).EquipID,
     814             :                                 _,
     815             :                                 "PLANTLOOPHEATINGDEMAND",
     816             :                                 "BASEBOARD",
     817             :                                 _,
     818           2 :                                 "System");
     819           8 :             SetupOutputVariable(state,
     820             :                                 "Baseboard Steam Rate",
     821             :                                 OutputProcessor::Unit::W,
     822           2 :                                 state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).Power,
     823             :                                 OutputProcessor::SOVTimeStepType::System,
     824             :                                 OutputProcessor::SOVStoreType::Average,
     825           4 :                                 state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).EquipID);
     826           8 :             SetupOutputVariable(state,
     827             :                                 "Baseboard Steam Mass Flow Rate",
     828             :                                 OutputProcessor::Unit::kg_s,
     829           2 :                                 state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamMassFlowRate,
     830             :                                 OutputProcessor::SOVTimeStepType::System,
     831             :                                 OutputProcessor::SOVStoreType::Average,
     832           4 :                                 state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).EquipID);
     833           8 :             SetupOutputVariable(state,
     834             :                                 "Baseboard Steam Inlet Temperature",
     835             :                                 OutputProcessor::Unit::C,
     836           2 :                                 state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamInletTemp,
     837             :                                 OutputProcessor::SOVTimeStepType::System,
     838             :                                 OutputProcessor::SOVStoreType::Average,
     839           4 :                                 state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).EquipID);
     840           8 :             SetupOutputVariable(state,
     841             :                                 "Baseboard Steam Outlet Temperature",
     842             :                                 OutputProcessor::Unit::C,
     843           2 :                                 state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamOutletTemp,
     844             :                                 OutputProcessor::SOVTimeStepType::System,
     845             :                                 OutputProcessor::SOVStoreType::Average,
     846           4 :                                 state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).EquipID);
     847             :         }
     848           1 :     }
     849             : 
     850        7420 :     void InitSteamBaseboard(EnergyPlusData &state, int const BaseboardNum, int const ControlledZoneNum, bool const FirstHVACIteration)
     851             :     {
     852             : 
     853             :         // SUBROUTINE INFORMATION:
     854             :         //       AUTHOR         Russ Taylor
     855             :         //                      Rick Strand
     856             :         //       DATE WRITTEN   Nov 1997
     857             :         //                      Feb 2001
     858             :         //       MODIFIED       Sep 2009 Daeho Kang (Add Radiant Component)
     859             :         //                      Sept 2010 Chandan Sharma, FSEC (plant interactions)
     860             : 
     861             :         // PURPOSE OF THIS SUBROUTINE:
     862             :         // This subroutine initializes the baseboard units.
     863             : 
     864             :         // METHODOLOGY EMPLOYED:
     865             :         // The initialization subrotines both in high temperature radiant radiator
     866             :         // and convective only baseboard radiator are combined and modified.
     867             :         // The heater is assumed to be crossflow with both fluids unmixed.
     868             : 
     869             :         // REFERENCES:
     870             : 
     871             :         // Using/Aliasing
     872             :         using FluidProperties::GetSatDensityRefrig;
     873             :         using FluidProperties::GetSatEnthalpyRefrig;
     874             :         using PlantUtilities::InitComponentNodes;
     875             :         using PlantUtilities::ScanPlantLoopsForObject;
     876             : 
     877             :         static constexpr std::string_view RoutineName("InitSteamCoil");
     878             : 
     879        7420 :         auto &MyEnvrnFlag = state.dataSteamBaseboardRadiator->MyEnvrnFlag;
     880             :         int Loop;
     881             :         int SteamInletNode;
     882             :         Real64 StartEnthSteam;
     883             :         Real64 SteamDensity;
     884             :         bool errFlag;
     885             : 
     886             :         // Do the one time initializations
     887        7420 :         if (state.dataSteamBaseboardRadiator->MyOneTimeFlag) {
     888             : 
     889             :             // initialize the environment and sizing flags
     890           1 :             MyEnvrnFlag.allocate(state.dataSteamBaseboardRadiator->NumSteamBaseboards);
     891           1 :             state.dataSteamBaseboardRadiator->MySizeFlag.allocate(state.dataSteamBaseboardRadiator->NumSteamBaseboards);
     892           1 :             state.dataSteamBaseboardRadiator->ZeroSourceSumHATsurf.dimension(state.dataGlobal->NumOfZones, 0.0);
     893           1 :             state.dataSteamBaseboardRadiator->QBBSteamRadSource.dimension(state.dataSteamBaseboardRadiator->NumSteamBaseboards, 0.0);
     894           1 :             state.dataSteamBaseboardRadiator->QBBSteamRadSrcAvg.dimension(state.dataSteamBaseboardRadiator->NumSteamBaseboards, 0.0);
     895           1 :             state.dataSteamBaseboardRadiator->LastQBBSteamRadSrc.dimension(state.dataSteamBaseboardRadiator->NumSteamBaseboards, 0.0);
     896           1 :             state.dataSteamBaseboardRadiator->LastSysTimeElapsed.dimension(state.dataSteamBaseboardRadiator->NumSteamBaseboards, 0.0);
     897           1 :             state.dataSteamBaseboardRadiator->LastTimeStepSys.dimension(state.dataSteamBaseboardRadiator->NumSteamBaseboards, 0.0);
     898           1 :             state.dataSteamBaseboardRadiator->SetLoopIndexFlag.allocate(state.dataSteamBaseboardRadiator->NumSteamBaseboards);
     899           1 :             MyEnvrnFlag = true;
     900           1 :             state.dataSteamBaseboardRadiator->MySizeFlag = true;
     901           1 :             state.dataSteamBaseboardRadiator->MyOneTimeFlag = false;
     902           1 :             state.dataSteamBaseboardRadiator->SetLoopIndexFlag = true;
     903             :         }
     904             : 
     905        7420 :         state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).ZonePtr = ControlledZoneNum;
     906             : 
     907             :         // Need to check all units to see if they are on ZoneHVAC:EquipmentList or issue warning
     908        7420 :         if (!state.dataSteamBaseboardRadiator->ZoneEquipmentListChecked && state.dataZoneEquip->ZoneEquipInputsFilled) {
     909           1 :             state.dataSteamBaseboardRadiator->ZoneEquipmentListChecked = true;
     910           3 :             for (Loop = 1; Loop <= state.dataSteamBaseboardRadiator->NumSteamBaseboards; ++Loop) {
     911           6 :                 if (CheckZoneEquipmentList(state,
     912           2 :                                            state.dataSteamBaseboardRadiator->cCMO_BBRadiator_Steam,
     913           2 :                                            state.dataSteamBaseboardRadiator->SteamBaseboard(Loop).EquipID))
     914           2 :                     continue;
     915           0 :                 ShowSevereError(state,
     916           0 :                                 "InitBaseboard: Unit=[" + state.dataSteamBaseboardRadiator->cCMO_BBRadiator_Steam + ',' +
     917           0 :                                     state.dataSteamBaseboardRadiator->SteamBaseboard(Loop).EquipID +
     918             :                                     "] is not on any ZoneHVAC:EquipmentList.  It will not be simulated.");
     919             :             }
     920             :         }
     921             : 
     922        7420 :         if (state.dataSteamBaseboardRadiator->SetLoopIndexFlag(BaseboardNum)) {
     923           2 :             if (allocated(state.dataPlnt->PlantLoop)) {
     924           2 :                 errFlag = false;
     925           8 :                 ScanPlantLoopsForObject(state,
     926           2 :                                         state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).EquipID,
     927           2 :                                         state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).EquipType,
     928           2 :                                         state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).plantLoc,
     929             :                                         errFlag,
     930             :                                         _,
     931             :                                         _,
     932             :                                         _,
     933             :                                         _,
     934             :                                         _);
     935           2 :                 state.dataSteamBaseboardRadiator->SetLoopIndexFlag(BaseboardNum) = false;
     936           2 :                 if (errFlag) {
     937           0 :                     ShowFatalError(state, "InitSteamBaseboard: Program terminated for previous conditions.");
     938             :                 }
     939             :             }
     940             :         }
     941             : 
     942        7422 :         if (!state.dataGlobal->SysSizingCalc && state.dataSteamBaseboardRadiator->MySizeFlag(BaseboardNum) &&
     943           2 :             (!state.dataSteamBaseboardRadiator->SetLoopIndexFlag(BaseboardNum))) {
     944             :             // For each coil, do the sizing once
     945           2 :             SizeSteamBaseboard(state, BaseboardNum);
     946           2 :             state.dataSteamBaseboardRadiator->MySizeFlag(BaseboardNum) = false;
     947             :         }
     948             : 
     949             :         // Do the Begin Environment initializations
     950        7420 :         if (state.dataGlobal->BeginEnvrnFlag && MyEnvrnFlag(BaseboardNum)) {
     951             :             // Initialize
     952          12 :             SteamInletNode = state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamInletNode;
     953          12 :             state.dataLoopNodes->Node(SteamInletNode).Temp = 100.0;
     954          12 :             state.dataLoopNodes->Node(SteamInletNode).Press = 101325.0;
     955          24 :             SteamDensity = GetSatDensityRefrig(state,
     956             :                                                fluidNameSteam,
     957          12 :                                                state.dataLoopNodes->Node(SteamInletNode).Temp,
     958             :                                                1.0,
     959          12 :                                                state.dataLoopNodes->Node(SteamInletNode).FluidIndex,
     960             :                                                RoutineName);
     961          24 :             StartEnthSteam = GetSatEnthalpyRefrig(state,
     962             :                                                   fluidNameSteam,
     963          12 :                                                   state.dataLoopNodes->Node(SteamInletNode).Temp,
     964             :                                                   1.0,
     965          12 :                                                   state.dataLoopNodes->Node(SteamInletNode).FluidIndex,
     966             :                                                   RoutineName);
     967          12 :             state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamMassFlowRateMax =
     968          12 :                 SteamDensity * state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamVolFlowRateMax;
     969          36 :             InitComponentNodes(state,
     970             :                                0.0,
     971          12 :                                state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamMassFlowRateMax,
     972          12 :                                state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamInletNode,
     973          12 :                                state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamOutletNode);
     974          12 :             state.dataLoopNodes->Node(SteamInletNode).Enthalpy = StartEnthSteam;
     975          12 :             state.dataLoopNodes->Node(SteamInletNode).Quality = 1.0;
     976          12 :             state.dataLoopNodes->Node(SteamInletNode).HumRat = 0.0;
     977             : 
     978             :             // Initializes radiant sources
     979          12 :             state.dataSteamBaseboardRadiator->ZeroSourceSumHATsurf = 0.0;
     980          12 :             state.dataSteamBaseboardRadiator->QBBSteamRadSource = 0.0;
     981          12 :             state.dataSteamBaseboardRadiator->QBBSteamRadSrcAvg = 0.0;
     982          12 :             state.dataSteamBaseboardRadiator->LastQBBSteamRadSrc = 0.0;
     983          12 :             state.dataSteamBaseboardRadiator->LastSysTimeElapsed = 0.0;
     984          12 :             state.dataSteamBaseboardRadiator->LastTimeStepSys = 0.0;
     985             : 
     986          12 :             MyEnvrnFlag(BaseboardNum) = false;
     987             :         }
     988             : 
     989        7420 :         if (!state.dataGlobal->BeginEnvrnFlag) {
     990        7354 :             MyEnvrnFlag(BaseboardNum) = true;
     991             :         }
     992             : 
     993        7420 :         if (state.dataGlobal->BeginTimeStepFlag && FirstHVACIteration) {
     994        2710 :             int ZoneNum = state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).ZonePtr;
     995        2710 :             state.dataSteamBaseboardRadiator->ZeroSourceSumHATsurf(ZoneNum) = state.dataHeatBal->Zone(ZoneNum).sumHATsurf(state);
     996        2710 :             state.dataSteamBaseboardRadiator->QBBSteamRadSrcAvg(BaseboardNum) = 0.0;
     997        2710 :             state.dataSteamBaseboardRadiator->LastQBBSteamRadSrc(BaseboardNum) = 0.0;
     998        2710 :             state.dataSteamBaseboardRadiator->LastSysTimeElapsed(BaseboardNum) = 0.0;
     999        2710 :             state.dataSteamBaseboardRadiator->LastTimeStepSys(BaseboardNum) = 0.0;
    1000             :         }
    1001             : 
    1002             :         // Do the every time step initializations
    1003        7420 :         SteamInletNode = state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamInletNode;
    1004        7420 :         state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamMassFlowRate = state.dataLoopNodes->Node(SteamInletNode).MassFlowRate;
    1005        7420 :         state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamInletTemp = state.dataLoopNodes->Node(SteamInletNode).Temp;
    1006        7420 :         state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamInletEnthalpy = state.dataLoopNodes->Node(SteamInletNode).Enthalpy;
    1007        7420 :         state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamInletPress = state.dataLoopNodes->Node(SteamInletNode).Press;
    1008        7420 :         state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamInletQuality = state.dataLoopNodes->Node(SteamInletNode).Quality;
    1009             : 
    1010        7420 :         state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).TotPower = 0.0;
    1011        7420 :         state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).Power = 0.0;
    1012        7420 :         state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).ConvPower = 0.0;
    1013        7420 :         state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).RadPower = 0.0;
    1014        7420 :         state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).TotEnergy = 0.0;
    1015        7420 :         state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).Energy = 0.0;
    1016        7420 :         state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).ConvEnergy = 0.0;
    1017        7420 :         state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).RadEnergy = 0.0;
    1018        7420 :     }
    1019             : 
    1020           2 :     void SizeSteamBaseboard(EnergyPlusData &state, int const BaseboardNum)
    1021             :     {
    1022             : 
    1023             :         // SUBROUTINE INFORMATION:
    1024             :         //       AUTHOR         Fred Buhl
    1025             :         //       DATE WRITTEN   February 2002
    1026             :         //       MODIFIED       August 2013 Daeho Kang, add component sizing table entries
    1027             :         //                      August 2014 Bereket Nigusse, added scalable sizing
    1028             :         //       RE-ENGINEERED  na
    1029             : 
    1030             :         // PURPOSE OF THIS SUBROUTINE:
    1031             :         // This subroutine is for sizing steam baseboard components
    1032             : 
    1033             :         // METHODOLOGY EMPLOYED:
    1034             :         // Obtains flow rates from the zone sizing arrays and plant sizing data.
    1035             : 
    1036             :         // REFERENCES:
    1037             :         // na
    1038             : 
    1039             :         // Using/Aliasing
    1040             :         using namespace DataSizing;
    1041             :         using DataHVACGlobals::HeatingCapacitySizing;
    1042             :         using FluidProperties::GetSatDensityRefrig;
    1043             :         using FluidProperties::GetSatEnthalpyRefrig;
    1044             :         using FluidProperties::GetSatSpecificHeatRefrig;
    1045             :         using PlantUtilities::RegisterPlantCompDesignFlow;
    1046             : 
    1047             :         // SUBROUTINE PARAMETER DEFINITIONS:
    1048             :         static constexpr std::string_view RoutineName("SizeSteamBaseboard");
    1049             : 
    1050             :         // SUBROUTINE LOCAL VARIABLE DECLARATIONS:
    1051           2 :         int PltSizSteamNum(0);               // Index of plant sizing object for 1st steam loop
    1052           2 :         Real64 DesCoilLoad(0.0);             // Design heating load in the zone
    1053             :         Real64 SteamInletTemp;               // Inlet steam temperature in C
    1054             :         Real64 EnthSteamInDry;               // Enthalpy of dry steam
    1055             :         Real64 EnthSteamOutWet;              // Enthalpy of wet steam
    1056             :         Real64 LatentHeatSteam;              // latent heat of steam
    1057             :         Real64 SteamDensity;                 // Density of steam
    1058             :         Real64 Cp;                           // local fluid specific heat
    1059           2 :         bool ErrorsFound(false);             // If errors detected in input
    1060           2 :         bool IsAutoSize(false);              // Indicator to autosizing steam flow
    1061           2 :         Real64 SteamVolFlowRateMaxDes(0.0);  // Design maximum steam volume flow for reporting
    1062           2 :         Real64 SteamVolFlowRateMaxUser(0.0); // User hard-sized maximum steam volume flow for reporting
    1063           4 :         std::string CompName;                // component name
    1064           4 :         std::string CompType;                // component type
    1065           4 :         std::string SizingString;            // input field sizing description (e.g., Nominal Capacity)
    1066             :         Real64 TempSize;                     // autosized value of coil input field
    1067           2 :         int FieldNum = 1;                    // IDD numeric field number where input field description is found
    1068             :         int SizingMethod;                    // Integer representation of sizing method name (HeatingCapacitySizing)
    1069             :         bool PrintFlag;                      // TRUE when sizing information is reported in the eio file
    1070           2 :         int CapSizingMethod(0); // capacity sizing methods (HeatingDesignCapacity, CapacityPerFloorArea, and FractionOfAutosizedHeatingCapacity )
    1071             : 
    1072           2 :         auto &ZoneEqSizing(state.dataSize->ZoneEqSizing);
    1073           2 :         auto &CurZoneEqNum(state.dataSize->CurZoneEqNum);
    1074             : 
    1075           2 :         SteamBaseboardDesignData SteamBaseboardDesignDataObject{state.dataSteamBaseboardRadiator->SteamBaseboardDesign(
    1076           4 :             state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).DesignObjectPtr)}; // Contains the data for variable flow hydronic systems
    1077             : 
    1078             :         // Find the appropriate steam plant sizing object
    1079           2 :         PltSizSteamNum = state.dataPlnt->PlantLoop(state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).plantLoc.loopNum).PlantSizNum;
    1080             :         //    PltSizSteamNum = MyPlantSizingIndex('Coil:Heating:Steam', SteamBaseboard(BaseboardNum)%EquipID, &
    1081             :         //                    SteamBaseboard(BaseboardNum)%SteamInletNode, &
    1082             :         //                    SteamBaseboard(BaseboardNum)%SteamOutletNode, ErrorsFound)
    1083             : 
    1084           2 :         if (PltSizSteamNum > 0) {
    1085             : 
    1086           2 :             state.dataSize->DataScalableCapSizingON = false;
    1087             : 
    1088           2 :             if (CurZoneEqNum > 0) {
    1089             : 
    1090           2 :                 if (state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamVolFlowRateMax == AutoSize) {
    1091           2 :                     IsAutoSize = true;
    1092             :                 }
    1093           2 :                 if (!IsAutoSize && !state.dataSize->ZoneSizingRunDone) {
    1094           0 :                     if (state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamVolFlowRateMax > 0.0) {
    1095           0 :                         BaseSizer::reportSizerOutput(state,
    1096           0 :                                                      state.dataSteamBaseboardRadiator->cCMO_BBRadiator_Steam,
    1097           0 :                                                      state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).EquipID,
    1098             :                                                      "User-Specified Maximum Water Flow Rate [m3/s]",
    1099           0 :                                                      state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamVolFlowRateMax);
    1100             :                     }
    1101             :                 } else {
    1102           4 :                     CheckZoneSizing(state,
    1103           2 :                                     state.dataSteamBaseboardRadiator->cCMO_BBRadiator_Steam,
    1104           2 :                                     state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).EquipID);
    1105             : 
    1106           2 :                     CompType = state.dataSteamBaseboardRadiator->cCMO_BBRadiator_Steam;
    1107           2 :                     CompName = state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).EquipID;
    1108           2 :                     state.dataSize->DataFracOfAutosizedHeatingCapacity = 1.0;
    1109           2 :                     state.dataSize->DataZoneNumber = state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).ZonePtr;
    1110           2 :                     SizingMethod = HeatingCapacitySizing;
    1111           2 :                     FieldNum = 1;
    1112           2 :                     PrintFlag = false;
    1113           2 :                     SizingString = state.dataSteamBaseboardRadiator->SteamBaseboardNumericFields(BaseboardNum).FieldNames(FieldNum) + " [W]";
    1114           2 :                     CapSizingMethod = SteamBaseboardDesignDataObject.HeatingCapMethod;
    1115           2 :                     ZoneEqSizing(CurZoneEqNum).SizingMethod(SizingMethod) = CapSizingMethod;
    1116           2 :                     if (CapSizingMethod == HeatingDesignCapacity || CapSizingMethod == CapacityPerFloorArea ||
    1117             :                         CapSizingMethod == FractionOfAutosizedHeatingCapacity) {
    1118             : 
    1119           2 :                         if (CapSizingMethod == HeatingDesignCapacity) {
    1120           2 :                             if (state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).ScaledHeatingCapacity == AutoSize) {
    1121           2 :                                 CheckZoneSizing(state, CompType, CompName);
    1122           2 :                                 ZoneEqSizing(CurZoneEqNum).HeatingCapacity = true;
    1123           2 :                                 ZoneEqSizing(CurZoneEqNum).DesHeatingLoad = state.dataSize->FinalZoneSizing(CurZoneEqNum).NonAirSysDesHeatLoad;
    1124             :                             }
    1125           2 :                             TempSize = state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).ScaledHeatingCapacity;
    1126           0 :                         } else if (CapSizingMethod == CapacityPerFloorArea) {
    1127           0 :                             ZoneEqSizing(CurZoneEqNum).HeatingCapacity = true;
    1128           0 :                             ZoneEqSizing(CurZoneEqNum).DesHeatingLoad =
    1129           0 :                                 state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).ScaledHeatingCapacity *
    1130           0 :                                 state.dataHeatBal->Zone(state.dataSize->DataZoneNumber).FloorArea;
    1131           0 :                             TempSize = ZoneEqSizing(CurZoneEqNum).DesHeatingLoad;
    1132           0 :                             state.dataSize->DataScalableCapSizingON = true;
    1133           0 :                         } else if (CapSizingMethod == FractionOfAutosizedHeatingCapacity) {
    1134           0 :                             CheckZoneSizing(state, CompType, CompName);
    1135           0 :                             ZoneEqSizing(CurZoneEqNum).HeatingCapacity = true;
    1136           0 :                             state.dataSize->DataFracOfAutosizedHeatingCapacity =
    1137           0 :                                 state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).ScaledHeatingCapacity;
    1138           0 :                             ZoneEqSizing(CurZoneEqNum).DesHeatingLoad = state.dataSize->FinalZoneSizing(CurZoneEqNum).NonAirSysDesHeatLoad;
    1139           0 :                             TempSize = AutoSize;
    1140           0 :                             state.dataSize->DataScalableCapSizingON = true;
    1141             :                         } else {
    1142           0 :                             TempSize = state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).ScaledHeatingCapacity;
    1143             :                         }
    1144           2 :                         bool errorsFound = false;
    1145           4 :                         HeatingCapacitySizer sizerHeatingCapacity;
    1146           2 :                         sizerHeatingCapacity.overrideSizingString(SizingString);
    1147           2 :                         sizerHeatingCapacity.initializeWithinEP(state, CompType, CompName, PrintFlag, RoutineName);
    1148           2 :                         DesCoilLoad = sizerHeatingCapacity.size(state, TempSize, errorsFound);
    1149           4 :                         state.dataSize->DataScalableCapSizingON = false;
    1150             :                     } else {
    1151           0 :                         DesCoilLoad = 0.0; // FinalZoneSizing(CurZoneEqNum).NonAirSysDesHeatLoad;
    1152             :                     }
    1153             : 
    1154           2 :                     if (DesCoilLoad >= SmallLoad) {
    1155           2 :                         SteamInletTemp = 100.0;
    1156           2 :                         EnthSteamInDry = GetSatEnthalpyRefrig(state,
    1157             :                                                               fluidNameSteam,
    1158             :                                                               SteamInletTemp,
    1159             :                                                               1.0,
    1160           2 :                                                               state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).FluidIndex,
    1161             :                                                               RoutineName);
    1162           2 :                         EnthSteamOutWet = GetSatEnthalpyRefrig(state,
    1163             :                                                                fluidNameSteam,
    1164             :                                                                SteamInletTemp,
    1165             :                                                                0.0,
    1166           2 :                                                                state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).FluidIndex,
    1167             :                                                                RoutineName);
    1168           2 :                         LatentHeatSteam = EnthSteamInDry - EnthSteamOutWet;
    1169           2 :                         SteamDensity = GetSatDensityRefrig(state,
    1170             :                                                            fluidNameSteam,
    1171             :                                                            SteamInletTemp,
    1172             :                                                            1.0,
    1173           2 :                                                            state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).FluidIndex,
    1174             :                                                            RoutineName);
    1175           2 :                         Cp = GetSatSpecificHeatRefrig(state,
    1176             :                                                       fluidNameSteam,
    1177             :                                                       SteamInletTemp,
    1178             :                                                       0.0,
    1179           2 :                                                       state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).FluidIndex,
    1180             :                                                       RoutineName);
    1181             : 
    1182           2 :                         SteamVolFlowRateMaxDes =
    1183           2 :                             DesCoilLoad /
    1184           2 :                             (SteamDensity * (LatentHeatSteam + state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).DegOfSubcooling * Cp));
    1185             :                     } else {
    1186           0 :                         SteamVolFlowRateMaxDes = 0.0;
    1187             :                     }
    1188             : 
    1189           2 :                     if (IsAutoSize) {
    1190           2 :                         state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamVolFlowRateMax = SteamVolFlowRateMaxDes;
    1191           6 :                         BaseSizer::reportSizerOutput(state,
    1192           2 :                                                      state.dataSteamBaseboardRadiator->cCMO_BBRadiator_Steam,
    1193           2 :                                                      state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).EquipID,
    1194             :                                                      "Design Size Maximum Steam Flow Rate [m3/s]",
    1195           2 :                                                      SteamVolFlowRateMaxDes);
    1196             :                     } else { // Hard size with sizing data
    1197           0 :                         if (state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamVolFlowRateMax > 0.0 &&
    1198           0 :                             SteamVolFlowRateMaxDes > 0.0) {
    1199           0 :                             SteamVolFlowRateMaxUser = state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamVolFlowRateMax;
    1200           0 :                             BaseSizer::reportSizerOutput(state,
    1201           0 :                                                          state.dataSteamBaseboardRadiator->cCMO_BBRadiator_Steam,
    1202           0 :                                                          state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).EquipID,
    1203             :                                                          "Design Size Maximum Steam Flow Rate [m3/s]",
    1204             :                                                          SteamVolFlowRateMaxDes,
    1205             :                                                          "User-Speicified Maximum Steam Flow Rate [m3/s]",
    1206           0 :                                                          SteamVolFlowRateMaxUser);
    1207           0 :                             if (state.dataGlobal->DisplayExtraWarnings) {
    1208             :                                 // Report difference between design size and user-specified values
    1209           0 :                                 if ((std::abs(SteamVolFlowRateMaxDes - SteamVolFlowRateMaxUser) / SteamVolFlowRateMaxUser) >
    1210           0 :                                     state.dataSize->AutoVsHardSizingThreshold) {
    1211           0 :                                     ShowMessage(state,
    1212             :                                                 "SizeSteamBaseboard: Potential issue with equipment sizing for "
    1213           0 :                                                 "ZoneHVAC:Baseboard:RadiantConvective:Steam=\"" +
    1214           0 :                                                     state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).EquipID + "\".");
    1215           0 :                                     ShowContinueError(state,
    1216           0 :                                                       format("User-Specified Maximum Steam Flow Rate of {:.5R} [m3/s]", SteamVolFlowRateMaxUser));
    1217           0 :                                     ShowContinueError(
    1218           0 :                                         state, format("differs from Design Size Maximum Steam Flow Rate of {:.5R} [m3/s]", SteamVolFlowRateMaxDes));
    1219           0 :                                     ShowContinueError(state, "This may, or may not, indicate mismatched component sizes.");
    1220           0 :                                     ShowContinueError(state, "Verify that the value entered is intended and is consistent with other components.");
    1221             :                                 }
    1222             :                             }
    1223             :                         }
    1224             :                     }
    1225             :                 }
    1226             :             }
    1227             :         } else {
    1228           0 :             if (IsAutoSize) {
    1229             :                 // if there is no heating Sizing:Plant object and autosizng was requested, issue an error message
    1230             :                 // first error will be issued by MyPlantSizingIndex
    1231           0 :                 ShowSevereError(state, "Autosizing of steam baseboard requires a heating loop Sizing:Plant object");
    1232           0 :                 ShowContinueError(state, "Occurs in Baseboard Heater=" + state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).EquipID);
    1233           0 :                 ErrorsFound = true;
    1234             :             }
    1235             :         }
    1236             : 
    1237           4 :         RegisterPlantCompDesignFlow(state,
    1238           2 :                                     state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamInletNode,
    1239           2 :                                     state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamVolFlowRateMax);
    1240             : 
    1241           2 :         if (ErrorsFound) {
    1242           0 :             ShowFatalError(state, "Preceding sizing errors cause program termination");
    1243             :         }
    1244           2 :     }
    1245             : 
    1246       32611 :     void CalcSteamBaseboard(EnergyPlusData &state, int &BaseboardNum, Real64 &LoadMet)
    1247             :     {
    1248             :         // SUBROUTINE INFORMATION:
    1249             :         //       AUTHOR         Daeho Kang
    1250             :         //       DATE WRITTEN   September 2009
    1251             :         //       MODIFIED       Sep 2011 LKL/BG - resimulate only zones needing it for Radiant systems
    1252             :         //       RE-ENGINEERED  na
    1253             : 
    1254             :         // PURPOSE OF THIS SUBROUTINE:
    1255             :         // This subroutine calculates both the convective and radiant heat transfer rate
    1256             :         // of steam baseboard heaters. The heater is assumed to be crossflow with
    1257             :         // both fluids unmixed. The air flow is buoyancy driven and a constant airflow.
    1258             : 
    1259             :         // METHODOLOGY EMPLOYED:
    1260             :         // Equations that calculates heating capacity of steam coils and outlet air and water temperatures
    1261             :         // of the zone control steam coil in steam coil module in EnergyPlus are employed.
    1262             : 
    1263             :         // REFERENCES:
    1264             : 
    1265             :         // Using/Aliasing
    1266             :         using DataHVACGlobals::SmallLoad;
    1267             :         using FluidProperties::GetSatDensityRefrig;
    1268             :         using FluidProperties::GetSatEnthalpyRefrig;
    1269             :         using FluidProperties::GetSatSpecificHeatRefrig;
    1270             :         using ScheduleManager::GetCurrentScheduleValue;
    1271             : 
    1272             :         // Locals
    1273             :         // SUBROUTINE ARGUMENT DEFINITIONS:
    1274             : 
    1275             :         // SUBROUTINE PARAMETER DEFINITIONS:
    1276             :         static constexpr std::string_view RoutineName("CalcSteamBaseboard");
    1277             : 
    1278             :         // INTERFACE BLOCK SPECIFICATIONS
    1279             :         // na
    1280             : 
    1281             :         // DERIVED TYPE DEFINITIONS
    1282             :         // na
    1283             : 
    1284             :         // SUBROUTINE LOCAL VARIABLE DECLARATIONS:
    1285             :         int ZoneNum;
    1286             :         Real64 RadHeat;
    1287             :         Real64 SteamBBHeat;
    1288             :         Real64 SteamInletTemp;
    1289             :         Real64 SteamOutletTemp;
    1290             :         Real64 SteamMassFlowRate;
    1291             :         Real64 SubcoolDeltaT;
    1292             :         Real64 QZnReq;
    1293             :         Real64 EnthSteamInDry;
    1294             :         Real64 EnthSteamOutWet;
    1295             :         Real64 LatentHeatSteam;
    1296             :         Real64 Cp;
    1297             : 
    1298       32611 :         SteamBaseboardDesignData SteamBaseboardDesignDataObject{state.dataSteamBaseboardRadiator->SteamBaseboardDesign(
    1299       65222 :             state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).DesignObjectPtr)}; // Contains the data for variable flow hydronic systems
    1300             : 
    1301       32611 :         ZoneNum = state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).ZonePtr;
    1302       32611 :         QZnReq = state.dataZoneEnergyDemand->ZoneSysEnergyDemand(ZoneNum).RemainingOutputReqToHeatSP;
    1303       32611 :         SteamInletTemp = state.dataLoopNodes->Node(state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamInletNode).Temp;
    1304       32611 :         SteamOutletTemp = SteamInletTemp;
    1305       32611 :         SteamMassFlowRate = state.dataLoopNodes->Node(state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamInletNode).MassFlowRate;
    1306       32611 :         SubcoolDeltaT = state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).DegOfSubcooling;
    1307             : 
    1308       57801 :         if (QZnReq > SmallLoad && !state.dataZoneEnergyDemand->CurDeadBandOrSetback(ZoneNum) && SteamMassFlowRate > 0.0 &&
    1309       25190 :             GetCurrentScheduleValue(state, state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SchedPtr) > 0) {
    1310             :             // Unit is on
    1311       25190 :             EnthSteamInDry = GetSatEnthalpyRefrig(
    1312       25190 :                 state, fluidNameSteam, SteamInletTemp, 1.0, state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).FluidIndex, RoutineName);
    1313       25190 :             EnthSteamOutWet = GetSatEnthalpyRefrig(
    1314       25190 :                 state, fluidNameSteam, SteamInletTemp, 0.0, state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).FluidIndex, RoutineName);
    1315       25190 :             LatentHeatSteam = EnthSteamInDry - EnthSteamOutWet;
    1316       25190 :             Cp = GetSatSpecificHeatRefrig(
    1317       25190 :                 state, fluidNameSteam, SteamInletTemp, 0.0, state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).FluidIndex, RoutineName);
    1318       25190 :             SteamBBHeat = SteamMassFlowRate * (LatentHeatSteam + SubcoolDeltaT * Cp); // Baseboard heating rate
    1319       25190 :             SteamOutletTemp = SteamInletTemp - SubcoolDeltaT;                         // Outlet temperature of steam
    1320             :             // Estimate radiant heat addition
    1321       25190 :             RadHeat = SteamBBHeat * SteamBaseboardDesignDataObject.FracRadiant; // Radiant heating rate
    1322       25190 :             state.dataSteamBaseboardRadiator->QBBSteamRadSource(BaseboardNum) =
    1323             :                 RadHeat; // Radiant heat source which will be distributed to surfaces and people
    1324             : 
    1325             :             // Now, distribute the radiant energy of all systems to the appropriate surfaces, to people, and the air
    1326       25190 :             DistributeBBSteamRadGains(state);
    1327             :             // Now "simulate" the system by recalculating the heat balances
    1328       25190 :             HeatBalanceSurfaceManager::CalcHeatBalanceOutsideSurf(state, ZoneNum);
    1329       25190 :             HeatBalanceSurfaceManager::CalcHeatBalanceInsideSurf(state, ZoneNum);
    1330             : 
    1331             :             // Here an assumption is made regarding radiant heat transfer to people.
    1332             :             // While the radiant heat transfer to people array will be used by the thermal comfort
    1333             :             // routines, the energy transfer to people would get lost from the perspective
    1334             :             // of the heat balance.  So, to avoid this net loss of energy which clearly
    1335             :             // gets added to the zones, we must account for it somehow.  This assumption
    1336             :             // that all energy radiated to people is converted to convective energy is
    1337             :             // not very precise, but at least it conserves energy. The system impact to heat balance
    1338             :             // should include this.
    1339             : 
    1340             :             // Actual system load that the unit should meet
    1341       75570 :             LoadMet = (state.dataHeatBal->Zone(ZoneNum).sumHATsurf(state) - state.dataSteamBaseboardRadiator->ZeroSourceSumHATsurf(ZoneNum)) +
    1342       50380 :                       (SteamBBHeat * state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).FracConvect) +
    1343       25190 :                       (RadHeat * SteamBaseboardDesignDataObject.FracDistribPerson);
    1344       25190 :             state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamOutletEnthalpy =
    1345       25190 :                 state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamInletEnthalpy - SteamBBHeat / SteamMassFlowRate;
    1346       25190 :             state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamOutletQuality = 0.0;
    1347             :         } else {
    1348        7421 :             SteamOutletTemp = SteamInletTemp;
    1349        7421 :             SteamBBHeat = 0.0;
    1350        7421 :             LoadMet = 0.0;
    1351        7421 :             RadHeat = 0.0;
    1352        7421 :             SteamMassFlowRate = 0.0;
    1353        7421 :             state.dataSteamBaseboardRadiator->QBBSteamRadSource(BaseboardNum) = 0.0;
    1354        7421 :             state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamOutletQuality = 0.0;
    1355        7421 :             state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamOutletEnthalpy =
    1356        7421 :                 state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamInletEnthalpy;
    1357             :         }
    1358             : 
    1359       32611 :         state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamOutletTemp = SteamOutletTemp;
    1360       32611 :         state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamMassFlowRate = SteamMassFlowRate;
    1361       32611 :         state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamOutletEnthalpy =
    1362       32611 :             state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamOutletEnthalpy;
    1363       32611 :         state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamOutletQuality =
    1364       32611 :             state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamOutletQuality;
    1365       32611 :         state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).TotPower = LoadMet;
    1366       32611 :         state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).Power = SteamBBHeat;
    1367       32611 :         state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).ConvPower = SteamBBHeat - RadHeat;
    1368       32611 :         state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).RadPower = RadHeat;
    1369       32611 :     }
    1370             : 
    1371        7420 :     void UpdateSteamBaseboard(EnergyPlusData &state, int const BaseboardNum)
    1372             :     {
    1373             :         // SUBROUTINE INFORMATION:
    1374             :         //       AUTHOR         Russ Taylor
    1375             :         //                      Rick Strand
    1376             :         //       DATE WRITTEN   Nov 1997
    1377             :         //                      February 2001
    1378             :         //       MODIFIED       Sep 2009 Daeho Kang (add radiant component)
    1379             :         //       RE-ENGINEERED  na
    1380             : 
    1381             :         // PURPOSE OF THIS SUBROUTINE:
    1382             : 
    1383             :         // METHODOLOGY EMPLOYED:
    1384             :         // The update subrotines both in high temperature radiant radiator
    1385             :         // and convective only baseboard radiator are combined and modified.
    1386             : 
    1387             :         using PlantUtilities::SafeCopyPlantNode;
    1388             : 
    1389             :         int SteamInletNode;
    1390             :         int SteamOutletNode;
    1391             : 
    1392             :         // First, update the running average if necessary...
    1393        7420 :         if (state.dataSteamBaseboardRadiator->LastSysTimeElapsed(BaseboardNum) == state.dataHVACGlobal->SysTimeElapsed) {
    1394       20472 :             state.dataSteamBaseboardRadiator->QBBSteamRadSrcAvg(BaseboardNum) -= state.dataSteamBaseboardRadiator->LastQBBSteamRadSrc(BaseboardNum) *
    1395       13648 :                                                                                  state.dataSteamBaseboardRadiator->LastTimeStepSys(BaseboardNum) /
    1396        6824 :                                                                                  state.dataGlobal->TimeStepZone;
    1397             :         }
    1398             :         // Update the running average and the "last" values with the current values of the appropriate variables
    1399        7420 :         state.dataSteamBaseboardRadiator->QBBSteamRadSrcAvg(BaseboardNum) +=
    1400        7420 :             state.dataSteamBaseboardRadiator->QBBSteamRadSource(BaseboardNum) * state.dataHVACGlobal->TimeStepSys / state.dataGlobal->TimeStepZone;
    1401             : 
    1402        7420 :         state.dataSteamBaseboardRadiator->LastQBBSteamRadSrc(BaseboardNum) = state.dataSteamBaseboardRadiator->QBBSteamRadSource(BaseboardNum);
    1403        7420 :         state.dataSteamBaseboardRadiator->LastSysTimeElapsed(BaseboardNum) = state.dataHVACGlobal->SysTimeElapsed;
    1404        7420 :         state.dataSteamBaseboardRadiator->LastTimeStepSys(BaseboardNum) = state.dataHVACGlobal->TimeStepSys;
    1405             : 
    1406        7420 :         SteamInletNode = state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamInletNode;
    1407        7420 :         SteamOutletNode = state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamOutletNode;
    1408             : 
    1409             :         // Set the outlet air nodes of the Baseboard
    1410             :         // Set the outlet water nodes for the Coil
    1411        7420 :         SafeCopyPlantNode(state, SteamInletNode, SteamOutletNode);
    1412        7420 :         state.dataLoopNodes->Node(SteamOutletNode).Temp = state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamOutletTemp;
    1413        7420 :         state.dataLoopNodes->Node(SteamOutletNode).Enthalpy = state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamOutletEnthalpy;
    1414        7420 :     }
    1415             : 
    1416     2568313 :     void UpdateBBSteamRadSourceValAvg(EnergyPlusData &state, bool &SteamBaseboardSysOn) // .TRUE. if the radiant system has run this zone time step
    1417             :     {
    1418             : 
    1419             :         // SUBROUTINE INFORMATION:
    1420             :         //       AUTHOR         Rick Strand
    1421             :         //       DATE WRITTEN   February 2001
    1422             :         //       MODIFIED       Aug 2009 Daeho Kang (modify only for baseboard)
    1423             :         //       RE-ENGINEERED  na
    1424             : 
    1425             :         // PURPOSE OF THIS SUBROUTINE:
    1426             :         // To transfer the average value of the heat source over the entire
    1427             :         // zone time step back to the heat balance routines so that the heat
    1428             :         // balance algorithms can simulate one last time with the average source
    1429             :         // to maintain some reasonable amount of continuity and energy balance
    1430             :         // in the temperature and flux histories.
    1431             : 
    1432             :         // METHODOLOGY EMPLOYED:
    1433             :         // All of the record keeping for the average term is done in the Update
    1434             :         // routine so the only other thing that this subroutine does is check to
    1435             :         // see if the system was even on.  If any average term is non-zero, then
    1436             :         // one or more of the radiant systems was running.
    1437             : 
    1438             :         int BaseboardNum; // DO loop counter for surface index
    1439             : 
    1440     2568313 :         SteamBaseboardSysOn = false;
    1441             : 
    1442             :         // If this was never allocated, then there are no radiant systems in this input file (just RETURN)
    1443     2568313 :         if (!allocated(state.dataSteamBaseboardRadiator->QBBSteamRadSrcAvg)) return;
    1444             : 
    1445             :         // If it was allocated, then we have to check to see if this was running at all...
    1446        2724 :         for (BaseboardNum = 1; BaseboardNum <= state.dataSteamBaseboardRadiator->NumSteamBaseboards; ++BaseboardNum) {
    1447        2040 :             if (state.dataSteamBaseboardRadiator->QBBSteamRadSrcAvg(BaseboardNum) != 0.0) {
    1448         672 :                 SteamBaseboardSysOn = true;
    1449         672 :                 break; // DO loop
    1450             :             }
    1451             :         }
    1452             : 
    1453        1356 :         state.dataSteamBaseboardRadiator->QBBSteamRadSource = state.dataSteamBaseboardRadiator->QBBSteamRadSrcAvg;
    1454             : 
    1455        1356 :         DistributeBBSteamRadGains(state); // QBBRadSource has been modified so we need to redistribute gains
    1456             :     }
    1457             : 
    1458       26546 :     void DistributeBBSteamRadGains(EnergyPlusData &state)
    1459             :     {
    1460             : 
    1461             :         // SUBROUTINE INFORMATION:
    1462             :         //       AUTHOR         Rick Strand
    1463             :         //       DATE WRITTEN   February 2001
    1464             :         //       MODIFIED       Aug. 2009 Daeho Kang (modify only for steam baseboard)
    1465             :         //                      April 2010 Brent Griffith, max limit to protect surface temperature calcs
    1466             :         //       RE-ENGINEERED  na
    1467             : 
    1468             :         // PURPOSE OF THIS SUBROUTINE:
    1469             :         // To distribute the gains from the steam basebaord heater
    1470             :         // as specified in the user input file.  This includes distribution
    1471             :         // of long wavelength radiant gains to surfaces and "people."
    1472             : 
    1473             :         // METHODOLOGY EMPLOYED:
    1474             :         // We must cycle through all of the radiant systems because each
    1475             :         // surface could feel the effect of more than one radiant system.
    1476             :         // Note that the energy radiated to people is assumed to affect them
    1477             :         // but them it is assumed to be convected to the air.
    1478             : 
    1479             :         using DataHeatBalFanSys::MaxRadHeatFlux;
    1480             : 
    1481       26546 :         Real64 constexpr SmallestArea(0.001); // Smallest area in meters squared (to avoid a divide by zero)
    1482             : 
    1483             :         int RadSurfNum;           // Counter for surfaces receiving radiation from radiant heater
    1484             :         int BaseboardNum;         // Counter for the baseboard
    1485             :         int SurfNum;              // Pointer to the Surface derived type
    1486             :         int ZoneNum;              // Pointer to the Zone derived type
    1487             :         Real64 ThisSurfIntensity; // temporary for W/m2 term for rad on a surface
    1488             : 
    1489       26546 :         state.dataHeatBalFanSys->SurfQSteamBaseboard = 0.0;
    1490       26546 :         state.dataHeatBalFanSys->ZoneQSteamBaseboardToPerson = 0.0;
    1491             : 
    1492       79638 :         for (BaseboardNum = 1; BaseboardNum <= state.dataSteamBaseboardRadiator->NumSteamBaseboards; ++BaseboardNum) {
    1493             : 
    1494       53092 :             ZoneNum = state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).ZonePtr;
    1495             :             SteamBaseboardDesignData SteamBaseboardDesignDataObject{
    1496      106184 :                 state.dataSteamBaseboardRadiator->SteamBaseboardDesign(state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum)
    1497      159276 :                                                                            .DesignObjectPtr)}; // Contains the data for variable flow hydronic systems
    1498       53092 :             state.dataHeatBalFanSys->ZoneQSteamBaseboardToPerson(ZoneNum) +=
    1499       53092 :                 state.dataSteamBaseboardRadiator->QBBSteamRadSource(BaseboardNum) * SteamBaseboardDesignDataObject.FracDistribPerson;
    1500             : 
    1501      212368 :             for (RadSurfNum = 1; RadSurfNum <= state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).TotSurfToDistrib; ++RadSurfNum) {
    1502      159276 :                 SurfNum = state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SurfacePtr(RadSurfNum);
    1503      159276 :                 if (state.dataSurface->Surface(SurfNum).Area > SmallestArea) {
    1504      477828 :                     ThisSurfIntensity = (state.dataSteamBaseboardRadiator->QBBSteamRadSource(BaseboardNum) *
    1505      318552 :                                          state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).FracDistribToSurf(RadSurfNum) /
    1506      159276 :                                          state.dataSurface->Surface(SurfNum).Area);
    1507      159276 :                     state.dataHeatBalFanSys->SurfQSteamBaseboard(SurfNum) += ThisSurfIntensity;
    1508      159276 :                     state.dataHeatBalSurf->AnyRadiantSystems = true;
    1509             : 
    1510      159276 :                     if (ThisSurfIntensity > MaxRadHeatFlux) { // CR 8074, trap for excessive intensity (throws off surface balance )
    1511           0 :                         ShowSevereError(state, "DistributeBBSteamRadGains:  excessive thermal radiation heat flux intensity detected");
    1512           0 :                         ShowContinueError(state, "Surface = " + state.dataSurface->Surface(SurfNum).Name);
    1513           0 :                         ShowContinueError(state, format("Surface area = {:.3R} [m2]", state.dataSurface->Surface(SurfNum).Area));
    1514           0 :                         ShowContinueError(state,
    1515           0 :                                           "Occurs in " + state.dataSteamBaseboardRadiator->cCMO_BBRadiator_Steam + " = " +
    1516           0 :                                               state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).EquipID);
    1517           0 :                         ShowContinueError(state, format("Radiation intensity = {:.2R} [W/m2]", ThisSurfIntensity));
    1518           0 :                         ShowContinueError(
    1519           0 :                             state, "Assign a larger surface area or more surfaces in " + state.dataSteamBaseboardRadiator->cCMO_BBRadiator_Steam);
    1520           0 :                         ShowFatalError(state, "DistributeBBSteamRadGains:  excessive thermal radiation heat flux intensity detected");
    1521             :                     }
    1522             :                 } else { // small surface
    1523           0 :                     ShowSevereError(state, "DistributeBBSteamRadGains:  surface not large enough to receive thermal radiation heat flux");
    1524           0 :                     ShowContinueError(state, "Surface = " + state.dataSurface->Surface(SurfNum).Name);
    1525           0 :                     ShowContinueError(state, format("Surface area = {:.3R} [m2]", state.dataSurface->Surface(SurfNum).Area));
    1526           0 :                     ShowContinueError(state,
    1527           0 :                                       "Occurs in " + state.dataSteamBaseboardRadiator->cCMO_BBRadiator_Steam + " = " +
    1528           0 :                                           state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).EquipID);
    1529           0 :                     ShowContinueError(state,
    1530           0 :                                       "Assign a larger surface area or more surfaces in " + state.dataSteamBaseboardRadiator->cCMO_BBRadiator_Steam);
    1531           0 :                     ShowFatalError(state, "DistributeBBSteamRadGains:  surface not large enough to receive thermal radiation heat flux");
    1532             :                 }
    1533             :             }
    1534             :         }
    1535       26546 :     }
    1536             : 
    1537        7420 :     void ReportSteamBaseboard(EnergyPlusData &state, int const BaseboardNum)
    1538             :     {
    1539             : 
    1540             :         // SUBROUTINE INFORMATION:
    1541             :         //       AUTHOR         Daeho Kang
    1542             :         //       DATE WRITTEN   September 2009
    1543             :         //       MODIFIED       na
    1544             :         //       RE-ENGINEERED  na
    1545             : 
    1546        7420 :         state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).TotEnergy =
    1547        7420 :             state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).TotPower * state.dataHVACGlobal->TimeStepSys *
    1548             :             DataGlobalConstants::SecInHour;
    1549        7420 :         state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).Energy =
    1550        7420 :             state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).Power * state.dataHVACGlobal->TimeStepSys * DataGlobalConstants::SecInHour;
    1551        7420 :         state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).ConvEnergy =
    1552        7420 :             state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).ConvPower * state.dataHVACGlobal->TimeStepSys *
    1553             :             DataGlobalConstants::SecInHour;
    1554        7420 :         state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).RadEnergy =
    1555        7420 :             state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).RadPower * state.dataHVACGlobal->TimeStepSys *
    1556             :             DataGlobalConstants::SecInHour;
    1557        7420 :     }
    1558             : 
    1559             :     void
    1560           0 :     UpdateSteamBaseboardPlantConnection(EnergyPlusData &state,
    1561             :                                         DataPlant::PlantEquipmentType BaseboardType,                 // type index
    1562             :                                         std::string const &BaseboardName,                            // component name
    1563             :                                         [[maybe_unused]] int const EquipFlowCtrl,                    // Flow control mode for the equipment
    1564             :                                         [[maybe_unused]] int const LoopNum,                          // Plant loop index for where called from
    1565             :                                         [[maybe_unused]] const DataPlant::LoopSideLocation LoopSide, // Plant loop side index for where called from
    1566             :                                         int &CompIndex,                                              // Chiller number pointer
    1567             :                                         [[maybe_unused]] bool const FirstHVACIteration,
    1568             :                                         bool &InitLoopEquip // If not zero, calculate the max load for operating conditions
    1569             :     )
    1570             :     {
    1571             : 
    1572             :         // SUBROUTINE INFORMATION:
    1573             :         //       AUTHOR         Chandan Sharma
    1574             :         //       DATE WRITTEN   Sept. 2010
    1575             :         //       MODIFIED       na
    1576             :         //       RE-ENGINEERED  na
    1577             : 
    1578             :         // PURPOSE OF THIS SUBROUTINE:
    1579             :         // update sim routine called from plant
    1580             : 
    1581             :         // METHODOLOGY EMPLOYED:
    1582             :         // check input, provide comp index, call utility routines
    1583             : 
    1584             :         // REFERENCES:
    1585             :         // Based on UpdateBaseboardPlantConnection from Brent Griffith, Sept 2010
    1586             : 
    1587             :         // Using/Aliasing
    1588             :         using DataPlant::PlantEquipTypeNames;
    1589             : 
    1590             :         using PlantUtilities::PullCompInterconnectTrigger;
    1591             : 
    1592             :         // SUBROUTINE LOCAL VARIABLE DECLARATIONS:
    1593             : 
    1594             :         int BaseboardNum;
    1595             : 
    1596             :         // Find the correct baseboard
    1597           0 :         if (CompIndex == 0) {
    1598           0 :             BaseboardNum =
    1599           0 :                 UtilityRoutines::FindItemInList(BaseboardName, state.dataSteamBaseboardRadiator->SteamBaseboard, &SteamBaseboardParams::EquipID);
    1600           0 :             if (BaseboardNum == 0) {
    1601           0 :                 ShowFatalError(state, "UpdateSteamBaseboardPlantConnection: Specified baseboard not valid =" + BaseboardName);
    1602             :             }
    1603           0 :             CompIndex = BaseboardNum;
    1604             :         } else {
    1605           0 :             BaseboardNum = CompIndex;
    1606           0 :             if (BaseboardNum > state.dataSteamBaseboardRadiator->NumSteamBaseboards || BaseboardNum < 1) {
    1607           0 :                 ShowFatalError(
    1608             :                     state,
    1609           0 :                     format("UpdateSteamBaseboardPlantConnection:  Invalid CompIndex passed={}, Number of baseboards={}, Entered baseboard name={}",
    1610             :                            BaseboardNum,
    1611           0 :                            state.dataSteamBaseboardRadiator->NumSteamBaseboards,
    1612           0 :                            BaseboardName));
    1613             :             }
    1614           0 :             if (state.dataGlobal->KickOffSimulation) {
    1615           0 :                 if (BaseboardName != state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).EquipID) {
    1616           0 :                     ShowFatalError(state,
    1617           0 :                                    format("UpdateSteamBaseboardPlantConnection: Invalid CompIndex passed={}, baseboard name={}, stored baseboard "
    1618             :                                           "Name for that index={}",
    1619             :                                           BaseboardNum,
    1620             :                                           BaseboardName,
    1621           0 :                                           state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).EquipID));
    1622             :                 }
    1623           0 :                 if (BaseboardType != DataPlant::PlantEquipmentType::Baseboard_Rad_Conv_Steam) {
    1624           0 :                     ShowFatalError(state,
    1625           0 :                                    format("UpdateSteamBaseboardPlantConnection: Invalid CompIndex passed={}, baseboard name={}, stored baseboard "
    1626             :                                           "Name for that index={}",
    1627             :                                           BaseboardNum,
    1628             :                                           BaseboardName,
    1629           0 :                                           PlantEquipTypeNames[static_cast<int>(BaseboardType)]));
    1630             :                 }
    1631             :             }
    1632             :         }
    1633             : 
    1634           0 :         if (InitLoopEquip) {
    1635           0 :             return;
    1636             :         }
    1637             : 
    1638           0 :         PullCompInterconnectTrigger(state,
    1639           0 :                                     state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).plantLoc,
    1640           0 :                                     state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).BBLoadReSimIndex,
    1641           0 :                                     state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).plantLoc,
    1642             :                                     DataPlant::CriteriaType::HeatTransferRate,
    1643           0 :                                     state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).Power);
    1644             : 
    1645           0 :         PullCompInterconnectTrigger(state,
    1646           0 :                                     state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).plantLoc,
    1647           0 :                                     state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).BBLoadReSimIndex,
    1648           0 :                                     state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).plantLoc,
    1649             :                                     DataPlant::CriteriaType::MassFlowRate,
    1650           0 :                                     state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamMassFlowRate);
    1651             : 
    1652           0 :         PullCompInterconnectTrigger(state,
    1653           0 :                                     state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).plantLoc,
    1654           0 :                                     state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).BBLoadReSimIndex,
    1655           0 :                                     state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).plantLoc,
    1656             :                                     DataPlant::CriteriaType::Temperature,
    1657           0 :                                     state.dataSteamBaseboardRadiator->SteamBaseboard(BaseboardNum).SteamOutletTemp);
    1658             :     }
    1659             : 
    1660             : } // namespace SteamBaseboardRadiator
    1661             : 
    1662        2313 : } // namespace EnergyPlus

Generated by: LCOV version 1.13