LCOV - code coverage report
Current view: top level - EnergyPlus - SteamBaseboardRadiator.cc (source / functions) Coverage Total Hit
Test: lcov.output.filtered Lines: 60.0 % 830 498
Test Date: 2025-06-02 07:23:51 Functions: 90.0 % 10 9

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

Generated by: LCOV version 2.0-1