LCOV - code coverage report
Current view: top level - EnergyPlus - SteamBaseboardRadiator.cc (source / functions) Hit Total Coverage
Test: lcov.output.filtered Lines: 507 844 60.1 %
Date: 2024-08-24 18:31:18 Functions: 9 10 90.0 %

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

Generated by: LCOV version 1.14